mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-03 13:18:57 -04:00
Merge pull request #3254 from alphagov/letter-validation-short-messages
Add separate messages for precompiled letters that have failed validation
This commit is contained in:
@@ -254,3 +254,26 @@ def test_letter_template_preview_headers(
|
||||
)
|
||||
|
||||
assert response.headers.get('X-Frame-Options') == 'SAMEORIGIN'
|
||||
|
||||
|
||||
def test_letter_spec_redirect(client_request):
|
||||
client_request.get(
|
||||
'main.letter_spec',
|
||||
_expected_status=302,
|
||||
_expected_redirect=(
|
||||
'https://docs.notifications.service.gov.uk'
|
||||
'/documentation/images/notify-pdf-letter-spec-v2.4.pdf'
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def test_letter_spec_redirect_with_non_logged_in_user(client_request):
|
||||
client_request.logout()
|
||||
client_request.get(
|
||||
'main.letter_spec',
|
||||
_expected_status=302,
|
||||
_expected_redirect=(
|
||||
'https://docs.notifications.service.gov.uk'
|
||||
'/documentation/images/notify-pdf-letter-spec-v2.4.pdf'
|
||||
),
|
||||
)
|
||||
|
||||
@@ -331,9 +331,10 @@ def test_notification_page_shows_validation_failed_precompiled_letter(
|
||||
)
|
||||
|
||||
error_message = page.find('p', class_='notification-status-cancelled').text
|
||||
assert normalize_spaces(error_message) == \
|
||||
"Validation failed – Your content is outside the printable area. " \
|
||||
"You need to edit page 1.Files must meet our letter specification."
|
||||
assert normalize_spaces(error_message) == (
|
||||
'Validation failed because content is outside the printable area on page 1.'
|
||||
'Files must meet our letter specification.'
|
||||
)
|
||||
|
||||
assert not page.select('p.notification-status')
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ from io import StringIO
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from bs4 import BeautifulSoup
|
||||
from flask import url_for
|
||||
from freezegun import freeze_time
|
||||
|
||||
from app import format_datetime_relative
|
||||
@@ -413,24 +415,94 @@ def test_get_letter_validation_error_for_unknown_error():
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize('error_message, expected_title, expected_content', [
|
||||
('letter-not-a4-portrait-oriented', 'Your letter is not A4 portrait size',
|
||||
'You need to change the size or orientation of page 2. <br>Files must meet our '
|
||||
'<a href="https://docs.notifications.service.gov.uk/documentation/images/notify-pdf-letter-spec-v2.4.pdf" '
|
||||
'target="_blank">letter specification</a>.'),
|
||||
('content-outside-printable-area', 'Your content is outside the printable area',
|
||||
'You need to edit page 2.<br>Files must meet our '
|
||||
'<a href="https://docs.notifications.service.gov.uk/documentation/images/notify-pdf-letter-spec-v2.4.pdf" '
|
||||
'target="_blank">letter specification</a>.'),
|
||||
('letter-too-long', 'Your letter is too long',
|
||||
'Letters must be 10 pages or less. <br>Your letter is 13 pages long.')
|
||||
@pytest.mark.parametrize('error_message, invalid_pages, expected_title, expected_content, expected_summary', [
|
||||
(
|
||||
'letter-not-a4-portrait-oriented',
|
||||
[2],
|
||||
'Your letter is not A4 portrait size',
|
||||
(
|
||||
'You need to change the size or orientation of page 2. '
|
||||
'Files must meet our letter specification.'
|
||||
),
|
||||
(
|
||||
'Validation failed because page 2 is not A4 portrait size.'
|
||||
'Files must meet our letter specification.'
|
||||
),
|
||||
),
|
||||
(
|
||||
'letter-not-a4-portrait-oriented',
|
||||
[2, 3, 4],
|
||||
'Your letter is not A4 portrait size',
|
||||
(
|
||||
'You need to change the size or orientation of pages 2, 3 and 4. '
|
||||
'Files must meet our letter specification.'
|
||||
),
|
||||
(
|
||||
'Validation failed because pages 2, 3 and 4 are not A4 portrait size.'
|
||||
'Files must meet our letter specification.'
|
||||
),
|
||||
),
|
||||
(
|
||||
'content-outside-printable-area',
|
||||
[2],
|
||||
'Your content is outside the printable area',
|
||||
(
|
||||
'You need to edit page 2.'
|
||||
'Files must meet our letter specification.'
|
||||
),
|
||||
(
|
||||
'Validation failed because content is outside the printable area '
|
||||
'on page 2.'
|
||||
'Files must meet our letter specification.'
|
||||
),
|
||||
),
|
||||
(
|
||||
'letter-too-long',
|
||||
[2],
|
||||
'Your letter is too long',
|
||||
(
|
||||
'Letters must be 10 pages or less. '
|
||||
'Your letter is 13 pages long.'
|
||||
),
|
||||
(
|
||||
'Validation failed because this letter is 13 pages long.'
|
||||
'Letters must be 10 pages or less.'
|
||||
),
|
||||
),
|
||||
(
|
||||
'unable-to-read-the-file',
|
||||
[2],
|
||||
'There’s a problem with your file',
|
||||
(
|
||||
'Notify cannot read this PDF.'
|
||||
'Save a new copy of your file and try again.'
|
||||
),
|
||||
(
|
||||
'Validation failed because Notify cannot read this PDF.'
|
||||
'Save a new copy of your file and try again.'
|
||||
),
|
||||
),
|
||||
])
|
||||
def test_get_letter_validation_error_for_known_errors(
|
||||
error_message,
|
||||
expected_title,
|
||||
expected_content,
|
||||
client_request,
|
||||
error_message,
|
||||
invalid_pages,
|
||||
expected_title,
|
||||
expected_content,
|
||||
expected_summary,
|
||||
):
|
||||
error = get_letter_validation_error(error_message, invalid_pages=[2], page_count=13)
|
||||
error = get_letter_validation_error(error_message, invalid_pages=invalid_pages, page_count=13)
|
||||
detail = BeautifulSoup(error['detail'], 'html.parser')
|
||||
summary = BeautifulSoup(error['summary'], 'html.parser')
|
||||
|
||||
assert error['title'] == expected_title
|
||||
assert expected_content in error['detail']
|
||||
|
||||
assert detail.text == expected_content
|
||||
if detail.select_one('a'):
|
||||
assert detail.select_one('a')['href'] == url_for('.letter_spec')
|
||||
assert detail.select_one('a')['target'] == '_blank'
|
||||
|
||||
assert summary.text == expected_summary
|
||||
if summary.select_one('a'):
|
||||
assert summary.select_one('a')['href'] == url_for('.letter_spec')
|
||||
assert summary.select_one('a')['target'] == '_blank'
|
||||
|
||||
Reference in New Issue
Block a user