Only show relevant user permissions for broadcast services

For services with the broadcast permission this hides:
- the ‘View dashboard’ permission (and defaults it to _checked_) because
  all users of broadcast services will need to see the dashboard
- the ‘Manage API keys’ permission (and defaults it to _not checked_)
  because we don’t offer an API integration for broadcast services yet
  – if we do we won’t want existing users to automatically get the
  permission

It relabels:
- the ‘Send’ permission to ‘Prepare and approve’ to match the current,
  slightly clunky language on the templates page
- the ‘Manage settings’ label to not refer to ‘usage’ because broadcast
  services won’t incur cost
This commit is contained in:
Chris Hill-Scott
2020-07-13 11:10:34 +01:00
parent 494636937b
commit 72c1b3d8a1
4 changed files with 215 additions and 7 deletions

View File

@@ -266,6 +266,39 @@ def test_service_without_caseworking_doesnt_show_admin_vs_caseworker(
assert page.select('input[type=checkbox]')[4]['name'] == 'manage_api_keys'
@pytest.mark.parametrize('endpoint, extra_args', [
(
'main.edit_user_permissions',
{'user_id': sample_uuid()},
),
(
'main.invite_user',
{},
),
])
def test_broadcast_service_only_shows_relevant_permissions(
client_request,
service_one,
mock_get_users_by_service,
mock_get_template_folders,
endpoint,
extra_args,
):
service_one['permissions'] = ['broadcast']
page = client_request.get(
endpoint,
service_id=SERVICE_ONE_ID,
**extra_args
)
assert [
field['name'] for field in page.select('input[type=checkbox]')
] == [
'send_messages',
'manage_templates',
'manage_service',
]
@pytest.mark.parametrize('service_has_email_auth, displays_auth_type', [
(True, True),
(False, False)
@@ -477,6 +510,76 @@ def test_edit_user_permissions(
)
@pytest.mark.parametrize('submitted_permissions, permissions_sent_to_api', [
(
{
'view_activity': 'y',
'send_messages': 'y',
'manage_templates': 'y',
'manage_service': 'y',
'manage_api_keys': 'y',
},
{
'view_activity',
'send_messages',
'manage_service',
'manage_templates',
}
),
(
{
'view_activity': 'y',
'send_messages': 'y',
},
{
'view_activity',
'send_messages',
}
),
(
{
},
{
'view_activity',
}
),
])
def test_edit_user_permissions_for_broadcast_service(
client_request,
service_one,
mocker,
mock_get_users_by_service,
mock_get_invites_for_service,
mock_set_user_permissions,
mock_get_template_folders,
fake_uuid,
submitted_permissions,
permissions_sent_to_api,
):
service_one['permissions'] = 'broadcast'
client_request.post(
'main.edit_user_permissions',
service_id=SERVICE_ONE_ID,
user_id=fake_uuid,
_data=dict(
email_address="test@example.com",
**submitted_permissions
),
_expected_status=302,
_expected_redirect=url_for(
'main.manage_users',
service_id=SERVICE_ONE_ID,
_external=True,
),
)
mock_set_user_permissions.assert_called_with(
fake_uuid,
SERVICE_ONE_ID,
permissions=permissions_sent_to_api,
folder_permissions=[]
)
def test_edit_user_folder_permissions(
client_request,
mocker,
@@ -787,6 +890,62 @@ def test_invite_user_with_email_auth_service(
[])
@pytest.mark.parametrize('post_data, expected_permissions_to_api', (
(
{
'send_messages': 'y',
'manage_templates': 'y',
'manage_service': 'y',
},
{
'view_activity',
'send_messages',
'manage_templates',
'manage_service',
},
),
(
{
'view_activity': 'y',
'manage_api_keys': 'y',
'foo': 'y',
},
{
'view_activity',
},
),
))
def test_invite_user_to_broadcast_service(
client_request,
service_one,
active_user_with_permissions,
mocker,
sample_invite,
mock_get_template_folders,
mock_get_organisations,
post_data,
expected_permissions_to_api,
):
service_one['permissions'] = ['broadcast']
mocker.patch('app.models.user.InvitedUsers.client_method', return_value=[sample_invite])
mocker.patch('app.models.user.Users.client_method', return_value=[active_user_with_permissions])
mocker.patch('app.invite_api_client.create_invite', return_value=sample_invite)
post_data['email_address'] = 'broadcast@example.gov.uk'
client_request.post(
'main.invite_user',
service_id=SERVICE_ONE_ID,
_data=post_data,
)
app.invite_api_client.create_invite.assert_called_once_with(
sample_invite['from_user'],
sample_invite['service'],
'broadcast@example.gov.uk',
expected_permissions_to_api,
'sms_auth',
[],
)
def test_cancel_invited_user_cancels_user_invitations(
client_request,
mock_get_invites_for_service,