Fix issues in tests from new fields

This commit is contained in:
Tom Byers
2020-04-23 10:57:24 +01:00
parent 3b23ae46a7
commit 05088037d2
5 changed files with 176 additions and 117 deletions

View File

@@ -259,11 +259,11 @@ 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'
assert page.select('input[type=checkbox]')[0]['value'] == 'view_activity'
assert page.select('input[type=checkbox]')[1]['value'] == 'send_messages'
assert page.select('input[type=checkbox]')[2]['value'] == 'manage_templates'
assert page.select('input[type=checkbox]')[3]['value'] == 'manage_service'
assert page.select('input[type=checkbox]')[4]['value'] == 'manage_api_keys'
@pytest.mark.parametrize('service_has_email_auth, displays_auth_type', [
@@ -370,8 +370,8 @@ 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]['value'] == expected_input_value
assert checkboxes[index].has_attr('checked') == expected_checked
@@ -413,11 +413,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',
@@ -429,13 +431,16 @@ 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',
}
),
(
@@ -616,10 +621,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,
@@ -678,7 +685,7 @@ 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
@@ -707,11 +714,13 @@ def test_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',
'permissions_field': [
'view_activity',
'send_messages',
'manage_templates',
'manage_service',
'manage_api_keys',
]
},
_follow_redirects=True,
)
@@ -762,11 +771,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,

View File

@@ -2266,8 +2266,8 @@ def test_incorrect_sms_sender_input(
@pytest.mark.parametrize('reply_to_addresses, data, api_default_args', [
([], {}, True),
(create_multiple_email_reply_to_addresses(), {}, False),
(create_multiple_email_reply_to_addresses(), {"is_default": "y"}, True)
(create_multiple_email_reply_to_addresses(), {"is_default": []}, False),
(create_multiple_email_reply_to_addresses(), {"is_default": ["y"]}, True)
])
def test_add_reply_to_email_address_sends_test_notification(
mocker, client_request, reply_to_addresses, data, api_default_args
@@ -2387,8 +2387,8 @@ def test_add_reply_to_email_address_fails_if_notification_not_delivered_in_45_se
@pytest.mark.parametrize('letter_contact_blocks, data, api_default_args', [
([], {}, True), # no existing letter contact blocks
(create_multiple_letter_contact_blocks(), {}, False),
(create_multiple_letter_contact_blocks(), {"is_default": "y"}, True)
(create_multiple_letter_contact_blocks(), {"is_default": []}, False),
(create_multiple_letter_contact_blocks(), {"is_default": ["y"]}, True)
])
def test_add_letter_contact(
letter_contact_blocks,
@@ -2463,8 +2463,8 @@ def test_add_letter_contact_when_coming_from_template(
@pytest.mark.parametrize('sms_senders, data, api_default_args', [
([], {}, True),
(create_multiple_sms_senders(), {}, False),
(create_multiple_sms_senders(), {"is_default": "y"}, True)
(create_multiple_sms_senders(), {"is_default": []}, False),
(create_multiple_sms_senders(), {"is_default": ["y"]}, True)
])
def test_add_sms_sender(
sms_senders,
@@ -2530,10 +2530,10 @@ def test_default_box_doesnt_show_on_first_letter_sender(
@pytest.mark.parametrize('reply_to_address, data, api_default_args', [
(create_reply_to_email_address(is_default=True), {"is_default": "y"}, True),
(create_reply_to_email_address(is_default=True), {}, True),
(create_reply_to_email_address(is_default=False), {}, False),
(create_reply_to_email_address(is_default=False), {"is_default": "y"}, True)
(create_reply_to_email_address(is_default=True), {"is_default": ["y"]}, True),
(create_reply_to_email_address(is_default=True), {"is_default": []}, True),
(create_reply_to_email_address(is_default=False), {"is_default": []}, False),
(create_reply_to_email_address(is_default=False), {"is_default": ["y"]}, True)
])
def test_edit_reply_to_email_address_sends_verification_notification_if_address_is_changed(
reply_to_address,
@@ -2558,10 +2558,10 @@ def test_edit_reply_to_email_address_sends_verification_notification_if_address_
@pytest.mark.parametrize('reply_to_address, data, api_default_args', [
(create_reply_to_email_address(), {"is_default": "y"}, True),
(create_reply_to_email_address(), {}, True),
(create_reply_to_email_address(is_default=False), {}, False),
(create_reply_to_email_address(is_default=False), {"is_default": "y"}, True)
(create_reply_to_email_address(), {"is_default": ["y"]}, True),
(create_reply_to_email_address(), {"is_default": []}, True),
(create_reply_to_email_address(is_default=False), {"is_default": []}, False),
(create_reply_to_email_address(is_default=False), {"is_default": ["y"]}, True)
])
def test_edit_reply_to_email_address_goes_straight_to_update_if_address_not_changed(
reply_to_address,
@@ -2618,7 +2618,7 @@ def test_add_edit_reply_to_email_address_goes_straight_to_update_if_address_not_
message=error_message
)]
)
data = {"is_default": "y", 'email_address': "reply_to@example.com"}
data = {"is_default": ["y"], 'email_address': "reply_to@example.com"}
page = client_request.post(
url,
service_id=SERVICE_ONE_ID,
@@ -2718,10 +2718,10 @@ def test_delete_reply_to_email_address(
@pytest.mark.parametrize('letter_contact_block, data, api_default_args', [
(create_letter_contact_block(), {"is_default": "y"}, True),
(create_letter_contact_block(), {}, True),
(create_letter_contact_block(is_default=False), {}, False),
(create_letter_contact_block(is_default=False), {"is_default": "y"}, True)
(create_letter_contact_block(), {"is_default": ["y"]}, True),
(create_letter_contact_block(), {"is_default": []}, True),
(create_letter_contact_block(is_default=False), {"is_default": []}, False),
(create_letter_contact_block(is_default=False), {"is_default": ["y"]}, True)
])
def test_edit_letter_contact_block(
letter_contact_block,
@@ -2795,10 +2795,10 @@ def test_delete_letter_contact_block(
@pytest.mark.parametrize('sms_sender, data, api_default_args', [
(create_sms_sender(), {"is_default": "y", "sms_sender": "test"}, True),
(create_sms_sender(), {"sms_sender": "test"}, True),
(create_sms_sender(is_default=False), {"sms_sender": "test"}, False),
(create_sms_sender(is_default=False), {"is_default": "y", "sms_sender": "test"}, True)
(create_sms_sender(), {"is_default": ["y"], "sms_sender": "test"}, True),
(create_sms_sender(), {"is_default": [], "sms_sender": "test"}, True),
(create_sms_sender(is_default=False), {"is_default": [], "sms_sender": "test"}, False),
(create_sms_sender(is_default=False), {"is_default": ["y"], "sms_sender": "test"}, True)
])
def test_edit_sms_sender(
sms_sender,

View File

@@ -395,7 +395,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 +527,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 +538,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(

View File

@@ -167,7 +167,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)
@@ -236,7 +236,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(
@@ -257,7 +257,7 @@ 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_templates_and_folders = len(page.select('#template-list .govuk-label'))
count_of_folders = len(page.select('.template-list-folder:first-child'))
count_of_templates = count_of_templates_and_folders - count_of_folders

View File

@@ -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();