Refactor: 💡 User acceptance tests - create, delete and read (#2718)

* refactor: 💡 user - create, delete and read tests

* fix: 🐛 removed 'this' usage, updated user create test
This commit is contained in:
Priya Patel authored and GitHub committed 2025-03-12 16:49:38 -07:00
1 parent 19b6e5154f
commit d212cf7c40
4 files changed
+61 -57

No files matched your search

+20 -26
View File
@@ -57,9 +57,9 @@ module('Acceptance | users | create', function (hooks) {
const usersCount = getUsersCount();
await visit(urls.users);
await click(`[href="${urls.newUser}"]`);
await fillIn('[name="name"]', 'User name');
await click('[type="submit"]');
await click(commonSelectors.HREF(urls.newUser));
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
await click(commonSelectors.SAVE_BTN);
assert.strictEqual(getUsersCount(), usersCount + 1);
});
@@ -67,14 +67,14 @@ module('Acceptance | users | create', function (hooks) {
test('users can navigate to new users route with proper authorization', async function (assert) {
await visit(urls.orgScope);
await click(`[href="${urls.users}"]`);
await click(commonSelectors.HREF(urls.users));
assert.true(
instances.scopes.org.authorized_collection_actions.users.includes(
'create',
),
);
assert.dom(`[href="${urls.newUser}"]`).exists();
assert.dom(commonSelectors.HREF(urls.newUser)).exists();
});
test('users cannot navigate to new users route without proper authorization', async function (assert) {
@@ -84,7 +84,7 @@ module('Acceptance | users | create', function (hooks) {
);
await visit(urls.orgScope);
await click(`[href="${urls.users}"]`);
await click(commonSelectors.HREF(urls.users));
assert.false(
instances.scopes.org.authorized_collection_actions.users.includes(
@@ -92,16 +92,16 @@ module('Acceptance | users | create', function (hooks) {
),
);
assert.dom('.rose-button-primary').doesNotExist();
assert.dom(commonSelectors.HREF(urls.newUser)).doesNotExist();
});
test('can cancel creation of a new user', async function (assert) {
const usersCount = getUsersCount();
await visit(urls.users);
await click(`[href="${urls.newUser}"]`);
await fillIn('[name="name"]', 'User name');
await click('.rose-form-actions [type="button"]');
await click(commonSelectors.HREF(urls.newUser));
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(currentURL(), urls.users);
assert.strictEqual(getUsersCount(), usersCount);
@@ -109,6 +109,8 @@ module('Acceptance | users | create', function (hooks) {
test('saving a new user with invalid fields displays error messages', async function (assert) {
const usersCount = getUsersCount();
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.post('/users', () => {
return new Response(
@@ -117,28 +119,20 @@ module('Acceptance | users | create', 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.newUser}"]`);
await fillIn('[name="description"]', 'test');
await click('[type="submit"]');
await click(commonSelectors.HREF(urls.newUser));
await fillIn(
commonSelectors.FIELD_DESCRIPTION,
commonSelectors.FIELD_DESCRIPTION_VALUE,
);
await click(commonSelectors.SAVE_BTN);
assert.strictEqual(getUsersCount(), usersCount);
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('users cannot directly navigate to new user route without proper authorization', async function (assert) {
+28 -27
View File
@@ -11,15 +11,15 @@ import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { Response } from 'miragejs';
import { authenticateSession } from 'ember-simple-auth/test-support';
import * as commonSelectors from 'admin/tests/helpers/selectors';
import * as selectors from './selectors';
module('Acceptance | users | delete', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupIndexedDb(hooks);
const DELETE_ACTION_SELECTOR =
'[data-test-manage-user-dropdown] ul li button';
const MANAGE_DROPDOWN_SELECTOR =
'[data-test-manage-user-dropdown] button:first-child';
let getUsersCount, confirmService;
const instances = {
scopes: {
global: null,
@@ -46,20 +46,22 @@ module('Acceptance | users | delete', function (hooks) {
urls.orgScope = `/scopes/${instances.scopes.org.id}`;
urls.users = `${urls.orgScope}/users`;
urls.user = `${urls.users}/${instances.user.id}`;
getUsersCount = () => this.server.schema.users.all().models.length;
confirmService = this.owner.lookup('service:confirm');
await authenticateSession({});
});
test('can delete a user', async function (assert) {
const usersCount = this.server.db.users.length;
const usersCount = getUsersCount();
await visit(urls.users);
await click(`[href="${urls.user}"]`);
await click(commonSelectors.HREF(urls.user));
await click(MANAGE_DROPDOWN_SELECTOR);
await click(DELETE_ACTION_SELECTOR);
await click(selectors.MANAGE_DROPDOWN_USER);
await click(selectors.MANAGE_DROPDOWN_USER_DELETE);
assert.strictEqual(this.server.db.users.length, usersCount - 1);
assert.strictEqual(getUsersCount(), usersCount - 1);
});
test('cannot delete a user without proper authorization', async function (assert) {
@@ -67,42 +69,40 @@ module('Acceptance | users | delete', function (hooks) {
instances.user.authorized_actions.filter((item) => item !== 'delete');
await visit(urls.users);
await click(`[href="${urls.user}"]`);
await click(commonSelectors.HREF(urls.user));
await click(MANAGE_DROPDOWN_SELECTOR);
assert.dom('[data-test-manage-user-dropdown] ul li button').doesNotExist();
await click(selectors.MANAGE_DROPDOWN_USER);
assert.dom(selectors.MANAGE_DROPDOWN_USER_DELETE).doesNotExist();
});
test('can accept delete user via dialog', async function (assert) {
const confirmService = this.owner.lookup('service:confirm');
const usersCount = getUsersCount();
confirmService.enabled = true;
const usersCount = this.server.db.users.length;
await visit(urls.users);
await click(`[href="${urls.user}"]`);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(DELETE_ACTION_SELECTOR);
await click(commonSelectors.HREF(urls.user));
await click(selectors.MANAGE_DROPDOWN_USER);
await click(selectors.MANAGE_DROPDOWN_USER_DELETE);
await click(commonSelectors.MODAL_WARNING_CONFIRM_BTN);
assert
.dom(commonSelectors.ALERT_TOAST_BODY)
.hasText('Deleted successfully.');
assert.strictEqual(this.server.db.users.length, usersCount - 1);
assert.strictEqual(getUsersCount(), usersCount - 1);
assert.strictEqual(currentURL(), urls.users);
});
test('can cancel delete user via dialog', async function (assert) {
const confirmService = this.owner.lookup('service:confirm');
const usersCount = getUsersCount();
confirmService.enabled = true;
const usersCount = this.server.db.users.length;
await visit(urls.users);
await click(`[href="${urls.user}"]`);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(DELETE_ACTION_SELECTOR);
await click(commonSelectors.HREF(urls.user));
await click(selectors.MANAGE_DROPDOWN_USER);
await click(selectors.MANAGE_DROPDOWN_USER_DELETE);
await click(commonSelectors.MODAL_WARNING_CANCEL_BTN);
assert.strictEqual(this.server.db.users.length, usersCount);
assert.strictEqual(getUsersCount(), usersCount);
assert.strictEqual(currentURL(), urls.user);
});
@@ -120,9 +120,10 @@ module('Acceptance | users | delete', function (hooks) {
);
});
await click(`[href="${urls.user}"]`);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(DELETE_ACTION_SELECTOR);
await click(commonSelectors.HREF(urls.user));
await click(selectors.MANAGE_DROPDOWN_USER);
await click(selectors.MANAGE_DROPDOWN_USER_DELETE);
assert.dom(commonSelectors.ALERT_TOAST_BODY).hasText('Oops.');
});
});
+4 -4
View File
@@ -50,7 +50,7 @@ module('Acceptance | users | read', function (hooks) {
await visit(urls.orgScope);
await a11yAudit();
await click(`[href="${urls.users}"]`);
await click(commonSelectors.HREF(urls.users));
await a11yAudit();
assert.strictEqual(currentURL(), urls.users);
@@ -59,7 +59,7 @@ module('Acceptance | users | read', function (hooks) {
test('visiting user', async function (assert) {
await visit(urls.users);
await click(`[href="${urls.user}"]`);
await click(commonSelectors.HREF(urls.user));
await a11yAudit();
assert.strictEqual(currentURL(), urls.user);
@@ -70,7 +70,7 @@ module('Acceptance | users | read', function (hooks) {
instances.user.authorized_actions.filter((item) => item !== 'read');
await visit(urls.orgScope);
await click(`[href="${urls.users}"]`);
await click(commonSelectors.HREF(urls.users));
assert.dom(commonSelectors.TABLE_RESOURCE_LINK(urls.user)).doesNotExist();
});
@@ -78,7 +78,7 @@ module('Acceptance | users | read', function (hooks) {
test('users can link to docs page for users', async function (assert) {
await visit(urls.orgScope);
await click(`[href="${urls.users}"]`);
await click(commonSelectors.HREF(urls.users));
assert
.dom(
@@ -0,0 +1,9 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
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';