From f65b86cfc9957c4f8b18193b7b6771dcf2b74378 Mon Sep 17 00:00:00 2001 From: Adam Shimali Date: Thu, 23 Jun 2016 10:20:49 +0100 Subject: [PATCH 1/3] Body of notification without placeholder should have been present. --- app/schemas.py | 2 ++ tests/app/notifications/test_rest.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/schemas.py b/app/schemas.py index 23e99fb5a..ca1e2fb13 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -272,6 +272,8 @@ class NotificationStatusSchema(BaseSchema): if in_data['template']['template_type'] == 'email': in_data['subject'] = template.replaced_subject in_data.pop('personalisation', None) + else: + in_data['body'] = in_data['template']['content'] in_data['template'].pop('content', None) in_data['template'].pop('subject', None) return in_data diff --git a/tests/app/notifications/test_rest.py b/tests/app/notifications/test_rest.py index a7fc33593..41694789d 100644 --- a/tests/app/notifications/test_rest.py +++ b/tests/app/notifications/test_rest.py @@ -35,6 +35,7 @@ def test_get_notification_by_id(notify_api, sample_notification): assert notification['to'] == '+447700900855' assert notification['service'] == str(sample_notification.service_id) assert response.status_code == 200 + assert notification['body'] == "This is a template" # sample_template.content def test_get_notifications_empty_result(notify_api, sample_api_key): @@ -75,6 +76,7 @@ def test_get_all_notifications(notify_api, sample_notification): assert notifications['notifications'][0]['to'] == '+447700900855' assert notifications['notifications'][0]['service'] == str(sample_notification.service_id) + assert notifications['notifications'][0]['body'] == "This is a template" # sample_template.content assert response.status_code == 200 From 3423c0c44df24783b2efc89fcbd53d3de4d92a8e Mon Sep 17 00:00:00 2001 From: Adam Shimali Date: Thu, 23 Jun 2016 15:21:03 +0100 Subject: [PATCH 2/3] Added subject for email templates --- app/schemas.py | 2 ++ tests/app/notifications/test_rest.py | 37 +++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/app/schemas.py b/app/schemas.py index ca1e2fb13..bd45dca22 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -274,6 +274,8 @@ class NotificationStatusSchema(BaseSchema): in_data.pop('personalisation', None) else: in_data['body'] = in_data['template']['content'] + if in_data['template']['template_type'] == 'email': + in_data['subject'] = in_data['template']['subject'] in_data['template'].pop('content', None) in_data['template'].pop('subject', None) return in_data diff --git a/tests/app/notifications/test_rest.py b/tests/app/notifications/test_rest.py index 41694789d..3890da134 100644 --- a/tests/app/notifications/test_rest.py +++ b/tests/app/notifications/test_rest.py @@ -13,7 +13,7 @@ from tests.app.conftest import sample_job as create_sample_job from tests.app.conftest import sample_service as create_sample_service -def test_get_notification_by_id(notify_api, sample_notification): +def test_get_sms_notification_by_id(notify_api, sample_notification): with notify_api.test_request_context(): with notify_api.test_client() as client: auth_header = create_authorization_header(service_id=sample_notification.service_id) @@ -36,6 +36,41 @@ def test_get_notification_by_id(notify_api, sample_notification): assert notification['service'] == str(sample_notification.service_id) assert response.status_code == 200 assert notification['body'] == "This is a template" # sample_template.content + assert not notification.get('subject') + + +def test_get_email_notification_by_id(notify_api, notify_db, notify_db_session, sample_email_template): + + email_notification = create_sample_notification(notify_db, + notify_db_session, + service=sample_email_template.service, + template=sample_email_template) + + with notify_api.test_request_context(): + with notify_api.test_client() as client: + auth_header = create_authorization_header(service_id=email_notification.service_id) + + response = client.get( + '/notifications/{}'.format(email_notification.id), + headers=[auth_header]) + + notification = json.loads(response.get_data(as_text=True))['data']['notification'] + + assert notification['status'] == 'sending' + assert notification['template'] == { + 'id': str(email_notification.template.id), + 'name': email_notification.template.name, + 'template_type': email_notification.template.template_type} + assert notification['job'] == { + 'id': str(email_notification.job.id), + 'original_file_name': email_notification.job.original_file_name + } + + assert notification['to'] == '+447700900855' + assert notification['service'] == str(email_notification.service_id) + assert response.status_code == 200 + assert notification['body'] == sample_email_template.content + assert notification['subject'] == sample_email_template.subject def test_get_notifications_empty_result(notify_api, sample_api_key): From 0e2e99f64e8aeb7df5b7ca2e25cf7c640ecb2840 Mon Sep 17 00:00:00 2001 From: Adam Shimali Date: Thu, 23 Jun 2016 15:35:35 +0100 Subject: [PATCH 3/3] notifications_utils Template constructor accepts None for personalisation data therefore None check not needed. If personalisation is None in in db it will get passed through to template which returns content. --- app/schemas.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/app/schemas.py b/app/schemas.py index bd45dca22..0a7eab8d1 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -259,23 +259,17 @@ class NotificationStatusSchema(BaseSchema): @pre_dump def handle_personalisation_property(self, in_data): - if in_data.personalisation: - self.personalisation = in_data.personalisation + self.personalisation = in_data.personalisation return in_data @post_dump def handle_template_merge(self, in_data): - if in_data.get('personalisation'): - from notifications_utils.template import Template - template = Template(in_data['template'], in_data['personalisation']) - in_data['body'] = template.replaced - if in_data['template']['template_type'] == 'email': - in_data['subject'] = template.replaced_subject - in_data.pop('personalisation', None) - else: - in_data['body'] = in_data['template']['content'] - if in_data['template']['template_type'] == 'email': - in_data['subject'] = in_data['template']['subject'] + from notifications_utils.template import Template + template = Template(in_data['template'], in_data['personalisation']) + in_data['body'] = template.replaced + if in_data['template']['template_type'] == 'email': + in_data['subject'] = template.replaced_subject + in_data.pop('personalisation', None) in_data['template'].pop('content', None) in_data['template'].pop('subject', None) return in_data