Refactor: 💡 User acceptance tests: list, update and accounts (#2726)
* refactor: 💡 users selector tests: list, update and accounts * fix: 🐛 follow AAA pattern * refactor: 💡 updated common selectors
This commit is contained in:
1 parent
2465739060
commit
825751239f
5 files changed
+159
-138
No files matched your search
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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');
|
||||
});
|
||||
});
|
||||
@@ -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';
|
||||
@@ -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,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -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';
|
||||
|
||||
Reference in new issue
Block a user