From a7c8e88ecb0f088be49a9082c4e0b93b2ad32e80 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Thu, 28 Jul 2016 18:09:17 +0100 Subject: [PATCH] add tests and remove old aggregate code --- app/main/views/dashboard.py | 17 +++++---- tests/app/main/views/test_dashboard.py | 50 +++++++++++++++++++++++--- tests/conftest.py | 9 ----- 3 files changed, 53 insertions(+), 23 deletions(-) diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index c4958ae49..29c2232be 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -1,4 +1,4 @@ -from datetime import datetime, date, timedelta +from datetime import datetime, timedelta from collections import namedtuple from itertools import groupby @@ -93,7 +93,7 @@ def weekly(service_id): stats = statistics_api_client.get_weekly_notification_stats(service_id)['data'] return render_template( 'views/weekly.html', - days=format_stats_to_list(stats), + days=format_weekly_stats_to_list(stats), now=datetime.utcnow() ) @@ -191,7 +191,7 @@ def calculate_usage(usage): } -def format_stats_to_list(historical_stats): +def format_weekly_stats_to_list(historical_stats): out = [] for week, weekly_stats in historical_stats.items(): for stats in weekly_stats.values(): @@ -199,12 +199,11 @@ def format_stats_to_list(historical_stats): week_start = dateutil.parser.parse(week) week_end = week_start + timedelta(days=6) - item = { - 'week_start': week_start.isoformat(), - 'week_end': week_end.isoformat(), + weekly_stats.update({ + 'week_start': week, + 'week_end': week_end.date().isoformat(), 'week_end_datetime': week_end, - } - item.update(weekly_stats) - out.append(item) + }) + out.append(weekly_stats) return sorted(out, key=lambda x: x['week_start'], reverse=True) diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index dc5a35d80..b1cc51ccb 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -1,3 +1,4 @@ +from datetime import datetime import copy from flask import url_for @@ -5,7 +6,7 @@ import pytest from bs4 import BeautifulSoup from freezegun import freeze_time -from app.main.views.dashboard import get_dashboard_totals +from app.main.views.dashboard import get_dashboard_totals, format_weekly_stats_to_list from tests import validate_route_permission from tests.conftest import SERVICE_ONE_ID @@ -65,7 +66,6 @@ def test_get_started( api_user_active, mock_get_service, mock_get_service_templates_when_no_templates_exist, - mock_get_aggregate_service_statistics, mock_get_user, mock_get_user_by_email, mock_login, @@ -94,7 +94,6 @@ def test_get_started_is_hidden_once_templates_exist( api_user_active, mock_get_service, mock_get_service_templates, - mock_get_aggregate_service_statistics, mock_get_user, mock_get_user_by_email, mock_login, @@ -119,7 +118,6 @@ def test_should_show_recent_templates_on_dashboard(app_, api_user_active, mock_get_service, mock_get_service_templates, - mock_get_aggregate_service_statistics, mock_get_user, mock_get_user_by_email, mock_login, @@ -204,7 +202,6 @@ def test_should_show_recent_jobs_on_dashboard( api_user_active, mock_get_service, mock_get_service_templates, - mock_get_aggregate_service_statistics, mock_get_user, mock_get_user_by_email, mock_login, @@ -482,3 +479,46 @@ def test_get_dashboard_totals_adds_warning(failures, expected): } } assert get_dashboard_totals(stats)['sms']['show_warning'] == expected + + +def test_format_weekly_stats_to_list_empty_case(): + assert format_weekly_stats_to_list({}) == [] + + +def test_format_weekly_stats_to_list_sorts_by_week(): + stats = { + '2016-07-04': {}, + '2016-07-11': {}, + '2016-07-18': {}, + '2016-07-25': {} + } + resp = format_weekly_stats_to_list(stats) + assert resp[0]['week_start'] == '2016-07-25' + assert resp[1]['week_start'] == '2016-07-18' + assert resp[2]['week_start'] == '2016-07-11' + assert resp[3]['week_start'] == '2016-07-04' + + +def test_format_weekly_stats_to_list_includes_datetime_for_comparison(): + stats = { + '2016-07-25': {} + } + resp = format_weekly_stats_to_list(stats) + assert resp == [{ + 'week_start': '2016-07-25', + 'week_end': '2016-07-31', + 'week_end_datetime': datetime(2016, 7, 31, 0, 0, 0) + }] + + +def test_format_weekly_stats_to_list_has_stats_with_failure_rate(): + stats = { + '2016-07-25': {'sms': _stats(3, 1, 2)} + } + resp = format_weekly_stats_to_list(stats) + assert resp[0]['sms']['failure_rate'] == '66.7' + assert resp[0]['sms']['requested'] == 3 + + +def _stats(requested, delivered, failed): + return {'requested': requested, 'delivered': delivered, 'failed': failed} diff --git a/tests/conftest.py b/tests/conftest.py index 2ace067a9..cbdfc37d0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -220,15 +220,6 @@ def mock_get_service_statistics_for_day(mocker): 'app.statistics_api_client.get_statistics_for_service_for_day', side_effect=_stats) -@pytest.fixture(scope='function') -def mock_get_aggregate_service_statistics(mocker): - def _create(service_id, limit_days=None): - return {'data': [{}]} - - return mocker.patch( - 'app.statistics_api_client.get_7_day_aggregate_for_service', side_effect=_create) - - @pytest.fixture(scope='function') def mock_get_all_service_statistics(mocker): def _create(day):