diff --git a/app/dao/notifications_dao.py b/app/dao/notifications_dao.py index b80f9d26b..d57ada265 100644 --- a/app/dao/notifications_dao.py +++ b/app/dao/notifications_dao.py @@ -50,28 +50,18 @@ from app.utils import convert_utc_to_bst, get_london_midnight_in_utc @statsd(namespace="dao") -def dao_get_template_usage(service_id, *, limit_days=None, day=None): - if bool(limit_days) == bool(day): - raise ValueError('Must filter on either limit_days or a specific day') - - query_filter = [] - - if limit_days: - query_filter.append(Notification.created_at >= days_ago(limit_days)) - else: - start = get_london_midnight_in_utc(day) - end = get_london_midnight_in_utc(day + timedelta(days=1)) - query_filter.append(Notification.created_at >= start) - query_filter.append(Notification.created_at < end) - - query_filter.append(Notification.service_id == service_id) - query_filter.append(Notification.key_type != KEY_TYPE_TEST) +def dao_get_template_usage(service_id, day): + start = get_london_midnight_in_utc(day) + end = get_london_midnight_in_utc(day + timedelta(days=1)) notifications_aggregate_query = db.session.query( func.count().label('count'), Notification.template_id ).filter( - *query_filter + Notification.created_at >= start, + Notification.created_at < end, + Notification.service_id == service_id, + Notification.key_type != KEY_TYPE_TEST, ).group_by( Notification.template_id ).subquery() diff --git a/app/template_statistics/rest.py b/app/template_statistics/rest.py index f992fe90d..019600057 100644 --- a/app/template_statistics/rest.py +++ b/app/template_statistics/rest.py @@ -62,7 +62,6 @@ def get_template_statistics_for_last_n_days(service_id, limit_days): template_stats_by_id = Counter() for day in last_n_days(limit_days): - print('\n') # "{SERVICE_ID}-template-usage-{YYYY-MM-DD}" key = cache_key_for_service_template_usage_per_day(service_id, day) stats = redis_store.get_all_from_hash(key) 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 e66d50955..d330997a9 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 @@ -79,7 +79,7 @@ def test_should_by_able_to_get_template_count(sample_template, sample_email_temp create_notification(sample_email_template) create_notification(sample_email_template) - results = dao_get_template_usage(sample_template.service_id, limit_days=1) + results = dao_get_template_usage(sample_template.service_id, date.today()) assert results[0].name == 'Email Template Name' assert results[0].template_type == 'email' assert results[0].count == 2 @@ -101,7 +101,7 @@ def test_template_usage_should_ignore_test_keys( create_notification(sample_template, api_key=sample_test_api_key, key_type=KEY_TYPE_TEST) create_notification(sample_template) - results = dao_get_template_usage(sample_template.service_id, limit_days=1) + results = dao_get_template_usage(sample_template.service_id, date.today()) assert results[0].name == 'Template Name' assert results[0].template_type == 'sms' assert results[0].count == 3 @@ -114,8 +114,8 @@ def test_template_usage_should_filter_by_service(notify_db_session): template_1 = create_template(service_1) template_2 = create_template(service_2) # noqa - template_3a = create_template(service_3) - template_3b = create_template(service_3) # noqa + template_3a = create_template(service_3, template_name='a') + template_3b = create_template(service_3, template_name='b') # noqa # two for service_1, one for service_3 create_notification(template_1) @@ -123,9 +123,9 @@ def test_template_usage_should_filter_by_service(notify_db_session): create_notification(template_3a) - res1 = dao_get_template_usage(service_1.id, limit_days=1) - res2 = dao_get_template_usage(service_2.id, limit_days=1) - res3 = dao_get_template_usage(service_3.id, limit_days=1) + res1 = dao_get_template_usage(service_1.id, date.today()) + res2 = dao_get_template_usage(service_2.id, date.today()) + res3 = dao_get_template_usage(service_3.id, date.today()) assert len(res1) == 1 assert res1[0].count == 2 @@ -139,34 +139,15 @@ def test_template_usage_should_filter_by_service(notify_db_session): def test_template_usage_should_by_able_to_get_zero_count_from_notifications_history_if_no_rows(sample_service): - results = dao_get_template_usage(sample_service.id, limit_days=1) + results = dao_get_template_usage(sample_service.id, date.today()) assert len(results) == 0 def test_template_usage_should_by_able_to_get_zero_count_from_notifications_history_if_no_service(): - results = dao_get_template_usage(str(uuid.uuid4()), limit_days=1) + results = dao_get_template_usage(str(uuid.uuid4()), date.today()) assert len(results) == 0 -@freeze_time('2017-06-10T12:00:00') -def test_template_usage_should_by_able_to_get_template_count_with_limit_days(sample_template): - # too early - create_notification(sample_template, created_at=datetime(2017, 6, 7, 22, 59, 0)) - # just right - create_notification(sample_template, created_at=datetime(2017, 6, 7, 23, 0, 0)) - create_notification(sample_template, created_at=datetime(2017, 6, 7, 23, 0, 0)) - create_notification(sample_template, created_at=datetime(2017, 6, 8, 22, 59, 0)) - create_notification(sample_template, created_at=datetime(2017, 6, 8, 22, 59, 0)) - create_notification(sample_template, created_at=datetime(2017, 6, 8, 22, 59, 0)) - # next day, still included - create_notification(sample_template, created_at=datetime(2017, 6, 8, 23, 0, 0)) - - results = dao_get_template_usage(sample_template.service_id, limit_days=2) - - assert len(results) == 1 - assert results[0].count == 6 - - @freeze_time('2017-06-10T12:00:00') def test_template_usage_should_by_able_to_get_template_count_for_specific_day(sample_template): # too early @@ -184,13 +165,3 @@ def test_template_usage_should_by_able_to_get_template_count_for_specific_day(sa assert len(results) == 1 assert results[0].count == 5 - - -@pytest.mark.parametrize('kwargs', [ - {}, - {'limit_days': 0}, - {'limit_days': 1, 'day': date(2017, 1, 1)} -]) -def test_template_usage_rejects_invalid_params(kwargs): - with pytest.raises(ValueError): - dao_get_template_usage(uuid.uuid4(), **kwargs)