Only put the overlay on bad pages

This will make it easier to find errors in your file, because you won’t
spent time looking for them on pages which are OK.
This commit is contained in:
Chris Hill-Scott
2020-01-13 16:40:47 +00:00
parent bf56a9bac1
commit e9ad2e9c42
2 changed files with 58 additions and 10 deletions

View File

@@ -241,11 +241,19 @@ def uploaded_letter_preview(service_id, file_id):
@main.route("/services/<uuid:service_id>/preview-letter-image/<uuid:file_id>")
@user_has_permissions('send_messages')
def view_letter_upload_as_preview(service_id, file_id):
try:
page = int(request.args.get('page'))
except ValueError:
abort(400)
pdf_file, metadata = get_letter_pdf_and_metadata(service_id, file_id)
invalid_pages = json.loads(metadata.get('invalid_pages', '[]'))
page = request.args.get('page')
if metadata.get('message') == 'content-outside-printable-area':
if (
metadata.get('message') == 'content-outside-printable-area' and
page in invalid_pages
):
return TemplatePreview.from_invalid_pdf_file(pdf_file, page)
else:
return TemplatePreview.from_valid_pdf_file(pdf_file, page)

View File

@@ -409,25 +409,52 @@ def test_uploaded_letter_preview_does_not_show_send_button_if_service_in_trial_m
assert not page.find('button', {'type': 'submit'})
def test_uploaded_letter_preview_image_shows_overlay_when_content_outside_printable_area(
@pytest.mark.parametrize('invalid_pages, page_requested, overlay_expected', (
('[1, 2]', 1, True),
('[1, 2]', 2, True),
('[1, 2]', 3, False),
('[]', 1, False),
))
def test_uploaded_letter_preview_image_shows_overlay_when_content_outside_printable_area_on_a_page(
mocker,
logged_in_client,
mock_get_service,
fake_uuid,
invalid_pages,
page_requested,
overlay_expected,
):
mocker.patch(
'app.main.views.uploads.get_letter_pdf_and_metadata',
return_value=('pdf_file', {'message': 'content-outside-printable-area'})
return_value=('pdf_file', {
'message': 'content-outside-printable-area',
'invalid_pages': invalid_pages,
})
)
template_preview_mock = mocker.patch(
template_preview_mock_valid = mocker.patch(
'app.main.views.uploads.TemplatePreview.from_valid_pdf_file',
return_value=make_response('page.html', 200)
)
template_preview_mock_invalid = mocker.patch(
'app.main.views.uploads.TemplatePreview.from_invalid_pdf_file',
return_value=make_response('page.html', 200))
return_value=make_response('page.html', 200)
)
logged_in_client.get(
url_for('main.view_letter_upload_as_preview', file_id=fake_uuid, service_id=SERVICE_ONE_ID, page=1)
url_for(
'main.view_letter_upload_as_preview',
file_id=fake_uuid,
service_id=SERVICE_ONE_ID,
page=page_requested,
)
)
template_preview_mock.assert_called_once_with('pdf_file', '1')
if overlay_expected:
template_preview_mock_invalid.assert_called_once_with('pdf_file', page_requested)
assert template_preview_mock_valid.called is False
else:
template_preview_mock_valid.assert_called_once_with('pdf_file', page_requested)
assert template_preview_mock_invalid.called is False
@pytest.mark.parametrize(
@@ -456,7 +483,20 @@ def test_uploaded_letter_preview_image_does_not_show_overlay_if_no_content_outsi
url_for('main.view_letter_upload_as_preview', file_id=fake_uuid, service_id=SERVICE_ONE_ID, page=1)
)
template_preview_mock.assert_called_once_with('pdf_file', '1')
template_preview_mock.assert_called_once_with('pdf_file', 1)
def test_uploaded_letter_preview_image_400s_for_bad_page_type(
client_request,
fake_uuid,
):
client_request.get(
'main.view_letter_upload_as_preview',
file_id=fake_uuid,
service_id=SERVICE_ONE_ID,
page='foo',
_expected_status=400,
)
def test_send_uploaded_letter_sends_letter_and_redirects_to_notification_page(mocker, service_one, client_request):