mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-05 16:18:26 -04:00
Updated the fetch_stats_by_date_range to return test notifications if the start and end date are with in the last 7 days.
If the date range is with the last 7 days we query Notifcations. If the date range is outside of the last 7 days we query NotificationHistory. NotificationHistory does not persist notifications created with a test api key.
This commit is contained in:
@@ -327,24 +327,46 @@ def fetch_stats_by_date_range_for_all_services(start_date, end_date, include_fro
|
|||||||
start_date = get_london_midnight_in_utc(start_date)
|
start_date = get_london_midnight_in_utc(start_date)
|
||||||
end_date = get_london_midnight_in_utc(end_date + timedelta(days=1))
|
end_date = get_london_midnight_in_utc(end_date + timedelta(days=1))
|
||||||
|
|
||||||
query = db.session.query(
|
if start_date >= datetime.utcnow() - timedelta(days=7):
|
||||||
NotificationHistory.notification_type,
|
# Use notifications table.
|
||||||
NotificationHistory.status,
|
# This should improve performance for the default query and allow us to see test messages for the last week.
|
||||||
NotificationHistory.service_id,
|
query = db.session.query(
|
||||||
func.count(NotificationHistory.id).label('count')
|
Notification.notification_type,
|
||||||
).filter(
|
Notification.status,
|
||||||
NotificationHistory.created_at >= start_date,
|
Notification.service_id,
|
||||||
NotificationHistory.created_at < end_date
|
func.count(Notification.id).label('count')
|
||||||
).group_by(
|
).filter(
|
||||||
NotificationHistory.notification_type,
|
Notification.created_at >= start_date,
|
||||||
NotificationHistory.status,
|
Notification.created_at < end_date
|
||||||
NotificationHistory.service_id
|
).group_by(
|
||||||
).order_by(
|
Notification.notification_type,
|
||||||
NotificationHistory.service_id
|
Notification.status,
|
||||||
)
|
Notification.service_id
|
||||||
|
).order_by(
|
||||||
|
Notification.service_id
|
||||||
|
)
|
||||||
|
if not include_from_test_key:
|
||||||
|
query = query.filter(NotificationHistory.key_type != KEY_TYPE_TEST)
|
||||||
|
|
||||||
if not include_from_test_key:
|
else:
|
||||||
query = query.filter(NotificationHistory.key_type != KEY_TYPE_TEST)
|
query = db.session.query(
|
||||||
|
NotificationHistory.notification_type,
|
||||||
|
NotificationHistory.status,
|
||||||
|
NotificationHistory.service_id,
|
||||||
|
func.count(NotificationHistory.id).label('count')
|
||||||
|
).filter(
|
||||||
|
NotificationHistory.created_at >= start_date,
|
||||||
|
NotificationHistory.created_at < end_date
|
||||||
|
).group_by(
|
||||||
|
NotificationHistory.notification_type,
|
||||||
|
NotificationHistory.status,
|
||||||
|
NotificationHistory.service_id
|
||||||
|
).order_by(
|
||||||
|
NotificationHistory.service_id
|
||||||
|
)
|
||||||
|
|
||||||
|
if not include_from_test_key:
|
||||||
|
query = query.filter(NotificationHistory.key_type != KEY_TYPE_TEST)
|
||||||
|
|
||||||
return query.all()
|
return query.all()
|
||||||
|
|
||||||
|
|||||||
@@ -647,6 +647,40 @@ def test_dao_suspend_service_marks_service_as_inactive_and_expires_api_keys(samp
|
|||||||
assert api_key.expiry_date == datetime(2001, 1, 1, 23, 59, 00)
|
assert api_key.expiry_date == datetime(2001, 1, 1, 23, 59, 00)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("start_delta, end_delta, expected",
|
||||||
|
[("5", "1", "4"), # a date range less than 7 days ago returns test and normal notifications
|
||||||
|
("9", "8", "1"), # a date range older than 9 days does not return test notifications.
|
||||||
|
("8", "4", "2")]) # a date range that starts more than 7 days ago
|
||||||
|
def test_fetch_stats_by_date_range_for_all_services_returns_test_notifications(notify_db,
|
||||||
|
notify_db_session,
|
||||||
|
sample_api_key,
|
||||||
|
start_delta,
|
||||||
|
end_delta,
|
||||||
|
expected):
|
||||||
|
result_one = create_notification(notify_db, notify_db_session, created_at=datetime.now(),
|
||||||
|
api_key_id=sample_api_key.id, key_type='test')
|
||||||
|
create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=2),
|
||||||
|
api_key_id=sample_api_key.id, key_type='test')
|
||||||
|
create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=3),
|
||||||
|
api_key_id=sample_api_key.id, key_type='test')
|
||||||
|
create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=4),
|
||||||
|
api_key_id=sample_api_key.id, key_type='normal')
|
||||||
|
create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=4),
|
||||||
|
api_key_id=sample_api_key.id, key_type='test')
|
||||||
|
create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=8),
|
||||||
|
api_key_id=sample_api_key.id, key_type='test')
|
||||||
|
create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=8),
|
||||||
|
api_key_id=sample_api_key.id, key_type='normal')
|
||||||
|
|
||||||
|
start_date = (datetime.utcnow() - timedelta(days=int(start_delta))).date()
|
||||||
|
end_date = (datetime.utcnow() - timedelta(days=int(end_delta))).date()
|
||||||
|
|
||||||
|
results = fetch_stats_by_date_range_for_all_services(start_date, end_date, include_from_test_key=True)
|
||||||
|
|
||||||
|
assert len(results) == 1
|
||||||
|
assert results[0] == ('sms', 'created', result_one.service_id, int(expected))
|
||||||
|
|
||||||
|
|
||||||
@freeze_time('2001-01-01T23:59:00')
|
@freeze_time('2001-01-01T23:59:00')
|
||||||
def test_dao_resume_service_marks_service_as_active_and_api_keys_are_still_revoked(sample_service, sample_api_key):
|
def test_dao_resume_service_marks_service_as_active_and_api_keys_are_still_revoked(sample_service, sample_api_key):
|
||||||
dao_suspend_service(sample_service.id)
|
dao_suspend_service(sample_service.id)
|
||||||
|
|||||||
Reference in New Issue
Block a user