diff --git a/app/main/views/manage_users.py b/app/main/views/manage_users.py index 0b5f0e7f0..87fa3154d 100644 --- a/app/main/views/manage_users.py +++ b/app/main/views/manage_users.py @@ -4,8 +4,7 @@ from flask import ( redirect, abort, url_for, - flash -) + flash) from flask_login import ( login_required, @@ -79,7 +78,7 @@ def invite_user(service_id): @main.route("/services//users/", methods=['GET', 'POST']) @login_required -def edit_user(service_id, user_id): +def edit_user_permissions(service_id, user_id): if request.method == 'POST': return redirect(url_for('.manage_users', service_id=service_id)) @@ -116,6 +115,13 @@ def delete_user(service_id, user_id): ) +@main.route("/services//cancel-invited-user/", methods=['POST']) +def cancel_invited_user(service_id, invited_user_id): + invite_api_client.cancel_invited_user(service_id=service_id, invited_user_id=invited_user_id) + + return redirect(url_for('main.manage_users', service_id=service_id)) + + def _get_permissions(form): permissions = [] if form.get('send_messages') and form['send_messages'] == 'yes': diff --git a/app/notify_client/invite_api_client.py b/app/notify_client/invite_api_client.py index 1dffed425..4e9dc8639 100644 --- a/app/notify_client/invite_api_client.py +++ b/app/notify_client/invite_api_client.py @@ -28,3 +28,9 @@ class InviteApiClient(BaseAPIClient): endpoint = '/service/{}/invite'.format(service_id) resp = self.get(endpoint) return [User(data) for data in resp['data']] + + def cancel_invited_user(self, service_id, invited_user_id): + data = {'status': 'cancelled'} + resp = self.post(url='/service/{0}/invite/{0}'.format(service_id, invited_user_id), + data = data) + return resp['data'] \ No newline at end of file diff --git a/app/templates/views/manage-users.html b/app/templates/views/manage-users.html index 02d3d817e..2a785d359 100644 --- a/app/templates/views/manage-users.html +++ b/app/templates/views/manage-users.html @@ -31,9 +31,6 @@ Manage users – GOV.UK Notify {{ boolean_field(item.has_permissions(service_id, 'send_messages')) }} {{ boolean_field(item.has_permissions(service_id, 'manage_service')) }} {{ boolean_field(item.has_permissions(service_id, 'manage_api_keys')) }} - {% call field(align='right') %} - Change - {% endcall %} {% endcall %} {% if invited_users %} @@ -47,7 +44,7 @@ Manage users – GOV.UK Notify {{ boolean_field(item.has_permissions(service_id, 'manage_service')) }} {{ boolean_field(item.has_permissions(service_id, 'api_keys')) }} {% call field(align='right') %} - Change + Cancel invitation {% endcall %} {% endcall %} {% endif %} diff --git a/tests/app/main/views/test_manage_users.py b/tests/app/main/views/test_manage_users.py index 4af60ee7c..6a539b7ed 100644 --- a/tests/app/main/views/test_manage_users.py +++ b/tests/app/main/views/test_manage_users.py @@ -30,7 +30,7 @@ def test_should_show_page_for_one_user( with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) - response = client.get(url_for('main.edit_user', service_id=55555, user_id=0)) + response = client.get(url_for('main.edit_user_permissions', service_id=55555, user_id=0)) assert response.status_code == 200 @@ -47,7 +47,7 @@ def test_redirect_after_saving_user( with app_.test_client() as client: client.login(api_user_active) response = client.post(url_for( - 'main.edit_user', service_id=55555, user_id=0 + 'main.edit_user_permissions', service_id=55555, user_id=0 )) assert response.status_code == 302 @@ -104,3 +104,18 @@ def test_should_show_page_for_inviting_user( # assert page.h1.string.strip() == 'Manage team' # flash_banner = page.find('div', class_='banner-default-with-tick').string.strip() # assert flash_banner == 'Invite sent to test@example.gov.uk' + + +def test_cancel_invited_user_cancels_user_invitations(app_, api_user_active, mock_login, mocker): + with app_.test_request_context(): + with app_.test_client() as client: + mocker.patch('app.invite_api_client.cancel_invited_user') + import uuid + invited_user_id = uuid.uuid4() + client.login(api_user_active) + service_id = uuid.uuid4() + response = client.post(url_for('main.cancel_invited_user', service_id=service_id, + invited_user_id=invited_user_id)) + + assert response.status_code == 302 + assert response.location == url_for('main.manage_users', service_id=service_id, _external=True)