diff --git a/ui/admin/app/templates/scopes/scope/auth-methods/index.hbs b/ui/admin/app/templates/scopes/scope/auth-methods/index.hbs index 363f58028..490aeab83 100644 --- a/ui/admin/app/templates/scopes/scope/auth-methods/index.hbs +++ b/ui/admin/app/templates/scopes/scope/auth-methods/index.hbs @@ -149,7 +149,6 @@ /> {{#unless B.data.isPrimary}} {{t 'resources.auth-method.actions.make-primary'}} @@ -174,7 +173,7 @@ @currentPageSize={{this.pageSize}} /> {{else}} - + - `.search-filtering [name="${name}"] button`; - const FILTER_APPLY_BUTTON_SELECTOR = - '.search-filtering [data-test-dropdown-apply-button]'; - const AUTH_ACTIONS_SELECTOR = (id) => - `tbody [data-test-auth-methods-table-row="${id}"] .hds-table__td:last-child .hds-dropdown button`; - const MAKE_PRIMARY_ACTION_SELECTOR = '[data-test-make-primary-action]'; - const instances = { scopes: { global: null, @@ -76,28 +68,28 @@ module('Acceptance | auth-methods | list', function (hooks) { test('users can navigate to auth methods with proper authorization', async function (assert) { await visit(urls.globalScope); - await click(`[href="${urls.orgScope}"]`); + await click(commonSelectors.HREF(urls.orgScope)); assert.true( instances.scopes.org.authorized_collection_actions[ 'auth-methods' ].includes('list'), ); - assert.dom(`[href="${urls.authMethods}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.authMethods)).isVisible(); }); test('users cannot navigate to index without either list or create actions', async function (assert) { instances.scopes.org.authorized_collection_actions['auth-methods'] = []; await visit(urls.globalScope); - await click(`[href="${urls.orgScope}"]`); + await click(commonSelectors.HREF(urls.orgScope)); assert.false( instances.scopes.org.authorized_collection_actions[ 'auth-methods' ].includes('list'), ); - assert.dom(`[href="${urls.authMethods}"]`).doesNotExist(); + assert.dom(commonSelectors.HREF(urls.authMethods)).isNotVisible(); }); test('users can navigate to index with only create action', async function (assert) { @@ -106,73 +98,79 @@ module('Acceptance | auth-methods | list', function (hooks) { ]; await visit(urls.globalScope); - await click(`[href="${urls.orgScope}"]`); - - assert.dom(`[href="${urls.authMethods}"]`).exists(); + await click(commonSelectors.HREF(urls.orgScope)); + assert.dom(commonSelectors.HREF(urls.authMethods)).isVisible(); }); test('user can search for a specifc auth-method by id', async function (assert) { await visit(urls.orgScope); - await click(`[href="${urls.authMethods}"]`); + await click(commonSelectors.HREF(urls.authMethods)); + assert.dom(commonSelectors.HREF(urls.passwordAuthMethod)).isVisible(); + assert.dom(commonSelectors.HREF(urls.oidcAuthMethod)).isVisible(); - assert.dom(`[href="${urls.passwordAuthMethod}"]`).exists(); - assert.dom(`[href="${urls.oidcAuthMethod}"]`).exists(); + await fillIn(selectors.SEARCH_BAR_INPUT, instances.passwordAuthMethod.id); + await waitFor(commonSelectors.HREF(urls.oidcAuthMethod), { count: 0 }); - await fillIn(SEARCH_INPUT_SELECTOR, instances.passwordAuthMethod.id); - await waitFor(`[href="${urls.oidcAuthMethod}"]`, { count: 0 }); - - assert.dom(`[href="${urls.passwordAuthMethod}"]`).exists(); - assert.dom(`[href="${urls.oidcAuthMethod}"]`).doesNotExist(); + assert.dom(commonSelectors.HREF(urls.passwordAuthMethod)).isVisible(); + assert.dom(commonSelectors.HREF(urls.oidcAuthMethod)).isNotVisible(); }); test('user can search for auth-methods and get no results', async function (assert) { await visit(urls.orgScope); - await click(`[href="${urls.authMethods}"]`); + await click(commonSelectors.HREF(urls.authMethods)); + assert.dom(commonSelectors.HREF(urls.passwordAuthMethod)).isVisible(); + assert.dom(commonSelectors.HREF(urls.oidcAuthMethod)).isVisible(); - assert.dom(`[href="${urls.passwordAuthMethod}"]`).exists(); - assert.dom(`[href="${urls.oidcAuthMethod}"]`).exists(); + await fillIn(selectors.SEARCH_BAR_INPUT, 'fake target that does not exist'); + await waitFor(commonSelectors.PAGE_MESSAGE_HEADER, { count: 1 }); - await fillIn(SEARCH_INPUT_SELECTOR, 'fake target that does not exist'); - await waitFor(NO_RESULTS_MSG_SELECTOR, { count: 1 }); - - assert.dom(`[href="${urls.passwordAuthMethod}"]`).doesNotExist(); - assert.dom(`[href="${urls.oidcAuthMethod}"]`).doesNotExist(); - assert.dom(NO_RESULTS_MSG_SELECTOR).includesText('No results found'); + assert.dom(commonSelectors.HREF(urls.passwordAuthMethod)).isNotVisible(); + assert.dom(commonSelectors.HREF(urls.oidcAuthMethod)).isNotVisible(); + assert + .dom(commonSelectors.PAGE_MESSAGE_HEADER) + .includesText('No results found'); }); test('user can filter for auth-methods by type', async function (assert) { await visit(urls.orgScope); - await click(`[href="${urls.authMethods}"]`); + await click(commonSelectors.HREF(urls.authMethods)); + assert.dom(commonSelectors.HREF(urls.passwordAuthMethod)).isVisible(); + assert.dom(commonSelectors.HREF(urls.oidcAuthMethod)).isVisible(); - assert.dom(`[href="${urls.passwordAuthMethod}"]`).exists(); - assert.dom(`[href="${urls.oidcAuthMethod}"]`).exists(); + await click(commonSelectors.FILTER_DROPDOWN('type')); + await click( + commonSelectors.FILTER_DROPDOWN_ITEM(TYPE_AUTH_METHOD_PASSWORD), + ); + await click(commonSelectors.FILTER_DROPDOWN_ITEM_APPLY_BTN('type')); - await click(FILTER_DROPDOWN_SELECTOR('type')); - await click(`input[value="${TYPE_AUTH_METHOD_PASSWORD}"]`); - await click(FILTER_APPLY_BUTTON_SELECTOR); - - assert.dom(`[href="${urls.oidcAuthMethod}"]`).doesNotExist(); - assert.dom(`[href="${urls.passwordAuthMethod}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.oidcAuthMethod)).isNotVisible(); + assert.dom(commonSelectors.HREF(urls.passwordAuthMethod)).isVisible(); }); test('user can filter for auth-methods by primary', async function (assert) { await visit(urls.orgScope); - await click(`[href="${urls.authMethods}"]`); + await click(commonSelectors.HREF(urls.authMethods)); + assert.dom(commonSelectors.HREF(urls.passwordAuthMethod)).isVisible(); + assert.dom(commonSelectors.HREF(urls.oidcAuthMethod)).isVisible(); - assert.dom(`[href="${urls.passwordAuthMethod}"]`).exists(); - assert.dom(`[href="${urls.oidcAuthMethod}"]`).exists(); + await click( + selectors.TABLE_ACTION_DROPDOWN(instances.passwordAuthMethod.id), + ); + await click( + selectors.TABLE_ACTION_DROPDOWN_MAKE_PRIMARY( + instances.passwordAuthMethod.id, + ), + ); - await click(AUTH_ACTIONS_SELECTOR(instances.passwordAuthMethod.id)); - await click(MAKE_PRIMARY_ACTION_SELECTOR); - await click(FILTER_DROPDOWN_SELECTOR('primary')); - await click(`input[value="true"]`); - await click(FILTER_APPLY_BUTTON_SELECTOR); + await click(commonSelectors.FILTER_DROPDOWN('primary')); + await click(commonSelectors.FILTER_DROPDOWN_ITEM('true')); + await click(commonSelectors.FILTER_DROPDOWN_ITEM_APPLY_BTN('primary')); - assert.dom(`[href="${urls.oidcAuthMethod}"]`).doesNotExist(); - assert.dom(`[href="${urls.passwordAuthMethod}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.oidcAuthMethod)).isNotVisible(); + assert.dom(commonSelectors.HREF(urls.passwordAuthMethod)).isVisible(); }); }); diff --git a/ui/admin/tests/acceptance/auth-methods/selectors.js b/ui/admin/tests/acceptance/auth-methods/selectors.js index 9479a0370..2c4be3fd2 100644 --- a/ui/admin/tests/acceptance/auth-methods/selectors.js +++ b/ui/admin/tests/acceptance/auth-methods/selectors.js @@ -90,3 +90,10 @@ export const TABLE_FIRST_ROW_ACTION_DROPDOWN = 'tbody tr:first-child td:last-child button'; export const TABLE_FIRST_ROW_ACTION_FIRST_ITEM = 'tbody tr:first-child td:last-child ul li:first-child button'; + +export const SEARCH_BAR_INPUT = '[type=search]'; + +export const TABLE_ACTION_DROPDOWN = (authMethodId) => + `tbody [data-test-auth-methods-table-row="${authMethodId}"] .hds-table__td:last-child .hds-dropdown button`; +export const TABLE_ACTION_DROPDOWN_MAKE_PRIMARY = (authMethodId) => + `tbody tr[data-test-auth-methods-table-row="${authMethodId}"] td:last-child ul li:first-child button`; diff --git a/ui/admin/tests/helpers/selectors.js b/ui/admin/tests/helpers/selectors.js index eac041772..ab0448489 100644 --- a/ui/admin/tests/helpers/selectors.js +++ b/ui/admin/tests/helpers/selectors.js @@ -20,6 +20,7 @@ export const RESOURCE_NOT_FOUND_SUBTITLE = '[data-test-error-application-state] .hds-application-state__error-code'; export const RESOURCE_NOT_FOUND_VALUE = 'ERROR 404'; +export const PAGE_MESSAGE_HEADER = '.hds-application-state__header'; export const PAGE_MESSAGE_DESCRIPTION = '.hds-application-state__body-text'; export const PAGE_MESSAGE_LINK = '.hds-application-state__footer .hds-link-standalone'; @@ -41,3 +42,9 @@ export const MODAL_WARNING_CANCEL_BTN = 'dialog .hds-modal__footer button:last-child'; export const MODAL_WARNING_TITLE = '.hds-modal__header'; export const MODAL_WARNING_MESSAGE = '.hds-modal__body'; + +export const FILTER_DROPDOWN = (filterName) => + `.search-filtering [name="${filterName}"] button`; +export const FILTER_DROPDOWN_ITEM = (itemList) => `input[value="${itemList}"]`; +export const FILTER_DROPDOWN_ITEM_APPLY_BTN = (filterName) => + `.search-filtering [name="${filterName}"] .hds-dropdown__footer button`;