From 0adf80f2947423997a7346cd9f1a7422fdc89104 Mon Sep 17 00:00:00 2001 From: Pea Tyczynska Date: Fri, 27 Sep 2019 17:54:44 +0100 Subject: [PATCH] Do not allow to send uploaded pdf letters longer than 10 pages --- app/main/views/uploads.py | 2 ++ tests/app/main/views/test_uploads.py | 33 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/app/main/views/uploads.py b/app/main/views/uploads.py index 31d3a4f46..b54f754f4 100644 --- a/app/main/views/uploads.py +++ b/app/main/views/uploads.py @@ -79,6 +79,8 @@ def upload_letter(service_id): raise ex else: status = 'valid' + if page_count > 10: + status = 'invalid' file_contents = base64.b64decode(response.json()['file'].encode()) upload_letter_to_s3( file_contents, diff --git a/tests/app/main/views/test_uploads.py b/tests/app/main/views/test_uploads.py index e58031e0f..8fdd1ec94 100644 --- a/tests/app/main/views/test_uploads.py +++ b/tests/app/main/views/test_uploads.py @@ -204,6 +204,39 @@ def test_post_upload_letter_with_invalid_file(mocker, client_request): assert not page.find('button', {'type': 'submit'}) +def test_post_upload_letter_with_letter_that_is_too_long(mocker, client_request): + letter_template = {'template_type': 'letter', + 'reply_to_text': '', + 'postage': 'second', + 'subject': 'hi', + 'content': 'my letter'} + + mocker.patch('uuid.uuid4', return_value='fake-uuid') + mocker.patch('app.main.views.uploads.antivirus_client.scan', return_value=True) + mocker.patch( + 'app.main.views.uploads.sanitise_letter', + return_value=Mock(content='The sanitised content', json=lambda: {'file': 'VGhlIHNhbml0aXNlZCBjb250ZW50'}) + ) + mocker.patch('app.main.views.uploads.upload_letter_to_s3') + mock_page_count = mocker.patch('app.main.views.uploads.pdf_page_count', return_value=11) + mocker.patch('app.main.views.uploads.service_api_client.get_precompiled_template', return_value=letter_template) + + with open('tests/test_pdf_files/one_page_pdf.pdf', 'rb') as file: + page = client_request.post( + 'main.upload_letter', + service_id=SERVICE_ONE_ID, + _data={'file': file}, + _follow_redirects=True, + ) + + assert mock_page_count.called + + assert page.find('h1').text == 'tests/test_pdf_files/one_page_pdf.pdf' + assert page.find("div", {"class": "banner-dangerous bottom-gutter"}) + assert "This letter is too long" in page.text + assert not page.find('button', {'type': 'submit'}) + + def test_post_upload_letter_shows_letter_preview_for_invalid_file(mocker, client_request): letter_template = {'template_type': 'letter', 'reply_to_text': '',