Merge pull request #1826 from alphagov/permissions-tweaks

Change display of cancelled users, fix edit link
This commit is contained in:
Chris Hill-Scott
2018-01-29 15:32:00 +00:00
committed by GitHub
3 changed files with 52 additions and 14 deletions

View File

@@ -184,6 +184,8 @@ class InvitedUser(object):
self.auth_type = auth_type self.auth_type = auth_type
def has_permissions(self, *permissions): def has_permissions(self, *permissions):
if self.status == 'cancelled':
return False
return set(self.permissions) > set(permissions) return set(self.permissions) > set(permissions)
def __eq__(self, other): def __eq__(self, other):

View File

@@ -54,7 +54,7 @@
{{ user.email_address }} (invited) {{ user.email_address }} (invited)
{%- elif user.status == 'cancelled' -%} {%- elif user.status == 'cancelled' -%}
{{ user.email_address }} (cancelled invite) {{ user.email_address }} (cancelled invite)
{%- elif user.email_address == current_user.email_address -%} {%- elif user.id == current_user.id -%}
(you) (you)
{% else %} {% else %}
{{ user.email_address }} {{ user.email_address }}
@@ -93,7 +93,7 @@
<li class="tick-cross-list-edit-link"> <li class="tick-cross-list-edit-link">
{% if user.status == 'pending' %} {% if user.status == 'pending' %}
<a href="{{ url_for('.cancel_invited_user', service_id=current_service.id, invited_user_id=user.id)}}">Cancel invitation</a> <a href="{{ url_for('.cancel_invited_user', service_id=current_service.id, invited_user_id=user.id)}}">Cancel invitation</a>
{% elif user.status == 'active' and current_user.id != user.id %} {% elif user.state == 'active' and current_user.id != user.id %}
<a href="{{ url_for('.edit_user_permissions', service_id=current_service.id, user_id=user.id)}}">Edit permissions</a> <a href="{{ url_for('.edit_user_permissions', service_id=current_service.id, user_id=user.id)}}">Edit permissions</a>
{% endif %} {% endif %}
</li> </li>

View File

@@ -1,3 +1,4 @@
import copy
import pytest import pytest
from flask import url_for from flask import url_for
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
@@ -15,13 +16,18 @@ from tests.conftest import (
) )
@pytest.mark.parametrize('user, expected_text', [ @pytest.mark.parametrize('user, expected_self_text, expected_coworker_text', [
( (
active_user_with_permissions, active_user_with_permissions,
( (
'Test User (you) ' 'Test User (you) '
'Can Send messages Can Add and edit templates Can Manage service Can Access API keys' 'Can Send messages Can Add and edit templates Can Manage service Can Access API keys'
), ),
(
'ZZZZZZZZ zzzzzzz@example.gov.uk '
'Cant Send messages Cant Add and edit templates Cant Manage service Cant Access API keys '
'Edit permissions'
)
), ),
( (
active_user_view_permissions, active_user_view_permissions,
@@ -29,6 +35,10 @@ from tests.conftest import (
'Test User With Permissions (you) ' 'Test User With Permissions (you) '
'Cant Send messages Cant Add and edit templates Cant Manage service Cant Access API keys' 'Cant Send messages Cant Add and edit templates Cant Manage service Cant Access API keys'
), ),
(
'ZZZZZZZZ zzzzzzz@example.gov.uk '
'Cant Send messages Cant Add and edit templates Cant Manage service Cant Access API keys'
)
), ),
( (
active_user_manage_template_permission, active_user_manage_template_permission,
@@ -36,6 +46,10 @@ from tests.conftest import (
'Test User With Permissions (you) ' 'Test User With Permissions (you) '
'Cant Send messages Can Add and edit templates Cant Manage service Cant Access API keys' 'Cant Send messages Can Add and edit templates Cant Manage service Cant Access API keys'
), ),
(
'ZZZZZZZZ zzzzzzz@example.gov.uk '
'Cant Send messages Cant Add and edit templates Cant Manage service Cant Access API keys'
)
), ),
]) ])
def test_should_show_overview_page( def test_should_show_overview_page(
@@ -44,15 +58,28 @@ def test_should_show_overview_page(
mock_get_invites_for_service, mock_get_invites_for_service,
fake_uuid, fake_uuid,
user, user,
expected_text, expected_self_text,
expected_coworker_text,
active_user_view_permissions,
): ):
mocker.patch('app.user_api_client.get_users_for_service', return_value=[user(fake_uuid)]) current_user = user(fake_uuid)
other_user = copy.deepcopy(active_user_view_permissions)
other_user.email_address = 'zzzzzzz@example.gov.uk'
other_user.name = 'ZZZZZZZZ'
other_user.id = 'zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz'
mocker.patch('app.user_api_client.get_user', return_value=current_user)
mocker.patch('app.user_api_client.get_users_for_service', return_value=[
current_user,
other_user,
])
page = client_request.get('main.manage_users', service_id=SERVICE_ONE_ID) page = client_request.get('main.manage_users', service_id=SERVICE_ONE_ID)
assert normalize_spaces(page.select_one('h1').text) == 'Team members' assert normalize_spaces(page.select_one('h1').text) == 'Team members'
assert normalize_spaces(page.select_one('.user-list-item').text) == ( assert normalize_spaces(page.select('.user-list-item')[0].text) == expected_self_text
expected_text # [1:5] are invited users
) assert normalize_spaces(page.select('.user-list-item')[6].text) == expected_coworker_text
app.user_api_client.get_users_for_service.assert_called_once_with(service_id=SERVICE_ONE_ID) app.user_api_client.get_users_for_service.assert_called_once_with(service_id=SERVICE_ONE_ID)
@@ -447,25 +474,34 @@ def test_cancel_invited_user_cancels_user_invitations(
assert response.location == url_for('main.manage_users', service_id=service['id'], _external=True) assert response.location == url_for('main.manage_users', service_id=service['id'], _external=True)
@pytest.mark.parametrize('invite_status, expected_text', [
('pending', (
'invited_user@test.gov.uk (invited) '
'Cant Send messages Cant Add and edit templates Cant Manage service Can Access API keys '
'Cancel invitation'
)),
('cancelled', (
'invited_user@test.gov.uk (cancelled invite) '
'Cant Send messages Cant Add and edit templates Cant Manage service Cant Access API keys'
)),
])
def test_manage_users_shows_invited_user( def test_manage_users_shows_invited_user(
client_request, client_request,
mocker, mocker,
active_user_with_permissions, active_user_with_permissions,
sample_invite, sample_invite,
invite_status,
expected_text,
): ):
sample_invite['status'] = invite_status
data = [InvitedUser(**sample_invite)] data = [InvitedUser(**sample_invite)]
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=data)
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])
page = client_request.get('main.manage_users', service_id=SERVICE_ONE_ID) page = client_request.get('main.manage_users', service_id=SERVICE_ONE_ID)
assert page.h1.string.strip() == 'Team members' assert page.h1.string.strip() == 'Team members'
assert normalize_spaces(page.select('.user-list-item')[0].text) == ( assert normalize_spaces(page.select('.user-list-item')[0].text) == expected_text
'invited_user@test.gov.uk (invited) '
'Cant Send messages Cant Add and edit templates Cant Manage service Can Access API keys '
'Cancel invitation'
)
def test_manage_users_does_not_show_accepted_invite( def test_manage_users_does_not_show_accepted_invite(