From 5986dfd4151987762df1643ff73e33d3c867cf3d Mon Sep 17 00:00:00 2001 From: Katie Smith Date: Mon, 26 Jun 2017 15:22:06 +0100 Subject: [PATCH] Allow sending emails to be disabled Platform admins can now disable sending of emails for a service. If sending emails is disabled, this will also hide the option to change the Email reply to address. --- app/main/views/service_settings.py | 17 +++++++ app/templates/views/service-settings.html | 27 ++++++++--- .../views/service-settings/set-email.html | 38 +++++++++++++++ tests/app/main/views/test_service_settings.py | 46 ++++++++++++++++++- 4 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 app/templates/views/service-settings/set-email.html diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index a0e17b4b4..a349be35d 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -239,6 +239,14 @@ def service_switch_can_send_international_sms(service_id): return redirect(url_for('.service_settings', service_id=service_id)) +@main.route("/services//service-settings/can-send-email") +@login_required +@user_has_permissions(admin_override=True) +def service_switch_can_send_email(service_id): + switch_service_permissions(service_id, 'email') + return redirect(url_for('.service_settings', service_id=service_id)) + + @main.route("/services//service-settings/archive", methods=['GET', 'POST']) @login_required @user_has_permissions('manage_settings', admin_override=True) @@ -276,6 +284,15 @@ def resume_service(service_id): return service_settings(service_id) +@main.route("/services//service-settings/set-email", methods=['GET']) +@login_required +@user_has_permissions('manage_settings', admin_override=True) +def service_set_email(service_id): + return render_template( + 'views/service-settings/set-email.html', + ) + + @main.route("/services//service-settings/set-reply-to-email", methods=['GET', 'POST']) @login_required @user_has_permissions('manage_settings', admin_override=True) diff --git a/app/templates/views/service-settings.html b/app/templates/views/service-settings.html index fbf2d721c..6dccafa2b 100644 --- a/app/templates/views/service-settings.html +++ b/app/templates/views/service-settings.html @@ -26,14 +26,24 @@ {% endcall %} {% call row() %} - {{ text_field('Email reply to address') }} - {{ text_field( - current_service.reply_to_email_address, - status='' if current_service.reply_to_email_address else 'default' - ) }} - {{ edit_field('Change', url_for('.service_set_reply_to_email', service_id=current_service.id)) }} + {{ text_field('Send emails') }} + {{ boolean_field('email' in current_service.permissions) }} + {{ edit_field('Change', url_for('.service_set_email', service_id=current_service.id)) }} {% endcall %} + {% if 'email' in current_service.permissions %} + + {% call row() %} + {{ text_field('Email reply to address') }} + {{ text_field( + current_service.reply_to_email_address, + status='' if current_service.reply_to_email_address else 'default' + ) }} + {{ edit_field('Change', url_for('.service_set_reply_to_email', service_id=current_service.id)) }} + {% endcall %} + + {% endif %} + {% call row() %} {{ text_field('Text message sender') }} {{ text_field(current_service.sms_sender) }} @@ -156,6 +166,11 @@ {{ 'Take service out of research mode' if current_service.research_mode else 'Put into research mode' }} +
  • + + {{ 'Stop sending emails' if 'email' in current_service.permissions else 'Allow to send emails' }} + +
  • {{ 'Stop sending letters' if 'letter' in current_service.permissions else 'Allow to send letters' }} diff --git a/app/templates/views/service-settings/set-email.html b/app/templates/views/service-settings/set-email.html new file mode 100644 index 000000000..8ad86c3fb --- /dev/null +++ b/app/templates/views/service-settings/set-email.html @@ -0,0 +1,38 @@ +{% extends "withnav_template.html" %} +{% from "components/textbox.html" import textbox %} +{% from "components/page-footer.html" import page_footer %} + +{% block service_page_title %} + Emails +{% endblock %} + +{% block maincolumn_content %} + +
    +
    +

    Emails

    + {% if 'email' in current_service.permissions %} +

    + Your service can send emails. +

    +

    + If you want to turn it off, + get in touch with the GOV.UK Notify team. +

    + {% else %} +

    + Sending emails is an invitation‑only feature. +

    +

    + If you want to try it out, + get in touch with the GOV.UK Notify team. +

    + {% endif %} + {{ page_footer( + 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 54f5f5b22..ea0ac9fcc 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -19,6 +19,7 @@ from tests.conftest import active_user_with_permissions, platform_admin_user (active_user_with_permissions, [ 'Label Value Action', 'Service name service one Change', + 'Send emails On Change', 'Email reply to address None Change', 'Text message sender GOVUK Change', 'International text messages Off Change', @@ -28,6 +29,7 @@ from tests.conftest import active_user_with_permissions, platform_admin_user (platform_admin_user, [ 'Label Value Action', 'Service name service one Change', + 'Send emails On Change', 'Email reply to address None Change', 'Text message sender GOVUK Change', 'International text messages Off Change', @@ -47,6 +49,8 @@ def test_should_show_overview( user, expected_rows, ): + service_one['permissions'] = ['sms', 'email'] + client.login(user(fake_uuid), mocker, service_one) response = client.get(url_for( 'main.service_settings', service_id=service_one['id'] @@ -64,6 +68,7 @@ def test_should_show_overview( @pytest.mark.parametrize('permissions, expected_rows', [ (['email', 'sms', 'inbound_sms', 'international_sms'], [ 'Service name service one Change', + 'Send emails On Change', 'Email reply to address test@example.com Change', 'Text message sender elevenchars', 'International text messages On Change', @@ -73,6 +78,7 @@ def test_should_show_overview( ]), (['email', 'sms'], [ 'Service name service one Change', + 'Send emails On Change', 'Email reply to address test@example.com Change', 'Text message sender elevenchars Change', 'International text messages Off Change', @@ -114,7 +120,7 @@ def test_service_settings_show_elided_api_url_if_needed( url, elided_url ): - service_one['permissions'] = ['inbound_sms'] + service_one['permissions'] = ['sms', 'email', 'inbound_sms'] service_one['inbound_api'] = [fake_uuid] mocked_get_fn = mocker.patch( @@ -152,7 +158,7 @@ def test_if_can_receive_inbound_then_cant_change_sms_sender( service_one, mock_get_letter_organisations, ): - service_one['permissions'] = ['inbound_sms'] + service_one['permissions'] = ['email', 'sms','inbound_sms'] service_one['sms_sender'] = 'SomeNumber' response = logged_in_client.get(url_for( 'main.service_settings', service_id=service_one['id'] @@ -570,12 +576,47 @@ def test_route_for_platform_admin_update_service( service_one) +def test_switch_service_enable_email( + logged_in_platform_admin_client, + service_one, + mocker, +): + service_one['permissions'] = [] + mocked_fn = mocker.patch('app.service_api_client.update_service_with_properties', return_value=service_one) + + response = logged_in_platform_admin_client.get( + url_for('main.service_switch_can_send_email', service_id=service_one['id']) + ) + + assert response.status_code == 302 + assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True) + assert mocked_fn.call_args == call(service_one['id'], {'permissions': ['email']}) + + +def test_switch_service_disable_email( + logged_in_platform_admin_client, + service_one, + mocker, +): + service_one['permissions'] = ['email'] + mocked_fn = mocker.patch('app.service_api_client.update_service_with_properties', return_value=service_one) + + response = logged_in_platform_admin_client.get( + url_for('main.service_switch_can_send_email', service_id=service_one['id']) + ) + + assert response.status_code == 302 + assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True) + assert mocked_fn.call_args == call(service_one['id'], {'permissions': []}) + + def test_set_reply_to_email_address( logged_in_client, mock_update_service, service_one, mock_get_letter_organisations, ): + service_one['permissions'] = ['email'] data = {"email_address": "test@someservice.gov.uk"} response = logged_in_client.post(url_for('main.service_set_reply_to_email', service_id=service_one['id']), data=data, @@ -591,6 +632,7 @@ def test_if_reply_to_email_address_set_then_form_populated( logged_in_client, service_one, ): + service_one['permissions'] = ['email'] service_one['reply_to_email_address'] = 'test@service.gov.uk' response = logged_in_client.get(url_for('main.service_set_reply_to_email', service_id=service_one['id']))