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