mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-05-05 16:38:59 -04:00
Merge pull request #1826 from alphagov/permissions-tweaks
Change display of cancelled users, fix edit link
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 '
|
||||||
|
'Can’t Send messages Can’t Add and edit templates Can’t Manage service Can’t 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) '
|
||||||
'Can’t Send messages Can’t Add and edit templates Can’t Manage service Can’t Access API keys'
|
'Can’t Send messages Can’t Add and edit templates Can’t Manage service Can’t Access API keys'
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
'ZZZZZZZZ zzzzzzz@example.gov.uk '
|
||||||
|
'Can’t Send messages Can’t Add and edit templates Can’t Manage service Can’t 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) '
|
||||||
'Can’t Send messages Can Add and edit templates Can’t Manage service Can’t Access API keys'
|
'Can’t Send messages Can Add and edit templates Can’t Manage service Can’t Access API keys'
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
'ZZZZZZZZ zzzzzzz@example.gov.uk '
|
||||||
|
'Can’t Send messages Can’t Add and edit templates Can’t Manage service Can’t 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) '
|
||||||
|
'Can’t Send messages Can’t Add and edit templates Can’t Manage service Can Access API keys '
|
||||||
|
'Cancel invitation'
|
||||||
|
)),
|
||||||
|
('cancelled', (
|
||||||
|
'invited_user@test.gov.uk (cancelled invite) '
|
||||||
|
'Can’t Send messages Can’t Add and edit templates Can’t Manage service Can’t 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) '
|
|
||||||
'Can’t Send messages Can’t Add and edit templates Can’t 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(
|
||||||
|
|||||||
Reference in New Issue
Block a user