mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-20 15:31:15 -05:00
refactor dao_get_template_usage now that limit_days no longer used
doesnt need to have any conditional stuff now - always requires a date
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user