diff --git a/ui/admin/tests/acceptance/users/accounts-test.js b/ui/admin/tests/acceptance/users/accounts-test.js index 4ffd6de43..d5dad9a66 100644 --- a/ui/admin/tests/acceptance/users/accounts-test.js +++ b/ui/admin/tests/acceptance/users/accounts-test.js @@ -12,6 +12,7 @@ import { Response } from 'miragejs'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { TYPE_AUTH_METHOD_LDAP } from 'api/models/auth-method'; import * as commonSelectors from 'admin/tests/helpers/selectors'; +import * as selectors from './selectors'; module('Acceptance | users | accounts', function (hooks) { setupApplicationTest(hooks); @@ -20,18 +21,6 @@ module('Acceptance | users | accounts', function (hooks) { let accountsCount; let features; - const ACCOUNTS_TYPE_SELECTOR = 'tbody tr .hds-badge__text'; - const ADD_ACCOUNTS_ACTION_SELECTOR = - '[data-test-manage-user-dropdown] ul li:first-child a'; - const MANAGE_DROPDOWN_SELECTOR = - '[data-test-manage-user-dropdown] button:first-child'; - const TABLE_ROWS_SELECTOR = 'tbody tr'; - const CHECKBOX_SELECTOR = 'tbody label'; - const SUBMIT_BTN_SELECTOR = 'form [type="submit"]'; - const CANCEL_BTN_SELECTOR = 'form [type="button"]'; - const REMOVE_ACTION_SELECTOR = 'tbody tr .hds-dropdown-list-item button'; - const ACCOUNTS_ACTION_SELECTOR = '.hds-dropdown-toggle-icon'; - const instances = { scopes: { global: null, @@ -74,21 +63,24 @@ module('Acceptance | users | accounts', function (hooks) { test('visiting user accounts', async function (assert) { await visit(urls.user); - await click(`[href="${urls.accounts}"]`); + await click(commonSelectors.HREF(urls.accounts)); await a11yAudit(); assert.strictEqual(currentURL(), urls.accounts); - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: accountsCount }); + assert.dom(commonSelectors.TABLE_ROW).exists({ count: accountsCount }); }); test('can remove an account', async function (assert) { await visit(urls.user); - await click(`[href="${urls.accounts}"]`); - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: accountsCount }); - await click(ACCOUNTS_ACTION_SELECTOR); - await click(REMOVE_ACTION_SELECTOR); - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: accountsCount - 1 }); + await click(commonSelectors.HREF(urls.accounts)); + + assert.dom(commonSelectors.TABLE_ROW).exists({ count: accountsCount }); + + await click(commonSelectors.TABLE_FIRST_ROW_ACTION_DROPDOWN); + await click(commonSelectors.TABLE_FIRST_ROW_ACTION_DROPDOWN_ITEM_BTN); + + assert.dom(commonSelectors.TABLE_ROW).exists({ count: accountsCount - 1 }); }); test('cannot remove an account without proper authorization', async function (assert) { @@ -98,9 +90,11 @@ module('Acceptance | users | accounts', function (hooks) { instances.user.update({ authorized_actions }); await visit(urls.user); - await click(`[href="${urls.accounts}"]`); + await click(commonSelectors.HREF(urls.accounts)); - assert.dom(REMOVE_ACTION_SELECTOR).doesNotExist(); + assert + .dom(commonSelectors.TABLE_FIRST_ROW_ACTION_DROPDOWN_ITEM_BTN) + .doesNotExist(); }); test('cannot remove an ldap account when feature flag disabled', async function (assert) { @@ -116,10 +110,10 @@ module('Acceptance | users | accounts', function (hooks) { instances.user.update({ accountIds: [id] }); await visit(urls.user); - await click(`[href="${urls.accounts}"]`); + await click(commonSelectors.HREF(urls.accounts)); - assert.dom(ACCOUNTS_ACTION_SELECTOR).doesNotExist(); - assert.dom(ACCOUNTS_TYPE_SELECTOR).hasText('LDAP'); + assert.dom(commonSelectors.TABLE_FIRST_ROW_ACTION_DROPDOWN).doesNotExist(); + assert.dom(selectors.TABLE_ROW_ACCOUNT_TYPE).hasText('LDAP'); }); test('can remove an ldap account when feature flag enabled', async function (assert) { @@ -136,10 +130,10 @@ module('Acceptance | users | accounts', function (hooks) { instances.user.update({ accountIds: [id] }); await visit(urls.user); - await click(`[href="${urls.accounts}"]`); + await click(commonSelectors.HREF(urls.accounts)); - assert.dom(ACCOUNTS_ACTION_SELECTOR).exists(); - assert.dom(ACCOUNTS_TYPE_SELECTOR).hasText('LDAP'); + assert.dom(commonSelectors.TABLE_FIRST_ROW_ACTION_DROPDOWN).exists(); + assert.dom(selectors.TABLE_ROW_ACCOUNT_TYPE).hasText('LDAP'); }); test('shows error message on account remove', async function (assert) { @@ -157,17 +151,21 @@ module('Acceptance | users | accounts', function (hooks) { }); await visit(urls.user); - await click(`[href="${urls.accounts}"]`); - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: accountsCount }); - await click(ACCOUNTS_ACTION_SELECTOR); - await click(REMOVE_ACTION_SELECTOR); + await click(commonSelectors.HREF(urls.accounts)); + + assert.dom(commonSelectors.TABLE_ROW).exists({ count: accountsCount }); + + await click(commonSelectors.TABLE_FIRST_ROW_ACTION_DROPDOWN); + await click(commonSelectors.TABLE_FIRST_ROW_ACTION_DROPDOWN_ITEM_BTN); + assert.dom(commonSelectors.ALERT_TOAST_BODY).isVisible(); }); test('visiting account add accounts', async function (assert) { await visit(urls.accounts); - await click(MANAGE_DROPDOWN_SELECTOR); - await click(ADD_ACCOUNTS_ACTION_SELECTOR); + + await click(selectors.MANAGE_DROPDOWN_USER); + await click(selectors.MANAGE_DROPDOWN_USER_ADD_ACCOUNTS); await a11yAudit(); assert.strictEqual(currentURL(), urls.addAccounts); @@ -175,10 +173,11 @@ module('Acceptance | users | accounts', function (hooks) { test('can navigate to add accounts with proper authorization', async function (assert) { await visit(urls.user); - await click(`[href="${urls.accounts}"]`); - await click(MANAGE_DROPDOWN_SELECTOR); - assert.dom(`[href="${urls.addAccounts}"]`).isVisible(); + await click(commonSelectors.HREF(urls.accounts)); + await click(selectors.MANAGE_DROPDOWN_USER); + + assert.dom(commonSelectors.HREF(urls.addAccounts)).isVisible(); }); test('cannot navigate to add accounts without proper authorization', async function (assert) { @@ -188,8 +187,9 @@ module('Acceptance | users | accounts', function (hooks) { instances.user.update({ authorized_actions }); await visit(urls.user); - await click(`[href="${urls.accounts}"]`); - assert.dom(ADD_ACCOUNTS_ACTION_SELECTOR).doesNotExist(); + await click(commonSelectors.HREF(urls.accounts)); + + assert.dom(selectors.MANAGE_DROPDOWN_USER_ADD_ACCOUNTS).doesNotExist(); }); test('cannot add ldap accounts to user when feature flag is disabled', async function (assert) { @@ -207,12 +207,12 @@ module('Acceptance | users | accounts', function (hooks) { instances.user.accountIds.length; await visit(urls.user); - await click(`[href="${urls.accounts}"]`); - await click(MANAGE_DROPDOWN_SELECTOR); - await click(ADD_ACCOUNTS_ACTION_SELECTOR); + await click(commonSelectors.HREF(urls.accounts)); + await click(selectors.MANAGE_DROPDOWN_USER); + await click(selectors.MANAGE_DROPDOWN_USER_ADD_ACCOUNTS); assert - .dom(TABLE_ROWS_SELECTOR) + .dom(commonSelectors.TABLE_ROW) .exists({ count: accountsAvailableCount - 1 }); }); @@ -232,50 +232,56 @@ module('Acceptance | users | accounts', function (hooks) { instances.user.accountIds.length; await visit(urls.user); - await click(`[href="${urls.accounts}"]`); + await click(commonSelectors.HREF(urls.accounts)); + await click(selectors.MANAGE_DROPDOWN_USER); + await click(selectors.MANAGE_DROPDOWN_USER_ADD_ACCOUNTS); - await click(MANAGE_DROPDOWN_SELECTOR); - await click(ADD_ACCOUNTS_ACTION_SELECTOR); - - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: accountsAvailableCount }); + assert + .dom(commonSelectors.TABLE_ROW) + .exists({ count: accountsAvailableCount }); }); test('select and save accounts to add', async function (assert) { instances.user.update({ accountIds: [] }); await visit(urls.user); - await click(`[href="${urls.accounts}"]`); - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: 0 }); - await click(MANAGE_DROPDOWN_SELECTOR); - await click(ADD_ACCOUNTS_ACTION_SELECTOR); + await click(commonSelectors.HREF(urls.accounts)); + + assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 }); + + await click(selectors.MANAGE_DROPDOWN_USER); + await click(selectors.MANAGE_DROPDOWN_USER_ADD_ACCOUNTS); + assert.strictEqual(currentURL(), urls.addAccounts); + // Click three times to select, unselect, then reselect (for coverage) - await click(CHECKBOX_SELECTOR); - await click(CHECKBOX_SELECTOR); - await click(CHECKBOX_SELECTOR); - await click(SUBMIT_BTN_SELECTOR); + await click(commonSelectors.TABLE_ROW_CHECKBOX); + await click(commonSelectors.TABLE_ROW_CHECKBOX); + await click(commonSelectors.TABLE_ROW_CHECKBOX); + await click(commonSelectors.SAVE_BTN); await visit(urls.accounts); - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: 1 }); + assert.dom(commonSelectors.TABLE_ROW).exists({ count: 1 }); assert.strictEqual(instances.user.accountIds.length, 1); }); test('select and cancel accounts to add', async function (assert) { await visit(urls.user); - await click(`[href="${urls.accounts}"]`); - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: accountsCount }); + await click(commonSelectors.HREF(urls.accounts)); - await click(MANAGE_DROPDOWN_SELECTOR); - await click(ADD_ACCOUNTS_ACTION_SELECTOR); + assert.dom(commonSelectors.TABLE_ROW).exists({ count: accountsCount }); + + await click(selectors.MANAGE_DROPDOWN_USER); + await click(selectors.MANAGE_DROPDOWN_USER_ADD_ACCOUNTS); assert.strictEqual(currentURL(), urls.addAccounts); - await click(CHECKBOX_SELECTOR); - await click(CANCEL_BTN_SELECTOR); + await click(commonSelectors.TABLE_ROW_CHECKBOX); + await click(commonSelectors.CANCEL_BTN); assert.strictEqual(currentURL(), urls.accounts); - assert.dom(TABLE_ROWS_SELECTOR).exists({ count: accountsCount }); + assert.dom(commonSelectors.TABLE_ROW).exists({ count: accountsCount }); }); test('shows error message on account add', async function (assert) { @@ -293,8 +299,10 @@ module('Acceptance | users | accounts', function (hooks) { }); instances.user.update({ accountIds: [] }); await visit(urls.addAccounts); - await click(CHECKBOX_SELECTOR); - await click(SUBMIT_BTN_SELECTOR); + + await click(commonSelectors.TABLE_ROW_CHECKBOX); + await click(commonSelectors.SAVE_BTN); + assert.dom(commonSelectors.ALERT_TOAST_BODY).isVisible(); }); }); diff --git a/ui/admin/tests/acceptance/users/list-test.js b/ui/admin/tests/acceptance/users/list-test.js index cc6430f1e..d65c59582 100644 --- a/ui/admin/tests/acceptance/users/list-test.js +++ b/ui/admin/tests/acceptance/users/list-test.js @@ -10,15 +10,13 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; import { authenticateSession } from 'ember-simple-auth/test-support'; import * as commonSelectors from 'admin/tests/helpers/selectors'; +import * as selectors from './selectors'; module('Acceptance | users | list', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupIndexedDb(hooks); - const SEARCH_INPUT_SELECTOR = '.search-filtering [type="search"]'; - const NO_RESULTS_MSG_SELECTOR = '[data-test-no-user-results]'; - const instances = { scopes: { global: null, @@ -59,7 +57,7 @@ module('Acceptance | users | list', function (hooks) { test('users can navigate to users 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.users.includes('list'), @@ -69,15 +67,14 @@ module('Acceptance | users | list', function (hooks) { 'create', ), ); - - assert.dom(`[href="${urls.users}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.users)).exists(); }); test('user cannot navigate to users tab without either list or create actions', async function (assert) { instances.scopes.org.authorized_collection_actions.users = []; await visit(urls.globalScope); - await click(`[href="${urls.orgScope}"]`); + await click(commonSelectors.HREF(urls.orgScope)); assert.false( instances.scopes.org.authorized_collection_actions.users.includes( @@ -87,7 +84,7 @@ module('Acceptance | users | list', function (hooks) { assert.false( instances.scopes.org.authorized_collection_actions.users.includes('list'), ); - assert.dom(`nav [href="${urls.users}"]`).doesNotExist(); + assert.dom(`nav ${commonSelectors.HREF(urls.users)}`).doesNotExist(); }); test('user can navigate to users tab with only create action', async function (assert) { @@ -97,7 +94,7 @@ module('Acceptance | users | list', function (hooks) { ); await visit(urls.globalScope); - await click(`[href="${urls.orgScope}"]`); + await click(commonSelectors.HREF(urls.orgScope)); assert.false( instances.scopes.org.authorized_collection_actions.users.includes('list'), @@ -107,11 +104,11 @@ module('Acceptance | users | list', function (hooks) { 'create', ), ); - assert.dom(`[href="${urls.users}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.users)).exists(); - await click(`[href="${urls.users}"]`); + await click(commonSelectors.HREF(urls.users)); - assert.dom('.hds-application-state__body-text').isVisible(); + assert.dom(commonSelectors.PAGE_MESSAGE_DESCRIPTION).isVisible(); assert.dom(commonSelectors.TABLE_RESOURCE_LINK(urls.user1)).doesNotExist(); }); @@ -122,7 +119,7 @@ module('Acceptance | users | list', function (hooks) { ); await visit(urls.globalScope); - await click(`[href="${urls.orgScope}"]`); + await click(commonSelectors.HREF(urls.orgScope)); assert.true( instances.scopes.org.authorized_collection_actions.users.includes('list'), @@ -132,41 +129,43 @@ module('Acceptance | users | list', function (hooks) { 'create', ), ); - assert.dom(`[href="${urls.users}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.users)).exists(); - await click(`[href="${urls.users}"]`); + await click(commonSelectors.HREF(urls.users)); - assert.dom(`[href="${urls.user1}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.user1)).exists(); }); test('user can search for a user by id', async function (assert) { await visit(urls.orgScope); - await click(`[href="${urls.users}"]`); + await click(commonSelectors.HREF(urls.users)); - assert.dom(`[href="${urls.user1}"]`).exists(); - assert.dom(`[href="${urls.user2}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.user1)).exists(); + assert.dom(commonSelectors.HREF(urls.user2)).exists(); - await fillIn(SEARCH_INPUT_SELECTOR, instances.user1.id); - await waitUntil(() => findAll(`[href="${urls.user2}"]`).length === 0); + await fillIn(commonSelectors.SEARCH_INPUT, instances.user1.id); + await waitUntil( + () => findAll(commonSelectors.HREF(urls.user2)).length === 0, + ); - assert.dom(`[href="${urls.user1}"]`).exists(); - assert.dom(`[href="${urls.user2}"]`).doesNotExist(); + assert.dom(commonSelectors.HREF(urls.user1)).exists(); + assert.dom(commonSelectors.HREF(urls.user2)).doesNotExist(); }); test('user can search for users and get no results', async function (assert) { await visit(urls.orgScope); - await click(`[href="${urls.users}"]`); + await click(commonSelectors.HREF(urls.users)); - assert.dom(`[href="${urls.user1}"]`).exists(); - assert.dom(`[href="${urls.user2}"]`).exists(); + assert.dom(commonSelectors.HREF(urls.user1)).exists(); + assert.dom(commonSelectors.HREF(urls.user2)).exists(); - await fillIn(SEARCH_INPUT_SELECTOR, 'fake user that does not exist'); - await waitUntil(() => findAll(NO_RESULTS_MSG_SELECTOR).length === 1); + await fillIn(commonSelectors.SEARCH_INPUT, 'fake user that does not exist'); + await waitUntil(() => findAll(selectors.NO_RESULTS_MSG).length === 1); - assert.dom(`[href="${urls.user1}"]`).doesNotExist(); - assert.dom(`[href="${urls.user2}"]`).doesNotExist(); - assert.dom(NO_RESULTS_MSG_SELECTOR).includesText('No results found'); + assert.dom(commonSelectors.HREF(urls.user1)).doesNotExist(); + assert.dom(commonSelectors.HREF(urls.user2)).doesNotExist(); + assert.dom(selectors.NO_RESULTS_MSG).includesText('No results found'); }); }); diff --git a/ui/admin/tests/acceptance/users/selectors.js b/ui/admin/tests/acceptance/users/selectors.js index 98ff81ecc..6b7609ca9 100644 --- a/ui/admin/tests/acceptance/users/selectors.js +++ b/ui/admin/tests/acceptance/users/selectors.js @@ -7,3 +7,7 @@ export const MANAGE_DROPDOWN_USER_DELETE = '[data-test-manage-user-dropdown] ul li button'; export const MANAGE_DROPDOWN_USER = '[data-test-manage-user-dropdown] button:first-child'; +export const NO_RESULTS_MSG = '[data-test-no-user-results]'; +export const MANAGE_DROPDOWN_USER_ADD_ACCOUNTS = + '[data-test-manage-user-dropdown] ul li:first-child a'; +export const TABLE_ROW_ACCOUNT_TYPE = 'tbody tr .hds-badge__text'; diff --git a/ui/admin/tests/acceptance/users/update-test.js b/ui/admin/tests/acceptance/users/update-test.js index b691f3c1f..8f88bb0de 100644 --- a/ui/admin/tests/acceptance/users/update-test.js +++ b/ui/admin/tests/acceptance/users/update-test.js @@ -17,6 +17,8 @@ module('Acceptance | users | update', function (hooks) { setupMirage(hooks); setupIndexedDb(hooks); + let confirmService; + const urls = { orgScope: null, users: null, @@ -43,6 +45,7 @@ module('Acceptance | users | update', function (hooks) { urls.orgScope = `/scopes/${instances.scopes.org.id}`; urls.users = `${urls.orgScope}/users`; urls.user = `${urls.users}/${instances.user.id}`; + confirmService = this.owner.lookup('service:confirm'); await authenticateSession({}); }); @@ -50,15 +53,15 @@ module('Acceptance | users | update', function (hooks) { test('can save changes to an existing user', async function (assert) { await visit(urls.users); - await click(`[href="${urls.user}"]`); - await click('form [type="button"]', 'Activate edit mode'); - await fillIn('[name="name"]', 'Updated user name'); - await click('.rose-form-actions [type="submit"]'); + await click(commonSelectors.HREF(urls.user)); + await click(commonSelectors.EDIT_BTN, 'Activate edit mode'); + await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE); + await click(commonSelectors.SAVE_BTN); assert.strictEqual(currentURL(), urls.user); assert.strictEqual( this.server.schema.users.first().name, - 'Updated user name', + commonSelectors.FIELD_NAME_VALUE, ); }); @@ -67,25 +70,27 @@ module('Acceptance | users | update', function (hooks) { instances.user.authorized_actions.filter((item) => item !== 'update'); await visit(urls.users); - await click(`[href="${urls.user}"]`); + await click(commonSelectors.HREF(urls.user)); assert.false(instances.user.authorized_actions.includes('update')); - assert.dom('form [type="button"]').doesNotExist(); + assert.dom(commonSelectors.EDIT_BTN).doesNotExist(); }); test('can cancel changes to an existing user', async function (assert) { await visit(urls.users); - await click(`[href="${urls.user}"]`); - await click('form [type="button"]', 'Activate edit mode'); - await fillIn('[name="name"]', 'Unsaved user name'); - await click('.rose-form-actions [type="button"]'); + await click(commonSelectors.HREF(urls.user)); + await click(commonSelectors.EDIT_BTN, 'Activate edit mode'); + await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE); + await click(commonSelectors.CANCEL_BTN); - assert.notEqual(instances.user.name, 'Unsaved user name'); - assert.dom('[name="name"]').hasValue(instances.user.name); + assert.notEqual(instances.user.name, commonSelectors.FIELD_NAME_VALUE); + assert.dom(commonSelectors.FIELD_NAME).hasValue(instances.user.name); }); test('saving an existing user with invalid fields displays error messages', async function (assert) { + const errorMessage = + 'Invalid request. Request attempted to make second resource with the same field value that must be unique.'; await visit(urls.users); this.server.patch('/users/:id', () => { return new Response( @@ -94,61 +99,62 @@ module('Acceptance | users | update', function (hooks) { { status: 400, code: 'invalid_argument', - message: 'The request was invalid.', - details: { - request_fields: [ - { - name: 'name', - description: 'Name is required.', - }, - ], - }, + message: errorMessage, }, ); }); - await click(`[href="${urls.user}"]`); - await click('form [type="button"]', 'Activate edit mode'); - await fillIn('[name="name"]', 'User name'); - await click('[type="submit"]'); + await click(commonSelectors.HREF(urls.user)); + await click(commonSelectors.EDIT_BTN, 'Activate edit mode'); + await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE); + await click(commonSelectors.SAVE_BTN); - assert - .dom(commonSelectors.ALERT_TOAST_BODY) - .hasText('The request was invalid.'); - assert.dom('[data-test-error-message-name]').hasText('Name is required.'); + assert.dom(commonSelectors.ALERT_TOAST_BODY).hasText(errorMessage); }); test('can discard unsaved user changes via dialog', async function (assert) { - const confirmService = this.owner.lookup('service:confirm'); confirmService.enabled = true; - assert.notEqual(instances.user.name, 'Unsaved user name'); + assert.notEqual(instances.user.name, commonSelectors.FIELD_NAME_VALUE); await visit(urls.user); - await click('form [type="button"]', 'Activate edit mode'); - await fillIn('[name="name"]', 'Unsaved user name'); + await click(commonSelectors.EDIT_BTN, 'Activate edit mode'); + await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE); + assert.strictEqual(currentURL(), urls.user); - await click(`[href="${urls.users}"]`); + + await click(commonSelectors.HREF(urls.users)); + assert.dom(commonSelectors.MODAL_WARNING).exists(); + await click(commonSelectors.MODAL_WARNING_CONFIRM_BTN, 'Click Discard'); assert.strictEqual(currentURL(), urls.users); - assert.notEqual(this.server.schema.users.first().name, 'Unsaved user name'); + assert.notEqual( + this.server.schema.users.first().name, + commonSelectors.FIELD_NAME_VALUE, + ); }); test('can click cancel on discard dialog box for unsaved user changes', async function (assert) { - const confirmService = this.owner.lookup('service:confirm'); confirmService.enabled = true; - assert.notEqual(instances.user.name, 'Unsaved user name'); + assert.notEqual(instances.user.name, commonSelectors.FIELD_NAME_VALUE); await visit(urls.user); - await click('form [type="button"]', 'Activate edit mode'); - await fillIn('[name="name"]', 'Unsaved user name'); + await click(commonSelectors.EDIT_BTN, 'Activate edit mode'); + await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE); + assert.strictEqual(currentURL(), urls.user); - await click(`[href="${urls.users}"]`); + + await click(commonSelectors.HREF(urls.users)); + assert.dom(commonSelectors.MODAL_WARNING).exists(); + await click(commonSelectors.MODAL_WARNING_CANCEL_BTN, 'Click Cancel'); assert.strictEqual(currentURL(), urls.user); - assert.notEqual(this.server.schema.users.first().name, 'Unsaved user name'); + assert.notEqual( + this.server.schema.users.first().name, + commonSelectors.FIELD_NAME_VALUE, + ); }); }); diff --git a/ui/admin/tests/helpers/selectors.js b/ui/admin/tests/helpers/selectors.js index 0b30d1852..1ed5cf00d 100644 --- a/ui/admin/tests/helpers/selectors.js +++ b/ui/admin/tests/helpers/selectors.js @@ -19,6 +19,10 @@ export const TABLE_ROW = 'tbody tr'; export const TABLE_ROW_CHECKBOX = 'tbody tr input[type="checkbox"]'; export const TABLE_FIRST_ROW_ACTION_DROPDOWN = 'tbody tr:first-child td:last-child button'; +export const TABLE_FIRST_ROW_ACTION_DROPDOWN_ITEM_BTN = + 'tbody tr:first-child td:last-child ul li button'; +export const TABLE_FIRST_ROW_ACTION_DROPDOWN_ITEM_LINK = + 'tbody tr:first-child td:last-child ul li a'; export const RESOURCE_NOT_FOUND_SUBTITLE = '[data-test-error-application-state] .hds-application-state__error-code';