mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-07 07:28:24 -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()
|
@user_has_permissions()
|
||||||
def manage_users(service_id):
|
def manage_users(service_id):
|
||||||
users = sorted(
|
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)
|
user_api_client.get_users_for_service(service_id=service_id) +
|
||||||
if invite.status != 'accepted'
|
invite_api_client.get_invites_for_service(service_id=service_id)
|
||||||
],
|
),
|
||||||
key=lambda user: user.email_address,
|
key=lambda user: user.email_address,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -28,11 +28,16 @@ class InviteApiClient(NotifyAdminAPIClient):
|
|||||||
return InvitedUser(**resp['data'])
|
return InvitedUser(**resp['data'])
|
||||||
|
|
||||||
def get_invites_for_service(self, service_id):
|
def get_invites_for_service(self, service_id):
|
||||||
endpoint = '/service/{}/invite'.format(service_id)
|
return [
|
||||||
resp = self.get(endpoint)
|
InvitedUser(**invite)
|
||||||
invites = resp['data']
|
for invite in self._get_invites_for_service(service_id)
|
||||||
invited_users = self._get_invited_users(invites)
|
if invite['status'] != 'accepted'
|
||||||
return invited_users
|
]
|
||||||
|
|
||||||
|
def _get_invites_for_service(self, service_id):
|
||||||
|
return self.get(
|
||||||
|
'/service/{}/invite'.format(service_id)
|
||||||
|
)['data']
|
||||||
|
|
||||||
def check_token(self, token):
|
def check_token(self, token):
|
||||||
resp = self.get(url='/invite/service/{}'.format(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),
|
self.post(url='/service/{0}/invite/{1}'.format(service_id, invited_user_id),
|
||||||
data=data)
|
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()
|
invite_api_client = InviteApiClient()
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import copy
|
import copy
|
||||||
|
import uuid
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
@@ -641,24 +642,19 @@ def test_manage_users_shows_invited_user(
|
|||||||
|
|
||||||
|
|
||||||
def test_manage_users_does_not_show_accepted_invite(
|
def test_manage_users_does_not_show_accepted_invite(
|
||||||
logged_in_client,
|
client_request,
|
||||||
mocker,
|
mocker,
|
||||||
active_user_with_permissions,
|
active_user_with_permissions,
|
||||||
sample_invite,
|
sample_invite,
|
||||||
):
|
):
|
||||||
import uuid
|
|
||||||
invited_user_id = uuid.uuid4()
|
invited_user_id = uuid.uuid4()
|
||||||
sample_invite['id'] = invited_user_id
|
sample_invite['id'] = invited_user_id
|
||||||
sample_invite['status'] = 'accepted'
|
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.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'
|
assert page.h1.string.strip() == 'Team members'
|
||||||
user_lists = page.find_all('div', {'class': 'user-list'})
|
user_lists = page.find_all('div', {'class': 'user-list'})
|
||||||
assert len(user_lists) == 1
|
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):
|
for i in range(0, 5):
|
||||||
invite = copy.copy(sample_invite)
|
invite = copy.copy(sample_invite)
|
||||||
invite['email_address'] = 'user_{}@testnotify.gov.uk'.format(i)
|
invite['email_address'] = 'user_{}@testnotify.gov.uk'.format(i)
|
||||||
data.append(InvitedUser(**invite))
|
data.append(invite)
|
||||||
return data
|
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')
|
@pytest.fixture(scope='function')
|
||||||
|
|||||||
Reference in New Issue
Block a user