diff --git a/app/notifications/process_letter_notifications.py b/app/notifications/process_letter_notifications.py index 2af7f5f7a..7f9428786 100644 --- a/app/notifications/process_letter_notifications.py +++ b/app/notifications/process_letter_notifications.py @@ -14,6 +14,7 @@ def create_letter_notification( reply_to_text=None, billable_units=None, updated_at=None, + postage=None ): notification = persist_notification( template_id=template.id, @@ -33,7 +34,9 @@ def create_letter_notification( status=status, reply_to_text=reply_to_text, billable_units=billable_units, - postage=letter_data.get('postage'), + # letter_data.get('postage') is only set for precompiled letters + # letters from a template will pass in 'europe' or 'rest-of-world' if None then use postage from template + postage=postage or letter_data.get('postage'), updated_at=updated_at ) return notification diff --git a/app/v2/notifications/post_notifications.py b/app/v2/notifications/post_notifications.py index 20bb50269..b3ff6e016 100644 --- a/app/v2/notifications/post_notifications.py +++ b/app/v2/notifications/post_notifications.py @@ -339,7 +339,7 @@ def process_letter_notification( template=template, reply_to_text=reply_to_text) - validate_address(service, letter_data) + postage = validate_address(service, letter_data) test_key = api_key.key_type == KEY_TYPE_TEST @@ -362,7 +362,8 @@ def process_letter_notification( api_key=api_key, status=status, reply_to_text=reply_to_text, - updated_at=updated_at + updated_at=updated_at, + postage=postage ) get_pdf_for_templated_letter.apply_async( @@ -413,6 +414,10 @@ def validate_address(service, letter_data): raise ValidationError( message='Address lines must not start with any of the following characters: @ ( ) = [ ] ” \\ / ,' ) + if address.postage == 'united-kingdom': + return None # use postage from template + else: + return address.postage def process_precompiled_letter_notifications(*, letter_data, api_key, service, template, reply_to_text): diff --git a/tests/app/v2/notifications/test_post_letter_notifications.py b/tests/app/v2/notifications/test_post_letter_notifications.py index e3ea139a2..00deaa54d 100644 --- a/tests/app/v2/notifications/test_post_letter_notifications.py +++ b/tests/app/v2/notifications/test_post_letter_notifications.py @@ -174,6 +174,30 @@ def test_post_letter_notification_stores_country( 'Kronprinzenpalais\n' 'Germany' ) + assert notification.postage == 'europe' + + +def test_post_letter_notification_international_sets_rest_of_world( + client, notify_db_session, mocker + ): + service = create_service(service_permissions=[LETTER_TYPE, INTERNATIONAL_LETTERS]) + template = create_template(service, template_type="letter") + mocker.patch('app.celery.tasks.letters_pdf_tasks.get_pdf_for_templated_letter.apply_async') + data = { + 'template_id': str(template.id), + 'personalisation': { + 'address_line_1': 'Prince Harry', + 'address_line_2': 'Toronto', + 'address_line_5': 'Canada', + } + } + + resp_json = letter_request(client, data, service_id=service.id) + + assert validate(resp_json, post_letter_response) == resp_json + notification = Notification.query.one() + + assert notification.postage == 'rest-of-world' @pytest.mark.parametrize('permissions, personalisation, expected_error', (