From c76717942f96cd1b43284e45e4af170b1a6ec0c7 Mon Sep 17 00:00:00 2001 From: Adam Shimali Date: Fri, 26 Feb 2016 15:33:17 +0000 Subject: [PATCH] Manage user pages now surfaces invited users fetched from api. --- app/main/views/manage_users.py | 21 +++++++++++++-------- app/notify_client/invite_api_client.py | 5 +++++ app/templates/views/manage-users.html | 2 +- tests/__init__.py | 9 +++++++++ tests/app/main/views/test_manage_users.py | 18 +++++++++++++----- tests/conftest.py | 17 ++++++++++++++++- 6 files changed, 57 insertions(+), 15 deletions(-) diff --git a/app/main/views/manage_users.py b/app/main/views/manage_users.py index 2f425f6af..843348bcf 100644 --- a/app/main/views/manage_users.py +++ b/app/main/views/manage_users.py @@ -34,14 +34,19 @@ fake_users = [ @main.route("/services//users") @login_required def manage_users(service_id): - users = user_api_client.get_users_for_service(service_id=service_id) - return render_template( - 'views/manage-users.html', - service_id=service_id, - users=users, - current_user=current_user, - invited_users=[] - ) + try: + users = user_api_client.get_users_for_service(service_id=service_id) + invited_users = invite_api_client.get_invites_for_service(service_id=service_id) + return render_template('views/manage-users.html', + service_id=service_id, + users=users, + current_user=current_user, + invited_users=invited_users) + except HTTPError as e: + if e.status_code == 404: + abort(404) + else: + raise e @main.route("/services//users/invite", methods=['GET', 'POST']) diff --git a/app/notify_client/invite_api_client.py b/app/notify_client/invite_api_client.py index e3a7e3ee3..7b30dcad6 100644 --- a/app/notify_client/invite_api_client.py +++ b/app/notify_client/invite_api_client.py @@ -21,3 +21,8 @@ class InviteApiClient(BaseAPIClient): } resp = self.post(url='/service/{}/invite'.format(service_id), data=data) return resp['data'] + + def get_invites_for_service(self, service_id): + endpoint = '/service/{}/invite'.format(service_id) + resp = self.get(endpoint) + return resp['data'] diff --git a/app/templates/views/manage-users.html b/app/templates/views/manage-users.html index d18341ab3..9fd509b65 100644 --- a/app/templates/views/manage-users.html +++ b/app/templates/views/manage-users.html @@ -41,7 +41,7 @@ Manage users – GOV.UK Notify invited_users, caption='Invited', **table_options ) %} {% call field() %} - {{ item.email_localpart }} + {{ item.email_address }} {% endcall %} {{ boolean_field(item.permission_send_messages) }} {{ boolean_field(item.permission_manage_service) }} diff --git a/tests/__init__.py b/tests/__init__.py index 850f1b53a..6327182c3 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -47,6 +47,15 @@ def api_key_json(id_, name, expiry_date=None): 'expiry_date': expiry_date } + +def invite_json(id, from_user, service_id, email_address): + return {'id': id, + 'from_user': from_user, + 'service': service_id, + 'email_address': email_address, + 'status': 'pending'} + + TEST_USER_EMAIL = 'test@user.gov.uk' diff --git a/tests/app/main/views/test_manage_users.py b/tests/app/main/views/test_manage_users.py index bdd31ca70..9a2e4a9b5 100644 --- a/tests/app/main/views/test_manage_users.py +++ b/tests/app/main/views/test_manage_users.py @@ -1,13 +1,15 @@ -import json from flask import url_for +from bs4 import BeautifulSoup + def test_should_show_overview_page( app_, api_user_active, mock_login, mock_get_service, - mock_get_users_by_service + mock_get_users_by_service, + mock_get_invites_for_service ): with app_.test_request_context(): with app_.test_client() as client: @@ -38,7 +40,8 @@ def test_redirect_after_saving_user( api_user_active, mock_login, mock_get_service, - mock_get_users_by_service + mock_get_users_by_service, + mock_get_invites_for_service ): with app_.test_request_context(): with app_.test_client() as client: @@ -74,7 +77,8 @@ def test_invite_user( api_user_active, mock_login, mock_get_users_by_service, - mock_create_invite + mock_create_invite, + mock_get_invites_for_service ): from_user = api_user_active.id service_id = service_one['id'] @@ -90,5 +94,9 @@ def test_invite_user( ) assert response.status_code == 200 - assert 'Invite sent to test@example.gov.uk' in response.get_data(as_text=True) mock_create_invite.assert_called_with(from_user, service_id, email_address) + 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' + flash_banner = page.find('div', class_='banner-default-with-tick').string.strip() + assert flash_banner == 'Invite sent to test@example.gov.uk' diff --git a/tests/conftest.py b/tests/conftest.py index b0735c0f2..a4fce6a46 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,7 +9,8 @@ from . import ( TestClient, template_json, api_key_json, - job_json + job_json, + invite_json ) @@ -545,3 +546,17 @@ def mock_create_invite(mocker): 'status': 'pending'} return data return mocker.patch('app.invite_api_client.create_invite', side_effect=_create_invite) + + +@pytest.fixture(scope='function') +def mock_get_invites_for_service(mocker, service_one): + def _get_invites(service_id): + data = [] + from_user = service_one['users'][0] + service_id = service_one['id'] + for i in range(0, 5): + email_address = 'user_{}@testnotify.gov.uk'.format(i) + invite = invite_json(uuid.uuid4(), from_user, service_id, email_address) + data.append(invite) + return data + return mocker.patch('app.invite_api_client.get_invites_for_service', side_effect=_get_invites)