diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index a349be35d..1aeb8f922 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -247,6 +247,14 @@ def service_switch_can_send_email(service_id): return redirect(url_for('.service_settings', service_id=service_id)) +@main.route("/services//service-settings/can-send-sms") +@login_required +@user_has_permissions(admin_override=True) +def service_switch_can_send_sms(service_id): + switch_service_permissions(service_id, 'sms') + 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) @@ -335,6 +343,15 @@ def service_set_sms_sender(service_id): form=form) +@main.route("/services//service-settings/set-sms", methods=['GET']) +@login_required +@user_has_permissions('manage_settings', admin_override=True) +def service_set_sms(service_id): + return render_template( + 'views/service-settings/set-sms.html', + ) + + @main.route("/services//service-settings/set-international-sms", methods=['GET']) @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 6dccafa2b..371f37c82 100644 --- a/app/templates/views/service-settings.html +++ b/app/templates/views/service-settings.html @@ -45,37 +45,47 @@ {% endif %} {% call row() %} - {{ text_field('Text message sender') }} - {{ text_field(current_service.sms_sender) }} - {% if current_user.has_permissions([], admin_override=True) or not can_receive_inbound %} - {{ edit_field('Change', url_for('.service_set_sms_sender', service_id=current_service.id, set_inbound_sms=False)) }} - {% else %} - {{ text_field('') }} + {{ text_field('Send text messages') }} + {{ boolean_field('sms' in current_service.permissions) }} + {{ edit_field('Change', url_for('.service_set_sms', service_id=current_service.id)) }} + {% endcall %} + + {% if 'sms' in current_service.permissions %} + + {% call row() %} + {{ text_field('Text message sender') }} + {{ text_field(current_service.sms_sender) }} + {% if current_user.has_permissions([], admin_override=True) or not can_receive_inbound %} + {{ edit_field('Change', url_for('.service_set_sms_sender', service_id=current_service.id, set_inbound_sms=False)) }} + {% else %} + {{ text_field('') }} + {% endif %} + + {% endcall %} + + {% call row() %} + {{ text_field('International text messages') }} + {{ boolean_field('international_sms' in current_service.permissions) }} + {{ edit_field('Change', url_for('.service_set_international_sms', service_id=current_service.id)) }} + {% endcall %} + + {% call row() %} + {{ text_field('Receive text messages') }} + {{ boolean_field('inbound_sms' in current_service.permissions) }} + {{ edit_field('Change', url_for('.service_set_inbound_sms', service_id=current_service.id)) }} + {% endcall %} + + {% if can_receive_inbound %} + {% call row() %} + {{ text_field('API endpoint for received text messages') }} + {{ text_field( + 'None' if not inbound_api_url else inbound_api_url, + status='' if inbound_api_url else 'default' + ) }} + {{ edit_field('Change', url_for('.service_set_inbound_api', service_id=current_service.id)) }} + {% endcall %} {% endif %} - {% endcall %} - - {% call row() %} - {{ text_field('International text messages') }} - {{ boolean_field('international_sms' in current_service.permissions) }} - {{ edit_field('Change', url_for('.service_set_international_sms', service_id=current_service.id)) }} - {% endcall %} - - {% call row() %} - {{ text_field('Receive text messages') }} - {{ boolean_field('inbound_sms' in current_service.permissions) }} - {{ edit_field('Change', url_for('.service_set_inbound_sms', service_id=current_service.id)) }} - {% endcall %} - - {% if can_receive_inbound %} - {% call row() %} - {{ text_field('API endpoint for received text messages') }} - {{ text_field( - 'None' if not inbound_api_url else inbound_api_url, - status='' if inbound_api_url else 'default' - ) }} - {{ edit_field('Change', url_for('.service_set_inbound_api', service_id=current_service.id)) }} - {% endcall %} {% endif %} {% call row() %} @@ -177,10 +187,22 @@
  • - - {{ 'Stop sending international sms' if 'international_sms' in current_service.permissions else 'Allow international sms' }} + + {{ 'Stop sending sms' if 'sms' in current_service.permissions else 'Allow to send sms' }}
  • + {% if 'sms' in current_service.permissions %} +
  • + + {{ 'Stop sending international sms' if 'international_sms' in current_service.permissions else 'Allow to send international sms' }} + +
  • +
  • + + {{ 'Stop inbound sms' if can_receive_inbound else 'Allow inbound sms' }} + +
  • + {% endif %} {% if current_service.active %}
  • @@ -200,11 +222,6 @@
  • {% endif %} -
  • - - {{ 'Stop inbound sms' if can_receive_inbound else 'Allow inbound sms' }} - -
  • {% endif %} diff --git a/app/templates/views/service-settings/set-sms.html b/app/templates/views/service-settings/set-sms.html new file mode 100644 index 000000000..61df15af0 --- /dev/null +++ b/app/templates/views/service-settings/set-sms.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 %} + Text messages +{% endblock %} + +{% block maincolumn_content %} + +
    +
    +

    Text messages

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

    + Your service can send text messages. +

    +

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

    + {% else %} +

    + Sending text messages 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 ea0ac9fcc..6a27040a3 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -21,6 +21,7 @@ from tests.conftest import active_user_with_permissions, platform_admin_user 'Service name service one Change', 'Send emails On Change', 'Email reply to address None Change', + 'Send text messages On Change', 'Text message sender GOVUK Change', 'International text messages Off Change', 'Receive text messages Off Change', @@ -31,6 +32,7 @@ from tests.conftest import active_user_with_permissions, platform_admin_user 'Service name service one Change', 'Send emails On Change', 'Email reply to address None Change', + 'Send text messages On Change', 'Text message sender GOVUK Change', 'International text messages Off Change', 'Receive text messages Off Change', @@ -70,6 +72,7 @@ def test_should_show_overview( 'Service name service one Change', 'Send emails On Change', 'Email reply to address test@example.com Change', + 'Send text messages On Change', 'Text message sender elevenchars', 'International text messages On Change', 'Receive text messages On Change', @@ -80,6 +83,7 @@ def test_should_show_overview( 'Service name service one Change', 'Send emails On Change', 'Email reply to address test@example.com Change', + 'Send text messages On Change', 'Text message sender elevenchars Change', 'International text messages Off Change', 'Receive text messages Off Change', @@ -158,7 +162,7 @@ def test_if_can_receive_inbound_then_cant_change_sms_sender( service_one, mock_get_letter_organisations, ): - service_one['permissions'] = ['email', 'sms','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'] @@ -183,7 +187,7 @@ def test_letter_contact_block_shows_none_if_not_set( )) page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') - div = page.find_all('tr')[7].find_all('td')[1].div + div = page.find_all('tr')[5].find_all('td')[1].div assert div.text.strip() == 'None' assert 'default' in div.attrs['class'][0] @@ -201,7 +205,7 @@ def test_escapes_letter_contact_block( )) page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') - div = str(page.find_all('tr')[7].find_all('td')[1].div) + div = str(page.find_all('tr')[5].find_all('td')[1].div) assert 'foo
    bar' in div assert '