From bad0ce3d86ef8688444d7b8e93635be142fad9c2 Mon Sep 17 00:00:00 2001 From: Imdad Ahad Date: Mon, 5 Jun 2017 15:53:57 +0100 Subject: [PATCH 1/2] Return personalisation in notification dump in search by to --- app/dao/notifications_dao.py | 2 +- tests/app/dao/test_notification_dao.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/dao/notifications_dao.py b/app/dao/notifications_dao.py index 22da11966..356b74ed2 100644 --- a/app/dao/notifications_dao.py +++ b/app/dao/notifications_dao.py @@ -494,7 +494,7 @@ def dao_get_notifications_by_to_field(service_id, search_term, statuses=None): if statuses: filters.append(Notification.status.in_(statuses)) - results = db.session.query(Notification).filter(*filters).all() + results = db.session.query(Notification).filter(*filters).order_by(desc(Notification.created_at)).all() return results diff --git a/tests/app/dao/test_notification_dao.py b/tests/app/dao/test_notification_dao.py index dc0f3fc34..086a24c57 100644 --- a/tests/app/dao/test_notification_dao.py +++ b/tests/app/dao/test_notification_dao.py @@ -1903,3 +1903,24 @@ def test_dao_get_notifications_by_to_field_returns_all_if_no_status_filter(sampl assert len(notifications) == 2 assert notification1.id in notification_ids assert notification2.id in notification_ids + + +@freeze_time('2016-01-01 11:10:00') +def test_dao_get_notifications_by_to_field_orders_by_created_at_desc(sample_template): + notification = partial( + create_notification, + template=sample_template, + to_field='+447700900855', + normalised_to='447700900855' + ) + + notification_a_minute_ago = notification(created_at=datetime.utcnow() - timedelta(minutes=1)) + notification = notification(created_at=datetime.utcnow()) + + notifications = dao_get_notifications_by_to_field( + sample_template.service_id, '+447700900855' + ) + + assert len(notifications) == 2 + assert notifications[0].id == notification.id + assert notifications[1].id == notification_a_minute_ago.id From 3177a6ddc46253d518c4b458c6af5860093800a8 Mon Sep 17 00:00:00 2001 From: Imdad Ahad Date: Mon, 5 Jun 2017 15:54:40 +0100 Subject: [PATCH 2/2] Return personalisation dump of notifications + small refactor --- app/notifications/rest.py | 10 +++--- app/service/rest.py | 3 +- tests/app/service/test_rest.py | 56 ++++++++++++++++++++++++++-------- 3 files changed, 49 insertions(+), 20 deletions(-) diff --git a/app/notifications/rest.py b/app/notifications/rest.py index bb136f8c8..e831efa9a 100644 --- a/app/notifications/rest.py +++ b/app/notifications/rest.py @@ -11,6 +11,10 @@ from app.dao import ( templates_dao, notifications_dao ) +from app.errors import ( + register_errors, + InvalidRequest +) from app.models import KEY_TYPE_TEAM, PRIORITY from app.models import SMS_TYPE from app.notifications.process_notifications import ( @@ -38,12 +42,6 @@ from notifications_utils.recipients import get_international_phone_info notifications = Blueprint('notifications', __name__) -from app.errors import ( - register_errors, - InvalidRequest -) - - register_errors(notifications) diff --git a/app/service/rest.py b/app/service/rest.py index 24fdcd513..4826c8814 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -59,6 +59,7 @@ from app.schemas import ( user_schema, permission_schema, notification_with_template_schema, + notification_with_personalisation_schema, notifications_filter_schema, detailed_service_schema ) @@ -303,7 +304,7 @@ def get_all_notifications_for_service(service_id): def search_for_notification_by_to_field(service_id, search_term, statuses): results = notifications_dao.dao_get_notifications_by_to_field(service_id, search_term, statuses) return jsonify( - notifications=notification_with_template_schema.dump(results, many=True).data + notifications=notification_with_personalisation_schema.dump(results, many=True).data ), 200 diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index f2b0a8247..7a6c71627 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -10,7 +10,12 @@ from freezegun import freeze_time from app.dao.users_dao import save_model_user from app.dao.services_dao import dao_remove_user_from_service -from app.models import User, Organisation, DVLA_ORG_LAND_REGISTRY, Rate, ServicePermission +from app.models import ( + Organisation, Rate, Service, ServicePermission, User, + KEY_TYPE_NORMAL, KEY_TYPE_TEAM, KEY_TYPE_TEST, + EMAIL_TYPE, SMS_TYPE, LETTER_TYPE, INTERNATIONAL_SMS_TYPE, INBOUND_SMS_TYPE, + DVLA_ORG_LAND_REGISTRY +) from tests import create_authorization_header from tests.app.db import create_template from tests.app.conftest import ( @@ -20,11 +25,6 @@ from tests.app.conftest import ( sample_notification_history as create_notification_history, sample_notification_with_job ) -from app.models import ( - Service, ServicePermission, - KEY_TYPE_NORMAL, KEY_TYPE_TEAM, KEY_TYPE_TEST, - EMAIL_TYPE, SMS_TYPE, LETTER_TYPE, INTERNATIONAL_SMS_TYPE, INBOUND_SMS_TYPE -) from tests.app.db import create_user @@ -1438,13 +1438,12 @@ def test_get_services_with_detailed_flag(client, notify_db, notify_db_session): def test_get_services_with_detailed_flag_excluding_from_test_key(notify_api, notify_db, notify_db_session): - notifications = [ - create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_NORMAL), - create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEAM), - create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST), - create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST), - create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST) - ] + create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_NORMAL), + create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEAM), + create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST), + create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST), + create_sample_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST) + with notify_api.test_request_context(), notify_api.test_client() as client: resp = client.get( '/service?detailed=True&include_from_test_key=False', @@ -2051,3 +2050,34 @@ def test_search_for_notification_by_to_field_filters_by_statuses(client, notify_ assert len(notifications) == 2 assert str(notification1.id) in notification_ids assert str(notification2.id) in notification_ids + + +def test_search_for_notification_by_to_field_returns_content( + client, + notify_db, + notify_db_session, + sample_template_with_placeholders +): + notification = create_sample_notification( + notify_db, + notify_db_session, + to_field='+447700900855', + normalised_to='447700900855', + template=sample_template_with_placeholders, + personalisation={"name": "Foo"} + ) + + response = client.get( + '/service/{}/notifications?to={}'.format( + sample_template_with_placeholders.service_id, '+447700900855' + ), + headers=[create_authorization_header()] + ) + notifications = json.loads(response.get_data(as_text=True))['notifications'] + + assert response.status_code == 200 + assert len(notifications) == 1 + + assert notifications[0]['id'] == str(notification.id) + assert notifications[0]['to'] == '+447700900855' + assert notifications[0]['body'] == 'Hello Foo\nYour thing is due soon'