diff --git a/app/templates/views/service-settings.html b/app/templates/views/service-settings.html
index 404ec396f..ae09f5e8e 100644
--- a/app/templates/views/service-settings.html
+++ b/app/templates/views/service-settings.html
@@ -1,5 +1,6 @@
{% extends "withnav_template.html" %}
{% from "components/browse-list.html" import browse_list %}
+{% from "components/table.html" import mapping_table, row, text_field, link_field %}
{% block page_title %}
Settings – GOV.UK Notify
@@ -9,34 +10,43 @@
Settings
- {{ browse_list([
- {
- 'title': 'Change your service name',
- 'link': url_for('.service_name_change', service_id=current_service.id)
- },
- {
- 'title': 'Set email reply to address',
- 'link': url_for('.service_set_reply_to_email', service_id=current_service.id)
- },
- {
- 'title': 'Set text message sender name',
- 'link': url_for('.service_set_sms_sender', service_id=current_service.id)
- },
- {
- 'title': 'Request to go live and turn off trial mode',
- 'link': url_for('.service_request_to_go_live', service_id=current_service.id),
- 'hint': 'A live service can send notifications to any phone number or email address',
- } if current_service.restricted else {
- },
- {
- 'title': 'Temporarily suspend API keys',
- 'link': url_for('.service_status_change', service_id=current_service.id),
- 'destructive': True
- } if not current_service.active else {
- 'title': 'Reactivate API keys',
- 'link': url_for('.service_status_change', service_id=current_service.id)
- }
- ]) }}
+ {% call mapping_table(
+ caption='Settings',
+ field_headings=['Label', 'Value', 'Action'],
+ field_headings_visible=False,
+ caption_visible=False
+ ) %}
+ {% call row() %}
+ {{ text_field('Service name' )}}
+ {{ text_field(current_service.name) }}
+ {{ link_field('Change', url_for('.service_name_change', service_id=current_service.id)) }}
+ {% endcall %}
+ {% call row() %}
+ {{ text_field('Email reply to address')}}
+ {{ text_field(current_service.reply_to_email_address or '{}@notifications.service.gov.uk'.format(current_service.email_from)) }}
+ {{ link_field('Change', url_for('.service_set_reply_to_email', service_id=current_service.id)) }}
+ {% endcall %}
+ {% call row() %}
+ {{ text_field('Text message sender')}}
+ {{ text_field(current_service.sms_sender or '40604') }}
+ {{ link_field('Change', url_for('.service_set_sms_sender', service_id=current_service.id)) }}
+ {% endcall %}
+ {% call row() %}
+ {{ text_field('Mode')}}
+ {% if current_service.restricted %}
+ {{ text_field('Trial') }}
+ {{ link_field('Go live', url_for('.service_request_to_go_live', service_id=current_service.id)) }}
+ {% else %}
+ {{ text_field('Live') }}
+ {{ link_field() }}
+ {% endif %}
+ {% endcall %}
+ {% call row() %}
+ {{ text_field('Active')}}
+ {{ text_field(current_service.active) }}
+ {{ link_field('Suspend', url_for('.service_status_change', service_id=current_service.id)) }}
+ {% endcall %}
+ {% endcall %}
{% if current_user.has_permissions([], admin_override=True) %}
diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py
index 969f5c454..919a75c9d 100644
--- a/tests/app/main/views/test_service_settings.py
+++ b/tests/app/main/views/test_service_settings.py
@@ -9,19 +9,47 @@ from unittest.mock import ANY, Mock
from werkzeug.exceptions import InternalServerError
-def test_should_show_overview(app_,
- active_user_with_permissions,
- mocker,
- service_one):
- with app_.test_request_context():
- with app_.test_client() as client:
- client.login(active_user_with_permissions, mocker, service_one)
- response = client.get(url_for(
- 'main.service_settings', service_id=service_one['id']))
- assert response.status_code == 200
- resp_data = response.get_data(as_text=True)
- assert 'Settings' in resp_data
- app.service_api_client.get_service.assert_called_with(service_one['id'])
+def test_should_show_overview(
+ app_,
+ active_user_with_permissions,
+ mocker,
+ service_one
+):
+ with app_.test_request_context(), app_.test_client() as client:
+ client.login(active_user_with_permissions, mocker, service_one)
+ response = client.get(url_for(
+ 'main.service_settings', service_id=service_one['id']
+ ))
+ assert response.status_code == 200
+ page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
+ assert page.find('h1').text == 'Settings'
+ for index, row in enumerate([
+ 'Service name service one Change',
+ 'Email reply to address None Change',
+ 'Text message sender 40604 Change'
+ ]):
+ assert row == " ".join(page.find_all('tr')[index + 1].text.split())
+ app.service_api_client.get_service.assert_called_with(service_one['id'])
+
+
+def test_should_show_overview_for_service_with_more_things_set(
+ app_,
+ active_user_with_permissions,
+ mocker,
+ service_with_reply_to_addresses
+):
+ with app_.test_request_context(), app_.test_client() as client:
+ client.login(active_user_with_permissions, mocker, service_with_reply_to_addresses)
+ response = client.get(url_for(
+ 'main.service_settings', service_id=service_with_reply_to_addresses['id']
+ ))
+ page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
+ for index, row in enumerate([
+ 'Service name service one Change',
+ 'Email reply to address test@example.com Change',
+ 'Text message sender elevenchars Change'
+ ]):
+ assert row == " ".join(page.find_all('tr')[index + 1].text.split())
def test_should_show_service_name(app_,
diff --git a/tests/conftest.py b/tests/conftest.py
index 12b9e95b5..68b43b34a 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -43,6 +43,17 @@ def service_one(api_user_active):
return service_json(SERVICE_ONE_ID, 'service one', [api_user_active.id])
+@pytest.fixture(scope='function')
+def service_with_reply_to_addresses(api_user_active):
+ return service_json(
+ SERVICE_ONE_ID,
+ 'service one',
+ [api_user_active.id],
+ reply_to_email_address='test@example.com',
+ sms_sender='elevenchars',
+ )
+
+
@pytest.fixture(scope='function')
def mock_send_sms(request, mocker):
return mocker.patch("app.service_api_client.send_sms")