diff --git a/app/notify_client/invite_api_client.py b/app/notify_client/invite_api_client.py index 03ce6e85c..0afd46d9b 100644 --- a/app/notify_client/invite_api_client.py +++ b/app/notify_client/invite_api_client.py @@ -48,6 +48,7 @@ class InviteApiClient(BaseAPIClient): def _get_invited_users(self, invites): invited_users = [] for invite in invites: - invited_user = InvitedUser(**invite) - invited_users.append(invited_user) + if invite['status'] != 'accepted': + invited_user = InvitedUser(**invite) + invited_users.append(invited_user) return invited_users diff --git a/tests/app/main/notify_client/test_invite_client.py b/tests/app/main/notify_client/test_invite_client.py new file mode 100644 index 000000000..8085f7095 --- /dev/null +++ b/tests/app/main/notify_client/test_invite_client.py @@ -0,0 +1,38 @@ +from app.notify_client.invite_api_client import InviteApiClient + + +def test_client_returns_invite(mocker, sample_invite): + + sample_invite['status'] = 'pending' + service_id = sample_invite['service'] + + expected_data = {'data': [sample_invite]} + + expected_url = '/service/{}/invite'.format(service_id) + + client = InviteApiClient() + mock_get = mocker.patch('app.notify_client.invite_api_client.InviteApiClient.get', return_value=expected_data) + + invites = client.get_invites_for_service(service_id) + + mock_get.assert_called_once_with(expected_url) + assert len(invites) == 1 + assert invites[0].status == 'pending' + + +def test_client_filters_out_accepted_invites(mocker, sample_invite): + + sample_invite['status'] = 'accepted' + service_id = sample_invite['service'] + + expected_data = {'data': [sample_invite]} + + expected_url = '/service/{}/invite'.format(service_id) + + client = InviteApiClient() + mock_get = mocker.patch('app.notify_client.invite_api_client.InviteApiClient.get', return_value=expected_data) + + invites = client.get_invites_for_service(service_id) + + mock_get.assert_called_once_with(expected_url) + assert len(invites) == 0 diff --git a/tests/app/main/views/test_manage_users.py b/tests/app/main/views/test_manage_users.py index 123a225e3..b40179643 100644 --- a/tests/app/main/views/test_manage_users.py +++ b/tests/app/main/views/test_manage_users.py @@ -2,6 +2,8 @@ from flask import url_for from bs4 import BeautifulSoup +from app.notify_client.models import InvitedUser + def test_should_show_overview_page( app_, @@ -180,3 +182,34 @@ def test_cancel_invited_user_cancels_user_invitations(app_, assert response.status_code == 302 assert response.location == url_for('main.manage_users', service_id=service_id, _external=True) + + +def test_manage_users_shows_invited_user(app_, + mocker, + api_user_active, + mock_get_service, + mock_login, + mock_has_permissions, + mock_get_users_by_service, + sample_invite): + + import uuid + invited_user_id = uuid.uuid4() + sample_invite['id'] = invited_user_id + data = [InvitedUser(**sample_invite)] + + with app_.test_request_context(): + with app_.test_client() as client: + client.login(api_user_active) + + mocker.patch('app.invite_api_client.get_invites_for_service', return_value=data) + + response = client.get(url_for('main.manage_users', service_id=55555)) + + assert response.status_code == 200 + page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + assert page.h1.string.strip() == 'Manage team' + invites_table = page.find_all('table')[1] + cols = invites_table.find_all('td') + assert cols[0].text.strip() == 'invited_user@test.gov.uk' + assert cols[4].text.strip() == 'Cancel invitation'