mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-11 10:28:41 -04:00
Merge pull request #4107 from alphagov/mark-letter-invalid-if-over-10-sheets-169209742
Show validation-failed status for templated letters over 10 pages
This commit is contained in:
@@ -18,6 +18,7 @@ from flask import (
|
|||||||
url_for,
|
url_for,
|
||||||
)
|
)
|
||||||
from notifications_python_client.errors import APIError, HTTPError
|
from notifications_python_client.errors import APIError, HTTPError
|
||||||
|
from notifications_utils import LETTER_MAX_PAGE_COUNT
|
||||||
from notifications_utils.letter_timings import (
|
from notifications_utils.letter_timings import (
|
||||||
get_letter_timings,
|
get_letter_timings,
|
||||||
letter_can_be_cancelled,
|
letter_can_be_cancelled,
|
||||||
@@ -79,6 +80,19 @@ def view_notification(service_id, notification_id):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
page_count = get_page_count_for_letter(notification['template'], values=personalisation)
|
page_count = get_page_count_for_letter(notification['template'], values=personalisation)
|
||||||
|
if page_count and page_count > LETTER_MAX_PAGE_COUNT:
|
||||||
|
# We check page count here to show the right error message for a letter that is too long.
|
||||||
|
# Another way to do this would be to get the status and error message from letter metadata.
|
||||||
|
# This would be a significant amount of work though, out of scope for this bug fix.
|
||||||
|
# This is because currently we do not pull the letter from S3 when showing preview.
|
||||||
|
# Instead, we generate letter preview based on the letter template and personalisation.
|
||||||
|
# Additionally, when a templated letter is sent via the api and the personalisation pushes the
|
||||||
|
# page count over 10 pages, it takes a while for validation status to come through.
|
||||||
|
# Checking page count here will enable us to show the error message even if the letter is not
|
||||||
|
# fully processed yet.
|
||||||
|
error_message = get_letter_validation_error(
|
||||||
|
"letter-too-long", [1], page_count
|
||||||
|
)
|
||||||
|
|
||||||
if notification.get('postage'):
|
if notification.get('postage'):
|
||||||
if notification["status"] == "validation-failed":
|
if notification["status"] == "validation-failed":
|
||||||
|
|||||||
@@ -675,6 +675,29 @@ def test_should_show_image_of_letter_notification_that_failed_validation(
|
|||||||
assert response.get_data(as_text=True) == 'foo', metadata
|
assert response.get_data(as_text=True) == 'foo', metadata
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_show_image_of_templated_letter_notification_that_failed_validation_because_letter_is_too_long(
|
||||||
|
client_request,
|
||||||
|
mocker,
|
||||||
|
fake_uuid,
|
||||||
|
):
|
||||||
|
notification = create_notification(
|
||||||
|
notification_status='validation-failed',
|
||||||
|
template_type='letter')
|
||||||
|
mocker.patch('app.notification_api_client.get_notification', return_value=notification)
|
||||||
|
mocker.patch('app.main.views.notifications.get_page_count_for_letter', return_value=11)
|
||||||
|
|
||||||
|
page = client_request.get(
|
||||||
|
'main.view_notification',
|
||||||
|
service_id=SERVICE_ONE_ID,
|
||||||
|
notification_id=fake_uuid,
|
||||||
|
)
|
||||||
|
|
||||||
|
error_message = page.find('p', class_='notification-status-cancelled').text
|
||||||
|
assert normalize_spaces(error_message) == \
|
||||||
|
"Validation failed because this letter is 11 pages long.Letters must be 10 pages or "\
|
||||||
|
"less (5 double-sided sheets of paper)."
|
||||||
|
|
||||||
|
|
||||||
def test_should_show_preview_error_image_letter_notification_on_preview_error(
|
def test_should_show_preview_error_image_letter_notification_on_preview_error(
|
||||||
client_request,
|
client_request,
|
||||||
fake_uuid,
|
fake_uuid,
|
||||||
|
|||||||
Reference in New Issue
Block a user