Change process_sanitised_letter to take a single encrypted arg

Template preview will now send an encrypted dict containing all the args
to the `process_sanitised_letter` task, so this updates the task to
handle data in the new format.
This commit is contained in:
Katie Smith
2020-01-24 09:08:27 +00:00
parent 64c2061baa
commit adf9906a96
2 changed files with 50 additions and 46 deletions

View File

@@ -13,6 +13,7 @@ from celery.exceptions import MaxRetriesExceededError, Retry
from requests import RequestException
from sqlalchemy.orm.exc import NoResultFound
from app import encryption
from app.errors import VirusScanError
from app.exceptions import NotificationTechnicalFailureException
from app.celery.letters_pdf_tasks import (
@@ -773,14 +774,15 @@ def test_process_sanitised_letter_with_valid_letter(
sample_letter_notification.billable_units = 1
sample_letter_notification.created_at = datetime(2018, 7, 1, 12)
process_sanitised_letter(
page_count=2,
message=None,
invalid_pages=None,
validation_status='passed',
filename=filename,
notification_id=str(sample_letter_notification.id)
)
encrypted_data = encryption.encrypt({
'page_count': 2,
'message': None,
'invalid_pages': None,
'validation_status': 'passed',
'filename': filename,
'notification_id': str(sample_letter_notification.id)
})
process_sanitised_letter(encrypted_data)
assert sample_letter_notification.status == expected_status
assert sample_letter_notification.billable_units == 1
@@ -815,14 +817,15 @@ def test_process_sanitised_letter_with_invalid_letter(sample_letter_notification
sample_letter_notification.billable_units = 1
sample_letter_notification.created_at = datetime(2018, 7, 1, 12)
process_sanitised_letter(
page_count=2,
message='content-outside-printable-area',
invalid_pages=[1],
validation_status='failed',
filename=filename,
notification_id=str(sample_letter_notification.id)
)
encrypted_data = encryption.encrypt({
'page_count': 2,
'message': 'content-outside-printable-area',
'invalid_pages': [1],
'validation_status': 'failed',
'filename': filename,
'notification_id': str(sample_letter_notification.id)
})
process_sanitised_letter(encrypted_data)
assert sample_letter_notification.status == NOTIFICATION_VALIDATION_FAILED
assert sample_letter_notification.billable_units == 0
@@ -842,14 +845,15 @@ def test_process_sanitised_letter_when_letter_status_is_not_pending_virus_scan(
mock_s3 = mocker.patch('app.celery.letters_pdf_tasks.s3')
sample_letter_notification.status = NOTIFICATION_CREATED
process_sanitised_letter(
page_count=2,
message=None,
invalid_pages=None,
validation_status='passed',
filename='NOTIFY.{}'.format(sample_letter_notification.reference),
notification_id=str(sample_letter_notification.id)
)
encrypted_data = encryption.encrypt({
'page_count': 2,
'message': None,
'invalid_pages': None,
'validation_status': 'passed',
'filename': 'NOTIFY.{}'.format(sample_letter_notification.reference),
'notification_id': str(sample_letter_notification.id)
})
process_sanitised_letter(encrypted_data)
assert not mock_s3.called
@@ -861,15 +865,17 @@ def test_process_sanitised_letter_puts_letter_into_tech_failure_for_boto_errors(
mocker.patch('app.celery.letters_pdf_tasks.s3.get_s3_object', side_effect=ClientError({}, 'operation_name'))
sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK
encrypted_data = encryption.encrypt({
'page_count': 2,
'message': None,
'invalid_pages': None,
'validation_status': 'passed',
'filename': 'NOTIFY.{}'.format(sample_letter_notification.reference),
'notification_id': str(sample_letter_notification.id)
})
with pytest.raises(NotificationTechnicalFailureException):
process_sanitised_letter(
page_count=2,
message=None,
invalid_pages=None,
validation_status='passed',
filename='NOTIFY.{}'.format(sample_letter_notification.reference),
notification_id=str(sample_letter_notification.id)
)
process_sanitised_letter(encrypted_data)
assert sample_letter_notification.status == NOTIFICATION_TECHNICAL_FAILURE