diff --git a/app/dao/notifications_dao.py b/app/dao/notifications_dao.py index 5251546e2..257495b91 100644 --- a/app/dao/notifications_dao.py +++ b/app/dao/notifications_dao.py @@ -72,7 +72,18 @@ def dao_get_last_template_usage(template_id, template_type, service_id): @statsd(namespace="dao") -def dao_get_last_date_template_was_used(template_id, template_type, service_id): +def dao_get_last_date_template_was_used(template_id, service_id): + last_date_from_notifications = db.session.query( + functions.max(Notification.created_at) + ).filter( + Notification.service_id == service_id, + Notification.template_id == template_id, + Notification.key_type != KEY_TYPE_TEST + ).scalar() + + if last_date_from_notifications: + return last_date_from_notifications + last_date = db.session.query( functions.max(FactNotificationStatus.bst_date) ).filter( @@ -80,26 +91,7 @@ def dao_get_last_date_template_was_used(template_id, template_type, service_id): FactNotificationStatus.key_type != KEY_TYPE_TEST ).scalar() - last_date_from_notifications = db.session.query( - functions.max(Notification.created_at) - ).filter( - Notification.service_id == service_id, - Notification.notification_type == template_type, - Notification.template_id == template_id, - Notification.key_type != KEY_TYPE_TEST - ).scalar() - - if last_date and last_date_from_notifications: - if datetime.combine(last_date, datetime.utcnow().min.time()) >= last_date_from_notifications: - return last_date - else: - return last_date_from_notifications - elif not last_date: - return last_date_from_notifications - elif not last_date_from_notifications: - return last_date - else: - return None + return last_date @statsd(namespace="dao") diff --git a/app/template_statistics/rest.py b/app/template_statistics/rest.py index 5a420b4e9..abc011881 100644 --- a/app/template_statistics/rest.py +++ b/app/template_statistics/rest.py @@ -58,10 +58,10 @@ def get_template_statistics_for_template_id(service_id, template_id): @template_statistics.route('/last-used/') def get_last_used_datetime_for_template(service_id, template_id): - template = dao_get_template_by_id_and_service_id(template_id, service_id) + # Check the template and service exist + dao_get_template_by_id_and_service_id(template_id, service_id) last_date_used = dao_get_last_date_template_was_used(template_id=template_id, - template_type=template.template_type, service_id=service_id) return jsonify(last_date_used=last_date_used.strftime(DATETIME_FORMAT)) diff --git a/tests/app/dao/notification_dao/test_notification_dao_template_usage.py b/tests/app/dao/notification_dao/test_notification_dao_template_usage.py index 2e6ef2b85..22198f2db 100644 --- a/tests/app/dao/notification_dao/test_notification_dao_template_usage.py +++ b/tests/app/dao/notification_dao/test_notification_dao_template_usage.py @@ -56,54 +56,31 @@ def test_last_template_usage_should_be_able_to_get_no_template_usage_history_if_ assert not results -@pytest.mark.parametrize('last_status_date, last_notification_date', - [((datetime.utcnow() - timedelta(days=2)).date(), None), - ((datetime.utcnow() - timedelta(days=2)).date(), datetime.utcnow() - timedelta(days=3))] - ) def test_dao_get_last_date_template_was_used_returns_bst_date_from_stats_table( - sample_template, last_status_date, last_notification_date + sample_template ): + last_status_date = (datetime.utcnow() - timedelta(days=2)).date() create_ft_notification_status(bst_date=last_status_date, template=sample_template) - if last_notification_date: - create_notification(template=sample_template, created_at=last_notification_date) + last_used_date = dao_get_last_date_template_was_used(template_id=sample_template.id, - template_type='sms', service_id=sample_template.service_id) assert last_used_date == last_status_date -@pytest.mark.parametrize('last_notification_date, last_status_date', - [(datetime.utcnow() - timedelta(hours=2), None), - (datetime.utcnow() - timedelta(hours=2), (datetime.utcnow() - timedelta(days=2)).date())] - ) def test_dao_get_last_date_template_was_used_returns_created_at_from_notifications( - sample_template, last_status_date, last_notification_date + sample_template ): + last_notification_date = datetime.utcnow() - timedelta(hours=2) create_notification(template=sample_template, created_at=last_notification_date) - if last_status_date: - create_ft_notification_status(bst_date=last_status_date, template=sample_template) + last_status_date = (datetime.utcnow() - timedelta(days=2)).date() + create_ft_notification_status(bst_date=last_status_date, template=sample_template) last_used_date = dao_get_last_date_template_was_used(template_id=sample_template.id, - template_type='sms', service_id=sample_template.service_id) assert last_used_date == last_notification_date def test_dao_get_last_date_template_was_used_returns_none_if_never_used(sample_template): assert not dao_get_last_date_template_was_used(template_id=sample_template.id, - template_type='sms', service_id=sample_template.service_id) - - -def test_dao_get_last_date_template_was_used_correct_date(sample_template): - date_from_notification = datetime.utcnow() - timedelta(hours=2) - create_notification(template=sample_template, created_at=date_from_notification) - date_from_ft_status = (datetime.utcnow() - timedelta(days=2)).date() - create_ft_notification_status(bst_date=date_from_ft_status, - template=sample_template) - - actual_result = dao_get_last_date_template_was_used(template_id=sample_template.id, - template_type='sms', - service_id=sample_template.service_id) - assert actual_result == date_from_notification diff --git a/tests/app/template_statistics/test_rest.py b/tests/app/template_statistics/test_rest.py index b0deb5bf8..dd0a17998 100644 --- a/tests/app/template_statistics/test_rest.py +++ b/tests/app/template_statistics/test_rest.py @@ -221,7 +221,7 @@ def test_get_last_used_datetime_for_template_returns_400_if_service_does_not_exi ) -def test_get_last_used_datetime_for_template_returns_400_if_template_does_not_exist( +def test_get_last_used_datetime_for_template_returns_404_if_template_does_not_exist( admin_request, sample_template ): admin_request.get(