mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 00:07:02 -04:00
Merge pull request #3535 from alphagov/try-introducing-govuk-checkboxes-again
Try introducing govuk checkboxes again
This commit is contained in:
@@ -288,11 +288,15 @@ def test_service_without_caseworking_doesnt_show_admin_vs_caseworker(
|
||||
service_id=SERVICE_ONE_ID,
|
||||
**extra_args
|
||||
)
|
||||
assert page.select('input[type=checkbox]')[0]['name'] == 'view_activity'
|
||||
assert page.select('input[type=checkbox]')[1]['name'] == 'send_messages'
|
||||
assert page.select('input[type=checkbox]')[2]['name'] == 'manage_templates'
|
||||
assert page.select('input[type=checkbox]')[3]['name'] == 'manage_service'
|
||||
assert page.select('input[type=checkbox]')[4]['name'] == 'manage_api_keys'
|
||||
permission_checkboxes = page.select('input[type=checkbox]')
|
||||
|
||||
for idx in range(len(permission_checkboxes)):
|
||||
assert permission_checkboxes[idx]['name'] == 'permissions_field'
|
||||
assert permission_checkboxes[0]['value'] == 'view_activity'
|
||||
assert permission_checkboxes[1]['value'] == 'send_messages'
|
||||
assert permission_checkboxes[2]['value'] == 'manage_templates'
|
||||
assert permission_checkboxes[3]['value'] == 'manage_service'
|
||||
assert permission_checkboxes[4]['value'] == 'manage_api_keys'
|
||||
|
||||
|
||||
@pytest.mark.parametrize('endpoint, extra_args', [
|
||||
@@ -320,11 +324,11 @@ def test_broadcast_service_only_shows_relevant_permissions(
|
||||
**extra_args
|
||||
)
|
||||
assert [
|
||||
field['name'] for field in page.select('input[type=checkbox]')
|
||||
(field['name'], field['value']) for field in page.select('input[type=checkbox]')
|
||||
] == [
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
('permissions_field', 'send_messages'),
|
||||
('permissions_field', 'manage_templates'),
|
||||
('permissions_field', 'manage_service'),
|
||||
]
|
||||
|
||||
|
||||
@@ -432,8 +436,9 @@ def test_should_show_page_for_one_user(
|
||||
assert len(checkboxes) == 5
|
||||
|
||||
for index, expected in enumerate(expected_checkboxes):
|
||||
expected_input_name, expected_checked = expected
|
||||
assert checkboxes[index]['name'] == expected_input_name
|
||||
expected_input_value, expected_checked = expected
|
||||
assert checkboxes[index]['name'] == 'permissions_field'
|
||||
assert checkboxes[index]['value'] == expected_input_value
|
||||
assert checkboxes[index].has_attr('checked') == expected_checked
|
||||
|
||||
|
||||
@@ -475,11 +480,13 @@ def test_should_not_show_page_for_non_team_member(
|
||||
@pytest.mark.parametrize('submitted_permissions, permissions_sent_to_api', [
|
||||
(
|
||||
{
|
||||
'view_activity': 'y',
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
'permissions_field': [
|
||||
'view_activity',
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
'manage_api_keys',
|
||||
]
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
@@ -491,19 +498,38 @@ def test_should_not_show_page_for_non_team_member(
|
||||
),
|
||||
(
|
||||
{
|
||||
'view_activity': 'y',
|
||||
'send_messages': 'y',
|
||||
'manage_templates': '',
|
||||
'permissions_field': [
|
||||
'view_activity',
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
]
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
}
|
||||
),
|
||||
(
|
||||
{},
|
||||
set(),
|
||||
),
|
||||
( # should be able to handle permissions being sent as booleans, until changeover to a list is complete
|
||||
{
|
||||
'view_activity': 'y',
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
'manage_api_keys',
|
||||
}
|
||||
),
|
||||
])
|
||||
def test_edit_user_permissions(
|
||||
client_request,
|
||||
@@ -542,11 +568,12 @@ def test_edit_user_permissions(
|
||||
@pytest.mark.parametrize('submitted_permissions, permissions_sent_to_api', [
|
||||
(
|
||||
{
|
||||
'view_activity': 'y',
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
'permissions_field': [
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
'manage_api_keys',
|
||||
]
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
@@ -557,8 +584,9 @@ def test_edit_user_permissions(
|
||||
),
|
||||
(
|
||||
{
|
||||
'view_activity': 'y',
|
||||
'send_messages': 'y',
|
||||
'permissions_field': [
|
||||
'send_messages',
|
||||
]
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
@@ -572,6 +600,20 @@ def test_edit_user_permissions(
|
||||
'view_activity',
|
||||
}
|
||||
),
|
||||
( # should be able to handle permissions being sent as booleans, until changeover to a list is complete
|
||||
{
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
'send_messages',
|
||||
'manage_service',
|
||||
'manage_templates',
|
||||
}
|
||||
),
|
||||
])
|
||||
def test_edit_user_permissions_for_broadcast_service(
|
||||
client_request,
|
||||
@@ -748,10 +790,12 @@ def test_edit_user_permissions_including_authentication_with_email_auth_service(
|
||||
user_id=active_user_with_permissions['id'],
|
||||
_data={
|
||||
'email_address': active_user_with_permissions['email_address'],
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
'permissions_field': [
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
'manage_api_keys',
|
||||
],
|
||||
'login_authentication': auth_type,
|
||||
},
|
||||
_expected_status=302,
|
||||
@@ -810,13 +854,14 @@ def test_should_show_folder_permission_form_if_service_has_folder_permissions_en
|
||||
|
||||
assert 'Invite a team member' in page.find('h1').text.strip()
|
||||
|
||||
folder_checkboxes = page.find('div', class_='checkboxes-nested').find_all('li')
|
||||
folder_checkboxes = page.find('div', class_='selection-wrapper').find_all('li')
|
||||
assert len(folder_checkboxes) == 3
|
||||
|
||||
|
||||
@pytest.mark.parametrize('email_address, gov_user', [
|
||||
('test@example.gov.uk', True),
|
||||
('test@example.com', False)
|
||||
@pytest.mark.parametrize('email_address, gov_user, old_permissions', [
|
||||
('test@example.gov.uk', True, False),
|
||||
('test@example.com', False, False),
|
||||
('test@example.gov.uk', True, True)
|
||||
])
|
||||
def test_invite_user(
|
||||
client_request,
|
||||
@@ -825,6 +870,7 @@ def test_invite_user(
|
||||
sample_invite,
|
||||
email_address,
|
||||
gov_user,
|
||||
old_permissions,
|
||||
mock_get_template_folders,
|
||||
mock_get_organisations,
|
||||
):
|
||||
@@ -834,17 +880,25 @@ def test_invite_user(
|
||||
mocker.patch('app.models.user.InvitedUsers.client_method', return_value=[sample_invite])
|
||||
mocker.patch('app.models.user.Users.client_method', return_value=[active_user_with_permissions])
|
||||
mocker.patch('app.invite_api_client.create_invite', return_value=sample_invite)
|
||||
data = {'email_address': email_address}
|
||||
if old_permissions:
|
||||
data['view_activity'] = 'y'
|
||||
data['send_messages'] = 'y'
|
||||
data['manage_templates'] = 'y'
|
||||
data['manage_service'] = 'y'
|
||||
data['manage_api_keys'] = 'y'
|
||||
else:
|
||||
data['permissions_field'] = [
|
||||
'view_activity',
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
'manage_api_keys',
|
||||
]
|
||||
page = client_request.post(
|
||||
'main.invite_user',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
_data={
|
||||
'email_address': email_address,
|
||||
'view_activity': 'y',
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
},
|
||||
_data=data,
|
||||
_follow_redirects=True,
|
||||
)
|
||||
assert page.h1.string.strip() == 'Team members'
|
||||
@@ -894,11 +948,13 @@ def test_invite_user_with_email_auth_service(
|
||||
service_id=SERVICE_ONE_ID,
|
||||
_data={
|
||||
'email_address': email_address,
|
||||
'view_activity': 'y',
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
'permissions_field': [
|
||||
'view_activity',
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
'manage_api_keys',
|
||||
],
|
||||
'login_authentication': auth_type,
|
||||
},
|
||||
_follow_redirects=True,
|
||||
@@ -922,9 +978,11 @@ def test_invite_user_with_email_auth_service(
|
||||
@pytest.mark.parametrize('post_data, expected_permissions_to_api', (
|
||||
(
|
||||
{
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
'permissions_field': [
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
]
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
@@ -935,14 +993,29 @@ def test_invite_user_with_email_auth_service(
|
||||
),
|
||||
(
|
||||
{
|
||||
'view_activity': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
'foo': 'y',
|
||||
'permissions_field': [
|
||||
'view_activity',
|
||||
'manage_api_keys',
|
||||
'foo',
|
||||
]
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
},
|
||||
),
|
||||
( # should be able to handle permissions being sent as booleans, until changeover to a list is complete
|
||||
{
|
||||
'send_messages': 'y',
|
||||
'manage_templates': 'y',
|
||||
'manage_service': 'y',
|
||||
},
|
||||
{
|
||||
'view_activity',
|
||||
'send_messages',
|
||||
'manage_templates',
|
||||
'manage_service',
|
||||
},
|
||||
)
|
||||
))
|
||||
def test_invite_user_to_broadcast_service(
|
||||
client_request,
|
||||
@@ -1084,9 +1157,11 @@ def test_user_cant_invite_themselves(
|
||||
service_id=SERVICE_ONE_ID,
|
||||
_data={
|
||||
'email_address': active_user_with_permissions['email_address'],
|
||||
'send_messages': 'y',
|
||||
'manage_service': 'y',
|
||||
'manage_api_keys': 'y',
|
||||
'permissions_field': [
|
||||
'send_messages',
|
||||
'manage_service',
|
||||
'manage_api_keys'
|
||||
]
|
||||
},
|
||||
_follow_redirects=True,
|
||||
_expected_status=200,
|
||||
|
||||
@@ -54,29 +54,43 @@ def _folder(name, folder_id=None, parent=None, users_with_permission=None):
|
||||
{},
|
||||
['Email', 'Text message', 'Letter'],
|
||||
[
|
||||
'folder_one 2 folders',
|
||||
'folder_one folder_one_one 1 template, 1 folder',
|
||||
'folder_one folder_one_one folder_one_one_one 1 template',
|
||||
'folder_one folder_one_one folder_one_one_one sms_template_nested Text message template',
|
||||
'folder_one folder_one_one letter_template_nested Letter template',
|
||||
'folder_one folder_one_two Empty',
|
||||
'folder_two Empty',
|
||||
'sms_template_one Text message template',
|
||||
'sms_template_two Text message template',
|
||||
'email_template_one Email template',
|
||||
'email_template_two Email template',
|
||||
'letter_template_one Letter template',
|
||||
'letter_template_two Letter template',
|
||||
'folder_one folder_one 2 folders',
|
||||
('folder_one folder_one_one '
|
||||
'folder_one folder_one_one '
|
||||
'1 template, 1 folder'),
|
||||
('folder_one folder_one_one folder_one_one_one '
|
||||
'folder_one folder_one_one folder_one_one_one '
|
||||
'1 template'),
|
||||
('folder_one folder_one_one folder_one_one_one sms_template_nested '
|
||||
'folder_one folder_one_one folder_one_one_one sms_template_nested '
|
||||
'Text message template'),
|
||||
('folder_one folder_one_one letter_template_nested '
|
||||
'folder_one folder_one_one letter_template_nested '
|
||||
'Letter template'),
|
||||
('folder_one folder_one_two '
|
||||
'folder_one folder_one_two '
|
||||
'Empty'),
|
||||
'folder_two folder_two Empty',
|
||||
('sms_template_one '
|
||||
'sms_template_one '
|
||||
'Text message template'),
|
||||
('sms_template_two '
|
||||
'sms_template_two '
|
||||
'Text message template'),
|
||||
'email_template_one email_template_one Email template',
|
||||
'email_template_two email_template_two Email template',
|
||||
'letter_template_one letter_template_one Letter template',
|
||||
'letter_template_two letter_template_two Letter template',
|
||||
],
|
||||
[
|
||||
'folder_one 2 folders',
|
||||
'folder_two Empty',
|
||||
'sms_template_one Text message template',
|
||||
'sms_template_two Text message template',
|
||||
'email_template_one Email template',
|
||||
'email_template_two Email template',
|
||||
'letter_template_one Letter template',
|
||||
'letter_template_two Letter template',
|
||||
'folder_one folder_one 2 folders',
|
||||
'folder_two folder_two Empty',
|
||||
'sms_template_one sms_template_one Text message template',
|
||||
'sms_template_two sms_template_two Text message template',
|
||||
'email_template_one email_template_one Email template',
|
||||
'email_template_two email_template_two Email template',
|
||||
'letter_template_one letter_template_one Letter template',
|
||||
'letter_template_two letter_template_two Letter template',
|
||||
],
|
||||
[
|
||||
'folder_one',
|
||||
@@ -102,29 +116,39 @@ def _folder(name, folder_id=None, parent=None, users_with_permission=None):
|
||||
{'template_type': 'all'},
|
||||
['Email', 'Text message', 'Letter'],
|
||||
[
|
||||
'folder_one 2 folders',
|
||||
'folder_one folder_one_one 1 template, 1 folder',
|
||||
'folder_one folder_one_one folder_one_one_one 1 template',
|
||||
'folder_one folder_one_one folder_one_one_one sms_template_nested Text message template',
|
||||
'folder_one folder_one_one letter_template_nested Letter template',
|
||||
'folder_one folder_one_two Empty',
|
||||
'folder_two Empty',
|
||||
'sms_template_one Text message template',
|
||||
'sms_template_two Text message template',
|
||||
'email_template_one Email template',
|
||||
'email_template_two Email template',
|
||||
'letter_template_one Letter template',
|
||||
'letter_template_two Letter template',
|
||||
'folder_one folder_one 2 folders',
|
||||
('folder_one folder_one_one '
|
||||
'folder_one folder_one_one '
|
||||
'1 template, 1 folder'),
|
||||
('folder_one folder_one_one folder_one_one_one '
|
||||
'folder_one folder_one_one folder_one_one_one '
|
||||
'1 template'),
|
||||
('folder_one folder_one_one folder_one_one_one sms_template_nested '
|
||||
'folder_one folder_one_one folder_one_one_one sms_template_nested '
|
||||
'Text message template'),
|
||||
('folder_one folder_one_one letter_template_nested '
|
||||
'folder_one folder_one_one letter_template_nested '
|
||||
'Letter template'),
|
||||
('folder_one folder_one_two '
|
||||
'folder_one folder_one_two '
|
||||
'Empty'),
|
||||
'folder_two folder_two Empty',
|
||||
'sms_template_one sms_template_one Text message template',
|
||||
'sms_template_two sms_template_two Text message template',
|
||||
'email_template_one email_template_one Email template',
|
||||
'email_template_two email_template_two Email template',
|
||||
'letter_template_one letter_template_one Letter template',
|
||||
'letter_template_two letter_template_two Letter template',
|
||||
],
|
||||
[
|
||||
'folder_one 2 folders',
|
||||
'folder_two Empty',
|
||||
'sms_template_one Text message template',
|
||||
'sms_template_two Text message template',
|
||||
'email_template_one Email template',
|
||||
'email_template_two Email template',
|
||||
'letter_template_one Letter template',
|
||||
'letter_template_two Letter template',
|
||||
'folder_one folder_one 2 folders',
|
||||
'folder_two folder_two Empty',
|
||||
'sms_template_one sms_template_one Text message template',
|
||||
'sms_template_two sms_template_two Text message template',
|
||||
'email_template_one email_template_one Email template',
|
||||
'email_template_two email_template_two Email template',
|
||||
'letter_template_one letter_template_one Letter template',
|
||||
'letter_template_two letter_template_two Letter template',
|
||||
],
|
||||
[
|
||||
'folder_one',
|
||||
@@ -150,17 +174,23 @@ def _folder(name, folder_id=None, parent=None, users_with_permission=None):
|
||||
{'template_type': 'sms'},
|
||||
['All', 'Email', 'Letter'],
|
||||
[
|
||||
'folder_one 1 folder',
|
||||
'folder_one folder_one_one 1 folder',
|
||||
'folder_one folder_one_one folder_one_one_one 1 template',
|
||||
'folder_one folder_one_one folder_one_one_one sms_template_nested Text message template',
|
||||
'sms_template_one Text message template',
|
||||
'sms_template_two Text message template',
|
||||
'folder_one folder_one 1 folder',
|
||||
('folder_one folder_one_one '
|
||||
'folder_one folder_one_one '
|
||||
'1 folder'),
|
||||
('folder_one folder_one_one folder_one_one_one '
|
||||
'folder_one folder_one_one folder_one_one_one '
|
||||
'1 template'),
|
||||
('folder_one folder_one_one folder_one_one_one sms_template_nested '
|
||||
'folder_one folder_one_one folder_one_one_one sms_template_nested '
|
||||
'Text message template'),
|
||||
'sms_template_one sms_template_one Text message template',
|
||||
'sms_template_two sms_template_two Text message template',
|
||||
],
|
||||
[
|
||||
'folder_one 1 folder',
|
||||
'sms_template_one Text message template',
|
||||
'sms_template_two Text message template',
|
||||
'folder_one folder_one 1 folder',
|
||||
'sms_template_one sms_template_one Text message template',
|
||||
'sms_template_two sms_template_two Text message template',
|
||||
],
|
||||
[
|
||||
'folder_one',
|
||||
@@ -179,15 +209,21 @@ def _folder(name, folder_id=None, parent=None, users_with_permission=None):
|
||||
{'template_folder_id': PARENT_FOLDER_ID},
|
||||
['Email', 'Text message', 'Letter'],
|
||||
[
|
||||
'folder_one_one 1 template, 1 folder',
|
||||
'folder_one_one folder_one_one_one 1 template',
|
||||
'folder_one_one folder_one_one_one sms_template_nested Text message template',
|
||||
'folder_one_one letter_template_nested Letter template',
|
||||
'folder_one_two Empty',
|
||||
'folder_one_one folder_one_one 1 template, 1 folder',
|
||||
('folder_one_one folder_one_one_one '
|
||||
'folder_one_one folder_one_one_one '
|
||||
'1 template'),
|
||||
('folder_one_one folder_one_one_one sms_template_nested '
|
||||
'folder_one_one folder_one_one_one sms_template_nested '
|
||||
'Text message template'),
|
||||
('folder_one_one letter_template_nested '
|
||||
'folder_one_one letter_template_nested '
|
||||
'Letter template'),
|
||||
'folder_one_two folder_one_two Empty',
|
||||
],
|
||||
[
|
||||
'folder_one_one 1 template, 1 folder',
|
||||
'folder_one_two Empty',
|
||||
'folder_one_one folder_one_one 1 template, 1 folder',
|
||||
'folder_one_two folder_one_two Empty',
|
||||
],
|
||||
[
|
||||
'folder_one_one',
|
||||
@@ -205,12 +241,16 @@ def _folder(name, folder_id=None, parent=None, users_with_permission=None):
|
||||
{'template_type': 'sms', 'template_folder_id': PARENT_FOLDER_ID},
|
||||
['All', 'Email', 'Letter'],
|
||||
[
|
||||
'folder_one_one 1 folder',
|
||||
'folder_one_one folder_one_one_one 1 template',
|
||||
'folder_one_one folder_one_one_one sms_template_nested Text message template',
|
||||
'folder_one_one folder_one_one 1 folder',
|
||||
('folder_one_one folder_one_one_one '
|
||||
'folder_one_one folder_one_one_one '
|
||||
'1 template'),
|
||||
('folder_one_one folder_one_one_one sms_template_nested '
|
||||
'folder_one_one folder_one_one_one sms_template_nested '
|
||||
'Text message template'),
|
||||
],
|
||||
[
|
||||
'folder_one_one 1 folder',
|
||||
'folder_one_one folder_one_one 1 folder',
|
||||
],
|
||||
[
|
||||
'folder_one_one',
|
||||
@@ -240,13 +280,15 @@ def _folder(name, folder_id=None, parent=None, users_with_permission=None):
|
||||
{'template_folder_id': CHILD_FOLDER_ID},
|
||||
['Email', 'Text message', 'Letter'],
|
||||
[
|
||||
'folder_one_one_one 1 template',
|
||||
'folder_one_one_one sms_template_nested Text message template',
|
||||
'letter_template_nested Letter template',
|
||||
'folder_one_one_one folder_one_one_one 1 template',
|
||||
('folder_one_one_one sms_template_nested '
|
||||
'folder_one_one_one sms_template_nested '
|
||||
'Text message template'),
|
||||
'letter_template_nested letter_template_nested Letter template',
|
||||
],
|
||||
[
|
||||
'folder_one_one_one 1 template',
|
||||
'letter_template_nested Letter template',
|
||||
'folder_one_one_one folder_one_one_one 1 template',
|
||||
'letter_template_nested letter_template_nested Letter template',
|
||||
],
|
||||
[
|
||||
'folder_one_one_one',
|
||||
@@ -266,10 +308,10 @@ def _folder(name, folder_id=None, parent=None, users_with_permission=None):
|
||||
{'template_folder_id': GRANDCHILD_FOLDER_ID},
|
||||
['Email', 'Text message', 'Letter'],
|
||||
[
|
||||
'sms_template_nested Text message template',
|
||||
'sms_template_nested sms_template_nested Text message template',
|
||||
],
|
||||
[
|
||||
'sms_template_nested Text message template',
|
||||
'sms_template_nested sms_template_nested Text message template',
|
||||
],
|
||||
[
|
||||
'sms_template_nested',
|
||||
@@ -395,7 +437,7 @@ def test_should_show_templates_folder_page(
|
||||
assert links_in_page[index].text.strip() == expected_link
|
||||
|
||||
all_page_items = page.select('.template-list-item')
|
||||
all_page_items_styled_with_checkboxes = page.select('.template-list-item-with-checkbox')
|
||||
all_page_items_styled_with_checkboxes = page.select('.template-list-item.govuk-checkboxes__item')
|
||||
|
||||
assert len(all_page_items) == len(all_page_items_styled_with_checkboxes)
|
||||
|
||||
@@ -527,7 +569,7 @@ def test_get_manage_folder_viewing_permissions_for_users(
|
||||
assert normalize_spaces(page.select_one('title').text) == (
|
||||
'folder_two – Templates – service one – GOV.UK Notify'
|
||||
)
|
||||
form_labels = page.select('legend[class=form-label]')
|
||||
form_labels = page.select('legend.govuk-fieldset__legend')
|
||||
assert normalize_spaces(form_labels[0].text) == "Team members who can see this folder"
|
||||
checkboxes = page.select('input[name=users_with_permission]')
|
||||
|
||||
@@ -538,7 +580,7 @@ def test_get_manage_folder_viewing_permissions_for_users(
|
||||
assert checkboxes[1]['value'] == team_member_2['id']
|
||||
assert "checked" in checkboxes[1].attrs
|
||||
|
||||
assert "Test User" in page.find_all('label', {'for': 'users_with_permission-0'})[0].text
|
||||
assert "Test User" in page.find_all('label', {'for': 'users_with_permission-1'})[0].text
|
||||
|
||||
|
||||
def test_get_manage_folder_viewing_permissions_for_users_not_visible_when_no_manage_settings_permission(
|
||||
@@ -1462,45 +1504,70 @@ def test_show_custom_error_message(
|
||||
(
|
||||
{},
|
||||
[
|
||||
['folder_A', '1 template, 2 folders'],
|
||||
['folder_E folder_F folder_G', '1 template'],
|
||||
['email_template_root', 'Email template'],
|
||||
['folder_A', 'folder_A', '1 template, 2 folders'],
|
||||
['folder_E folder_F folder_G',
|
||||
'folder_E', 'folder_F', 'folder_G',
|
||||
'1 template'],
|
||||
['email_template_root', 'email_template_root', 'Email template'],
|
||||
],
|
||||
[
|
||||
['folder_A', '1 template, 2 folders'],
|
||||
['folder_A', 'folder_C', '1 template'],
|
||||
['folder_A', 'folder_C', 'sms_template_C', 'Text message template'],
|
||||
['folder_A', 'folder_D', 'Empty'],
|
||||
['folder_A', 'sms_template_A', 'Text message template'],
|
||||
['folder_E folder_F folder_G', '1 template'],
|
||||
['folder_E folder_F folder_G', 'email_template_G', 'Email template'],
|
||||
['email_template_root', 'Email template'],
|
||||
['folder_A', 'folder_A', '1 template, 2 folders'],
|
||||
['folder_A folder_C',
|
||||
'folder_A', 'folder_C',
|
||||
'1 template'],
|
||||
['folder_A folder_C sms_template_C',
|
||||
'folder_A', 'folder_C', 'sms_template_C',
|
||||
'Text message template'],
|
||||
['folder_A folder_D',
|
||||
'folder_A', 'folder_D',
|
||||
'Empty'],
|
||||
['folder_A sms_template_A',
|
||||
'folder_A', 'sms_template_A',
|
||||
'Text message template'],
|
||||
['folder_E folder_F folder_G',
|
||||
'folder_E', 'folder_F', 'folder_G',
|
||||
'1 template'],
|
||||
['folder_E folder_F folder_G email_template_G',
|
||||
'folder_E', 'folder_F', 'folder_G', 'email_template_G',
|
||||
'Email template'],
|
||||
['email_template_root', 'email_template_root', 'Email template'],
|
||||
],
|
||||
None,
|
||||
),
|
||||
(
|
||||
{'template_type': 'email'},
|
||||
[
|
||||
['folder_E folder_F folder_G', '1 template'],
|
||||
['email_template_root', 'Email template'],
|
||||
['folder_E folder_F folder_G',
|
||||
'folder_E', 'folder_F', 'folder_G',
|
||||
'1 template'],
|
||||
['email_template_root', 'email_template_root', 'Email template'],
|
||||
],
|
||||
[
|
||||
['folder_E folder_F folder_G', '1 template'],
|
||||
['folder_E folder_F folder_G', 'email_template_G', 'Email template'],
|
||||
['email_template_root', 'Email template'],
|
||||
['folder_E folder_F folder_G',
|
||||
'folder_E', 'folder_F', 'folder_G',
|
||||
'1 template'],
|
||||
['folder_E folder_F folder_G email_template_G',
|
||||
'folder_E', 'folder_F', 'folder_G', 'email_template_G',
|
||||
'Email template'],
|
||||
['email_template_root', 'email_template_root', 'Email template'],
|
||||
],
|
||||
None,
|
||||
),
|
||||
(
|
||||
{'template_type': 'sms'},
|
||||
[
|
||||
['folder_A', '1 template, 1 folder'],
|
||||
['folder_A', 'folder_A', '1 template, 1 folder'],
|
||||
],
|
||||
[
|
||||
['folder_A', '1 template, 1 folder'],
|
||||
['folder_A', 'folder_C', '1 template'],
|
||||
['folder_A', 'folder_C', 'sms_template_C', 'Text message template'],
|
||||
['folder_A', 'sms_template_A', 'Text message template'],
|
||||
['folder_A', 'folder_A', '1 template, 1 folder'],
|
||||
['folder_A folder_C',
|
||||
'folder_A', 'folder_C',
|
||||
'1 template'],
|
||||
['folder_A folder_C sms_template_C',
|
||||
'folder_A', 'folder_C', 'sms_template_C',
|
||||
'Text message template'],
|
||||
['folder_A sms_template_A', 'folder_A', 'sms_template_A',
|
||||
'Text message template'],
|
||||
],
|
||||
None,
|
||||
),
|
||||
|
||||
@@ -188,7 +188,7 @@ def test_should_show_page_for_choosing_a_template(
|
||||
for index, expected_link in enumerate(expected_nav_links):
|
||||
assert links_in_page[index].text.strip() == expected_link
|
||||
|
||||
template_links = page.select('.message-name a')
|
||||
template_links = page.select('#template-list .govuk-label a, .message-name a')
|
||||
|
||||
assert len(template_links) == len(expected_templates)
|
||||
|
||||
@@ -257,7 +257,7 @@ def test_should_show_live_search_if_list_of_templates_taller_than_screen(
|
||||
assert search['data-module'] == 'live-search'
|
||||
assert search['data-targets'] == '#template-list .template-list-item'
|
||||
|
||||
assert len(page.select(search['data-targets'])) == len(page.select('.message-name')) == 14
|
||||
assert len(page.select(search['data-targets'])) == len(page.select('#template-list .govuk-label')) == 14
|
||||
|
||||
|
||||
def test_should_show_live_search_if_service_has_lots_of_folders(
|
||||
@@ -278,8 +278,8 @@ def test_should_show_live_search_if_service_has_lots_of_folders(
|
||||
service_id=SERVICE_ONE_ID,
|
||||
)
|
||||
|
||||
count_of_templates_and_folders = len(page.select('.message-name'))
|
||||
count_of_folders = len(page.select('.template-list-folder:first-child'))
|
||||
count_of_templates_and_folders = len(page.select('#template-list .govuk-label'))
|
||||
count_of_folders = len(page.select('.template-list-folder:first-of-type'))
|
||||
count_of_templates = count_of_templates_and_folders - count_of_folders
|
||||
|
||||
assert len(page.select('.live-search')) == 1
|
||||
|
||||
@@ -14,49 +14,52 @@ afterAll(() => {
|
||||
|
||||
describe('Collapsible fieldset', () => {
|
||||
|
||||
const _checkboxes = (start, end) => {
|
||||
result = '';
|
||||
|
||||
for (let num = start; num <= end; num++) {
|
||||
let id = `folder-permissions-${num}`;
|
||||
|
||||
result += `<li class="govuk-checkboxes__item">
|
||||
<input class="govuk-checkboxes__input" id="${id}" name="folder-permissions" type="checkbox" value="${id}">
|
||||
<label class="govuk-label govuk-checkboxes__label" for="${id}">
|
||||
Folder ${id}
|
||||
</label>
|
||||
</li>`;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
let wrapper;
|
||||
let formGroup;
|
||||
let fieldset;
|
||||
let checkboxesContainer;
|
||||
let checkboxes;
|
||||
|
||||
beforeEach(() => {
|
||||
const _checkboxes = (start, end, descendents) => {
|
||||
result = '';
|
||||
|
||||
for (let num = start; num <= end; num++) {
|
||||
let id = `folder-permissions-${num}`;
|
||||
|
||||
if (!descendents) { descendents = ''; }
|
||||
|
||||
result += `<li class="multiple-choice">
|
||||
<input id="${id}" name="folder_permissions" type="checkbox" value="${id}">
|
||||
<label class="block-label" for="{id}">
|
||||
Folder 18
|
||||
</label>
|
||||
${descendents}
|
||||
</li>`;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
// set up DOM
|
||||
document.body.innerHTML =
|
||||
`<div class="form-group" data-module="collapsible-checkboxes" data-field-label="folder">
|
||||
<div class="selection-summary"></div>
|
||||
<fieldset id="folder_permissions">
|
||||
<legend class="form-label heading-small">
|
||||
Folders this team member can see
|
||||
</legend>
|
||||
<div class="checkboxes-nested">
|
||||
<ul>
|
||||
`<div class="selection-wrapper" data-module="collapsible-checkboxes" data-field-label="folder">
|
||||
<div class="govuk-form-group">
|
||||
<fieldset class="govuk-fieldset" id="folder_permissions">
|
||||
<legend class="govuk-fieldset__legend govuk-fieldset__legend--s">
|
||||
Folders this team member can see
|
||||
<span class="govuk-hint">
|
||||
<div class="selection-summary" role="region" aria-live="polite"></div>
|
||||
</span>
|
||||
</legend>
|
||||
<ul class="govuk-checkboxes">
|
||||
${_checkboxes(1, 10)}
|
||||
</ul>
|
||||
</div>
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
formGroup = document.querySelector('.form-group');
|
||||
wrapper = document.querySelector('.selection-wrapper');
|
||||
formGroup = wrapper.querySelector('.govuk-form-group');
|
||||
fieldset = formGroup.querySelector('fieldset');
|
||||
checkboxesContainer = fieldset.querySelector('.checkboxes-nested');
|
||||
checkboxesContainer = fieldset.querySelector('.govuk-checkboxes');
|
||||
checkboxes = checkboxesContainer.querySelectorAll('input[type=checkbox]');
|
||||
|
||||
});
|
||||
@@ -141,6 +144,12 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
});
|
||||
|
||||
test("removes the hint", () => {
|
||||
|
||||
expect(document.querySelector('.govuk-hint')).toBeNull();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
test('has the right summary text when started with no checkboxes selected', () => {
|
||||
@@ -187,7 +196,7 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
test("the summary doesn't have a folder icon if fields aren't called 'folder'", () => {
|
||||
|
||||
formGroup.dataset.fieldLabel = 'team member';
|
||||
wrapper.dataset.fieldLabel = 'team member';
|
||||
|
||||
// start module
|
||||
window.GOVUK.modules.start();
|
||||
@@ -277,35 +286,74 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
describe("the footer (that wraps the button)", () => {
|
||||
|
||||
beforeEach(() => {
|
||||
describe("is inserted", () => {
|
||||
|
||||
// track calls to sticky JS
|
||||
window.GOVUK.stickAtBottomWhenScrolling.recalculate = jest.fn(() => {});
|
||||
test("after the fieldset", () => {
|
||||
|
||||
// start module
|
||||
window.GOVUK.modules.start();
|
||||
// start module
|
||||
window.GOVUK.modules.start();
|
||||
|
||||
// show the checkboxes
|
||||
helpers.triggerEvent(formGroup.querySelector('.govuk-button'), 'click');
|
||||
// show the checkboxes
|
||||
helpers.triggerEvent(formGroup.querySelector('.govuk-button'), 'click');
|
||||
|
||||
expect(formGroup.querySelector('.selection-footer').previousElementSibling.nodeName).toBe('FIELDSET');
|
||||
|
||||
});
|
||||
|
||||
test("after the root fieldset if the checkboxes are nested", () => {
|
||||
|
||||
// add a nested list of checkboxes to the first checkbox item
|
||||
const nestedCheckboxes = document.createElement('div');
|
||||
nestedCheckboxes.className = 'govuk-form-group govuk-form-group--nested';
|
||||
nestedCheckboxes.innerHTML = _checkboxes(11, 20);
|
||||
checkboxesContainer.querySelector('.govuk-checkboxes__item').appendChild(nestedCheckboxes);
|
||||
|
||||
// start module
|
||||
window.GOVUK.modules.start();
|
||||
|
||||
// show the checkboxes
|
||||
helpers.triggerEvent(formGroup.querySelector('.govuk-button'), 'click');
|
||||
|
||||
expect(formGroup.querySelector('.selection-footer').previousElementSibling.nodeName).toBe('FIELDSET');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
test("is made sticky when the fieldset is expanded", () => {
|
||||
describe("its stickiness", () => {
|
||||
|
||||
expect(formGroup.querySelector('.selection-footer').classList.contains('js-stick-at-bottom-when-scrolling')).toBe(true);
|
||||
expect(window.GOVUK.stickAtBottomWhenScrolling.recalculate.mock.calls.length).toBe(1);
|
||||
beforeEach(() => {
|
||||
|
||||
// track calls to sticky JS
|
||||
window.GOVUK.stickAtBottomWhenScrolling.recalculate = jest.fn(() => {});
|
||||
|
||||
// start module
|
||||
window.GOVUK.modules.start();
|
||||
|
||||
// show the checkboxes
|
||||
helpers.triggerEvent(formGroup.querySelector('.govuk-button'), 'click');
|
||||
|
||||
});
|
||||
|
||||
test("is added when the fieldset is expanded", () => {
|
||||
|
||||
expect(formGroup.querySelector('.selection-footer').classList.contains('js-stick-at-bottom-when-scrolling')).toBe(true);
|
||||
expect(window.GOVUK.stickAtBottomWhenScrolling.recalculate.mock.calls.length).toBe(1);
|
||||
|
||||
});
|
||||
|
||||
test("is removed when the fieldset is collapsed", () => {
|
||||
|
||||
// click the button to collapse the fieldset
|
||||
helpers.triggerEvent(formGroup.querySelector('.govuk-button'), 'click');
|
||||
|
||||
expect(formGroup.querySelector('.selection-footer').classList.contains('js-stick-at-bottom-when-scrolling')).toBe(false);
|
||||
expect(window.GOVUK.stickAtBottomWhenScrolling.recalculate.mock.calls.length).toBe(2);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
test("has its stickiness removed when the fieldset is collapsed", () => {
|
||||
|
||||
// click the button to collapse the fieldset
|
||||
helpers.triggerEvent(formGroup.querySelector('.govuk-button'), 'click');
|
||||
|
||||
expect(formGroup.querySelector('.selection-footer').classList.contains('js-stick-at-bottom-when-scrolling')).toBe(false);
|
||||
expect(window.GOVUK.stickAtBottomWhenScrolling.recalculate.mock.calls.length).toBe(2);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe("when the selection changes", () => {
|
||||
@@ -339,7 +387,7 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
test("if fields are called 'folders'", () => {
|
||||
|
||||
formGroup.dataset.fieldLabel = 'folder';
|
||||
wrapper.dataset.fieldLabel = 'folder';
|
||||
|
||||
checkFirstCheckbox();
|
||||
|
||||
@@ -359,7 +407,7 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
test("if fields are called 'team member'", () => {
|
||||
|
||||
formGroup.dataset.fieldLabel = 'team member';
|
||||
wrapper.dataset.fieldLabel = 'team member';
|
||||
|
||||
checkFirstCheckbox();
|
||||
|
||||
@@ -379,7 +427,7 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
test("if fields are called 'arbitrary thing'", () => {
|
||||
|
||||
formGroup.dataset.fieldLabel = 'arbitrary thing';
|
||||
wrapper.dataset.fieldLabel = 'arbitrary thing';
|
||||
|
||||
checkFirstCheckbox();
|
||||
|
||||
@@ -403,7 +451,7 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
test("if fields are called 'folder'", () => {
|
||||
|
||||
formGroup.dataset.fieldLabel = 'folder';
|
||||
wrapper.dataset.fieldLabel = 'folder';
|
||||
|
||||
checkAllCheckboxes();
|
||||
|
||||
@@ -423,7 +471,7 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
test("if fields are called 'team member'", () => {
|
||||
|
||||
formGroup.dataset.fieldLabel = 'team member';
|
||||
wrapper.dataset.fieldLabel = 'team member';
|
||||
|
||||
checkAllCheckboxes();
|
||||
|
||||
@@ -447,7 +495,7 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
test("if fields are called 'folder'", () => {
|
||||
|
||||
formGroup.dataset.fieldLabel = 'folder';
|
||||
wrapper.dataset.fieldLabel = 'folder';
|
||||
|
||||
checkAllCheckboxesButTheLast();
|
||||
|
||||
@@ -466,7 +514,7 @@ describe('Collapsible fieldset', () => {
|
||||
|
||||
test("if fields are called 'team member'", () => {
|
||||
|
||||
formGroup.dataset.fieldLabel = 'team member';
|
||||
wrapper.dataset.fieldLabel = 'team member';
|
||||
|
||||
checkAllCheckboxesButTheLast();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user