mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-19 14:09:20 -04:00
Set folder permissions when creating and accepting invites to services
Added a folder permissions form to the page to invite users to services. This only shows if the service has 'edit_folder_permissions' enabled, and all folder checkboxes are checked by default. This change means that InviteApiClient.create_invite now sends folder_permissions through to notifications_api (so invites get created with folder permissions). Started passing the folder_permissions through to notifications-api when accepting an invite. This changes UserApiClient.add_user_to_service to send folder_permissions to notifications_api so that new users get folder permissions when they are added to the service.
This commit is contained in:
@@ -38,13 +38,13 @@ def test_existing_user_accept_invite_calls_api_and_redirects_to_dashboard(
|
||||
mock_check_invite_token.assert_called_with('thisisnotarealtoken')
|
||||
mock_get_unknown_user_by_email.assert_called_with('invited_user@test.gov.uk')
|
||||
assert mock_accept_invite.call_count == 1
|
||||
mock_add_user_to_service.assert_called_with(expected_service, USER_ONE_ID, expected_permissions)
|
||||
mock_add_user_to_service.assert_called_with(expected_service, USER_ONE_ID, expected_permissions, [])
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for('main.service_dashboard', service_id=expected_service, _external=True)
|
||||
|
||||
|
||||
def test_existing_user_with_no_permissions_accept_invite(
|
||||
def test_existing_user_with_no_permissions_or_folder_permissions_accept_invite(
|
||||
client,
|
||||
mocker,
|
||||
service_one,
|
||||
@@ -59,10 +59,14 @@ def test_existing_user_with_no_permissions_accept_invite(
|
||||
expected_service = service_one['id']
|
||||
sample_invite['permissions'] = ''
|
||||
expected_permissions = set()
|
||||
expected_folder_permissions = []
|
||||
mocker.patch('app.invite_api_client.accept_invite', return_value=sample_invite)
|
||||
|
||||
response = client.get(url_for('main.accept_invite', token='thisisnotarealtoken'))
|
||||
mock_add_user_to_service.assert_called_with(expected_service, USER_ONE_ID, expected_permissions)
|
||||
mock_add_user_to_service.assert_called_with(expected_service,
|
||||
USER_ONE_ID,
|
||||
expected_permissions,
|
||||
expected_folder_permissions)
|
||||
|
||||
assert response.status_code == 302
|
||||
|
||||
@@ -212,7 +216,10 @@ def test_existing_signed_out_user_accept_invite_redirects_to_sign_in(
|
||||
|
||||
mock_check_invite_token.assert_called_with('thisisnotarealtoken')
|
||||
mock_get_unknown_user_by_email.assert_called_with('invited_user@test.gov.uk')
|
||||
mock_add_user_to_service.assert_called_with(expected_service, USER_ONE_ID, expected_permissions)
|
||||
mock_add_user_to_service.assert_called_with(expected_service,
|
||||
USER_ONE_ID,
|
||||
expected_permissions,
|
||||
sample_invite['folder_permissions'])
|
||||
assert mock_accept_invite.call_count == 1
|
||||
|
||||
assert response.status_code == 200
|
||||
@@ -490,7 +497,7 @@ def test_new_invited_user_verifies_and_added_to_service(
|
||||
|
||||
with client.session_transaction() as session:
|
||||
new_user_id = session['user_id']
|
||||
mock_add_user_to_service.assert_called_with(data['service'], new_user_id, expected_permissions)
|
||||
mock_add_user_to_service.assert_called_with(data['service'], new_user_id, expected_permissions, [])
|
||||
mock_accept_invite.assert_called_with(data['service'], sample_invite['id'])
|
||||
mock_check_verify_code.assert_called_once_with(new_user_id, '12345', 'sms')
|
||||
assert service_one['id'] == session['service_id']
|
||||
@@ -528,7 +535,7 @@ def test_existing_user_accepts_and_sets_email_auth(
|
||||
|
||||
mock_get_unknown_user_by_email.assert_called_once_with('test@user.gov.uk')
|
||||
mock_update_user_attribute.assert_called_once_with(USER_ONE_ID, auth_type='email_auth')
|
||||
mock_add_user_to_service.assert_called_once_with(ANY, USER_ONE_ID, ANY)
|
||||
mock_add_user_to_service.assert_called_once_with(ANY, USER_ONE_ID, ANY, ANY)
|
||||
|
||||
|
||||
def test_existing_user_doesnt_get_auth_changed_by_service_without_permission(
|
||||
|
||||
@@ -578,12 +578,37 @@ def test_should_show_page_for_inviting_user(
|
||||
logged_in_client,
|
||||
active_user_with_permissions,
|
||||
mocker,
|
||||
mock_get_template_folders,
|
||||
):
|
||||
service = create_sample_service(active_user_with_permissions)
|
||||
response = logged_in_client.get(url_for('main.invite_user', service_id=service['id']))
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
|
||||
assert 'Invite a team member' in response.get_data(as_text=True)
|
||||
assert 'Invite a team member' in page.find('h1').text.strip()
|
||||
assert response.status_code == 200
|
||||
assert not page.find('div', class_='checkboxes-nested')
|
||||
|
||||
|
||||
def test_should_show_folder_permission_form_if_service_has_folder_permissions_enabled(
|
||||
logged_in_client,
|
||||
mocker,
|
||||
mock_get_template_folders,
|
||||
service_one
|
||||
):
|
||||
service_one['permissions'].append('edit_folder_permissions')
|
||||
mock_get_template_folders.return_value = [
|
||||
{'id': 'folder-id-1', 'name': 'folder_one', 'parent_id': None, 'users_with_permission': []},
|
||||
{'id': 'folder-id-2', 'name': 'folder_two', 'parent_id': None, 'users_with_permission': []},
|
||||
{'id': 'folder-id-3', 'name': 'folder_three', 'parent_id': 'folder-id-1', 'users_with_permission': []},
|
||||
]
|
||||
response = logged_in_client.get(url_for('main.invite_user', service_id=service_one['id']))
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
|
||||
assert 'Invite a team member' in page.find('h1').text.strip()
|
||||
assert response.status_code == 200
|
||||
|
||||
folder_checkboxes = page.find('div', class_='checkboxes-nested').find_all('li')
|
||||
assert len(folder_checkboxes) == 3
|
||||
|
||||
|
||||
@pytest.mark.parametrize('email_address, gov_user', [
|
||||
@@ -597,6 +622,7 @@ def test_invite_user(
|
||||
sample_invite,
|
||||
email_address,
|
||||
gov_user,
|
||||
mock_get_template_folders,
|
||||
):
|
||||
service = create_sample_service(active_user_with_permissions)
|
||||
sample_invite['email_address'] = 'test@example.gov.uk'
|
||||
@@ -629,7 +655,8 @@ def test_invite_user(
|
||||
sample_invite['service'],
|
||||
email_address,
|
||||
expected_permissions,
|
||||
'sms_auth')
|
||||
'sms_auth',
|
||||
folder_permissions=sample_invite['folder_permissions'])
|
||||
|
||||
|
||||
@pytest.mark.parametrize('auth_type', [
|
||||
@@ -648,7 +675,8 @@ def test_invite_user_with_email_auth_service(
|
||||
gov_user,
|
||||
mocker,
|
||||
service_one,
|
||||
auth_type
|
||||
auth_type,
|
||||
mock_get_template_folders,
|
||||
):
|
||||
service_one['permissions'].append('email_auth')
|
||||
sample_invite['email_address'] = 'test@example.gov.uk'
|
||||
@@ -682,7 +710,8 @@ def test_invite_user_with_email_auth_service(
|
||||
sample_invite['service'],
|
||||
email_address,
|
||||
expected_permissions,
|
||||
auth_type)
|
||||
auth_type,
|
||||
folder_permissions=sample_invite['folder_permissions'])
|
||||
|
||||
|
||||
def test_cancel_invited_user_cancels_user_invitations(
|
||||
@@ -785,6 +814,7 @@ def test_user_cant_invite_themselves(
|
||||
mocker,
|
||||
active_user_with_permissions,
|
||||
mock_create_invite,
|
||||
mock_get_template_folders,
|
||||
):
|
||||
service = create_sample_service(active_user_with_permissions)
|
||||
response = logged_in_client.post(
|
||||
|
||||
@@ -362,7 +362,7 @@ def test_returns_value_from_cache(
|
||||
(service_api_client, 'delete_sms_sender', [SERVICE_ONE_ID, ''], {}),
|
||||
(service_api_client, 'update_service_callback_api', [SERVICE_ONE_ID] + [''] * 4, {}),
|
||||
(service_api_client, 'create_service_callback_api', [SERVICE_ONE_ID] + [''] * 3, {}),
|
||||
(user_api_client, 'add_user_to_service', [SERVICE_ONE_ID, uuid4(), []], {}),
|
||||
(user_api_client, 'add_user_to_service', [SERVICE_ONE_ID, uuid4(), [], []], {}),
|
||||
(invite_api_client, 'accept_invite', [SERVICE_ONE_ID, uuid4()], {}),
|
||||
])
|
||||
def test_deletes_service_cache(
|
||||
|
||||
@@ -152,7 +152,10 @@ def test_client_converts_admin_permissions_to_db_permissions_on_edit(app_, mocke
|
||||
def test_client_converts_admin_permissions_to_db_permissions_on_add_to_service(app_, mocker):
|
||||
mock_post = mocker.patch('app.notify_client.user_api_client.UserApiClient.post', return_value={'data': {}})
|
||||
|
||||
user_api_client.add_user_to_service('service_id', 'user_id', permissions={'send_messages', 'view_activity'})
|
||||
user_api_client.add_user_to_service('service_id',
|
||||
'user_id',
|
||||
permissions={'send_messages', 'view_activity'},
|
||||
folder_permissions=[])
|
||||
|
||||
assert sorted(mock_post.call_args[1]['data']['permissions'], key=lambda x: x['permission']) == sorted([
|
||||
{'permission': 'send_texts'},
|
||||
@@ -237,14 +240,14 @@ def test_returns_value_from_cache(
|
||||
|
||||
|
||||
@pytest.mark.parametrize('client, method, extra_args, extra_kwargs', [
|
||||
(user_api_client, 'add_user_to_service', [SERVICE_ONE_ID, sample_uuid(), []], {}),
|
||||
(user_api_client, 'add_user_to_service', [SERVICE_ONE_ID, sample_uuid(), [], []], {}),
|
||||
(user_api_client, 'update_user_attribute', [user_id], {}),
|
||||
(user_api_client, 'reset_failed_login_count', [user_id], {}),
|
||||
(user_api_client, 'update_user_attribute', [user_id], {}),
|
||||
(user_api_client, 'update_password', [user_id, 'hunter2'], {}),
|
||||
(user_api_client, 'verify_password', [user_id, 'hunter2'], {}),
|
||||
(user_api_client, 'check_verify_code', [user_id, '', ''], {}),
|
||||
(user_api_client, 'add_user_to_service', [SERVICE_ONE_ID, user_id, []], {}),
|
||||
(user_api_client, 'add_user_to_service', [SERVICE_ONE_ID, user_id, [], []], {}),
|
||||
(user_api_client, 'add_user_to_organisation', [sample_uuid(), user_id], {}),
|
||||
(user_api_client, 'set_user_permissions', [user_id, SERVICE_ONE_ID, []], {}),
|
||||
(user_api_client, 'activate_user', [api_user_pending(sample_uuid())], {}),
|
||||
|
||||
Reference in New Issue
Block a user