diff --git a/app/main/forms.py b/app/main/forms.py index 43a30be3c..55faafbcc 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -677,6 +677,20 @@ class ServiceSwitchLettersForm(StripWhitespaceForm): ) +class ServiceBasicViewForm(StripWhitespaceForm): + + def __init__(self, enabled): + super().__init__(enabled='on' if enabled else 'off') + + enabled = RadioField( + 'Basic view', + choices=[ + ('on', 'On'), + ('off', 'Off'), + ], + ) + + class ServiceSetBranding(StripWhitespaceForm): def __init__(self, email_branding=[], *args, **kwargs): diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index cb6d1ed5f..1034004ef 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -34,6 +34,7 @@ from app.main.forms import ( OrganisationTypeForm, RenameServiceForm, RequestToGoLiveForm, + ServiceBasicViewForm, ServiceContactLinkForm, ServiceEditInboundNumberForm, ServiceInboundNumberForm, @@ -635,12 +636,25 @@ def service_set_auth_type(service_id): ) -@main.route("/services//service-settings/set-basic-view", methods=['GET']) +@main.route("/services//service-settings/set-basic-view", methods=['GET', 'POST']) @login_required @user_has_permissions('manage_service') def service_set_basic_view(service_id): + form = ServiceBasicViewForm( + enabled='caseworking' in current_service['permissions'] + ) + if form.validate_on_submit(): + force_service_permission( + service_id, + 'caseworking', + on=(form.enabled.data == 'on'), + ) + return redirect( + url_for('.service_settings', service_id=service_id) + ) return render_template( 'views/service-settings/set-basic-view.html', + form=form, ) diff --git a/app/templates/views/service-settings/set-basic-view.html b/app/templates/views/service-settings/set-basic-view.html index 7f5c6fd68..1418b4c0a 100644 --- a/app/templates/views/service-settings/set-basic-view.html +++ b/app/templates/views/service-settings/set-basic-view.html @@ -1,5 +1,5 @@ {% extends "withnav_template.html" %} -{% from "components/textbox.html" import textbox %} +{% from "components/radios.html" import radios %} {% from "components/page-footer.html" import page_footer %} {% block service_page_title %} @@ -9,7 +9,7 @@ {% block maincolumn_content %}
-
+

Basic view

Basic view lets you restrict a team member to only: @@ -21,11 +21,13 @@

You’ll get to choose which team members have basic view.

+ {{ radios(form.enabled, hide_legend=True) }} {{ page_footer( + 'Save', back_link=url_for('.service_settings', service_id=current_service.id), back_link_text='Back to settings' ) }} -
+
{% endblock %} diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index c9662edbf..8d74dfda5 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -2390,14 +2390,56 @@ def test_invitation_pages( assert normalize_spaces(page.select('main p')[0].text) == expected_p +@pytest.mark.parametrize('permissions, expected_selected', [ + ('caseworking', 'on'), + ('', 'off'), +]) def test_see_basic_view_page( client_request, + service_one, + permissions, + expected_selected, ): + service_one['permissions'] = permissions page = client_request.get( "main.service_set_basic_view", service_id=SERVICE_ONE_ID ) assert page.h1.text.strip() == 'Basic view' + assert page.select_one('input[checked]')['value'] == expected_selected + + +@pytest.mark.parametrize('value, expected_updated_permissions', [ + ('on', {'email', 'caseworking', 'sms'}), + ('off', {'email', 'sms'}), +]) +def test_update_basic_view( + mocker, + client_request, + service_one, + value, + expected_updated_permissions, +): + mocked_update = mocker.patch( + 'app.service_api_client.update_service_with_properties', + return_value=service_one, + ) + client_request.post( + "main.service_set_basic_view", + service_id=SERVICE_ONE_ID, + _data={ + 'enabled': value, + }, + _expected_status=302, + _expected_redirect=url_for( + 'main.service_settings', + service_id=SERVICE_ONE_ID, + _external=True, + ), + ) + assert set( + mocked_update.call_args[0][1]['permissions'] + ) == expected_updated_permissions def test_service_settings_when_inbound_number_is_not_set(