From 3355a29d01701aee9d9c442242ea0a7c85d74e48 Mon Sep 17 00:00:00 2001 From: Ken Tsang Date: Mon, 22 Jan 2018 10:18:11 +0000 Subject: [PATCH] Ensure letter personalisation is serialized correctly The personalisation for letters can take different formats depending on how the letter was generated, for example it can contain either address_line_1 or addressline1. This change ensures that it is always serialized in the same way. --- app/models.py | 14 ++++++++------ tests/app/test_model.py | 13 +++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/models.py b/app/models.py index 3b2bcbb96..7cb6c2e41 100644 --- a/app/models.py +++ b/app/models.py @@ -11,6 +11,7 @@ from sqlalchemy.dialects.postgresql import ( JSON ) from sqlalchemy import UniqueConstraint, CheckConstraint +from notifications_utils.columns import Columns from notifications_utils.recipients import ( validate_email_address, validate_phone_number, @@ -1223,12 +1224,13 @@ class Notification(db.Model): } if self.notification_type == LETTER_TYPE: - serialized['line_1'] = self.personalisation['address_line_1'] - serialized['line_2'] = self.personalisation.get('address_line_2') - serialized['line_3'] = self.personalisation.get('address_line_3') - serialized['line_4'] = self.personalisation.get('address_line_4') - serialized['line_5'] = self.personalisation.get('address_line_5') - serialized['line_6'] = self.personalisation.get('address_line_6') + col = Columns(self.personalisation) + serialized['line_1'] = col.get('address_line_1') + serialized['line_2'] = col.get('address_line_2') + serialized['line_3'] = col.get('address_line_3') + serialized['line_4'] = col.get('address_line_4') + serialized['line_5'] = col.get('address_line_5') + serialized['line_6'] = col.get('address_line_6') serialized['postcode'] = self.personalisation['postcode'] serialized['estimated_delivery'] = \ get_letter_timings(serialized['created_at'])\ diff --git a/tests/app/test_model.py b/tests/app/test_model.py index 406d3a5e0..af73e1460 100644 --- a/tests/app/test_model.py +++ b/tests/app/test_model.py @@ -294,3 +294,16 @@ def test_service_get_default_contact_letter(sample_service): def test_service_get_default_sms_sender(notify_db_session): service = create_service() assert service.get_default_sms_sender() == 'testing' + + +def test_letter_notification_serializes_correctly(client, sample_letter_notification): + sample_letter_notification.personalisation = { + 'addressline1': 'test', + 'addressline2': 'London', + 'postcode': 'N1', + } + + json = sample_letter_notification.serialize() + assert json['line_1'] == 'test' + assert json['line_2'] == 'London' + assert json['postcode'] == 'N1'