Set postage for templated letters when the address is not from the united-kingdom.

If the address is from the united-kingdom use the postage from the template.
This commit is contained in:
Rebecca Law
2020-07-29 13:42:20 +01:00
parent 8e1fa6ab50
commit ed5e73d548
3 changed files with 35 additions and 3 deletions

View File

@@ -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

View File

@@ -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):

View File

@@ -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', (