From 146772f22e8f75ec1e8eb7f0ffeaec400a584135 Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Tue, 25 Apr 2017 12:54:58 +0100 Subject: [PATCH 1/5] Sort platform admin page by requested messages. - puts services that are doing things at the top. --- app/main/views/platform_admin.py | 9 +- tests/app/main/views/test_platform_admin.py | 91 ++++++++++++++++++++- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index 462320c26..bfc8cb94b 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -35,12 +35,19 @@ def platform_admin(): form=form, **get_statistics(sorted( services, - key=lambda service: (service['active'], service['created_at']), + key=lambda service: (service['active'], sum_service_usage(service), service['created_at']), reverse=True )) ) +def sum_service_usage(service): + total = 0 + for notification_type in service['statistics'].keys(): + total += service['statistics'][notification_type]['requested'] + return total + + def get_statistics(services): return { 'global_stats': 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 a27baf0d5..26a1ac532 100644 --- a/tests/app/main/views/test_platform_admin.py +++ b/tests/app/main/views/test_platform_admin.py @@ -7,7 +7,7 @@ from bs4 import BeautifulSoup from tests.conftest import mock_get_user from tests import service_json -from app.main.views.platform_admin import format_stats_by_service, create_global_stats +from app.main.views.platform_admin import format_stats_by_service, create_global_stats, sum_service_usage def test_should_redirect_if_not_logged_in( @@ -347,3 +347,92 @@ def test_should_show_correct_sent_totals_for_platform_admin( assert email_total == 60 assert sms_total == 40 + + +@pytest.mark.parametrize('restricted, table_index, research_mode', [ + (True, 1, False), + (False, 0, False) +]) +def test_should_order_services_by_usage_with_inactive_last( + restricted, + table_index, + research_mode, + client, + platform_admin_user, + mocker, + mock_get_detailed_services, + fake_uuid, +): + services = [ + service_json(fake_uuid, 'My Service 1', [], restricted=restricted, research_mode=research_mode), + service_json(fake_uuid, 'My Service 2', [], restricted=restricted, research_mode=research_mode), + service_json(fake_uuid, 'My Service 3', [], restricted=restricted, research_mode=research_mode, active=False) + ] + services[0]['statistics'] = create_stats( + emails_requested=100, + emails_delivered=25, + emails_failed=25, + sms_requested=100, + sms_delivered=25, + sms_failed=25 + ) + + services[1]['statistics'] = create_stats( + emails_requested=200, + emails_delivered=50, + emails_failed=50, + sms_requested=200, + sms_delivered=50, + sms_failed=50 + ) + + services[2]['statistics'] = create_stats( + emails_requested=200, + emails_delivered=50, + emails_failed=50, + sms_requested=200, + sms_delivered=50, + sms_failed=50 + ) + + 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('main.platform_admin')) + + assert response.status_code == 200 + mock_get_detailed_services.assert_called_once_with({'detailed': True, 'include_from_test_key': True}) + page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + + table_body = page.find_all('table')[table_index].find_all('tbody')[0] + services = [service.tr for service in table_body.find_all('tbody')] + assert len(services) == 3 + assert services[0].td.text.strip() == 'My Service 2' + assert services[1].td.text.strip() == 'My Service 1' + assert services[2].td.text.strip() == 'My Service 3' + + +def test_sum_service_usage_is_sum_of_all_activity(fake_uuid): + service = service_json(fake_uuid, 'My Service 1') + service['statistics'] = create_stats( + emails_requested=100, + emails_delivered=25, + emails_failed=25, + sms_requested=100, + sms_delivered=25, + sms_failed=25 + ) + assert sum_service_usage(service) == 200 + + +def test_sum_service_usage_with_zeros(fake_uuid): + service = service_json(fake_uuid, 'My Service 1') + service['statistics'] = create_stats( + emails_requested=0, + emails_delivered=0, + emails_failed=25, + sms_requested=0, + sms_delivered=0, + sms_failed=0 + ) + assert sum_service_usage(service) == 0 From 1e2e0b4f7455f09d70257c1f4bde817810587417 Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Tue, 25 Apr 2017 15:26:27 +0100 Subject: [PATCH 2/5] Bumped utils version --- requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ed4678d73..1f5f47107 100644 --- a/requirements.txt +++ b/requirements.txt @@ -28,5 +28,6 @@ notifications-python-client>=3.1,<3.2 awscli>=1.11,<1.12 awscli-cwlogs>=1.4,<1.5 -git+https://github.com/alphagov/notifications-utils.git@15.0.4#egg=notifications-utils==15.0.4 +git+https://github.com/alphagov/notifications-utils.git@16.0.1#egg=notifications-utils==16.0.1 + From e7d6fd329320a74630b3ffb68f9c353e399c5725 Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Tue, 25 Apr 2017 15:32:12 +0100 Subject: [PATCH 3/5] updated run_tests to not use venv in the app if VIRTUAL_ENV is set --- scripts/run_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index 01e109020..584ff8e5a 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -24,7 +24,7 @@ function display_result { fi } -if [ -d venv ]; then +if [[ -z "$VIRTUAL_ENV" ]] && [[ -d venv ]]; then source ./venv/bin/activate fi pycodestyle . From 4dee675ca1aa73feb70107afd6eaa3fbed461e47 Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Tue, 25 Apr 2017 15:36:54 +0100 Subject: [PATCH 4/5] Returned requirements to it's correct version --- requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1f5f47107..ed4678d73 100644 --- a/requirements.txt +++ b/requirements.txt @@ -28,6 +28,5 @@ notifications-python-client>=3.1,<3.2 awscli>=1.11,<1.12 awscli-cwlogs>=1.4,<1.5 -git+https://github.com/alphagov/notifications-utils.git@16.0.1#egg=notifications-utils==16.0.1 - +git+https://github.com/alphagov/notifications-utils.git@15.0.4#egg=notifications-utils==15.0.4 From e233c3868d980496b4fbe3d9b7f928084e21160d Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Tue, 25 Apr 2017 17:02:06 +0100 Subject: [PATCH 5/5] Added some whitespace --- scripts/run_tests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index 584ff8e5a..0813f2b2e 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -27,6 +27,7 @@ function display_result { if [[ -z "$VIRTUAL_ENV" ]] && [[ -d venv ]]; then source ./venv/bin/activate fi + pycodestyle . display_result $? 1 "Code style check"