Show dynamic message when letter fails validation in validation checker - part 2

This commit is contained in:
Pea Tyczynska
2019-10-25 16:53:31 +01:00
parent 5e10ed23a1
commit f12dc823cb
5 changed files with 21 additions and 13 deletions

View File

@@ -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
)

View File

@@ -1,4 +1,4 @@
<h1 class='banner-title' data-module="track-error" data-error-type="Trying to send a letter that's too long" data-error-label="service_id: {{ current_service.id }}">
<h1 h1 class="banner-title" data-module="track-error" data-error-type="letter-too-long" data-error-label="precompiled letter validation failed for service_id: {{ current_service.id }}">
Your letter is too long
</h1>
<p>

View File

@@ -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):

View File

@@ -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]')

View File

@@ -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(