mirror of
https://github.com/GSA/notifications-api.git
synced 2026-05-04 16:20:06 -04:00
add today_only flag to GET /service/:id
if both detailed=True and today_only=True are passed in, the stats returned will only be for today. if detailed is false or not specified, today_only has no effect
This commit is contained in:
@@ -22,7 +22,8 @@ from app.dao.services_dao import (
|
|||||||
dao_fetch_all_services_by_user,
|
dao_fetch_all_services_by_user,
|
||||||
dao_add_user_to_service,
|
dao_add_user_to_service,
|
||||||
dao_remove_user_from_service,
|
dao_remove_user_from_service,
|
||||||
dao_fetch_stats_for_service
|
dao_fetch_stats_for_service,
|
||||||
|
dao_fetch_todays_stats_for_service
|
||||||
)
|
)
|
||||||
from app.dao import notifications_dao
|
from app.dao import notifications_dao
|
||||||
from app.dao.provider_statistics_dao import get_fragment_count
|
from app.dao.provider_statistics_dao import get_fragment_count
|
||||||
@@ -60,8 +61,8 @@ def get_services():
|
|||||||
|
|
||||||
@service.route('/<uuid:service_id>', methods=['GET'])
|
@service.route('/<uuid:service_id>', methods=['GET'])
|
||||||
def get_service_by_id(service_id):
|
def get_service_by_id(service_id):
|
||||||
if 'detailed' in request.args:
|
if request.args.get('detailed') == 'True':
|
||||||
return get_detailed_service(service_id)
|
return get_detailed_service(service_id, today_only=request.args.get('today_only') == 'True')
|
||||||
else:
|
else:
|
||||||
fetched = dao_fetch_service_by_id(service_id)
|
fetched = dao_fetch_service_by_id(service_id)
|
||||||
|
|
||||||
@@ -235,9 +236,10 @@ def get_all_notifications_for_service(service_id):
|
|||||||
), 200
|
), 200
|
||||||
|
|
||||||
|
|
||||||
def get_detailed_service(service_id):
|
def get_detailed_service(service_id, today_only=False):
|
||||||
service = dao_fetch_service_by_id(service_id)
|
service = dao_fetch_service_by_id(service_id)
|
||||||
statistics = dao_fetch_stats_for_service(service_id)
|
stats_fn = dao_fetch_todays_stats_for_service if today_only else dao_fetch_stats_for_service
|
||||||
|
statistics = stats_fn(service_id)
|
||||||
service.statistics = format_statistics(statistics)
|
service.statistics = format_statistics(statistics)
|
||||||
data = detailed_service_schema.dump(service).data
|
data = detailed_service_schema.dump(service).data
|
||||||
return jsonify(data=data)
|
return jsonify(data=data)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import uuid
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
|
from freezegun import freeze_time
|
||||||
|
|
||||||
from app.dao.users_dao import save_model_user
|
from app.dao.users_dao import save_model_user
|
||||||
from app.dao.services_dao import dao_remove_user_from_service
|
from app.dao.services_dao import dao_remove_user_from_service
|
||||||
@@ -1094,23 +1095,36 @@ def test_set_sms_sender_for_service_rejects_invalid_characters(notify_api, sampl
|
|||||||
assert result['message'] == {'sms_sender': ['Only alphanumeric characters allowed']}
|
assert result['message'] == {'sms_sender': ['Only alphanumeric characters allowed']}
|
||||||
|
|
||||||
|
|
||||||
def test_get_detailed_service(notify_api, sample_service, sample_notification):
|
@pytest.mark.parametrize('today_only,stats', [
|
||||||
|
('False', {
|
||||||
|
'requested': 2,
|
||||||
|
'delivered': 1,
|
||||||
|
'failed': 0
|
||||||
|
}),
|
||||||
|
('True', {
|
||||||
|
'requested': 1,
|
||||||
|
'delivered': 0,
|
||||||
|
'failed': 0
|
||||||
|
})
|
||||||
|
], ids=['seven_days', 'today']
|
||||||
|
)
|
||||||
|
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:
|
||||||
resp = client.get(
|
with freeze_time('2000-01-01T12:00:00'):
|
||||||
'/service/{}?detailed=False'.format(sample_service.id),
|
create_sample_notification(notify_db, notify_db_session, status='delivered')
|
||||||
headers=[create_authorization_header()]
|
with freeze_time('2000-01-02T12:00:00'):
|
||||||
)
|
create_sample_notification(notify_db, notify_db_session, status='created')
|
||||||
|
resp = client.get(
|
||||||
|
'/service/{}?detailed=True&today_only={}'.format(sample_service.id, today_only),
|
||||||
|
headers=[create_authorization_header()]
|
||||||
|
)
|
||||||
|
|
||||||
assert resp.status_code == 200
|
assert resp.status_code == 200
|
||||||
service = json.loads(resp.get_data(as_text=True))['data']
|
service = json.loads(resp.get_data(as_text=True))['data']
|
||||||
assert service['id'] == str(sample_service.id)
|
assert service['id'] == str(sample_service.id)
|
||||||
assert 'statistics' in service.keys()
|
assert 'statistics' in service.keys()
|
||||||
assert set(service['statistics'].keys()) == set(['sms', 'email'])
|
assert set(service['statistics'].keys()) == set(['sms', 'email'])
|
||||||
assert service['statistics']['sms'] == {
|
assert service['statistics']['sms'] == stats
|
||||||
'requested': 1,
|
|
||||||
'delivered': 0,
|
|
||||||
'failed': 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# email_counts and sms_counts are 3-tuple of requested, delivered, failed
|
# email_counts and sms_counts are 3-tuple of requested, delivered, failed
|
||||||
|
|||||||
Reference in New Issue
Block a user