From 878cb17b62be8bf4ad006f0dbeae22919728f5f5 Mon Sep 17 00:00:00 2001 From: Dharini Jeeva Date: Thu, 13 Mar 2025 09:51:37 -0700 Subject: [PATCH] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20use=20test=20selecto?= =?UTF-8?q?r=20in=20groups/members=20route=20(#2719)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scopes/scope/groups/group/members.hbs | 2 +- .../tests/acceptance/groups/delete-test.js | 6 +- .../tests/acceptance/groups/members-test.js | 108 ++++++++++-------- ui/admin/tests/acceptance/groups/selectors.js | 11 +- ui/admin/tests/helpers/selectors.js | 2 + 5 files changed, 79 insertions(+), 50 deletions(-) diff --git a/ui/admin/app/templates/scopes/scope/groups/group/members.hbs b/ui/admin/app/templates/scopes/scope/groups/group/members.hbs index 3a5e44ca9..ae4537d83 100644 --- a/ui/admin/app/templates/scopes/scope/groups/group/members.hbs +++ b/ui/admin/app/templates/scopes/scope/groups/group/members.hbs @@ -67,7 +67,7 @@ {{#if (can 'removeMembers group' @model.group)}} - + { return new Response( 400, @@ -91,18 +96,18 @@ module('Acceptance | groups | members', function (hooks) { { status: 400, code: 'invalid_argument', - message: 'The request was invalid.', + message: errorMsg, details: {}, }, ); }); await visit(urls.members); - assert.strictEqual(findAll('tbody tr').length, membersCount); - await click('.hds-dropdown-toggle-icon'); - await click('tbody tr .hds-dropdown-list-item button'); - assert - .dom(commonSelectors.ALERT_TOAST_BODY) - .hasText('The request was invalid.'); + assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount }); + + await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN); + await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN_DELETE_MEMBER); + + assert.dom(commonSelectors.ALERT_TOAST_BODY).hasText(errorMsg); }); test('visiting member selection', async function (assert) { @@ -113,8 +118,8 @@ module('Acceptance | groups | members', function (hooks) { test('can navigate to add members with proper authorization', async function (assert) { await visit(urls.group); - await click(MANAGE_DROPDOWN_SELECTOR); - assert.dom(ADD_MEMBERS_ACTION_SELECTOR).isVisible(); + await click(selectors.MANAGE_DROPDOWN); + assert.dom(selectors.MANAGE_DROPDOWN_ADD_MEMBER).isVisible(); }); test('cannot navigate to add members without proper authorization', async function (assert) { @@ -122,42 +127,56 @@ module('Acceptance | groups | members', function (hooks) { (item) => item !== 'add-members', ); instances.group.update({ authorized_actions }); + await visit(urls.group); - assert.notOk(find(`[href="${urls.addMembers}"]`)); + + assert.dom(commonSelectors.HREF(urls.addMembers)).doesNotExist(); }); test('select and save members to add', async function (assert) { instances.group.update({ memberIds: [] }); await visit(urls.members); - assert.strictEqual(findAll('tbody tr').length, 0); - await click(MANAGE_DROPDOWN_SELECTOR); - await click(ADD_MEMBERS_ACTION_SELECTOR); + + assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 }); + + await click(selectors.MANAGE_DROPDOWN); + await click(selectors.MANAGE_DROPDOWN_ADD_MEMBER); + assert.strictEqual(currentURL(), urls.addMembers); // Click three times to select, unselect, then reselect (for coverage) - await click('tbody label'); - await click('tbody label'); - await click('tbody label'); - await click('form [type="submit"]'); + await click(commonSelectors.TABLE_ROW_CHECKBOX); + await click(commonSelectors.SAVE_BTN); + await visit(urls.members); - assert.strictEqual(findAll('tbody tr').length, 1); + + assert.dom(commonSelectors.TABLE_ROW).exists({ count: 1 }); }); test('select and cancel members to add', async function (assert) { await visit(urls.members); - assert.strictEqual(findAll('tbody tr').length, membersCount); - await click('.hds-dropdown-toggle-icon'); - await click('tbody tr .hds-dropdown-list-item button'); - assert.strictEqual(findAll('tbody tr').length, membersCount - 1); - await click(MANAGE_DROPDOWN_SELECTOR); - await click(ADD_MEMBERS_ACTION_SELECTOR); + + assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount }); + + await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN); + await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN_DELETE_MEMBER); + + assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount - 1 }); + + await click(selectors.MANAGE_DROPDOWN); + await click(selectors.MANAGE_DROPDOWN_ADD_MEMBER); + assert.strictEqual(currentURL(), urls.addMembers); - await click('tbody label'); - await click('form [type="button"]'); - await visit(urls.members); - assert.strictEqual(findAll('tbody tr').length, membersCount - 1); + + await click(commonSelectors.TABLE_ROW_CHECKBOX); + + await click(commonSelectors.CANCEL_BTN); + + assert.strictEqual(currentURL(), urls.members); + assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount - 1 }); }); test('shows error message on member add', async function (assert) { + const errorMsg = 'The request was invalid.'; this.server.post('/groups/:idMethod', () => { return new Response( 400, @@ -165,17 +184,16 @@ module('Acceptance | groups | members', function (hooks) { { status: 400, code: 'invalid_argument', - message: 'The request was invalid.', + message: errorMsg, details: {}, }, ); }); instances.group.update({ memberIds: [] }); await visit(urls.addMembers); - await click('tbody label'); - await click('form [type="submit"]'); - assert - .dom(commonSelectors.ALERT_TOAST_BODY) - .hasText('The request was invalid.'); + + await click(commonSelectors.SAVE_BTN); + + assert.dom(commonSelectors.ALERT_TOAST_BODY).hasText(errorMsg); }); }); diff --git a/ui/admin/tests/acceptance/groups/selectors.js b/ui/admin/tests/acceptance/groups/selectors.js index c84ccb7fa..775876ccb 100644 --- a/ui/admin/tests/acceptance/groups/selectors.js +++ b/ui/admin/tests/acceptance/groups/selectors.js @@ -5,4 +5,13 @@ export const MANAGE_DROPDOWN = '[data-test-manage-group-dropdown] button:first-child'; -export const DELETE_ACTION = '[data-test-manage-group-dropdown] ul li button'; +export const MANAGE_DROPDOWN_DELETE_GROUP = + '[data-test-manage-group-dropdown] ul li button'; + +// Members +export const TABLE_MEMBER_ACTION_DROPDOWN = + '[data-test-group-member-action] button:first-child'; +export const MANAGE_DROPDOWN_ADD_MEMBER = + '[data-test-manage-group-dropdown] ul li a'; +export const TABLE_MEMBER_ACTION_DROPDOWN_DELETE_MEMBER = + '[data-test-group-member-action] ul li button'; diff --git a/ui/admin/tests/helpers/selectors.js b/ui/admin/tests/helpers/selectors.js index 38772a907..6112e75b1 100644 --- a/ui/admin/tests/helpers/selectors.js +++ b/ui/admin/tests/helpers/selectors.js @@ -15,6 +15,8 @@ export const FIELD_DESCRIPTION = '[name=description]'; export const FIELD_DESCRIPTION_VALUE = 'description'; export const TABLE_RESOURCE_LINK = (url) => `tbody [href="${url}"]`; +export const TABLE_ROW = 'tbody tr'; +export const TABLE_ROW_CHECKBOX = 'tbody tr input[type="checkbox"]'; export const RESOURCE_NOT_FOUND_SUBTITLE = '[data-test-error-application-state] .hds-application-state__error-code';