mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-02 20:59:39 -04:00
Let users switch international letters on and off
We’ve decided that this feature should be self-service, and on by default for all users. Before we can make it on by default we should give users a way to switch it off for themselves. Which is what this PR does.
This commit is contained in:
@@ -665,6 +665,27 @@ def service_set_international_sms(service_id):
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<uuid:service_id>/service-settings/set-international-letters", methods=['GET', 'POST'])
|
||||
@user_has_permissions('manage_service')
|
||||
def service_set_international_letters(service_id):
|
||||
form = ServiceOnOffSettingForm(
|
||||
'Send letters to international addresses',
|
||||
enabled=current_service.has_permission('international_letters'),
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
current_service.force_permission(
|
||||
'international_letters',
|
||||
on=form.enabled.data,
|
||||
)
|
||||
return redirect(
|
||||
url_for(".service_settings", service_id=service_id)
|
||||
)
|
||||
return render_template(
|
||||
'views/service-settings/set-international-letters.html',
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<uuid:service_id>/service-settings/set-inbound-sms", methods=['GET'])
|
||||
@user_has_permissions('manage_service')
|
||||
def service_set_inbound_sms(service_id):
|
||||
|
||||
@@ -297,6 +297,7 @@ class HeaderNavigation(Navigation):
|
||||
'service_set_email_branding',
|
||||
'service_set_inbound_number',
|
||||
'service_set_inbound_sms',
|
||||
'service_set_international_letters',
|
||||
'service_set_international_sms',
|
||||
'service_set_letter_branding',
|
||||
'service_set_letters',
|
||||
@@ -485,6 +486,7 @@ class MainNavigation(Navigation):
|
||||
'service_set_email_branding',
|
||||
'service_set_inbound_number',
|
||||
'service_set_inbound_sms',
|
||||
'service_set_international_letters',
|
||||
'service_set_international_sms',
|
||||
'service_set_letters',
|
||||
'service_set_reply_to_email',
|
||||
@@ -938,6 +940,7 @@ class CaseworkNavigation(Navigation):
|
||||
'service_set_email_branding',
|
||||
'service_set_inbound_number',
|
||||
'service_set_inbound_sms',
|
||||
'service_set_international_letters',
|
||||
'service_set_international_sms',
|
||||
'service_set_letters',
|
||||
'service_set_reply_to_email',
|
||||
@@ -1246,6 +1249,7 @@ class OrgNavigation(Navigation):
|
||||
'service_set_email_branding',
|
||||
'service_set_inbound_number',
|
||||
'service_set_inbound_sms',
|
||||
'service_set_international_letters',
|
||||
'service_set_international_sms',
|
||||
'service_set_letters',
|
||||
'service_set_reply_to_email',
|
||||
|
||||
@@ -210,6 +210,16 @@
|
||||
)}}
|
||||
{% endcall %}
|
||||
|
||||
{% call settings_row(if_has_permission='letter') %}
|
||||
{{ text_field('Send international letters') }}
|
||||
{{ boolean_field(current_service.has_permission('international_letters')) }}
|
||||
{{ edit_field(
|
||||
'Change',
|
||||
url_for('.service_set_international_letters', service_id=current_service.id),
|
||||
permissions=['manage_service']
|
||||
)}}
|
||||
{% endcall %}
|
||||
|
||||
{% call settings_row(if_has_permission='letter') %}
|
||||
{{ text_field('Sender addresses') }}
|
||||
{% call field(status='' if current_service.count_letter_contact_details else 'default') %}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
{% extends "withnav_template.html" %}
|
||||
{% from "components/radios.html" import radios %}
|
||||
{% from "components/page-header.html" import page_header %}
|
||||
{% from "components/page-footer.html" import page_footer %}
|
||||
{% from "components/form.html" import form_wrapper %}
|
||||
|
||||
{% block service_page_title %}
|
||||
Send international letters
|
||||
{% endblock %}
|
||||
|
||||
{% block maincolumn_content %}
|
||||
|
||||
<div class="govuk-grid-row">
|
||||
<div class="govuk-grid-column-five-sixths">
|
||||
{{ page_header(
|
||||
'Send international letters',
|
||||
back_link=url_for('main.service_settings', service_id=current_service.id)
|
||||
) }}
|
||||
<p class="govuk-body">
|
||||
It costs more to send a letter to an international address.
|
||||
</p>
|
||||
<p class="govuk-body">
|
||||
See <a class="govuk-link govuk-link--no-visited-state" href="{{ url_for(".pricing") }}">pricing</a> for the list
|
||||
of rates.
|
||||
</p>
|
||||
{% call form_wrapper() %}
|
||||
{{ radios(form.enabled) }}
|
||||
{{ page_footer('Save') }}
|
||||
{% endcall %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -285,6 +285,7 @@ def test_send_files_by_email_row_on_settings_page(
|
||||
|
||||
'Label Value Action',
|
||||
'Send letters On Change',
|
||||
'Send international letters Off Change',
|
||||
'Sender addresses 1 Example Street Manage',
|
||||
'Letter branding Not set Change',
|
||||
|
||||
@@ -349,7 +350,7 @@ def test_letter_contact_block_shows_none_if_not_set(
|
||||
service_id=SERVICE_ONE_ID,
|
||||
)
|
||||
|
||||
div = page.find_all('tr')[9].find_all('td')[1].div
|
||||
div = page.find_all('tr')[10].find_all('td')[1].div
|
||||
assert div.text.strip() == 'Not set'
|
||||
assert 'default' in div.attrs['class'][0]
|
||||
|
||||
@@ -370,7 +371,7 @@ def test_escapes_letter_contact_block(
|
||||
service_id=SERVICE_ONE_ID,
|
||||
)
|
||||
|
||||
div = str(page.find_all('tr')[9].find_all('td')[1].div)
|
||||
div = str(page.find_all('tr')[10].find_all('td')[1].div)
|
||||
assert 'foo<br/>bar' in div
|
||||
assert '<script>' not in div
|
||||
|
||||
@@ -3787,21 +3788,24 @@ def test_broadcast_service_cant_post_to_set_other_channels_endpoint(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('permissions, expected_checked', [
|
||||
(['international_sms'], 'True'),
|
||||
([''], 'False'),
|
||||
@pytest.mark.parametrize('permission, permissions, expected_checked', [
|
||||
('international_sms', ['international_sms'], 'True'),
|
||||
('international_letters', ['international_letters'], 'True'),
|
||||
('international_sms', [''], 'False'),
|
||||
('international_letters', [''], 'False'),
|
||||
])
|
||||
def test_show_international_sms_as_radio_button(
|
||||
def test_show_international_sms_and_letters_as_radio_button(
|
||||
client_request,
|
||||
service_one,
|
||||
mocker,
|
||||
permission,
|
||||
permissions,
|
||||
expected_checked,
|
||||
):
|
||||
service_one['permissions'] = permissions
|
||||
|
||||
checked_radios = client_request.get(
|
||||
'main.service_set_international_sms',
|
||||
f'main.service_set_{permission}',
|
||||
service_id=service_one['id'],
|
||||
).select(
|
||||
'.multiple-choice input[checked]'
|
||||
@@ -3811,20 +3815,25 @@ def test_show_international_sms_as_radio_button(
|
||||
assert checked_radios[0]['value'] == expected_checked
|
||||
|
||||
|
||||
@pytest.mark.parametrize('post_value, international_sms_permission_expected_in_api_call', [
|
||||
@pytest.mark.parametrize('permission', (
|
||||
'international_sms',
|
||||
'international_letters',
|
||||
))
|
||||
@pytest.mark.parametrize('post_value, permission_expected_in_api_call', [
|
||||
('True', True),
|
||||
('False', False),
|
||||
])
|
||||
def test_switch_service_enable_international_sms(
|
||||
def test_switch_service_enable_international_sms_and_letters(
|
||||
client_request,
|
||||
service_one,
|
||||
mocker,
|
||||
permission,
|
||||
post_value,
|
||||
international_sms_permission_expected_in_api_call,
|
||||
permission_expected_in_api_call,
|
||||
):
|
||||
mocked_fn = mocker.patch('app.service_api_client.update_service', return_value=service_one)
|
||||
client_request.post(
|
||||
'main.service_set_international_sms',
|
||||
f'main.service_set_{permission}',
|
||||
service_id=service_one['id'],
|
||||
_data={
|
||||
'enabled': post_value
|
||||
@@ -3832,10 +3841,10 @@ def test_switch_service_enable_international_sms(
|
||||
_expected_redirect=url_for('main.service_settings', service_id=service_one['id'], _external=True)
|
||||
)
|
||||
|
||||
if international_sms_permission_expected_in_api_call:
|
||||
assert 'international_sms' in mocked_fn.call_args[1]['permissions']
|
||||
if permission_expected_in_api_call:
|
||||
assert permission in mocked_fn.call_args[1]['permissions']
|
||||
else:
|
||||
assert 'international_sms' not in mocked_fn.call_args[1]['permissions']
|
||||
assert permission not in mocked_fn.call_args[1]['permissions']
|
||||
|
||||
assert mocked_fn.call_args[0][0] == service_one['id']
|
||||
|
||||
|
||||
Reference in New Issue
Block a user