diff --git a/app/main/views/manage_users.py b/app/main/views/manage_users.py
index 843348bcf..0b5f0e7f0 100644
--- a/app/main/views/manage_users.py
+++ b/app/main/views/manage_users.py
@@ -56,8 +56,9 @@ def invite_user(service_id):
form = InviteUserForm()
if form.validate_on_submit():
email_address = form.email_address.data
+ permissions = _get_permissions(request.form)
try:
- resp = invite_api_client.create_invite(current_user.id, service_id, email_address)
+ resp = invite_api_client.create_invite(current_user.id, service_id, email_address, permissions)
flash('Invite sent to {}'.format(resp['email_address']), 'default_with_tick')
return redirect(url_for('.manage_users', service_id=service_id))
@@ -113,3 +114,14 @@ def delete_user(service_id, user_id):
service=get_service_by_id_or_404(service_id),
service_id=service_id
)
+
+
+def _get_permissions(form):
+ permissions = []
+ if form.get('send_messages') and form['send_messages'] == 'yes':
+ permissions.append('send_messages')
+ if form.get('manage_service') and form['manage_service'] == 'yes':
+ permissions.append('manage_service')
+ if form.get('manage_api_keys') and form['manage_api_keys'] == 'yes':
+ permissions.append('manage_api_keys')
+ return ','.join(permissions)
diff --git a/app/notify_client/invite_api_client.py b/app/notify_client/invite_api_client.py
index 7b30dcad6..515422780 100644
--- a/app/notify_client/invite_api_client.py
+++ b/app/notify_client/invite_api_client.py
@@ -13,11 +13,12 @@ class InviteApiClient(BaseAPIClient):
self.client_id = app.config['ADMIN_CLIENT_USER_NAME']
self.secret = app.config['ADMIN_CLIENT_SECRET']
- def create_invite(self, invite_from_id, service_id, email_address):
+ def create_invite(self, invite_from_id, service_id, email_address, permissions):
data = {
'service': str(service_id),
'email_address': email_address,
- 'from_user': invite_from_id
+ 'from_user': invite_from_id,
+ 'permissions': permissions
}
resp = self.post(url='/service/{}/invite'.format(service_id), data=data)
return resp['data']
diff --git a/app/templates/components/yes-no.html b/app/templates/components/yes-no.html
index 4432d6a9f..554a8e1fc 100644
--- a/app/templates/components/yes-no.html
+++ b/app/templates/components/yes-no.html
@@ -5,11 +5,11 @@
diff --git a/app/templates/views/invite-user.html b/app/templates/views/invite-user.html
index d1e6e5c7b..da40d42ff 100644
--- a/app/templates/views/invite-user.html
+++ b/app/templates/views/invite-user.html
@@ -28,6 +28,7 @@ Manage users – GOV.UK Notify
+ All team members can see message history
{{ yes_no('send_messages', 'Send messages', user.permission_send_messages) }}
{{ yes_no('manage_service', 'Manage service', user.permission_manage_service) }}
{{ yes_no('manage_api_keys', 'Manage API keys', user.permission_manage_api_keys) }}
diff --git a/tests/app/main/views/test_manage_users.py b/tests/app/main/views/test_manage_users.py
index 9a2e4a9b5..438e3060e 100644
--- a/tests/app/main/views/test_manage_users.py
+++ b/tests/app/main/views/test_manage_users.py
@@ -83,18 +83,22 @@ def test_invite_user(
from_user = api_user_active.id
service_id = service_one['id']
email_address = 'test@example.gov.uk'
+ permissions = 'send_messages,manage_service,manage_api_keys'
with app_.test_request_context():
with app_.test_client() as client:
client.login(api_user_active)
response = client.post(
url_for('main.invite_user', service_id=service_id),
- data={'email_address': email_address},
+ data={'email_address': email_address,
+ 'send_messages': 'yes',
+ 'manage_service': 'yes',
+ 'manage_api_keys': 'yes'},
follow_redirects=True
)
assert response.status_code == 200
- mock_create_invite.assert_called_with(from_user, service_id, email_address)
+ mock_create_invite.assert_called_with(from_user, service_id, email_address, permissions)
mock_get_invites_for_service.assert_called_with(service_id=service_id)
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert page.h1.string.strip() == 'Manage team'
diff --git a/tests/conftest.py b/tests/conftest.py
index a4fce6a46..02bd09df4 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -538,12 +538,13 @@ def mock_s3_upload(mocker):
@pytest.fixture(scope='function')
def mock_create_invite(mocker):
- def _create_invite(from_user, service_id, email_address):
+ def _create_invite(from_user, service_id, email_address, permissions):
data = {'id': uuid.uuid4(),
'from_user': from_user,
'service': service_id,
'email_address': email_address,
- 'status': 'pending'}
+ 'status': 'pending',
+ 'permissions': permissions}
return data
return mocker.patch('app.invite_api_client.create_invite', side_effect=_create_invite)