mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-07-09 02:44:10 -04:00
No emails, texts or letters for broadcast services
To make the interface as simple as possible we don’t want to mix up sending other types of communication where services have the broadcast permission. This commit removes the other permissions once a service has been given the broadcast permission by a platform admin user.
This commit is contained in:
@@ -305,6 +305,35 @@ def service_set_permission(service_id, permission):
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<uuid:service_id>/service-settings/permissions/broadcast", methods=["GET", "POST"])
|
||||
@user_is_platform_admin
|
||||
def service_set_broadcast_permission(service_id):
|
||||
|
||||
title = PLATFORM_ADMIN_SERVICE_PERMISSIONS['broadcast']['title']
|
||||
form = ServiceOnOffSettingForm(
|
||||
name=title,
|
||||
enabled=current_service.has_permission('broadcast')
|
||||
)
|
||||
|
||||
if form.validate_on_submit():
|
||||
|
||||
if form.enabled.data:
|
||||
current_service.force_permission('broadcast', on=True)
|
||||
current_service.force_permission('email', on=False)
|
||||
current_service.force_permission('sms', on=False)
|
||||
current_service.force_permission('letter', on=False)
|
||||
else:
|
||||
current_service.force_permission('broadcast', on=False)
|
||||
|
||||
return redirect(url_for(".service_settings", service_id=service_id))
|
||||
|
||||
return render_template(
|
||||
'views/service-settings/set-service-setting.html',
|
||||
title=title,
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<uuid:service_id>/service-settings/archive", methods=['GET', 'POST'])
|
||||
@user_has_permissions('manage_service')
|
||||
def archive_service(service_id):
|
||||
|
||||
@@ -307,6 +307,7 @@ class HeaderNavigation(Navigation):
|
||||
'service_switch_count_as_live',
|
||||
'service_switch_live',
|
||||
'service_set_permission',
|
||||
'service_set_broadcast_permission',
|
||||
'service_verify_reply_to_address',
|
||||
'service_verify_reply_to_address_updates',
|
||||
'services_or_dashboard',
|
||||
@@ -635,6 +636,7 @@ class MainNavigation(Navigation):
|
||||
'service_switch_count_as_live',
|
||||
'service_switch_live',
|
||||
'service_set_permission',
|
||||
'service_set_broadcast_permission',
|
||||
'services_or_dashboard',
|
||||
'show_accounts_or_dashboard',
|
||||
'sign_in',
|
||||
@@ -933,6 +935,7 @@ class CaseworkNavigation(Navigation):
|
||||
'service_switch_count_as_live',
|
||||
'service_switch_live',
|
||||
'service_set_permission',
|
||||
'service_set_broadcast_permission',
|
||||
'service_verify_reply_to_address',
|
||||
'service_verify_reply_to_address_updates',
|
||||
'services_or_dashboard',
|
||||
@@ -1237,6 +1240,7 @@ class OrgNavigation(Navigation):
|
||||
'service_switch_count_as_live',
|
||||
'service_switch_live',
|
||||
'service_set_permission',
|
||||
'service_set_broadcast_permission',
|
||||
'service_verify_reply_to_address',
|
||||
'service_verify_reply_to_address_updates',
|
||||
'services_or_dashboard',
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import functools
|
||||
from unittest.mock import call
|
||||
|
||||
import pytest
|
||||
from flask import url_for
|
||||
@@ -38,15 +39,34 @@ def test_service_set_permission_requires_platform_admin(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('permission, form_data, on', [
|
||||
('inbound_sms', 'True', True),
|
||||
('inbound_sms', 'False', False),
|
||||
('email_auth', 'True', True),
|
||||
('email_auth', 'False', False),
|
||||
('international_letters', 'True', True),
|
||||
('international_letters', 'False', False),
|
||||
('broadcast', 'True', True),
|
||||
('broadcast', 'False', False),
|
||||
@pytest.mark.parametrize('permission, form_data, expected_calls', [
|
||||
('inbound_sms', 'True', [
|
||||
call('inbound_sms', on=True),
|
||||
]),
|
||||
('inbound_sms', 'False', [
|
||||
call('inbound_sms', on=False),
|
||||
]),
|
||||
('email_auth', 'True', [
|
||||
call('email_auth', on=True),
|
||||
]),
|
||||
('email_auth', 'False', [
|
||||
call('email_auth', on=False),
|
||||
]),
|
||||
('international_letters', 'True', [
|
||||
call('international_letters', on=True),
|
||||
]),
|
||||
('international_letters', 'False', [
|
||||
call('international_letters', on=False),
|
||||
]),
|
||||
('broadcast', 'True', [
|
||||
call('broadcast', on=True),
|
||||
call('email', on=False),
|
||||
call('sms', on=False),
|
||||
call('letter', on=False),
|
||||
]),
|
||||
('broadcast', 'False', [
|
||||
call('broadcast', on=False),
|
||||
]),
|
||||
])
|
||||
def test_service_set_permission(
|
||||
mocker,
|
||||
@@ -55,7 +75,7 @@ def test_service_set_permission(
|
||||
mock_get_inbound_number_for_service,
|
||||
permission,
|
||||
form_data,
|
||||
on
|
||||
expected_calls,
|
||||
):
|
||||
force_permission = mocker.patch('app.models.service.Service.force_permission')
|
||||
response = platform_admin_client.post(
|
||||
@@ -64,9 +84,7 @@ def test_service_set_permission(
|
||||
)
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True)
|
||||
force_permission.assert_called_with(
|
||||
permission, on=on
|
||||
)
|
||||
assert force_permission.call_args_list == expected_calls
|
||||
|
||||
|
||||
@pytest.mark.parametrize('service_fields, endpoint, kwargs, text', [
|
||||
|
||||
Reference in New Issue
Block a user