mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-02 08:55:15 -05:00
still return service if they have never sent any notifications
This commit is contained in:
@@ -259,4 +259,9 @@ def get_detailed_services():
|
|||||||
for service_id, rows in itertools.groupby(stats, lambda x: x.service_id):
|
for service_id, rows in itertools.groupby(stats, lambda x: x.service_id):
|
||||||
services[service_id].statistics = statistics.format_statistics(rows)
|
services[service_id].statistics = statistics.format_statistics(rows)
|
||||||
|
|
||||||
|
# if service has not sent anything, query will not have set statistics correctly
|
||||||
|
for service in services.values():
|
||||||
|
if not hasattr(service, 'statistics'):
|
||||||
|
service.statistics = statistics.create_zeroed_stats_dicts()
|
||||||
|
|
||||||
return detailed_service_schema.dump(services.values(), many=True).data
|
return detailed_service_schema.dump(services.values(), many=True).data
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ def format_statistics(statistics):
|
|||||||
# statistics come in a named tuple with uniqueness from 'notification_type', 'status' - however missing
|
# statistics come in a named tuple with uniqueness from 'notification_type', 'status' - however missing
|
||||||
# statuses/notification types won't be represented and the status types need to be simplified/summed up
|
# statuses/notification types won't be represented and the status types need to be simplified/summed up
|
||||||
# so we can return emails/sms * created, sent, and failed
|
# so we can return emails/sms * created, sent, and failed
|
||||||
counts = _create_zeroed_stats_dicts()
|
counts = create_zeroed_stats_dicts()
|
||||||
for row in statistics:
|
for row in statistics:
|
||||||
_update_statuses_from_row(counts[row.notification_type], row)
|
_update_statuses_from_row(counts[row.notification_type], row)
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ def format_weekly_notification_stats(statistics, service_created_at):
|
|||||||
# turn a datetime into midnight that day http://stackoverflow.com/a/1937636
|
# turn a datetime into midnight that day http://stackoverflow.com/a/1937636
|
||||||
preceeding_monday_midnight = datetime.combine(preceeding_monday.date(), datetime.min.time())
|
preceeding_monday_midnight = datetime.combine(preceeding_monday.date(), datetime.min.time())
|
||||||
week_dict = {
|
week_dict = {
|
||||||
week: _create_zeroed_stats_dicts()
|
week: create_zeroed_stats_dicts()
|
||||||
for week in _weeks_for_range(preceeding_monday_midnight, datetime.utcnow())
|
for week in _weeks_for_range(preceeding_monday_midnight, datetime.utcnow())
|
||||||
}
|
}
|
||||||
for row in statistics:
|
for row in statistics:
|
||||||
@@ -29,7 +29,7 @@ def format_weekly_notification_stats(statistics, service_created_at):
|
|||||||
return week_dict
|
return week_dict
|
||||||
|
|
||||||
|
|
||||||
def _create_zeroed_stats_dicts():
|
def create_zeroed_stats_dicts():
|
||||||
return {
|
return {
|
||||||
template_type: {
|
template_type: {
|
||||||
status: 0 for status in ('requested', 'delivered', 'failed')
|
status: 0 for status in ('requested', 'delivered', 'failed')
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ from tests.app.conftest import (
|
|||||||
sample_user as create_sample_user,
|
sample_user as create_sample_user,
|
||||||
sample_notification as create_sample_notification
|
sample_notification as create_sample_notification
|
||||||
)
|
)
|
||||||
from app.service.rest import get_detailed_services
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_service_list(notify_api, service_factory):
|
def test_get_service_list(notify_api, service_factory):
|
||||||
@@ -1096,18 +1095,17 @@ def test_set_sms_sender_for_service_rejects_invalid_characters(notify_api, sampl
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('today_only,stats', [
|
@pytest.mark.parametrize('today_only,stats', [
|
||||||
('False', {
|
('False', {
|
||||||
'requested': 2,
|
'requested': 2,
|
||||||
'delivered': 1,
|
'delivered': 1,
|
||||||
'failed': 0
|
'failed': 0
|
||||||
}),
|
}),
|
||||||
('True', {
|
('True', {
|
||||||
'requested': 1,
|
'requested': 1,
|
||||||
'delivered': 0,
|
'delivered': 0,
|
||||||
'failed': 0
|
'failed': 0
|
||||||
})
|
})
|
||||||
], ids=['seven_days', 'today']
|
], ids=['seven_days', 'today'])
|
||||||
)
|
|
||||||
def test_get_detailed_service(notify_db, notify_db_session, notify_api, sample_service, today_only, stats):
|
def test_get_detailed_service(notify_db, notify_db_session, notify_api, sample_service, today_only, stats):
|
||||||
with notify_api.test_request_context(), notify_api.test_client() as client:
|
with notify_api.test_request_context(), notify_api.test_client() as client:
|
||||||
with freeze_time('2000-01-01T12:00:00'):
|
with freeze_time('2000-01-01T12:00:00'):
|
||||||
@@ -1177,31 +1175,8 @@ def test_get_services_with_detailed_flag(notify_api, notify_db, notify_db_sessio
|
|||||||
|
|
||||||
|
|
||||||
def test_get_detailed_services_groups_by_service(notify_db, notify_db_session):
|
def test_get_detailed_services_groups_by_service(notify_db, notify_db_session):
|
||||||
service_1 = create_sample_service(notify_db, notify_db_session, service_name="1", email_from='1')
|
from app.service.rest import get_detailed_services
|
||||||
service_2 = create_sample_service(notify_db, notify_db_session, service_name="2", email_from='2')
|
|
||||||
|
|
||||||
create_sample_notification(notify_db, notify_db_session, service=service_1, status='created')
|
|
||||||
create_sample_notification(notify_db, notify_db_session, service=service_2, status='created')
|
|
||||||
create_sample_notification(notify_db, notify_db_session, service=service_1, status='delivered')
|
|
||||||
create_sample_notification(notify_db, notify_db_session, service=service_1, status='created')
|
|
||||||
|
|
||||||
data = get_detailed_services()
|
|
||||||
data = sorted(data, key=lambda x: x['id'])
|
|
||||||
|
|
||||||
assert len(data) == 2
|
|
||||||
assert data[0]['id'] == str(service_1.id)
|
|
||||||
assert data[0]['statistics'] == {
|
|
||||||
'email': {'delivered': 0, 'failed': 0, 'requested': 0},
|
|
||||||
'sms': {'delivered': 0, 'failed': 0, 'requested': 1}
|
|
||||||
}
|
|
||||||
assert data[1]['id'] == str(service_2.id)
|
|
||||||
assert data[1]['statistics'] == {
|
|
||||||
'email': {'delivered': 0, 'failed': 0, 'requested': 0},
|
|
||||||
'sms': {'delivered': 1, 'failed': 0, 'requested': 2}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_detailed_services_groups_by_service(notify_db, notify_db_session):
|
|
||||||
service_1 = create_sample_service(notify_db, notify_db_session, service_name="1", email_from='1')
|
service_1 = create_sample_service(notify_db, notify_db_session, service_name="1", email_from='1')
|
||||||
service_2 = create_sample_service(notify_db, notify_db_session, service_name="2", email_from='2')
|
service_2 = create_sample_service(notify_db, notify_db_session, service_name="2", email_from='2')
|
||||||
|
|
||||||
@@ -1226,8 +1201,33 @@ def test_get_detailed_services_groups_by_service(notify_db, notify_db_session):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_detailed_services_includes_services_with_no_notifications(notify_db, notify_db_session):
|
||||||
|
from app.service.rest import get_detailed_services
|
||||||
|
|
||||||
|
service_1 = create_sample_service(notify_db, notify_db_session, service_name="1", email_from='1')
|
||||||
|
service_2 = create_sample_service(notify_db, notify_db_session, service_name="2", email_from='2')
|
||||||
|
|
||||||
|
create_sample_notification(notify_db, notify_db_session, service=service_1)
|
||||||
|
|
||||||
|
data = get_detailed_services()
|
||||||
|
data = sorted(data, key=lambda x: x['name'])
|
||||||
|
|
||||||
|
assert len(data) == 2
|
||||||
|
assert data[0]['id'] == str(service_1.id)
|
||||||
|
assert data[0]['statistics'] == {
|
||||||
|
'email': {'delivered': 0, 'failed': 0, 'requested': 0},
|
||||||
|
'sms': {'delivered': 0, 'failed': 0, 'requested': 1}
|
||||||
|
}
|
||||||
|
assert data[1]['id'] == str(service_2.id)
|
||||||
|
assert data[1]['statistics'] == {
|
||||||
|
'email': {'delivered': 0, 'failed': 0, 'requested': 0},
|
||||||
|
'sms': {'delivered': 0, 'failed': 0, 'requested': 0}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_get_detailed_services_only_includes_todays_notifications(notify_db, notify_db_session):
|
def test_get_detailed_services_only_includes_todays_notifications(notify_db, notify_db_session):
|
||||||
|
from app.service.rest import get_detailed_services
|
||||||
|
|
||||||
create_sample_notification(notify_db, notify_db_session, created_at=datetime(2015, 10, 9, 23, 59))
|
create_sample_notification(notify_db, notify_db_session, created_at=datetime(2015, 10, 9, 23, 59))
|
||||||
create_sample_notification(notify_db, notify_db_session, created_at=datetime(2015, 10, 10, 0, 0))
|
create_sample_notification(notify_db, notify_db_session, created_at=datetime(2015, 10, 10, 0, 0))
|
||||||
create_sample_notification(notify_db, notify_db_session, created_at=datetime(2015, 10, 10, 12, 0))
|
create_sample_notification(notify_db, notify_db_session, created_at=datetime(2015, 10, 10, 12, 0))
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from freezegun import freeze_time
|
|||||||
from app.service.statistics import (
|
from app.service.statistics import (
|
||||||
format_statistics,
|
format_statistics,
|
||||||
_weeks_for_range,
|
_weeks_for_range,
|
||||||
_create_zeroed_stats_dicts,
|
create_zeroed_stats_dicts,
|
||||||
format_weekly_notification_stats
|
format_weekly_notification_stats
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ def test_weeks_for_range(start, end, dates):
|
|||||||
|
|
||||||
|
|
||||||
def test_create_zeroed_stats_dicts():
|
def test_create_zeroed_stats_dicts():
|
||||||
assert _create_zeroed_stats_dicts() == {
|
assert create_zeroed_stats_dicts() == {
|
||||||
'sms': {'requested': 0, 'delivered': 0, 'failed': 0},
|
'sms': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||||
'email': {'requested': 0, 'delivered': 0, 'failed': 0},
|
'email': {'requested': 0, 'delivered': 0, 'failed': 0},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user