From adf7f8603b1b61a566a6579c680feb8f49f3ba49 Mon Sep 17 00:00:00 2001 From: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> Date: Tue, 24 Jun 2025 16:09:33 -0700 Subject: [PATCH] =?UTF-8?q?test:=20=F0=9F=92=8D=20refactor=20targets=20cre?= =?UTF-8?q?ate=20alias=20&=20enable=20SR=20test=20selectors=20(#2904)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test: 💍 refactor targets create alias & enable SR test selector ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16433 --- .../acceptance/targets/create-alias-test.js | 69 ++++------ .../targets/enable-session-recording-test.js | 122 ++++++++++-------- .../tests/acceptance/targets/selectors.js | 13 ++ 3 files changed, 109 insertions(+), 95 deletions(-) diff --git a/ui/admin/tests/acceptance/targets/create-alias-test.js b/ui/admin/tests/acceptance/targets/create-alias-test.js index b8c991afa..9f165bc1d 100644 --- a/ui/admin/tests/acceptance/targets/create-alias-test.js +++ b/ui/admin/tests/acceptance/targets/create-alias-test.js @@ -13,7 +13,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support'; import { setupIndexedDb } from 'api/test-support/helpers/indexed-db'; import { setupIntl } from 'ember-intl/test-support'; import * as commonSelectors from 'admin/tests/helpers/selectors'; - +import * as selectors from './selectors'; import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target'; module('Acceptance | targets | create-alias', function (hooks) { @@ -25,15 +25,8 @@ module('Acceptance | targets | create-alias', function (hooks) { let getAliasCount; let featuresService; - const SAVE_BTN_SELECTOR = '[type="submit"]'; - const CANCEL_BTN_SELECTOR = '.rose-form-actions [type="button"]'; - const NAME_FIELD_SELECTOR = '[name="name"]'; - const ALIAS_FIELD_SELECTOR = '[name="value"]'; - const DEST_FIELD_SELECTOR = '[name="destination_id"]'; - const FIELD_ERROR_TEXT_SELECTOR = '.hds-form-error__message'; const NAME_FIELD_TEXT = 'random string'; const ALIAS_VALUE_TEXT = 'www.target1.com'; - const ADD_AN_ALIAS_SELECTOR = '.target-sidebar-aliases .hds-button'; const instances = { scopes: { @@ -45,7 +38,6 @@ module('Acceptance | targets | create-alias', function (hooks) { }; const urls = { - globalScope: null, projectScope: null, targets: null, target: null, @@ -71,7 +63,6 @@ module('Acceptance | targets | create-alias', function (hooks) { instances.alias = this.server.create('alias', { scope: instances.scopes.global, }); - urls.globalScope = `/scopes/global`; urls.projectScope = `/scopes/${instances.scopes.project.id}`; urls.targets = `${urls.projectScope}/targets`; @@ -86,13 +77,11 @@ module('Acceptance | targets | create-alias', function (hooks) { const aliasCount = getAliasCount(); await visit(urls.targets); - await click(`[href="${urls.target}"]`); - await click(ADD_AN_ALIAS_SELECTOR); - - await fillIn(NAME_FIELD_SELECTOR, NAME_FIELD_TEXT); - await fillIn(ALIAS_FIELD_SELECTOR, ALIAS_VALUE_TEXT); - - await click(SAVE_BTN_SELECTOR); + await click(commonSelectors.HREF(urls.target)); + await click(selectors.ALIASES_ADD_BTN); + await fillIn(commonSelectors.FIELD_NAME, NAME_FIELD_TEXT); + await fillIn(selectors.FIELD_ALIAS, ALIAS_VALUE_TEXT); + await click(commonSelectors.SAVE_BTN); const alias = this.server.schema.aliases.findBy({ name: NAME_FIELD_TEXT, }); @@ -105,23 +94,17 @@ module('Acceptance | targets | create-alias', function (hooks) { test('users can create a new alias for a target of SSH type', async function (assert) { featuresService.enable('ssh-target'); - instances.target.update({ type: TYPE_TARGET_SSH, }); - const aliasCount = getAliasCount(); - await visit(urls.targets); - await click(`[href="${urls.target}"]`); - - await click(ADD_AN_ALIAS_SELECTOR); - - await fillIn(NAME_FIELD_SELECTOR, NAME_FIELD_TEXT); - await fillIn(ALIAS_FIELD_SELECTOR, ALIAS_VALUE_TEXT); - - await click(SAVE_BTN_SELECTOR); + await click(commonSelectors.HREF(urls.target)); + await click(selectors.ALIASES_ADD_BTN); + await fillIn(commonSelectors.FIELD_NAME, NAME_FIELD_TEXT); + await fillIn(selectors.FIELD_ALIAS, ALIAS_VALUE_TEXT); + await click(commonSelectors.SAVE_BTN); const alias = this.server.schema.aliases.findBy({ name: NAME_FIELD_TEXT, }); @@ -138,17 +121,16 @@ module('Acceptance | targets | create-alias', function (hooks) { type: TYPE_TARGET_SSH, }); const aliasCount = getAliasCount(); - await visit(urls.targets); - await click(`[href="${urls.target}"]`); + await click(commonSelectors.HREF(urls.target)); + await click(selectors.ALIASES_ADD_BTN); + await fillIn(commonSelectors.FIELD_NAME, NAME_FIELD_TEXT); + await fillIn(selectors.FIELD_ALIAS, ALIAS_VALUE_TEXT); - await click(ADD_AN_ALIAS_SELECTOR); + assert.dom(selectors.FIELD_DESTINATION_ID).hasAttribute('readOnly'); - await fillIn(NAME_FIELD_SELECTOR, NAME_FIELD_TEXT); - await fillIn(ALIAS_FIELD_SELECTOR, ALIAS_VALUE_TEXT); - assert.dom(DEST_FIELD_SELECTOR).hasAttribute('readOnly'); - await click(SAVE_BTN_SELECTOR); + await click(commonSelectors.SAVE_BTN); const alias = this.server.schema.aliases.findBy({ name: NAME_FIELD_TEXT, }); @@ -165,10 +147,11 @@ module('Acceptance | targets | create-alias', function (hooks) { type: TYPE_TARGET_SSH, }); await visit(urls.targets); - await click(`[href="${urls.target}"]`); - await click(ADD_AN_ALIAS_SELECTOR); - await fillIn(NAME_FIELD_SELECTOR, NAME_FIELD_TEXT); - await click(CANCEL_BTN_SELECTOR); + + await click(commonSelectors.HREF(urls.target)); + await click(selectors.ALIASES_ADD_BTN); + await fillIn(commonSelectors.FIELD_NAME, NAME_FIELD_TEXT); + await click(commonSelectors.CANCEL_BTN); assert.strictEqual(getAliasCount(), aliasCount); }); @@ -195,14 +178,14 @@ module('Acceptance | targets | create-alias', function (hooks) { }); await visit(urls.targets); - await click(`[href="${urls.target}"]`); - await click(ADD_AN_ALIAS_SELECTOR); - await click(SAVE_BTN_SELECTOR); + await click(commonSelectors.HREF(urls.target)); + await click(selectors.ALIASES_ADD_BTN); + 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(commonSelectors.FIELD_ERROR).hasText('Name is required.'); }); }); diff --git a/ui/admin/tests/acceptance/targets/enable-session-recording-test.js b/ui/admin/tests/acceptance/targets/enable-session-recording-test.js index 0079fb84a..72f4fe7fb 100644 --- a/ui/admin/tests/acceptance/targets/enable-session-recording-test.js +++ b/ui/admin/tests/acceptance/targets/enable-session-recording-test.js @@ -4,13 +4,14 @@ */ import { module, test } from 'qunit'; -import { visit, find, click, currentURL } from '@ember/test-helpers'; +import { visit, find, click, currentURL, select } from '@ember/test-helpers'; import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import a11yAudit from 'ember-a11y-testing/test-support/audit'; import { authenticateSession } from 'ember-simple-auth/test-support'; +import * as commonSelectors from 'admin/tests/helpers/selectors'; +import * as selectors from './selectors'; import { TYPE_TARGET_SSH } from 'api/models/target'; -import select from '@ember/test-helpers/dom/select'; module('Acceptance | targets | enable session recording', function (hooks) { setupApplicationTest(hooks); @@ -20,17 +21,6 @@ module('Acceptance | targets | enable session recording', function (hooks) { let storageBucketOne; let storageBucketTwo; - const SETTINGS_LINK_SELECTOR = '.target-sidebar .hds-link-standalone'; - const ENABLE_BUTTON_SELECTOR = '.target-sidebar .hds-button'; - const DROPDOWN_SELECTOR = '[name=storage_bucket_id]'; - const LINK_LIST_SELECTOR = '.link-list-item > a'; - const LINK_LIST_SELECTOR_ITEM_TEXT = '.link-list-item__text'; - const TOGGLE_SELECTOR = '[name=target-enable-session-recording]'; - const LINK_TO_NEW_STORAGE_BUCKET = - '.enable-session-recording-toggle .hds-link-standalone'; - const SAVE_BTN_SELECTOR = '.rose-form-actions [type="submit"]'; - const CANCEL_BTN_SELECTOR = '.rose-form-actions [type="button"]'; - // Instances const instances = { scopes: { @@ -93,17 +83,21 @@ module('Acceptance | targets | enable session recording', function (hooks) { }); test('cannot enable session recording for a target without proper authorization', async function (assert) { - assert.false(featuresService.isEnabled('ssh-session-recording')); await visit(urls.target); await a11yAudit(); - assert.dom('.target-sidebar a').doesNotExist(); + + assert.false(featuresService.isEnabled('ssh-session-recording')); + assert.dom(selectors.ENABLE_RECORDING_BTN).doesNotExist(); }); test('users can click on enable-recording button in target session-recording sidebar and it takes them to enable session recording', async function (assert) { featuresService.enable('ssh-session-recording'); await visit(urls.target); - assert.dom(SETTINGS_LINK_SELECTOR).doesNotExist(); - await click(ENABLE_BUTTON_SELECTOR); + + assert.dom(selectors.RECORDING_SETTINGS_LINK).doesNotExist(); + + await click(selectors.ENABLE_RECORDING_BTN); + assert.strictEqual(currentURL(), urls.enableSessionRecording); }); @@ -114,7 +108,9 @@ module('Acceptance | targets | enable session recording', function (hooks) { enableSessionRecording: true, }); await visit(urls.target); - await click(SETTINGS_LINK_SELECTOR); + + await click(selectors.RECORDING_SETTINGS_LINK); + assert.strictEqual(currentURL(), urls.enableSessionRecording); }); @@ -125,37 +121,49 @@ module('Acceptance | targets | enable session recording', function (hooks) { enableSessionRecording: true, }); await visit(urls.target); - await click(LINK_LIST_SELECTOR); + + await click(selectors.LINK_LIST_ITEM); + assert.strictEqual(currentURL(), urls.storageBucket); }); test('toggle should be disabled and storage buckets list should be shown when enable session recording button is clicked', async function (assert) { featuresService.enable('ssh-session-recording'); await visit(urls.target); - await click(ENABLE_BUTTON_SELECTOR); + + await click(selectors.ENABLE_RECORDING_BTN); + assert.strictEqual(currentURL(), urls.enableSessionRecording); - assert.dom(TOGGLE_SELECTOR).isVisible(); - assert.dom(DROPDOWN_SELECTOR).isNotVisible(); + assert.dom(selectors.FIELD_ENABLE_RECORDING_TOGGLE).isVisible(); + assert.dom(selectors.FIELD_STORAGE_BUCKET_DROPDOWN).isNotVisible(); }); test('storage buckets list is hidden when toggle is disabled', async function (assert) { featuresService.enable('ssh-session-recording'); await visit(urls.target); - await click(ENABLE_BUTTON_SELECTOR); + + await click(selectors.ENABLE_RECORDING_BTN); + assert.strictEqual(currentURL(), urls.enableSessionRecording); - assert.dom(TOGGLE_SELECTOR).isVisible(); - assert.dom(DROPDOWN_SELECTOR).isNotVisible(); - await click(TOGGLE_SELECTOR); - assert.dom(DROPDOWN_SELECTOR).isVisible(); + assert.dom(selectors.FIELD_ENABLE_RECORDING_TOGGLE).isVisible(); + assert.dom(selectors.FIELD_STORAGE_BUCKET_DROPDOWN).isNotVisible(); + + await click(selectors.FIELD_ENABLE_RECORDING_TOGGLE); + + assert.dom(selectors.FIELD_STORAGE_BUCKET_DROPDOWN).isVisible(); }); test('link to add new storage bucket should be displayed and redirect to new storage buckets form', async function (assert) { featuresService.enable('ssh-session-recording'); await visit(urls.target); - await click(ENABLE_BUTTON_SELECTOR); + + await click(selectors.ENABLE_RECORDING_BTN); + assert.strictEqual(currentURL(), urls.enableSessionRecording); - assert.dom(LINK_TO_NEW_STORAGE_BUCKET).isVisible(); - await click(LINK_TO_NEW_STORAGE_BUCKET); + assert.dom(selectors.FIELD_ADD_NEW_STORAGE_BUCKET_LINK).isVisible(); + + await click(selectors.FIELD_ADD_NEW_STORAGE_BUCKET_LINK); + assert.strictEqual(currentURL(), urls.newStorageBucket); }); @@ -166,37 +174,47 @@ module('Acceptance | targets | enable session recording', function (hooks) { enable_session_recording: true, }); await visit(urls.target); - await click(SETTINGS_LINK_SELECTOR); + + await click(selectors.RECORDING_SETTINGS_LINK); + assert.strictEqual(currentURL(), urls.enableSessionRecording); - const existingStorageBucketId = find(DROPDOWN_SELECTOR).value; - + const existingStorageBucketId = find( + selectors.FIELD_STORAGE_BUCKET_DROPDOWN, + ).value; //disable the toggle, dropdown should be hidden - await click(TOGGLE_SELECTOR); - assert.dom(DROPDOWN_SELECTOR).isNotVisible(); - + await click(selectors.FIELD_ENABLE_RECORDING_TOGGLE); + assert.dom(selectors.FIELD_STORAGE_BUCKET_DROPDOWN).isNotVisible(); //enable the toggle now, //it should have the previously selected storage_bucket_id - await click(TOGGLE_SELECTOR); - assert.dom(DROPDOWN_SELECTOR).hasValue(existingStorageBucketId); + await click(selectors.FIELD_ENABLE_RECORDING_TOGGLE); + + assert + .dom(selectors.FIELD_STORAGE_BUCKET_DROPDOWN) + .hasValue(existingStorageBucketId); }); test('can assign a storage bucket for the target', async function (assert) { featuresService.enable('ssh-session-recording'); await visit(urls.target); - await click(ENABLE_BUTTON_SELECTOR); + + await click(selectors.ENABLE_RECORDING_BTN); assert.strictEqual(currentURL(), urls.enableSessionRecording); - await click(TOGGLE_SELECTOR); - assert.dom(DROPDOWN_SELECTOR).hasNoValue(); - await select(DROPDOWN_SELECTOR, storageBucketTwo.id); - assert.dom(DROPDOWN_SELECTOR).hasValue(); - await click(SAVE_BTN_SELECTOR); + + await click(selectors.FIELD_ENABLE_RECORDING_TOGGLE); + + assert.dom(selectors.FIELD_STORAGE_BUCKET_DROPDOWN).hasNoValue(); + + await select(selectors.FIELD_STORAGE_BUCKET_DROPDOWN, storageBucketTwo.id); + + assert.dom(selectors.FIELD_STORAGE_BUCKET_DROPDOWN).hasValue(); + + await click(commonSelectors.SAVE_BTN); assert.strictEqual(currentURL(), urls.target); - assert.strictEqual( - find(LINK_LIST_SELECTOR_ITEM_TEXT).textContent.trim(), + find(selectors.LINK_LIST_ITEM_TEXT).textContent.trim(), storageBucketTwo.name, ); }); @@ -207,19 +225,19 @@ module('Acceptance | targets | enable session recording', function (hooks) { storageBucketId: storageBucketOne.id, enable_session_recording: true, }); - await visit(urls.target); - await click(SETTINGS_LINK_SELECTOR); + + await click(selectors.RECORDING_SETTINGS_LINK); + assert.strictEqual(currentURL(), urls.enableSessionRecording); //update the storage bucket selection - await select(DROPDOWN_SELECTOR, storageBucketTwo); + await select(selectors.FIELD_STORAGE_BUCKET_DROPDOWN, storageBucketTwo); + await click(commonSelectors.CANCEL_BTN); - await click(CANCEL_BTN_SELECTOR); assert.strictEqual(currentURL(), urls.target); - assert.strictEqual( - find(LINK_LIST_SELECTOR_ITEM_TEXT).textContent.trim(), + find(selectors.LINK_LIST_ITEM_TEXT).textContent.trim(), storageBucketOne.name, ); }); diff --git a/ui/admin/tests/acceptance/targets/selectors.js b/ui/admin/tests/acceptance/targets/selectors.js index 8579361e3..c77596bbc 100644 --- a/ui/admin/tests/acceptance/targets/selectors.js +++ b/ui/admin/tests/acceptance/targets/selectors.js @@ -8,6 +8,8 @@ export const FIELD_TYPE_VALUE = (type) => `[value=${type}]`; export const FIELD_DEFAULT_PORT_LABEL = '[data-test-default-port-label]'; export const FIELD_INFO = '.info-field'; export const FIELD_INFO_LABEL = '.info-field .hds-form-helper-text'; +export const FIELD_ALIAS = '[name="value"]'; +export const FIELD_DESTINATION_ID = '[name="destination_id"]'; export const FIELD_ALIASES = '[name="with_aliases"] tbody tr:last-of-type input'; export const FIELD_ALIASES_ADD_BTN = @@ -17,6 +19,11 @@ export const FIELD_ADDRESS_VALUE = '0.0.0.0'; export const FIELD_NAME_ERROR = '[data-test-error-message-name]'; export const FIELD_DEFAULT_PORT_ERROR = '[data-test-error-message-default-port]'; +export const FIELD_STORAGE_BUCKET_DROPDOWN = '[name=storage_bucket_id]'; +export const FIELD_ENABLE_RECORDING_TOGGLE = + '[name=target-enable-session-recording]'; +export const FIELD_ADD_NEW_STORAGE_BUCKET_LINK = + '.enable-session-recording-toggle .hds-link-standalone'; export const NEW_TARGET_BTN = '[data-test-new-target-button]'; export const MANAGE_DROPDOWN = '[data-test-manage-targets-dropdown] button'; @@ -33,6 +40,12 @@ export const ALIASES_NEW_LINK = '.target-sidebar-aliases .hds-button'; export const ALIASES_NEW_LINK_TEXT = 'Add an alias'; export const ALIASES_VIEW_MORE_BTN = '[data-test-aliases-view-more]'; export const ALIASES_FLYOUT = '[data-test-aliases-flyout]'; +export const ALIASES_ADD_BTN = '.target-sidebar-aliases .hds-button'; + +export const ENABLE_RECORDING_BTN = '.target-sidebar .hds-button'; +export const RECORDING_SETTINGS_LINK = '.target-sidebar .hds-link-standalone'; +export const LINK_LIST_ITEM = '.link-list-item > a'; +export const LINK_LIST_ITEM_TEXT = '.link-list-item__text'; export const NO_RESULTS_MSG = '[data-test-no-target-results]'; export const TABLE_ACTIVE_SESSIONS = (id) =>