diff --git a/app/main/views/notifications.py b/app/main/views/notifications.py index 3e031c632..00765ebbb 100644 --- a/app/main/views/notifications.py +++ b/app/main/views/notifications.py @@ -60,7 +60,9 @@ def view_notification(service_id, notification_id): if notification['template']['is_precompiled_letter']: try: - file_contents = view_letter_notification_as_preview(service_id, notification_id, "pdf") + file_contents = view_letter_notification_as_preview( + service_id, notification_id, "pdf" + ) page_count = pdf_page_count(io.BytesIO(file_contents)) except PdfReadError: return render_template( @@ -72,7 +74,6 @@ def view_notification(service_id, notification_id): if notification.get('postage'): notification['template']['postage'] = notification['postage'] - template = get_template( notification['template'], current_service, @@ -173,14 +174,22 @@ def view_letter_notification_as_preview(service_id, notification_id, filetype): if filetype not in ('pdf', 'png'): abort(404) - + notification = notification_api_client.get_notification(service_id, str(notification_id)) try: - preview = notification_api_client.get_notification_letter_preview( - service_id, - notification_id, - filetype, - page=request.args.get('page') - ) + if notification['status'] == "validation-failed": + preview = notification_api_client.get_notification_letter_preview_with_overlay( + service_id, + notification_id, + filetype, + page=request.args.get('page') + ) + else: + preview = notification_api_client.get_notification_letter_preview( + service_id, + notification_id, + filetype, + page=request.args.get('page') + ) display_file = base64.b64decode(preview['content']) except APIError: diff --git a/app/notify_client/notification_api_client.py b/app/notify_client/notification_api_client.py index 579c93860..50d483ee9 100644 --- a/app/notify_client/notification_api_client.py +++ b/app/notify_client/notification_api_client.py @@ -94,6 +94,17 @@ class NotificationApiClient(NotifyAdminAPIClient): return self.get(url=get_url) + def get_notification_letter_preview_with_overlay(self, service_id, notification_id, file_type, page=None): + get_url = '/service/{}/template/preview/{}/{}{}{}'.format( + service_id, + notification_id, + file_type, + '?overlay=1', + '&page={}'.format(page) if page else '', + ) + + return self.get(url=get_url) + def update_notification_to_cancelled(self, service_id, notification_id): return self.post( url='/service/{}/notifications/{}/cancel'.format(service_id, notification_id), diff --git a/tests/app/main/views/test_notifications.py b/tests/app/main/views/test_notifications.py index c003623d0..2a99eb110 100644 --- a/tests/app/main/views/test_notifications.py +++ b/tests/app/main/views/test_notifications.py @@ -456,6 +456,32 @@ def test_should_show_image_of_letter_notification( assert response.get_data(as_text=True) == 'foo' +def test_should_show_image_of_letter_notification_that_failed_validation( + logged_in_client, + fake_uuid, + mocker +): + + mock_get_notification(mocker, fake_uuid, template_type='letter', notification_status='validation-failed') + + mocker.patch( + 'app.main.views.notifications.notification_api_client.get_notification_letter_preview_with_overlay', + return_value={ + 'content': base64.b64encode(b'foo').decode('utf-8') + } + ) + + response = logged_in_client.get(url_for( + 'main.view_letter_notification_as_preview', + service_id=SERVICE_ONE_ID, + notification_id=fake_uuid, + filetype='png' + )) + + assert response.status_code == 200 + assert response.get_data(as_text=True) == 'foo' + + def test_should_show_preview_error_image_letter_notification_on_preview_error( logged_in_client, fake_uuid,