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
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,

View File

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

View File

@@ -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},