From 6d5f542a88e3562fa409c41044309bbbc14729e8 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Mon, 8 Jul 2019 12:00:40 +0100 Subject: [PATCH] Count of orgs and live services for platform admin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes it consistent that an option which contains more options has a hint about how many options it contains. Also adds a formatter to get us ready for 1,000 services 🎉 --- app/__init__.py | 5 +++++ app/main/views/choose_account.py | 10 ++++++++++ app/templates/views/choose-account.html | 3 +++ app/templates/views/signedout.html | 4 ++-- tests/app/main/views/accounts/test_choose_accounts.py | 7 ++++++- tests/app/main/views/test_index.py | 2 +- tests/app/main/views/test_service_settings.py | 2 ++ tests/conftest.py | 10 +++++++++- 8 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 527495702..43c93f90f 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -345,6 +345,10 @@ def format_delta(date): ) +def format_thousands(number): + return "{:,.0f}".format(number) + + def valid_phone_number(phone_number): try: validate_phone_number(phone_number) @@ -688,6 +692,7 @@ def add_template_filters(application): formatted_list, nl2br, format_phone_number_human_readable, + format_thousands, id_safe, ]: application.add_template_filter(fn) diff --git a/app/main/views/choose_account.py b/app/main/views/choose_account.py index febecaeea..3626a66e6 100644 --- a/app/main/views/choose_account.py +++ b/app/main/views/choose_account.py @@ -1,7 +1,9 @@ from flask import redirect, render_template, session, url_for from flask_login import current_user +from app import status_api_client from app.main import main +from app.models.organisation import Organisations from app.utils import PermanentRedirect, user_is_logged_in @@ -18,9 +20,17 @@ def services_or_dashboard(): @main.route("/accounts") @user_is_logged_in def choose_account(): + org_count, live_service_count = None, None + if current_user.platform_admin: + org_count, live_service_count = ( + len(Organisations()), + status_api_client.get_count_of_live_services_and_organisations()['services'], + ) return render_template( 'views/choose-account.html', can_add_service=current_user.is_gov_user, + org_count=org_count, + live_service_count=live_service_count, ) diff --git a/app/templates/views/choose-account.html b/app/templates/views/choose-account.html index 9457f520e..62924ed19 100644 --- a/app/templates/views/choose-account.html +++ b/app/templates/views/choose-account.html @@ -69,6 +69,9 @@ diff --git a/app/templates/views/signedout.html b/app/templates/views/signedout.html index 14b5d545e..a3de3624d 100644 --- a/app/templates/views/signedout.html +++ b/app/templates/views/signedout.html @@ -120,12 +120,12 @@

Services

-
{{ counts.services }}
+
{{ counts.services|format_thousands }}
services

Organisations

-
{{ counts.organisations }}
+
{{ counts.organisations|format_thousands }}
organisations
diff --git a/tests/app/main/views/accounts/test_choose_accounts.py b/tests/app/main/views/accounts/test_choose_accounts.py index 4ecd2d559..bc3c3b69b 100644 --- a/tests/app/main/views/accounts/test_choose_accounts.py +++ b/tests/app/main/views/accounts/test_choose_accounts.py @@ -157,16 +157,21 @@ def test_choose_account_should_show_choose_accounts_page_if_no_services( def test_choose_account_should_should_organisations_link_for_platform_admin( client_request, platform_admin_user, + mock_get_organisations, mock_get_orgs_and_services, mock_get_organisation_services, + mock_get_service_and_organisation_counts, ): client_request.login(platform_admin_user) page = client_request.get('main.choose_account') - first_link = page.select_one('.browse-list-item a') + first_item = page.select_one('.browse-list-item') + first_link = first_item.select_one('a') + first_hint = first_item.select_one('.browse-list-hint') assert first_link.text == 'All organisations' assert first_link['href'] == url_for('main.organisations') + assert normalize_spaces(first_hint.text) == '3 organisations, 9,999 live services' def test_choose_account_should_show_back_to_service_link( diff --git a/tests/app/main/views/test_index.py b/tests/app/main/views/test_index.py index e668f7068..b49204057 100644 --- a/tests/app/main/views/test_index.py +++ b/tests/app/main/views/test_index.py @@ -34,7 +34,7 @@ def test_non_logged_in_user_can_see_homepage( assert normalize_spaces(page.select_one('#whos-using-notify').text) == ( 'Who’s using GOV.UK Notify ' 'Services ' - '9999 services ' + '9,999 services ' 'Organisations ' '111 organisations ' 'See the list of services and organisations.' diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index 917e4d447..87d56542a 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -3647,6 +3647,8 @@ def test_service_switch_can_upload_document_lets_contact_details_be_added_and_sh def test_archive_service_after_confirm( client_request, mocker, + mock_get_organisations, + mock_get_service_and_organisation_counts, mock_get_organisations_and_services_for_user, user, fake_uuid, diff --git a/tests/conftest.py b/tests/conftest.py index 39d56b010..15a92a572 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3121,7 +3121,15 @@ def mock_get_organisations(mocker): organisation_json('7aa5d4e9-4385-4488-a489-07812ba13385', 'Org 3'), ] - return mocker.patch('app.organisations_client.get_organisations', side_effect=_get_organisations) + mocker.patch( + 'app.models.organisation.Organisations.client', + side_effect=_get_organisations, + ) + + return mocker.patch( + 'app.notify_client.organisations_api_client.organisations_client.get_organisations', + side_effect=_get_organisations, + ) @pytest.fixture(scope='function')