From 1e1dd49312a725ec42647b973c186469a4230e03 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Mon, 31 Jul 2017 11:29:04 +0100 Subject: [PATCH] Fix big numbers on new platform admin page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Turns out the counts were all showing as zero because the generator had already been consumed by the time we were trying to do the stats. Making it a list comprehension means it can’t get exhausted. --- app/main/views/platform_admin.py | 4 +- tests/app/main/views/test_platform_admin.py | 66 ++++++++++++++++++++- 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index d0a4b5c07..3a6ca51ae 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -76,7 +76,7 @@ def sum_service_usage(service): def filter_and_sort_services(services, trial_mode_services=False): - return ( + return [ service for service in sorted( services, key=lambda service: ( @@ -87,7 +87,7 @@ def filter_and_sort_services(services, trial_mode_services=False): reverse=True, ) if service['restricted'] == trial_mode_services - ) + ] def create_global_stats(services): diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py index 6c1872ef2..9dee6cc77 100644 --- a/tests/app/main/views/test_platform_admin.py +++ b/tests/app/main/views/test_platform_admin.py @@ -4,7 +4,7 @@ from flask import url_for import pytest from bs4 import BeautifulSoup -from tests.conftest import mock_get_user +from tests.conftest import mock_get_user, normalize_spaces from tests import service_json from app.main.views.platform_admin import format_stats_by_service, create_global_stats, sum_service_usage @@ -150,6 +150,70 @@ def test_platform_admin_with_date_filter( }) +@pytest.mark.parametrize('endpoint, expected_big_numbers', [ + ( + 'main.platform_admin', ( + '61 emails sent 6 failed – 5.5%', + '121 text messages sent 11 failed – 5.0%', + ), + ), + ( + 'main.live_services', ( + '55 emails sent 5 failed – 5.0%', + '110 text messages sent 10 failed – 5.0%', + ), + ), + ( + 'main.trial_services', ( + '6 emails sent 1 failed – 10.0%', + '11 text messages sent 1 failed – 5.0%', + ), + ), +]) +def test_should_show_total_on_platform_admin_pages( + client, + platform_admin_user, + mocker, + mock_get_detailed_services, + endpoint, + fake_uuid, + expected_big_numbers, +): + services = [ + service_json(fake_uuid, 'My Service 1', [], restricted=False), + service_json(fake_uuid, 'My Service 2', [], restricted=True), + ] + services[0]['statistics'] = create_stats( + emails_requested=100, + emails_delivered=50, + emails_failed=5, + sms_requested=200, + sms_delivered=100, + sms_failed=10, + ) + + services[1]['statistics'] = create_stats( + emails_requested=10, + emails_delivered=5, + emails_failed=1, + sms_requested=20, + sms_delivered=10, + sms_failed=1, + ) + + mock_get_detailed_services.return_value = {'data': services} + + mock_get_user(mocker, user=platform_admin_user) + client.login(platform_admin_user) + response = client.get(url_for(endpoint)) + assert response.status_code == 200 + page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + assert ( + normalize_spaces(page.select('.big-number-with-status')[0].text), + normalize_spaces(page.select('.big-number-with-status')[1].text), + ) == expected_big_numbers + + def test_create_global_stats_sets_failure_rates(fake_uuid): services = [ service_json(fake_uuid, 'a', []),