Merge pull request #218 from alphagov/cancel-invited-user

Cancel invited user
This commit is contained in:
Adam Shimali
2016-03-02 17:31:43 +00:00
4 changed files with 47 additions and 18 deletions

View File

@@ -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/<service_id>/users/<user_id>", 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/<service_id>/cancel-invited-user/<invited_user_id>", methods=['GET'])
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':

View File

@@ -1,3 +1,4 @@
from notifications_python_client.base import BaseAPIClient
from app.notify_client.models import InvitedUser
@@ -27,17 +28,21 @@ class InviteApiClient(BaseAPIClient):
endpoint = '/service/{}/invite'.format(service_id)
resp = self.get(endpoint)
invites = resp['data']
invited_users = _get_invited_users(invites)
invited_users = self._get_invited_users(invites)
return invited_users
def accept_invite(self, token):
resp = self.get(url='/invite/{}'.format(token))
return InvitedUser(**resp['data'])
def cancel_invited_user(self, service_id, invited_user_id):
data = {'status': 'cancelled'}
self.post(url='/service/{0}/invite/{1}'.format(service_id, invited_user_id),
data=data)
def _get_invited_users(invites):
invited_users = []
for invite in invites:
invited_user = InvitedUser(**invite)
invited_users.append(invited_user)
return invited_users
def _get_invited_users(self, invites):
invited_users = []
for invite in invites:
invited_user = InvitedUser(**invite)
invited_users.append(invited_user)
return invited_users

View File

@@ -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') %}
<a href="{{ url_for('.edit_user', service_id=service_id, user_id=item.id)}}">Change</a>
{% endcall %}
{% endcall %}
{% if invited_users %}
@@ -46,9 +43,15 @@ Manage users GOV.UK Notify
{{ boolean_field(item.has_permissions('send_messages')) }}
{{ boolean_field(item.has_permissions('manage_service')) }}
{{ boolean_field(item.has_permissions('manage_api_keys')) }}
{% call field(align='right') %}
<a href="{{ url_for('.edit_user', service_id=service_id, user_id=item.id)}}">Change</a>
{% endcall %}
{% if item.status == 'pending' %}
{% call field(align='right') %}
<a href="{{ url_for('.cancel_invited_user', service_id=service_id, invited_user_id=item.id)}}">Cancel invitation</a>
{% endcall %}
{% else %}
{% call field() %}
{{ item.status }}
{% endcall %}
{% endif %}
{% endcall %}
{% endif %}

View File

@@ -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_invite_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.get(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)