Icu 16392 managed groups create (#2704)

* chore: 🤖 update manage-gropus tests to ues selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16392

* refactor: 💡 small clean up
This commit is contained in:
Cameron Perera authored and GitHub committed 2025-03-04 15:09:08 -06:00
1 parent cd8480bc67
commit 42e31d3ece
4 files changed
+88 -60

No files matched your search

@@ -117,7 +117,9 @@
{{#if @model.errors.group_names}}
<F.Error as |E|>
{{#each @model.errors.group_names as |error|}}
<E.Message>{{error.message}}</E.Message>
<E.Message
data-test-error-message-group-names
>{{error.message}}</E.Message>
{{/each}}
</F.Error>
{{/if}}
@@ -67,7 +67,9 @@
{{#if @model.errors.filter_string}}
<F.Error as |E|>
{{#each @model.errors.filter_string as |error|}}
<E.Message>{{error.message}}</E.Message>
<E.Message
data-test-error-message-filter-string
>{{error.message}}</E.Message>
{{/each}}
</F.Error>
{{/if}}
@@ -16,6 +16,7 @@ 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 | managed-groups | create', function (hooks) {
setupApplicationTest(hooks);
@@ -25,14 +26,6 @@ module('Acceptance | managed-groups | create', function (hooks) {
let getManagedGroupCount;
let featuresService;
const SAVE_BTN_SELECTOR = '.rose-form-actions [type="submit"]';
const CANCEL_BTN_SELECTOR = '.rose-form-actions [type="button"]';
const NAME_INPUT_SELECTOR = '[name="name"]';
const DESC_INPUT_SELECTOR = '[name="description"]';
const FIELD_ERROR_TEXT_SELECTOR = '.hds-form-error__message';
const MANAGE_DROPDOWN_SELECTOR =
'[data-test-manage-auth-method] button:first-child';
const instances = {
scopes: {
global: null,
@@ -42,7 +35,6 @@ module('Acceptance | managed-groups | create', function (hooks) {
ldapAuthMethod: null,
};
const urls = {
orgScope: null,
authMethods: null,
authMethod: null,
ldapAuthMethod: null,
@@ -69,8 +61,7 @@ module('Acceptance | managed-groups | create', function (hooks) {
});
// Generate route URLs for resources
urls.orgScope = `/scopes/${instances.scopes.org.id}`;
urls.authMethods = `${urls.orgScope}/auth-methods`;
urls.authMethods = `/scopes/${instances.scopes.org.id}/auth-methods`;
urls.authMethod = `${urls.authMethods}/${instances.authMethod.id}`;
urls.ldapAuthMethod = `${urls.authMethods}/${instances.ldapAuthMethod.id}`;
urls.managedGroups = `${urls.authMethod}/managed-groups`;
@@ -85,38 +76,57 @@ module('Acceptance | managed-groups | create', function (hooks) {
test('can create a new managed group', async function (assert) {
const managedGroupsCount = getManagedGroupCount();
const name = 'Managed group name';
await visit(urls.authMethod);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(`[href="${urls.newManagedGroup}"]`);
await click(selectors.MANAGE_DROPDOWN);
await click(commonSelectors.HREF(urls.newManagedGroup));
await fillIn(NAME_INPUT_SELECTOR, name);
await fillIn(DESC_INPUT_SELECTOR, 'description');
await click(SAVE_BTN_SELECTOR);
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
await fillIn(
commonSelectors.FIELD_DESCRIPTION,
commonSelectors.FIELD_DESCRIPTION_VALUE,
);
await click(commonSelectors.SAVE_BTN);
const managedGroup = this.server.schema.managedGroups.findBy({ name });
assert.strictEqual(managedGroup.name, name);
assert.strictEqual(managedGroup.description, 'description');
const managedGroup = this.server.schema.managedGroups.findBy({
name: commonSelectors.FIELD_NAME_VALUE,
});
assert.strictEqual(managedGroup.name, commonSelectors.FIELD_NAME_VALUE);
assert.strictEqual(
managedGroup.description,
commonSelectors.FIELD_DESCRIPTION_VALUE,
);
assert.strictEqual(getManagedGroupCount(), managedGroupsCount + 1);
});
test('can create a new ldap managed group', async function (assert) {
const managedGroupsCount = getManagedGroupCount();
const name = 'Managed group name';
await visit(urls.ldapAuthMethod);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(selectors.MANAGE_DROPDOWN);
await click(`[href="${urls.newLdapManagedGroup}"]`);
await fillIn(NAME_INPUT_SELECTOR, name);
await fillIn(DESC_INPUT_SELECTOR, 'description');
await fillIn('[name="group_names"] input', 'group name');
await click('[name="group_names"] button');
await click(SAVE_BTN_SELECTOR);
await click(commonSelectors.HREF(urls.newLdapManagedGroup));
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
await fillIn(
commonSelectors.FIELD_DESCRIPTION,
commonSelectors.FIELD_DESCRIPTION_VALUE,
);
await fillIn(
selectors.FIELD_GROUP_NAMES,
selectors.FIELD_GROUP_NAMES_VALUE,
);
await click(selectors.FIELD_GROUP_NAMES_BTN);
await click(commonSelectors.SAVE_BTN);
const managedGroup = this.server.schema.managedGroups.findBy({ name });
assert.strictEqual(managedGroup.name, name);
assert.strictEqual(managedGroup.description, 'description');
assert.deepEqual(managedGroup.attributes.group_names, ['group name']);
const managedGroup = this.server.schema.managedGroups.findBy({
name: commonSelectors.FIELD_NAME_VALUE,
});
assert.strictEqual(managedGroup.name, commonSelectors.FIELD_NAME_VALUE);
assert.strictEqual(
managedGroup.description,
commonSelectors.FIELD_DESCRIPTION_VALUE,
);
assert.deepEqual(managedGroup.attributes.group_names, [
selectors.FIELD_GROUP_NAMES_VALUE,
]);
assert.strictEqual(getManagedGroupCount(), managedGroupsCount + 1);
});
@@ -127,14 +137,14 @@ module('Acceptance | managed-groups | create', function (hooks) {
].filter((item) => item !== 'create');
await visit(urls.authMethods);
await click(`[href="${urls.authMethod}"]`);
await click(commonSelectors.HREF(urls.authMethod));
assert.false(
instances.authMethod.authorized_collection_actions[
'managed-groups'
].includes('create'),
);
assert.dom(`[href="${urls.newManagedGroup}"]`).doesNotExist();
assert.dom(commonSelectors.HREF(urls.newManagedGroup)).doesNotExist();
});
test('User cannot create a new ldap managed group without proper authorization', async function (assert) {
@@ -145,24 +155,24 @@ module('Acceptance | managed-groups | create', function (hooks) {
].filter((item) => item !== 'create');
await visit(urls.authMethods);
await click(`[href="${urls.ldapAuthMethod}"]`);
await click(commonSelectors.HREF(urls.ldapAuthMethod));
assert.false(
instances.ldapAuthMethod.authorized_collection_actions[
'managed-groups'
].includes('create'),
);
assert.dom(`[href="${urls.newLdapManagedGroup}"]`).doesNotExist();
assert.dom(commonSelectors.HREF(urls.newLdapManagedGroup)).doesNotExist();
});
test('User can cancel a new managed group creation', async function (assert) {
const managedGroupsCount = getManagedGroupCount();
await visit(urls.authMethod);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(selectors.MANAGE_DROPDOWN);
await click(`[href="${urls.newManagedGroup}"]`);
await fillIn(NAME_INPUT_SELECTOR, 'Managed group name');
await click(CANCEL_BTN_SELECTOR);
await click(commonSelectors.HREF(urls.newManagedGroup));
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(getManagedGroupCount(), managedGroupsCount);
assert.strictEqual(currentURL(), urls.managedGroups);
@@ -171,11 +181,11 @@ module('Acceptance | managed-groups | create', function (hooks) {
test('User can cancel a new ldap managed group creation', async function (assert) {
const managedGroupsCount = getManagedGroupCount();
await visit(urls.ldapAuthMethod);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(selectors.MANAGE_DROPDOWN);
await click(`[href="${urls.newLdapManagedGroup}"]`);
await fillIn(NAME_INPUT_SELECTOR, 'Managed group name');
await click(CANCEL_BTN_SELECTOR);
await click(commonSelectors.HREF(urls.newLdapManagedGroup));
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(getManagedGroupCount(), managedGroupsCount);
assert.strictEqual(currentURL(), urls.ldapManagedGroups);
@@ -193,8 +203,8 @@ module('Acceptance | managed-groups | create', function (hooks) {
details: {
request_fields: [
{
name: 'name',
description: 'Name is required.',
name: 'attributes.filter',
description: 'This field is required.',
},
],
},
@@ -202,17 +212,16 @@ module('Acceptance | managed-groups | create', function (hooks) {
);
});
await visit(urls.authMethod);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(selectors.MANAGE_DROPDOWN);
await click(`[href="${urls.newManagedGroup}"]`);
await fillIn(NAME_INPUT_SELECTOR, 'new managed group');
await click(SAVE_BTN_SELECTOR);
await click(commonSelectors.HREF(urls.newManagedGroup));
await click(commonSelectors.SAVE_BTN);
await a11yAudit();
assert
.dom(commonSelectors.ALERT_TOAST_BODY)
.hasText('The request was invalid.');
assert.dom('[data-test-error-message-name]').hasText('Name is required.');
assert.dom(selectors.FIELD_FILTER_ERROR).hasText('This field is required.');
});
test('When user saving a new ldap managed group with invalid fields displays error message', async function (assert) {
@@ -227,8 +236,8 @@ module('Acceptance | managed-groups | create', function (hooks) {
details: {
request_fields: [
{
name: 'name',
description: 'Name is required.',
name: 'attributes.group_names',
description: 'This field is required.',
},
],
},
@@ -236,17 +245,18 @@ module('Acceptance | managed-groups | create', function (hooks) {
);
});
await visit(urls.ldapAuthMethod);
await click(MANAGE_DROPDOWN_SELECTOR);
await click(selectors.MANAGE_DROPDOWN);
await click(`[href="${urls.newLdapManagedGroup}"]`);
await fillIn(NAME_INPUT_SELECTOR, 'new managed group');
await click(SAVE_BTN_SELECTOR);
await click(commonSelectors.HREF(urls.newLdapManagedGroup));
await click(commonSelectors.SAVE_BTN);
await a11yAudit();
assert
.dom(commonSelectors.ALERT_TOAST_BODY)
.hasText('The request was invalid.');
assert.dom(FIELD_ERROR_TEXT_SELECTOR).hasText('Name is required.');
assert
.dom(selectors.FIELD_GROUP_NAMES_ERROR)
.hasText('This field is required.');
});
test('Users cannot directly navigate to a new managed group route without proper authorization', async function (assert) {
@@ -0,0 +1,14 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
export const MANAGE_DROPDOWN =
'[data-test-manage-auth-method] button:first-child';
export const FIELD_GROUP_NAMES = '[name="group_names"] input';
export const FIELD_GROUP_NAMES_VALUE = 'group name';
export const FIELD_GROUP_NAMES_BTN = '[name="group_names"] button';
export const FIELD_GROUP_NAMES_ERROR = '[data-test-error-message-group-names]';
export const FIELD_FILTER_ERROR = '[data-test-error-message-filter-string]';