From cd47dbd36bcbf36c329f2d1846c00a318112829f Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Tue, 31 Jan 2017 16:12:46 +0000 Subject: [PATCH] make sure we convert strings to dates before we use them fixes 500 on platform admin page --- app/service/rest.py | 7 +++++-- tests/app/service/test_rest.py | 36 +++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/app/service/rest.py b/app/service/rest.py index 416bace74..ccdbe5478 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -66,9 +66,12 @@ def get_services(): detailed = request.args.get('detailed') == 'True' user_id = request.args.get('user_id', None) include_from_test_key = request.args.get('include_from_test_key', 'True') != 'False' + # If start and end date are not set, we are expecting today's stats. - start_date = request.args.get('start_date', datetime.utcnow().date()) - end_date = request.args.get('end_date', datetime.utcnow().date()) + today = str(datetime.utcnow().date()) + + start_date = datetime.strptime(request.args.get('start_date', today), '%Y-%m-%d').date() + end_date = datetime.strptime(request.args.get('end_date', today), '%Y-%m-%d').date() if user_id: services = dao_fetch_all_services_by_user(user_id, only_active) diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index 5835d5159..b4d9b365b 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -1,6 +1,7 @@ -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date import json import uuid +from unittest.mock import ANY import pytest from flask import url_for @@ -1269,6 +1270,39 @@ def test_get_services_with_detailed_flag_excluding_from_test_key(notify_api, not } +def test_get_services_with_detailed_flag_accepts_date_range(client, mocker): + mock_get_detailed_services = mocker.patch('app.service.rest.get_detailed_services', return_value={}) + resp = client.get( + url_for('service.get_services', detailed=True, start_date='2001-01-01', end_date='2002-02-02'), + headers=[create_authorization_header()] + ) + + mock_get_detailed_services.assert_called_once_with( + start_date=date(2001, 1, 1), + end_date=date(2002, 2, 2), + only_active=ANY, + include_from_test_key=ANY + ) + assert resp.status_code == 200 + + +@freeze_time('2002-02-02') +def test_get_services_with_detailed_flag_defaults_to_today(client, mocker): + mock_get_detailed_services = mocker.patch('app.service.rest.get_detailed_services', return_value={}) + resp = client.get( + url_for('service.get_services', detailed=True), + headers=[create_authorization_header()] + ) + + mock_get_detailed_services.assert_called_once_with( + start_date=date(2002, 2, 2), + end_date=date(2002, 2, 2), + only_active=ANY, + include_from_test_key=ANY + ) + assert resp.status_code == 200 + + def test_get_detailed_services_groups_by_service(notify_db, notify_db_session): from app.service.rest import get_detailed_services