diff --git a/app/notifications/rest.py b/app/notifications/rest.py index 934f6e093..fc82668bc 100644 --- a/app/notifications/rest.py +++ b/app/notifications/rest.py @@ -365,7 +365,7 @@ def get_notification_return_data(notification_id, notification, template): } if template.template_type == 'email': - output.update({'subject': template.subject}) + output.update({'subject': template.replaced_subject}) return output diff --git a/app/schemas.py b/app/schemas.py index 9ee71cf49..23e99fb5a 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -248,7 +248,7 @@ class SmsAdminNotificationSchema(SmsNotificationSchema): class NotificationStatusSchema(BaseSchema): - template = fields.Nested(TemplateSchema, only=["id", "name", "template_type", "content"], dump_only=True) + template = fields.Nested(TemplateSchema, only=["id", "name", "template_type", "content", "subject"], dump_only=True) job = fields.Nested(JobSchema, only=["id", "original_file_name"], dump_only=True) personalisation = fields.Dict(required=False) @@ -267,10 +267,13 @@ class NotificationStatusSchema(BaseSchema): def handle_template_merge(self, in_data): if in_data.get('personalisation'): from notifications_utils.template import Template - merged = Template(in_data['template'], in_data['personalisation']).replaced - in_data['body'] = merged + 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 diff --git a/tests/app/notifications/rest/test_send_notification.py b/tests/app/notifications/rest/test_send_notification.py index 3413820e8..92078ded4 100644 --- a/tests/app/notifications/rest/test_send_notification.py +++ b/tests/app/notifications/rest/test_send_notification.py @@ -90,39 +90,40 @@ def test_send_notification_invalid_template_id(notify_api, sample_template, mock @freeze_time("2016-01-01 11:09:00.061258") -def test_send_notification_with_placeholders_replaced(notify_api, sample_template_with_placeholders, mocker): +def test_send_notification_with_placeholders_replaced(notify_api, sample_email_template_with_placeholders, mocker): with notify_api.test_request_context(): with notify_api.test_client() as client: - mocker.patch('app.celery.tasks.send_sms.apply_async') + mocker.patch('app.celery.tasks.send_email.apply_async') data = { - 'to': '+447700900855', - 'template': str(sample_template_with_placeholders.id), + 'to': 'ok@ok.com', + 'template': str(sample_email_template_with_placeholders.id), 'personalisation': { 'name': 'Jo' } } - auth_header = create_authorization_header(service_id=sample_template_with_placeholders.service.id) + auth_header = create_authorization_header(service_id=sample_email_template_with_placeholders.service.id) response = client.post( - path='/notifications/sms', + path='/notifications/email', data=json.dumps(data), headers=[('Content-Type', 'application/json'), auth_header]) response_data = json.loads(response.data)['data'] notification_id = response_data['notification']['id'] - data.update({"template_version": sample_template_with_placeholders.version}) + data.update({"template_version": sample_email_template_with_placeholders.version}) - app.celery.tasks.send_sms.apply_async.assert_called_once_with( - (str(sample_template_with_placeholders.service.id), + app.celery.tasks.send_email.apply_async.assert_called_once_with( + (str(sample_email_template_with_placeholders.service.id), notification_id, ANY, "2016-01-01T11:09:00.061258"), - queue="sms" + queue="email" ) assert response.status_code == 201 - assert encryption.decrypt(app.celery.tasks.send_sms.apply_async.call_args[0][0][2]) == data + assert encryption.decrypt(app.celery.tasks.send_email.apply_async.call_args[0][0][2]) == data assert response_data['body'] == 'Hello Jo' + assert response_data['subject'] == 'Jo' def test_should_not_send_notification_for_archived_template(notify_api, sample_template): diff --git a/tests/app/notifications/test_rest.py b/tests/app/notifications/test_rest.py index 277762f27..76157ccad 100644 --- a/tests/app/notifications/test_rest.py +++ b/tests/app/notifications/test_rest.py @@ -1248,6 +1248,30 @@ def test_get_notification_by_id_returns_merged_template_content(notify_db, notification = json.loads(response.get_data(as_text=True))['data']['notification'] assert response.status_code == 200 assert notification['body'] == 'Hello world' + assert 'subject' not in notification + + +def test_get_notification_by_id_returns_merged_template_content_for_email( + notify_db, + notify_db_session, + notify_api, + sample_email_template_with_placeholders +): + sample_notification = create_sample_notification(notify_db, + notify_db_session, + template=sample_email_template_with_placeholders, + personalisation={"name": "world"}) + with notify_api.test_request_context(), notify_api.test_client() as client: + auth_header = create_authorization_header(service_id=sample_notification.service_id) + + response = client.get( + '/notifications/{}'.format(sample_notification.id), + headers=[auth_header]) + + notification = json.loads(response.get_data(as_text=True))['data']['notification'] + assert response.status_code == 200 + assert notification['body'] == 'Hello world' + assert notification['subject'] == 'world' def test_get_notifications_for_service_returns_merged_template_content(notify_api,