test: 💍 refactor targets create alias & enable SR test selectors (#2904)
* test: 💍 refactor targets create alias & enable SR test selector ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16433
This commit is contained in:
1 parent
2a2e4350ee
commit
adf7f8603b
3 files changed
+109
-95
No files matched your search
@@ -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.');
|
||||
});
|
||||
});
|
||||
@@ -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,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
Reference in new issue
Block a user