From 2a76fd9ee88164fd52b0298eaca1a8f7c33c3a7d Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Thu, 19 Mar 2020 10:49:40 +0000 Subject: [PATCH] Reduce usage of the platform admin index page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This page is slow to load which means: - it’s annoying for us - it’s potentially causing load on the database This commit does two things to reduce the amount we’re unnecessarily looking at this page: 1. Avoid redirecting to it when signing in as a platform admin user 2. Don’t go directly to it when clicking ‘platform admin’ at the top, but instead show a holding page (there’s a fair chance you’ve clicked that link in order to go and manage some email branding or find a user, not wait for stats to load) --- app/main/views/platform_admin.py | 8 ++++++++ app/main/views/two_factor.py | 2 -- app/navigation.py | 4 ++++ app/templates/admin_template.html | 2 +- .../views/platform-admin/splash-page.html | 17 +++++++++++++++++ tests/app/main/views/test_platform_admin.py | 15 +++++++++++++++ tests/app/main/views/test_two_factor.py | 6 ++++++ 7 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 app/templates/views/platform-admin/splash-page.html diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index 25b727630..50917c819 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -42,6 +42,14 @@ ZERO_FAILURE_THRESHOLD = 0 @main.route("/platform-admin") @user_is_platform_admin +def platform_admin_splash_page(): + return render_template( + 'views/platform-admin/splash-page.html', + ) + + +@main.route("/platform-admin/summary") +@user_is_platform_admin def platform_admin(): form = DateFilterForm(request.args, meta={'csrf': False}) api_args = {} diff --git a/app/main/views/two_factor.py b/app/main/views/two_factor.py index 0cd8b8444..00e2a3b53 100644 --- a/app/main/views/two_factor.py +++ b/app/main/views/two_factor.py @@ -111,7 +111,5 @@ def redirect_when_logged_in(platform_admin): next_url = request.args.get('next') if next_url and _is_safe_redirect_url(next_url): return redirect(next_url) - if platform_admin: - return redirect(url_for('main.platform_admin')) return redirect(url_for('main.show_accounts_or_dashboard')) diff --git a/app/navigation.py b/app/navigation.py index 4969af085..2342429a2 100644 --- a/app/navigation.py +++ b/app/navigation.py @@ -101,6 +101,7 @@ class HeaderNavigation(Navigation): 'platform_admin_list_complaints', 'platform_admin_reports', 'platform_admin_returned_letters', + 'platform_admin_splash_page', 'suspend_service', 'trial_services', 'update_email_branding', @@ -580,6 +581,7 @@ class MainNavigation(Navigation): 'platform_admin_list_complaints', 'platform_admin_reports', 'platform_admin_returned_letters', + 'platform_admin_splash_page', 'pricing', 'privacy', 'public_agreement', @@ -828,6 +830,7 @@ class CaseworkNavigation(Navigation): 'platform_admin_reports', 'platform_admin_returned_letters', 'platform_admin', + 'platform_admin_splash_page', 'pricing', 'privacy', 'public_agreement', @@ -1117,6 +1120,7 @@ class OrgNavigation(Navigation): 'platform_admin_list_complaints', 'platform_admin_reports', 'platform_admin_returned_letters', + 'platform_admin_splash_page', 'pricing', 'privacy', 'public_agreement', diff --git a/app/templates/admin_template.html b/app/templates/admin_template.html index 91eec3123..96e3d0cf4 100644 --- a/app/templates/admin_template.html +++ b/app/templates/admin_template.html @@ -55,7 +55,7 @@ "active": header_navigation.is_selected('user-profile') }, { - "href": url_for('main.platform_admin'), + "href": url_for('main.platform_admin_splash_page'), "text": "Platform admin", "active": header_navigation.is_selected('platform-admin') }, diff --git a/app/templates/views/platform-admin/splash-page.html b/app/templates/views/platform-admin/splash-page.html new file mode 100644 index 000000000..d048ef002 --- /dev/null +++ b/app/templates/views/platform-admin/splash-page.html @@ -0,0 +1,17 @@ +{% extends "views/platform-admin/_base_template.html" %} + +{% block per_page_title %} + Summary +{% endblock %} + +{% block platform_admin_content %} + +

+ Summary +

+ +

+ Load summary +

+ +{% endblock %} diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py index 948f2a241..a157e3e46 100644 --- a/tests/app/main/views/test_platform_admin.py +++ b/tests/app/main/views/test_platform_admin.py @@ -37,6 +37,7 @@ def test_should_redirect_if_not_logged_in( @pytest.mark.parametrize('endpoint', [ 'main.platform_admin', + 'main.platform_admin_splash_page', 'main.live_services', 'main.trial_services', ]) @@ -589,6 +590,20 @@ def test_get_tech_failure_status_box_data_removes_percentage_data(): assert 'percentage' not in tech_failure_data +def test_platform_admin_splash_doesnt_talk_to_api( + client_request, + platform_admin_user, +): + + client_request.login(platform_admin_user) + + page = client_request.get('main.platform_admin_splash_page') + + assert page.select_one('main .govuk-body a')['href'] == url_for( + 'main.platform_admin', + ) + + def test_platform_admin_with_start_and_end_dates_provided(mocker, platform_admin_client): start_date = '2018-01-01' end_date = '2018-06-01' diff --git a/tests/app/main/views/test_two_factor.py b/tests/app/main/views/test_two_factor.py index f8333c5c8..6b0e4d9d3 100644 --- a/tests/app/main/views/test_two_factor.py +++ b/tests/app/main/views/test_two_factor.py @@ -1,3 +1,4 @@ +import pytest from bs4 import BeautifulSoup from flask import url_for from freezegun import freeze_time @@ -107,6 +108,9 @@ def test_should_login_user_and_not_redirect_to_external_url( assert response.location == url_for('main.show_accounts_or_dashboard', _external=True) +@pytest.mark.parametrize('platform_admin', ( + True, False, +)) @freeze_time('2020-01-27T12:00:00') def test_should_login_user_and_redirect_to_show_accounts( client, @@ -115,12 +119,14 @@ def test_should_login_user_and_redirect_to_show_accounts( mock_get_user_by_email, mock_check_verify_code, mock_create_event, + platform_admin, ): with client.session_transaction() as session: session['user_details'] = { 'id': api_user_active['id'], 'email': api_user_active['email_address']} api_user_active['email_access_validated_at'] = '2020-01-23T11:35:21.726132Z' + api_user_active['platform_admin'] = platform_admin response = client.post(url_for('main.two_factor'), data={'sms_code': '12345'})