mirror of
https://github.com/GSA/notifications-admin.git
synced 2025-12-11 07:33:36 -05:00
Manage user pages now surfaces invited users
fetched from api.
This commit is contained in:
@@ -34,14 +34,19 @@ fake_users = [
|
||||
@main.route("/services/<service_id>/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/<service_id>/users/invite", methods=['GET', 'POST'])
|
||||
|
||||
@@ -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']
|
||||
|
||||
@@ -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) }}
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user