From f12dc823cb103e62358835d542ffd283af6f7499 Mon Sep 17 00:00:00 2001 From: Pea Tyczynska Date: Fri, 25 Oct 2019 16:53:31 +0100 Subject: [PATCH] Show dynamic message when letter fails validation in validation checker - part 2 --- app/main/views/platform_admin.py | 12 +++++++----- app/templates/partials/check/letter-too-long.html | 2 +- tests/app/main/views/test_platform_admin.py | 14 ++++++++++---- tests/app/main/views/test_send.py | 4 ++-- tests/app/main/views/test_templates.py | 2 +- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index 7c8280953..fcc8e5e91 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -399,7 +399,7 @@ def service_letter_validation_preview(service_id): def letter_validation_preview(from_platform_admin): - message, pages, result = None, [], None + message, pages, passed_validation, error_code = None, [], None, None form = PDFUploadForm() view_location = 'views/platform-admin/letter-validation-preview.html' \ @@ -412,7 +412,8 @@ def letter_validation_preview(from_platform_admin): if not virus_free: return render_template( view_location, - form=form, message="Document did not pass the virus scan", pages=pages, result=result + form=form, message="Document did not pass the virus scan", + pages=pages, passed_validation=passed_validation ), 400 try: @@ -421,7 +422,7 @@ def letter_validation_preview(from_platform_admin): view_location, form=form, message="File must be less than 2MB", - pages=pages, result=result + pages=pages, passed_validation=passed_validation ), 400 pdf_file.seek(0) response = validate_letter(pdf_file) @@ -436,6 +437,7 @@ def letter_validation_preview(from_platform_admin): passed_validation = False if not passed_validation: + error_code = message message = get_letter_validation_error( message, invalid_pages=invalid_pages, page_count=page_count ) @@ -444,14 +446,14 @@ def letter_validation_preview(from_platform_admin): message = "Something was wrong with the file you tried to upload. Please upload a valid PDF file." return render_template( view_location, - form=form, message=message, pages=pages, result=result + form=form, message=message, pages=pages, passed_validation=passed_validation ), 400 else: raise error return render_template( view_location, - form=form, message=message, pages=pages, result=result + form=form, message=message, pages=pages, passed_validation=passed_validation, error_code=error_code ) diff --git a/app/templates/partials/check/letter-too-long.html b/app/templates/partials/check/letter-too-long.html index 540ddb9fe..45aef892c 100644 --- a/app/templates/partials/check/letter-too-long.html +++ b/app/templates/partials/check/letter-too-long.html @@ -1,4 +1,4 @@ -

+

Your letter is too long

diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py index 813955fcd..1733a8aec 100644 --- a/tests/app/main/views/test_platform_admin.py +++ b/tests/app/main/views/test_platform_admin.py @@ -748,9 +748,12 @@ def test_letter_validation_preview_renders_correctly(mocker, platform_admin_clie assert page.find_all('input', class_='file-upload-field') -@pytest.mark.parametrize("result,expected_class", [(True, 'banner-with-tick'), (False, "banner-dangerous")]) +@pytest.mark.parametrize("passed_validation,message,expected_class", [ + (True, 'Your PDF passed the layout check', 'banner-with-tick'), + (False, 'content-otside-printable-area', "banner-dangerous") +]) def test_letter_validation_preview_calls_template_preview_when_data_correct_and_displays_correct_message( - mocker, platform_admin_client, result, expected_class + mocker, platform_admin_client, passed_validation, message, expected_class ): endpoint = '{}/precompiled/validate?include_preview=true'.format(current_app.config['TEMPLATE_PREVIEW_API_HOST']) mocker.patch('app.main.views.platform_admin.antivirus_client.scan', return_value=True) @@ -759,7 +762,7 @@ def test_letter_validation_preview_calls_template_preview_when_data_correct_and_ rmock.request( "POST", endpoint, - json={"pages": [], "message": "bazinga!", "result": result}, + json={"pages": [], "message": message, "result": passed_validation}, status_code=200 ) with open('tests/test_pdf_files/multi_page_pdf.pdf', 'rb') as file: @@ -773,7 +776,10 @@ def test_letter_validation_preview_calls_template_preview_when_data_correct_and_ assert rmock.request_history[0].url == endpoint page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') - assert page.find('div', class_=expected_class).text.strip() == "bazinga!" + if passed_validation: + assert page.find('div', class_=expected_class).text.strip() == message + else: + assert page.find('div', class_=expected_class).find('h1', {"data-error-type": message}) def test_letter_validation_preview_doesnt_call_template_preview_when_no_file(mocker, platform_admin_client): diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index ad50b42e8..6e24aff06 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -2778,7 +2778,7 @@ def test_check_messages_does_not_allow_to_send_letter_longer_than_10_pages( upload_id=fake_uuid, _test_page_title=False, ) - assert page.find('h1', {"data-error-type": "Trying to send a letter that's too long"}) + assert page.find('h1', {"data-error-type": "letter-too-long"}) assert len(page.select('.letter img')) == 10 # if letter longer than 10 pages, only 10 first pages are displayed assert not page.select('[type=submit]') @@ -3148,7 +3148,7 @@ def test_send_one_off_letter_errors_if_letter_longer_than_10_pages( _test_page_title=False, ) - assert page.find('h1', {"data-error-type": "Trying to send a letter that's too long"}) + assert page.find('h1', {"data-error-type": "letter-too-long"}) assert len(page.select('.letter img')) == 10 assert not page.select('[type=submit]') diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py index d1acccce3..8c72086ea 100644 --- a/tests/app/main/views/test_templates.py +++ b/tests/app/main/views/test_templates.py @@ -543,7 +543,7 @@ def test_view_letter_template_does_not_display_send_button_if_template_over_10_p ) assert "Send" not in page.text - assert page.find('h1', {"data-error-type": "Trying to send a letter that's too long"}) + assert page.find('h1', {"data-error-type": "letter-too-long"}) def test_edit_letter_template_postage_page_displays_correctly(