diff --git a/app/main/views/manage_users.py b/app/main/views/manage_users.py index 4c0642ead..cbbff87c8 100644 --- a/app/main/views/manage_users.py +++ b/app/main/views/manage_users.py @@ -18,19 +18,11 @@ from app.utils import user_has_permissions @login_required @user_has_permissions() def manage_users(service_id): - users = sorted( - user_api_client.get_users_for_service(service_id=service_id) + [ - invite for invite in invite_api_client.get_invites_for_service(service_id=service_id) - if invite.status != 'accepted' - ], - key=lambda user: user.email_address, - ) - return render_template( 'views/manage-users.html', - users=users, + users=current_service.team_members, current_user=current_user, - show_search_box=(len(users) > 7), + show_search_box=(len(current_service.team_members) > 7), form=SearchUsersForm(), permissions=permissions, ) diff --git a/app/models/service.py b/app/models/service.py index aa86ac35e..3337d43ca 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -6,6 +6,7 @@ from app.notify_client.api_key_api_client import api_key_api_client from app.notify_client.billing_api_client import billing_api_client from app.notify_client.email_branding_client import email_branding_client from app.notify_client.inbound_number_client import inbound_number_client +from app.notify_client.invite_api_client import invite_api_client from app.notify_client.job_api_client import job_api_client from app.notify_client.organisations_api_client import organisations_client from app.notify_client.service_api_client import service_api_client @@ -98,6 +99,16 @@ class Service(): def has_jobs(self): return job_api_client.has_jobs(self.id) + @cached_property + def team_members(self): + return sorted( + ( + invite_api_client.get_invites_for_service(service_id=self.id) + + user_api_client.get_users_for_service(service_id=self.id) + ), + key=lambda user: user.email_address, + ) + @cached_property def has_team_members(self): return user_api_client.get_count_of_users_with_permission( diff --git a/app/notify_client/invite_api_client.py b/app/notify_client/invite_api_client.py index 9ea677157..b16f8841c 100644 --- a/app/notify_client/invite_api_client.py +++ b/app/notify_client/invite_api_client.py @@ -28,11 +28,16 @@ class InviteApiClient(NotifyAdminAPIClient): return InvitedUser(**resp['data']) def get_invites_for_service(self, service_id): - endpoint = '/service/{}/invite'.format(service_id) - resp = self.get(endpoint) - invites = resp['data'] - invited_users = self._get_invited_users(invites) - return invited_users + return [ + InvitedUser(**invite) + for invite in self._get_invites_for_service(service_id) + if invite['status'] != 'accepted' + ] + + def _get_invites_for_service(self, service_id): + return self.get( + '/service/{}/invite'.format(service_id) + )['data'] def check_token(self, token): resp = self.get(url='/invite/service/{}'.format(token)) @@ -51,12 +56,5 @@ class InviteApiClient(NotifyAdminAPIClient): self.post(url='/service/{0}/invite/{1}'.format(service_id, invited_user_id), data=data) - def _get_invited_users(self, invites): - invited_users = [] - for invite in invites: - invited_user = InvitedUser(**invite) - invited_users.append(invited_user) - return invited_users - invite_api_client = InviteApiClient() diff --git a/app/templates/views/manage-users.html b/app/templates/views/manage-users.html index 5de9f9e95..8793ae8e3 100644 --- a/app/templates/views/manage-users.html +++ b/app/templates/views/manage-users.html @@ -35,17 +35,17 @@

{%- if user.name -%} - {{ user.name }}  + {{ user.name }}  {%- endif -%} {%- if user.status == 'pending' -%} - {{ user.email_address }} (invited) + {{ user.email_address }} (invited) {%- elif user.status == 'cancelled' -%} - {{ user.email_address }} (cancelled invite) + {{ user.email_address }} (cancelled invite) {%- elif user.id == current_user.id -%} - (you) + (you) {% else %} - {{ user.email_address }} + {{ user.email_address }} {% endif %}

diff --git a/tests/app/main/views/test_manage_users.py b/tests/app/main/views/test_manage_users.py index e3a7b7590..5cf45990d 100644 --- a/tests/app/main/views/test_manage_users.py +++ b/tests/app/main/views/test_manage_users.py @@ -1,4 +1,5 @@ import copy +import uuid import pytest from bs4 import BeautifulSoup @@ -641,24 +642,19 @@ def test_manage_users_shows_invited_user( def test_manage_users_does_not_show_accepted_invite( - logged_in_client, + client_request, mocker, active_user_with_permissions, sample_invite, ): - import uuid invited_user_id = uuid.uuid4() sample_invite['id'] = invited_user_id sample_invite['status'] = 'accepted' - data = [InvitedUser(**sample_invite)] - service = create_sample_service(active_user_with_permissions) mocker.patch('app.user_api_client.get_users_for_service', return_value=[active_user_with_permissions]) - mocker.patch('app.invite_api_client.get_invites_for_service', return_value=data) + mocker.patch('app.invite_api_client._get_invites_for_service', return_value=[sample_invite]) - response = logged_in_client.get(url_for('main.manage_users', service_id=service['id'])) + page = client_request.get('main.manage_users', service_id=SERVICE_ONE_ID) - assert response.status_code == 200 - page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') assert page.h1.string.strip() == 'Team members' user_lists = page.find_all('div', {'class': 'user-list'}) assert len(user_lists) == 1 diff --git a/tests/conftest.py b/tests/conftest.py index 927d2e614..1adef71d2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2170,10 +2170,10 @@ def mock_get_invites_for_service(mocker, service_one, sample_invite): for i in range(0, 5): invite = copy.copy(sample_invite) invite['email_address'] = 'user_{}@testnotify.gov.uk'.format(i) - data.append(InvitedUser(**invite)) + data.append(invite) return data - return mocker.patch('app.invite_api_client.get_invites_for_service', side_effect=_get_invites) + return mocker.patch('app.invite_api_client._get_invites_for_service', side_effect=_get_invites) @pytest.fixture(scope='function')