diff --git a/app/dao/services_dao.py b/app/dao/services_dao.py index d21e8bd49..39fb66d02 100644 --- a/app/dao/services_dao.py +++ b/app/dao/services_dao.py @@ -1,5 +1,5 @@ import uuid -from datetime import date, datetime +from datetime import date, datetime, timedelta from sqlalchemy import asc, func from sqlalchemy.orm import joinedload @@ -324,14 +324,19 @@ def dao_fetch_todays_stats_for_all_services(include_from_test_key=True): @statsd(namespace='dao') def fetch_stats_by_date_range_for_all_services(start_date, end_date, include_from_test_key=True): + if not isinstance(end_date, datetime): + end_date = datetime.combine(end_date, datetime.min.time()) + + end_date += timedelta(hours=23, minutes=59, seconds=59) + query = db.session.query( NotificationHistory.notification_type, NotificationHistory.status, NotificationHistory.service_id, func.count(NotificationHistory.id).label('count') ).filter( - func.date(NotificationHistory.created_at) >= start_date, - func.date(NotificationHistory.created_at) <= end_date + NotificationHistory.created_at >= start_date, + NotificationHistory.created_at <= end_date ).group_by( NotificationHistory.notification_type, NotificationHistory.status, diff --git a/app/service/rest.py b/app/service/rest.py index 06ad37ed8..409c27def 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -1,5 +1,5 @@ import itertools -from datetime import datetime +from datetime import datetime, timedelta from flask import ( jsonify, diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index 2c9b14f20..75424b137 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -1393,19 +1393,25 @@ def test_get_detailed_services_only_includes_todays_notifications(notify_db, not } -@pytest.mark.xfail -def test_get_detailed_services_for_date_range(notify_db, notify_db_session): +@pytest.mark.parametrize( + 'set_time', + ['2017-03-28T12:00:00', '2017-01-28T12:00:00', '2017-01-02T12:00:00', '2017-10-31T12:00:00'] +) +def test_get_detailed_services_for_date_range(notify_db, notify_db_session, set_time): from app.service.rest import get_detailed_services - create_sample_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=3)) - create_sample_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=2)) - create_sample_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=1)) - create_sample_notification(notify_db, notify_db_session, created_at=datetime.now()) - start_date = (datetime.utcnow() - timedelta(days=2)).date() - end_date = (datetime.utcnow() - timedelta(days=1)).date() + with freeze_time(set_time): + create_sample_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=3)) + create_sample_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=2)) + create_sample_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=1)) + create_sample_notification(notify_db, notify_db_session, created_at=datetime.now()) + + start_date = (datetime.utcnow() - timedelta(days=2)).date() + end_date = (datetime.utcnow() - timedelta(days=1)).date() data = get_detailed_services(only_active=False, include_from_test_key=True, start_date=start_date, end_date=end_date) + assert len(data) == 1 assert data[0]['statistics'] == { 'email': {'delivered': 0, 'failed': 0, 'requested': 0},