Merge pull request #3418 from alphagov/letters-too-long

Mark letters as validation-failed if the templated letter is too long.
This commit is contained in:
Rebecca Law
2022-02-02 08:30:50 +00:00
committed by GitHub
7 changed files with 73 additions and 17 deletions

View File

@@ -27,6 +27,7 @@ from app.celery.letters_pdf_tasks import (
sanitise_letter,
send_letters_volume_email_to_dvla,
update_billable_units_for_letter,
update_validation_failed_for_templated_letter,
)
from app.config import QueueNames, TaskNames
from app.dao.notifications_dao import get_notifications
@@ -145,22 +146,26 @@ def test_get_pdf_for_templated_letter_sets_technical_failure_max_retries(mocker,
mock_update_noti.assert_called_once_with(sample_letter_notification.id, 'technical-failure')
@pytest.mark.parametrize('number_of_pages, expected_billable_units', [(2, 1), (3, 2), (10, 5)])
def test_update_billable_units_for_letter(mocker, sample_letter_notification, number_of_pages, expected_billable_units):
def test_update_billable_units_for_letter(
mocker, sample_letter_notification
):
sample_letter_notification.billable_units = 0
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.info')
update_billable_units_for_letter(sample_letter_notification.id, number_of_pages)
update_billable_units_for_letter(sample_letter_notification.id, 4)
notification = Notification.query.filter(Notification.reference == sample_letter_notification.reference).one()
assert notification.billable_units == expected_billable_units
assert notification.billable_units == 2
assert sample_letter_notification.status == NOTIFICATION_CREATED
mock_logger.assert_called_once_with(
f"Letter notification id: {sample_letter_notification.id} reference {sample_letter_notification.reference}:"
f" billable units set to {expected_billable_units}"
f" billable units set to 2"
)
def test_update_billable_units_for_letter_doesnt_update_if_sent_with_test_key(mocker, sample_letter_notification):
def test_update_billable_units_for_letter_doesnt_update_if_sent_with_test_key(
mocker, sample_letter_notification
):
sample_letter_notification.billable_units = 0
sample_letter_notification.key_type = KEY_TYPE_TEST
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.info')
@@ -172,6 +177,23 @@ def test_update_billable_units_for_letter_doesnt_update_if_sent_with_test_key(mo
mock_logger.assert_not_called()
@pytest.mark.parametrize('key_type', ['test', 'normal', 'team'])
def test_update_validation_failed_for_templated_letter_with_too_many_pages(
mocker, sample_letter_notification, key_type
):
sample_letter_notification.billable_units = 0
sample_letter_notification.key_type = key_type
mock_logger = mocker.patch('app.celery.tasks.current_app.logger.info')
update_validation_failed_for_templated_letter(sample_letter_notification.id, 11)
assert sample_letter_notification.billable_units == 0
assert sample_letter_notification.status == NOTIFICATION_VALIDATION_FAILED
mock_logger.assert_called_once_with(
f"Validation failed: letter is too long 11 for letter with id: {sample_letter_notification.id}"
)
@mock_s3
@freeze_time('2020-02-17 18:00:00')
def test_get_key_and_size_of_letters_to_be_sent_to_print(