Fix get_detailed_services BST

This commit is contained in:
Ken Tsang
2017-03-28 13:30:04 +01:00
parent 79025e54b0
commit af78efd137
3 changed files with 23 additions and 12 deletions

View File

@@ -1,5 +1,5 @@
import uuid import uuid
from datetime import date, datetime from datetime import date, datetime, timedelta
from sqlalchemy import asc, func from sqlalchemy import asc, func
from sqlalchemy.orm import joinedload 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') @statsd(namespace='dao')
def fetch_stats_by_date_range_for_all_services(start_date, end_date, include_from_test_key=True): 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( query = db.session.query(
NotificationHistory.notification_type, NotificationHistory.notification_type,
NotificationHistory.status, NotificationHistory.status,
NotificationHistory.service_id, NotificationHistory.service_id,
func.count(NotificationHistory.id).label('count') func.count(NotificationHistory.id).label('count')
).filter( ).filter(
func.date(NotificationHistory.created_at) >= start_date, NotificationHistory.created_at >= start_date,
func.date(NotificationHistory.created_at) <= end_date NotificationHistory.created_at <= end_date
).group_by( ).group_by(
NotificationHistory.notification_type, NotificationHistory.notification_type,
NotificationHistory.status, NotificationHistory.status,

View File

@@ -1,5 +1,5 @@
import itertools import itertools
from datetime import datetime from datetime import datetime, timedelta
from flask import ( from flask import (
jsonify, jsonify,

View File

@@ -1393,19 +1393,25 @@ def test_get_detailed_services_only_includes_todays_notifications(notify_db, not
} }
@pytest.mark.xfail @pytest.mark.parametrize(
def test_get_detailed_services_for_date_range(notify_db, notify_db_session): '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 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() with freeze_time(set_time):
end_date = (datetime.utcnow() - timedelta(days=1)).date() 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, data = get_detailed_services(only_active=False, include_from_test_key=True,
start_date=start_date, end_date=end_date) start_date=start_date, end_date=end_date)
assert len(data) == 1 assert len(data) == 1
assert data[0]['statistics'] == { assert data[0]['statistics'] == {
'email': {'delivered': 0, 'failed': 0, 'requested': 0}, 'email': {'delivered': 0, 'failed': 0, 'requested': 0},