mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-06-28 03:12:04 -04:00
Refactor filtering out accepted invites to client
None of our model or view layer code should need to know about accepted invites. We don’t use them anywhere because once an invite is accepted that person is now a user. Putting this logic in the client means that: - none of the code calling the client needs to care about accepted invites - it’s easier to (if we want) update the API code to not return accepted invites
This commit is contained in:
@@ -19,10 +19,10 @@ from app.utils import user_has_permissions
|
||||
@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'
|
||||
],
|
||||
(
|
||||
user_api_client.get_users_for_service(service_id=service_id) +
|
||||
invite_api_client.get_invites_for_service(service_id=service_id)
|
||||
),
|
||||
key=lambda user: user.email_address,
|
||||
)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2174,10 +2174,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')
|
||||
|
||||
Reference in New Issue
Block a user