diff --git a/app/main/__init__.py b/app/main/__init__.py index f4b532063..eb14dda69 100644 --- a/app/main/__init__.py +++ b/app/main/__init__.py @@ -12,7 +12,8 @@ from app.main.views import ( send, add_service, code_not_received, - jobs, dashboard, + jobs, + dashboard, templates, service_settings, forgot_password, @@ -26,5 +27,6 @@ from app.main.views import ( all_services, tour, feedback, - providers + providers, + platform_admin ) diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py new file mode 100644 index 000000000..ef306294b --- /dev/null +++ b/app/main/views/platform_admin.py @@ -0,0 +1,14 @@ +from flask import render_template +from flask_login import login_required + +from app.main import main +from app.utils import user_has_permissions + + +@main.route("/platform-admin") +@login_required +@user_has_permissions(admin_override=True) +def platform_admin(): + return render_template( + 'views/platform-admin.html' + ) diff --git a/app/templates/admin_template.html b/app/templates/admin_template.html index 2e68eb492..c11dd9d72 100644 --- a/app/templates/admin_template.html +++ b/app/templates/admin_template.html @@ -46,6 +46,11 @@
  • Switch service
  • + {% if current_user.has_permissions(admin_override=True) %} +
  • + Platform admin +
  • + {% endif %}
  • Sign out
  • diff --git a/app/templates/main_nav.html b/app/templates/main_nav.html index db5edce4c..aaa761039 100644 --- a/app/templates/main_nav.html +++ b/app/templates/main_nav.html @@ -16,11 +16,5 @@ {% if current_user.has_permissions(['manage_api_keys']) %}
  • API keys
  • {% endif %} - {% if current_user.has_permissions(admin_override=True) %} -
  • List all services
  • - {% endif %} - {% if current_user.has_permissions(admin_override=True) %} -
  • View providers
  • - {% endif %} diff --git a/app/templates/views/choose-service.html b/app/templates/views/choose-service.html index d99e888e1..5087d2a3c 100644 --- a/app/templates/views/choose-service.html +++ b/app/templates/views/choose-service.html @@ -10,14 +10,6 @@

    Choose service

    - {% if current_user.has_permissions(admin_override=True) %} - {{ browse_list([ - { - 'title': 'List all services', - 'link': url_for('.show_all_services') - } - ]) }} - {% endif %} {{ browse_list(services) }} {{ browse_list([ diff --git a/app/templates/views/platform-admin.html b/app/templates/views/platform-admin.html new file mode 100644 index 000000000..aab09d9f3 --- /dev/null +++ b/app/templates/views/platform-admin.html @@ -0,0 +1,25 @@ +{% extends "withoutnav_template.html" %} +{% from "components/browse-list.html" import browse_list %} + +{% block page_title %} + Platform admin – GOV.UK Notify +{% endblock %} + +{% block maincolumn_content %} + +

    + Platform admin +

    + + {{ browse_list([ + { + 'title': 'List all services', + 'link': url_for('.show_all_services') + }, + { + 'title': 'View providers', + 'link': url_for('.view_providers') + }, + ]) }} + +{% endblock %} diff --git a/tests/app/main/views/test_choose_services.py b/tests/app/main/views/test_choose_services.py index f7b77b3dc..d4399490a 100644 --- a/tests/app/main/views/test_choose_services.py +++ b/tests/app/main/views/test_choose_services.py @@ -83,23 +83,3 @@ def test_should_redirect_if_not_logged_in(app_): response = client.get(url_for('main.show_all_services_or_dashboard')) assert response.status_code == 302 assert url_for('main.index', _external=True) in response.location - - -def test_should_show_all_services_for_platform_admin_user(app_, - platform_admin_user, - mock_get_services, - mocker): - with app_.test_request_context(): - with app_.test_client() as client: - mocker.patch('app.user_api_client.get_user', return_value=platform_admin_user) - client.login(platform_admin_user) - response = client.get(url_for('main.choose_service')) - - assert response.status_code == 200 - resp_data = response.get_data(as_text=True) - assert 'Choose service' in resp_data - services = mock_get_services.side_effect() - assert mock_get_services.called - assert services['data'][0]['name'] in resp_data - assert services['data'][1]['name'] in resp_data - assert 'List all services' in resp_data diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index 2454b63d3..114ae5437 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -266,8 +266,6 @@ def test_menu_all_services_for_platform_admin_user(mocker, service_one, []) page = resp.get_data(as_text=True) - assert url_for('main.show_all_services') in page - assert url_for('main.view_providers') in page assert url_for('main.choose_template', service_id=service_one['id'], template_type='sms') in page assert url_for('main.choose_template', service_id=service_one['id'], template_type='email') in page assert url_for('main.manage_users', service_id=service_one['id']) in page diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py new file mode 100644 index 000000000..e5eb8e7b5 --- /dev/null +++ b/tests/app/main/views/test_platform_admin.py @@ -0,0 +1,36 @@ +from flask import url_for + +from tests.conftest import mock_get_user + + +def test_should_redirect_if_not_logged_in(app_): + with app_.test_request_context(): + with app_.test_client() as client: + response = client.get(url_for('main.platform_admin')) + assert response.status_code == 302 + assert url_for('main.index', _external=True) in response.location + + +def test_should_403_if_not_platform_admin(app_, active_user_with_permissions, mocker): + with app_.test_request_context(): + with app_.test_client() as client: + mock_get_user(mocker, user=active_user_with_permissions) + client.login(active_user_with_permissions) + + response = client.get(url_for('main.platform_admin')) + + assert response.status_code == 403 + + +def test_should_render_platform_admin_page(app_, platform_admin_user, mocker): + with app_.test_request_context(): + with app_.test_client() as client: + 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 + resp_data = response.get_data(as_text=True) + assert 'Platform admin' in resp_data + assert 'List all services' in resp_data + assert 'View providers' in resp_data