From 42e31d3ece517b09b9d615e831468b6180eeebcc Mon Sep 17 00:00:00 2001 From: Cameron Perera Date: Tue, 4 Mar 2025 15:09:08 -0600 Subject: [PATCH] Icu 16392 managed groups create (#2704) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: 🤖 update manage-gropus tests to ues selectors ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16392 * refactor: 💡 small clean up --- .../form/managed-group/ldap/index.hbs | 4 +- .../form/managed-group/oidc/index.hbs | 4 +- .../acceptance/managed-groups/create-test.js | 126 ++++++++++-------- .../acceptance/managed-groups/selectors.js | 14 ++ 4 files changed, 88 insertions(+), 60 deletions(-) create mode 100644 ui/admin/tests/acceptance/managed-groups/selectors.js diff --git a/ui/admin/app/components/form/managed-group/ldap/index.hbs b/ui/admin/app/components/form/managed-group/ldap/index.hbs index a1651f91b..fe8ff8dfb 100644 --- a/ui/admin/app/components/form/managed-group/ldap/index.hbs +++ b/ui/admin/app/components/form/managed-group/ldap/index.hbs @@ -117,7 +117,9 @@ {{#if @model.errors.group_names}} {{#each @model.errors.group_names as |error|}} - {{error.message}} + {{error.message}} {{/each}} {{/if}} diff --git a/ui/admin/app/components/form/managed-group/oidc/index.hbs b/ui/admin/app/components/form/managed-group/oidc/index.hbs index a68b802dc..1057c6a1e 100644 --- a/ui/admin/app/components/form/managed-group/oidc/index.hbs +++ b/ui/admin/app/components/form/managed-group/oidc/index.hbs @@ -67,7 +67,9 @@ {{#if @model.errors.filter_string}} {{#each @model.errors.filter_string as |error|}} - {{error.message}} + {{error.message}} {{/each}} {{/if}} diff --git a/ui/admin/tests/acceptance/managed-groups/create-test.js b/ui/admin/tests/acceptance/managed-groups/create-test.js index de85dc6e2..751796496 100644 --- a/ui/admin/tests/acceptance/managed-groups/create-test.js +++ b/ui/admin/tests/acceptance/managed-groups/create-test.js @@ -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) { diff --git a/ui/admin/tests/acceptance/managed-groups/selectors.js b/ui/admin/tests/acceptance/managed-groups/selectors.js new file mode 100644 index 000000000..3f288ff54 --- /dev/null +++ b/ui/admin/tests/acceptance/managed-groups/selectors.js @@ -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]';