(HACK WEEK 2025) a11y-audit-ignore codemod (#2946)
* chore: 🤖 add ember-a11y-ignore tool * chore: 🤖 fix handling existing setRunOptions imports * chore: 🤖 move codemod to support folder * chore: 🤖 fix edge case for handling property key names * chore: 🤖 handle case where multiple of same violation in test This fixes a bug where multiple cases of the same violation would end up with multiple entries * chore: 🤖 ignore axe rules that are currently failing in admin * chore: 🤖 ignore axe rules that are currently failing in desktop * docs: ✏️ add a comment explaining the codemod * chore: 🤖 include test.each cases for a11y ignores * fix: 🐛 handle test.each test cases for a11y ignore codemod
This commit is contained in:
1 parent
1f4076d8d4
commit
dc9376a460
114 files changed
+8044
No files matched your search
@@ -0,0 +1,285 @@
|
||||
/**
|
||||
* Copyright (c) HashiCorp, Inc.
|
||||
* SPDX-License-Identifier: BUSL-1.1
|
||||
*/
|
||||
|
||||
// This is a codemod that takes a ember a11y report and ignores the failing a11y rules in the tests
|
||||
// they were reported from. It can be ran the command line from the root of this monorepo like this:
|
||||
//
|
||||
// EMBER_A11Y_REPORT_FILE=~/Downloads/ember-a11y-reports-latest/desktop.json pnpm dlx jscodeshift -t ./support/ember-a11y-ignore.mjs ui/desktop/tests
|
||||
//
|
||||
// This file passes exports a transform function which is used by the jscodeshift package to execute
|
||||
// the codemode. Since codeshift doesn't provide a way of specifying arguments, the report file is
|
||||
// specified by the environment variable `EMBER_A11Y_REPORT_FILE` The report file referenced by
|
||||
// `EMBER_A11Y_REPORT_FILE` is an ember a11y testing report. These reports are currently being
|
||||
// generated by the CI with one report for admin and one for desktop.
|
||||
//
|
||||
// The `-t` flag for `jscodeshift` represents the transform file that it should read
|
||||
//
|
||||
// The only argument passed (shown as "ui/desktop/tests" in the above example) specifies the files
|
||||
// to run the transform against.
|
||||
|
||||
import { readFileSync } from 'fs';
|
||||
|
||||
// eslint-disable-next-line no-undef
|
||||
let reportPath = process.env.EMBER_A11Y_REPORT_FILE;
|
||||
if (!reportPath) {
|
||||
throw new Error('EMBER_A11Y_REPORT_FILE environment variable is required');
|
||||
}
|
||||
const reportContents = JSON.parse(readFileSync(reportPath).toString());
|
||||
|
||||
function getKeyNameFromProperty(property) {
|
||||
// property key can be of type `Identifier`: ({ key: "hello" }) or `StringLiteral` where the key is quoted: ({ "key": "hello" })
|
||||
// and the path for determining the key's name is different depending on if its an `Identifier` or `StringLiteral`
|
||||
const nameForIdentifier = property.key.name;
|
||||
const nameForStringLiteral = property.key.value;
|
||||
|
||||
return nameForIdentifier ?? nameForStringLiteral;
|
||||
}
|
||||
|
||||
export default function transformer(file, api) {
|
||||
const j = api.jscodeshift;
|
||||
const f = j(file.source);
|
||||
const { statement } = j.template;
|
||||
|
||||
const tests = f.find(j.CallExpression, {
|
||||
callee: {
|
||||
name: 'test',
|
||||
},
|
||||
});
|
||||
|
||||
const testsEach = f.find(j.CallExpression, {
|
||||
callee: {
|
||||
object: { name: 'test' },
|
||||
property: { name: 'each' }
|
||||
}
|
||||
});
|
||||
|
||||
function closestModules(test) {
|
||||
const modules = [];
|
||||
let parent = test.closest(j.CallExpression, {
|
||||
callee: {
|
||||
name: 'module',
|
||||
},
|
||||
});
|
||||
|
||||
while (parent.length > 0) {
|
||||
modules.unshift(parent.get().value.arguments[0].value);
|
||||
|
||||
parent = parent.closest(j.CallExpression, {
|
||||
callee: {
|
||||
name: 'module',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return modules;
|
||||
}
|
||||
|
||||
const testHandler = (testAst, i) => {
|
||||
const isTestEach = Boolean(testAst.value.callee.object?.name === 'test' && testAst.value.callee.property?.name === 'each');
|
||||
const test = isTestEach ? testsEach.at(i) : tests.at(i);
|
||||
let testName = test.get().value.arguments[0].value;
|
||||
|
||||
if (isTestEach) {
|
||||
const testArguments = test.get().value.arguments;
|
||||
let eachTestNames;
|
||||
// if the second argument is an object with properties
|
||||
if (testArguments[1]?.properties) {
|
||||
eachTestNames = testArguments[1]?.properties?.map(property => getKeyNameFromProperty(property));
|
||||
} else {
|
||||
// if an array is provided and it's argument is a literal (number, boolean, string) then this is used for the test name
|
||||
// otherwise if it's an object the index in the array is what is used for the test name
|
||||
eachTestNames = testArguments[1].elements.map((element, i) => element.type.endsWith('Literal') ? element.value : i);
|
||||
}
|
||||
|
||||
testName = eachTestNames.map(eachTestName => `${testName} [${eachTestName}]`);
|
||||
} else {
|
||||
testName = [testName];
|
||||
}
|
||||
|
||||
// the ember-a11y-testing testem middleware reporter reports the modules as a single string
|
||||
// with nested modules separated by " > "
|
||||
const moduleName = closestModules(test).join(' > ');
|
||||
const violationsIdsIncluded = new Set();
|
||||
const violations = reportContents
|
||||
.filter((testEntry) => {
|
||||
// search the report for a matching module name and test name
|
||||
return (
|
||||
testEntry.moduleName === moduleName && testName.includes(testEntry.testName)
|
||||
);
|
||||
})
|
||||
.map((testEntry) => testEntry.violations)
|
||||
.flat()
|
||||
.filter((violation) => {
|
||||
if (!violationsIdsIncluded.has(violation.id)) {
|
||||
violationsIdsIncluded.add(violation.id);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
const violationNames = new Set(
|
||||
violations
|
||||
.map((v) => {
|
||||
return v.id;
|
||||
})
|
||||
.filter(Boolean),
|
||||
);
|
||||
|
||||
// early return, only when there are violations do we do further processing on the file
|
||||
if (violations.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const existingEmberA11yImport = f.find(j.ImportDeclaration, {
|
||||
source: {
|
||||
value: 'ember-a11y-testing/test-support',
|
||||
},
|
||||
});
|
||||
|
||||
const runOptionsEmberA11yImport = statement`import { setRunOptions } from 'ember-a11y-testing/test-support'`;
|
||||
if (existingEmberA11yImport.length > 0) {
|
||||
const importNode = existingEmberA11yImport.get();
|
||||
|
||||
const hasExistingSetRunOptionImport = importNode.value.specifiers.some(
|
||||
(specifier) => specifier.imported.name === 'setRunOptions',
|
||||
);
|
||||
|
||||
importNode.value.specifiers = [
|
||||
...importNode.value.specifiers,
|
||||
...(hasExistingSetRunOptionImport
|
||||
? []
|
||||
: runOptionsEmberA11yImport.specifiers),
|
||||
];
|
||||
} else {
|
||||
f.find(j.ImportDeclaration).at(-1).insertAfter(runOptionsEmberA11yImport);
|
||||
}
|
||||
|
||||
let setRunOptions = test.find(j.CallExpression, {
|
||||
callee: {
|
||||
name: 'setRunOptions',
|
||||
},
|
||||
});
|
||||
|
||||
let setRunOptionsArgs = [];
|
||||
let setRunOptionsRules = [];
|
||||
const alreadyIgnoredRules = new Set();
|
||||
if (setRunOptions.length > 0) {
|
||||
// filter out the rules property from args so that it can be reconstructed
|
||||
// with rules merged
|
||||
setRunOptionsArgs = setRunOptions
|
||||
.get()
|
||||
.value.arguments[0].properties.filter((property) => {
|
||||
return getKeyNameFromProperty(property) !== 'rules';
|
||||
});
|
||||
|
||||
// get the rules from within setRunOptions
|
||||
setRunOptionsRules = setRunOptions
|
||||
.get()
|
||||
.value.arguments[0].properties.find((property) => {
|
||||
return getKeyNameFromProperty(property) === 'rules';
|
||||
});
|
||||
|
||||
if (setRunOptionsRules) {
|
||||
setRunOptionsRules.value.properties.forEach((ruleProperty) => {
|
||||
const ruleAlreadyIgnored = ruleProperty.value.properties.some(
|
||||
(property) => {
|
||||
return (
|
||||
getKeyNameFromProperty(property) === 'enabled' &&
|
||||
property.value.value === false
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
// track rules that are already ignored so that they aren't updated (preserves existing comment and timestamp)
|
||||
if (ruleAlreadyIgnored) {
|
||||
alreadyIgnoredRules.add(getKeyNameFromProperty(ruleProperty));
|
||||
}
|
||||
});
|
||||
|
||||
// if rules currently existing within `setRunOptions` then filter out any
|
||||
// rules that currently have violations those will be handled separately
|
||||
setRunOptionsRules = setRunOptionsRules.value.properties.filter(
|
||||
(ruleProperty) => {
|
||||
const ruleName = getKeyNameFromProperty(ruleProperty);
|
||||
return (
|
||||
!violationNames.has(ruleName) || alreadyIgnoredRules.has(ruleName)
|
||||
);
|
||||
},
|
||||
);
|
||||
} else {
|
||||
setRunOptionsRules = [];
|
||||
}
|
||||
}
|
||||
|
||||
// this represents the actual injection of properties to ignore based on
|
||||
// violations from the report, this amounts to an array of property definitions:
|
||||
// ruleName: { enabled: false }
|
||||
const injectedViolationsRunOptionsRules = violations
|
||||
.filter((violation) => !alreadyIgnoredRules.has(violation.id))
|
||||
.map((violation) => {
|
||||
const enabledFalseProperty = j.objectProperty(
|
||||
j.identifier('enabled'),
|
||||
j.booleanLiteral(false),
|
||||
);
|
||||
|
||||
enabledFalseProperty.comments = [
|
||||
j.commentLine(
|
||||
` [ember-a11y-ignore]: axe rule "${violation.id}" automatically ignored on ${new Date().toISOString().split('T')[0]}`,
|
||||
true,
|
||||
false,
|
||||
),
|
||||
];
|
||||
|
||||
return j.objectProperty(
|
||||
j.identifier(`"${violation.id}"`),
|
||||
j.objectExpression([enabledFalseProperty]),
|
||||
);
|
||||
});
|
||||
|
||||
const injectedSetRunOptions = j.callExpression(
|
||||
j.identifier('setRunOptions'),
|
||||
[
|
||||
j.objectExpression([
|
||||
...setRunOptionsArgs,
|
||||
j.objectProperty(
|
||||
j.identifier('rules'),
|
||||
// splat the existing rules, along with the violation rules
|
||||
j.objectExpression([
|
||||
...setRunOptionsRules,
|
||||
...injectedViolationsRunOptionsRules,
|
||||
]),
|
||||
),
|
||||
]),
|
||||
],
|
||||
);
|
||||
|
||||
if (setRunOptions.length > 0) {
|
||||
setRunOptions.replaceWith(function () {
|
||||
return injectedSetRunOptions;
|
||||
});
|
||||
} else {
|
||||
const testBodyArgumentIndex = isTestEach ? 2 : 1;
|
||||
test
|
||||
.get()
|
||||
.value.arguments[testBodyArgumentIndex].body.body.unshift(
|
||||
j.expressionStatement(injectedSetRunOptions),
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
tests.forEach(testHandler);
|
||||
testsEach.forEach(testHandler);
|
||||
|
||||
const code = f.toSource();
|
||||
|
||||
// the codemod will insert a newline between existing import statements,
|
||||
// this regex removes the extra new line
|
||||
//
|
||||
return code.replace(
|
||||
/(?<newline>\n)(import .*ember-a11y-testing\/test-support.*)/g,
|
||||
'$2',
|
||||
);
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
} from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | accounts | change password', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -55,6 +56,15 @@ module('Acceptance | accounts | change password', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting account change password', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.SIDEBAR_USER_DROPDOWN);
|
||||
@@ -103,6 +113,15 @@ module('Acceptance | accounts | change password', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel password change', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.changePassword);
|
||||
|
||||
await fillIn(
|
||||
@@ -119,6 +138,15 @@ module('Acceptance | accounts | change password', function (hooks) {
|
||||
});
|
||||
|
||||
test('errors are displayed when changing password fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/accounts/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -11,6 +11,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | accounts | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -65,12 +66,30 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting accounts', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.accounts);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.accounts);
|
||||
});
|
||||
|
||||
test('can create a new account', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const accountsCount = this.server.schema.accounts.all().models.length;
|
||||
await visit(urls.newAccount);
|
||||
|
||||
@@ -93,6 +112,15 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create a new LDAP account', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const accountsCount = this.server.schema.accounts.all().models.length;
|
||||
await visit(urls.newAccount);
|
||||
|
||||
@@ -111,6 +139,15 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users cannot create a new account without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_collection_actions.accounts = [];
|
||||
await visit(urls.authMethod);
|
||||
|
||||
@@ -125,6 +162,15 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can navigate to new account route with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.accounts);
|
||||
|
||||
await click(selectors.MANAGE_DROPDOWN_AUTH_METHOD);
|
||||
@@ -138,6 +184,15 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users cannot navigate to new account route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_collection_actions.accounts = [];
|
||||
await visit(urls.accounts);
|
||||
|
||||
@@ -152,6 +207,15 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel a new account creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const accountsCount = this.server.schema.accounts.all().models.length;
|
||||
await visit(urls.newAccount);
|
||||
|
||||
@@ -166,6 +230,15 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel a new LDAP account creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const accountsCount = this.server.schema.accounts.all().models.length;
|
||||
await visit(urls.newAccount);
|
||||
|
||||
@@ -180,6 +253,15 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new account with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/accounts', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -211,6 +293,15 @@ module('Acceptance | accounts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot directly navigate to new account route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_collection_actions.accounts =
|
||||
instances.authMethod.authorized_collection_actions.accounts.filter(
|
||||
(item) => item !== 'create',
|
||||
|
||||
@@ -11,6 +11,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | accounts | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -62,6 +63,15 @@ module('Acceptance | accounts | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete an account', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const accountsCount = this.server.schema.accounts.all().models.length;
|
||||
await visit(urls.account);
|
||||
|
||||
@@ -84,6 +94,15 @@ module('Acceptance | accounts | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('errors are displayed when delete on account fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/accounts/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | accounts | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -77,6 +78,15 @@ module('Acceptance | accounts | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_collection_actions.accounts = ['create'];
|
||||
await visit(urls.authMethod);
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import { setupApplicationTest } from 'admin/tests/helpers';
|
||||
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | accounts | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -51,6 +52,15 @@ module('Acceptance | accounts | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to an account form', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.accounts);
|
||||
await click(commonSelectors.TABLE_RESOURCE_LINK(urls.account));
|
||||
|
||||
@@ -58,6 +68,15 @@ module('Acceptance | accounts | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an account form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.account.authorized_actions =
|
||||
instances.account.authorized_actions.filter((item) => item !== 'read');
|
||||
await visit(urls.accounts);
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | accounts | set password', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -52,6 +53,15 @@ module('Acceptance | accounts | set password', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting account set password', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.setPassword);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.setPassword);
|
||||
@@ -75,6 +85,15 @@ module('Acceptance | accounts | set password', function (hooks) {
|
||||
});
|
||||
|
||||
test('can set a new password for account', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(1);
|
||||
this.server.post(
|
||||
'/accounts/:idMethod',
|
||||
@@ -97,6 +116,15 @@ module('Acceptance | accounts | set password', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel setting new password by navigating away', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.setPassword);
|
||||
|
||||
await fillIn(
|
||||
@@ -109,6 +137,15 @@ module('Acceptance | accounts | set password', function (hooks) {
|
||||
});
|
||||
|
||||
test('errors are displayed when setting password fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/accounts/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | accounts | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -52,6 +53,15 @@ module('Acceptance | accounts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update resource and save changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.account);
|
||||
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
@@ -65,6 +75,15 @@ module('Acceptance | accounts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update resource and save LDAP account changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.account);
|
||||
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
@@ -94,6 +113,15 @@ module('Acceptance | accounts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update an account and cancel changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.account);
|
||||
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
@@ -107,6 +135,15 @@ module('Acceptance | accounts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('errors are displayed when save on account fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.patch('/accounts/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
@@ -128,6 +165,15 @@ module('Acceptance | accounts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving an existing account with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.patch('/accounts/:id', () => {
|
||||
return new Response(
|
||||
400,
|
||||
|
||||
@@ -12,6 +12,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | aliases | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -45,6 +46,15 @@ module('Acceptance | aliases | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new alias with host and target info', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const aliasCount = getAliasCount();
|
||||
await visit(urls.newAlias);
|
||||
|
||||
@@ -61,6 +71,15 @@ module('Acceptance | aliases | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new alias without host or target info', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const aliasCount = getAliasCount();
|
||||
await visit(urls.newAlias);
|
||||
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
|
||||
@@ -75,6 +94,15 @@ module('Acceptance | aliases | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel new alias creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const aliasCount = getAliasCount();
|
||||
await visit(urls.newAlias);
|
||||
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
|
||||
@@ -85,6 +113,15 @@ module('Acceptance | aliases | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new alias with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/aliases', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -114,6 +151,15 @@ module('Acceptance | aliases | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to new aliases route with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.aliases);
|
||||
|
||||
assert.ok(
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | aliases | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -59,6 +60,15 @@ module('Acceptance | aliases | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can delete an alias with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = aliasCount();
|
||||
|
||||
assert.true(instances.alias.authorized_actions.includes('delete'));
|
||||
@@ -71,6 +81,15 @@ module('Acceptance | aliases | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot delete an alias without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.alias.authorized_actions =
|
||||
instances.alias.authorized_actions.filter((item) => item !== 'delete');
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | aliases | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -70,6 +71,15 @@ module('Acceptance | aliases | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to aliases with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.aliases.all().destroy();
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -124,6 +134,15 @@ module('Acceptance | aliases | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.aliases.all().destroy();
|
||||
instances.scopes.global.authorized_collection_actions['aliases'] =
|
||||
instances.scopes.global.authorized_collection_actions['aliases'].filter(
|
||||
@@ -184,6 +203,15 @@ module('Acceptance | aliases | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('edit action in table directs user to appropriate page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.aliases));
|
||||
@@ -203,6 +231,15 @@ module('Acceptance | aliases | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific alias by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.aliases));
|
||||
@@ -218,6 +255,15 @@ module('Acceptance | aliases | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for aliases and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.aliases));
|
||||
@@ -239,6 +285,15 @@ module('Acceptance | aliases | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('aliases are sorted by created_time descending by default', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.aliases.all().destroy();
|
||||
|
||||
const years = ['2026', '2025', '2024', '2023'];
|
||||
@@ -274,6 +329,15 @@ module('Acceptance | aliases | list', function (hooks) {
|
||||
},
|
||||
},
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.aliases.all().destroy();
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
this.server.create('alias', {
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | aliases | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -49,6 +50,15 @@ module('Acceptance | aliases | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an alias', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.aliases));
|
||||
@@ -58,6 +68,15 @@ module('Acceptance | aliases | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an alias without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
instances.alias.authorized_actions =
|
||||
instances.alias.authorized_actions.filter((item) => item !== 'read');
|
||||
@@ -68,6 +87,15 @@ module('Acceptance | aliases | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown alias displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownAlias);
|
||||
|
||||
assert
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | aliases | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -57,6 +58,15 @@ module('Acceptance | aliases | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can update an exisiting alias', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.aliases);
|
||||
await click(commonSelectors.HREF(urls.alias));
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
@@ -67,6 +77,15 @@ module('Acceptance | aliases | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to an existing alias', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const name = instances.alias.name;
|
||||
await visit(urls.aliases);
|
||||
|
||||
@@ -82,6 +101,15 @@ module('Acceptance | aliases | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('users have the option to clear an alias', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = aliasCount();
|
||||
assert.true(instances.alias.authorized_actions.includes('update'));
|
||||
await visit(urls.globalScope);
|
||||
@@ -98,6 +126,15 @@ module('Acceptance | aliases | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can not see the option to clear an alias without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.alias.authorized_actions =
|
||||
instances.alias.authorized_actions.filter((item) => item !== 'update');
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -12,6 +12,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | auth-methods | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -85,6 +86,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can create new oidc auth method', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getAuthMethodsCount();
|
||||
|
||||
await visit(`${urls.authMethods}/new?type=oidc`);
|
||||
@@ -184,6 +194,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can create a new ldap auth method', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
const authMethodsCount = getAuthMethodsCount();
|
||||
await visit(urls.authMethods);
|
||||
@@ -310,6 +329,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can navigate to new auth-methods route with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.orgScope.authorized_collection_actions['auth-methods'] = [
|
||||
'create',
|
||||
'list',
|
||||
@@ -329,6 +357,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users cannot navigate to new auth-methods route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.orgScope.authorized_collection_actions['auth-methods'] = ['list'];
|
||||
|
||||
await visit(urls.orgScope);
|
||||
@@ -343,6 +380,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can navigate to new ldap auth-method route with proper authorization and feature flag enabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.orgScope.authorized_collection_actions['auth-methods'] = [
|
||||
'create',
|
||||
'list',
|
||||
@@ -363,6 +409,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users cannot navigate to new ldap auth-method route when feature flag disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.orgScope.authorized_collection_actions['auth-methods'] = [
|
||||
'create',
|
||||
'list',
|
||||
@@ -382,6 +437,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel new auth method creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getAuthMethodsCount();
|
||||
await visit(urls.authMethods);
|
||||
|
||||
@@ -399,6 +463,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can make primary an auth method', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.notOk(
|
||||
instances.orgScope.primaryAuthMethodId,
|
||||
'Primary auth method is not yet set.',
|
||||
@@ -418,6 +491,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user is notified of error on make primary an auth method', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.patch('/scopes/:id', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -442,6 +524,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can remove as primary an auth method', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.orgScope.update({
|
||||
primaryAuthMethodId: instances.authMethod.id,
|
||||
});
|
||||
@@ -459,6 +550,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user is notified of error on remove as primary an auth method', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.patch('/scopes/:id', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -488,6 +588,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can make and remove primary auth methods from index', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.notOk(
|
||||
instances.orgScope.primaryAuthMethodId,
|
||||
'Primary auth method is not yet set.',
|
||||
@@ -514,6 +623,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new ldap auth method with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
this.server.post('/auth-methods', () => {
|
||||
return new Response(
|
||||
@@ -550,6 +668,15 @@ module('Acceptance | auth-methods | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot directly navigate to new auth method route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.orgScope.authorized_collection_actions['auth-methods'] = ['list'];
|
||||
|
||||
await visit(urls.newAuthMethod);
|
||||
|
||||
@@ -13,6 +13,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { TYPE_AUTH_METHOD_LDAP } from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -64,6 +65,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete an auth method', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authMethodsCount = getAuthMethodCount();
|
||||
await visit(urls.authMethods);
|
||||
|
||||
@@ -75,6 +85,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete an ldap auth method', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
const authMethodsCount = getAuthMethodCount();
|
||||
await visit(urls.authMethods);
|
||||
@@ -87,6 +106,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('errors are displayed when delete on an auth method fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/auth-methods/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
@@ -108,6 +136,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('errors are displayed when delete on an ldap auth method fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
this.server.del('/auth-methods/:id', () => {
|
||||
return new Response(
|
||||
@@ -130,6 +167,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot delete an auth method without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_actions =
|
||||
instances.authMethod.authorized_actions.filter(
|
||||
(item) => item !== 'delete',
|
||||
@@ -143,6 +189,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot delete an ldap auth method without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
instances.ldapAuthMethod.authorized_actions =
|
||||
instances.ldapAuthMethod.authorized_actions.filter(
|
||||
@@ -157,6 +212,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can accept delete auth method via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const authMethodCount = getAuthMethodCount();
|
||||
@@ -172,6 +236,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can accept delete ldap auth method via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
@@ -188,6 +261,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel delete auth method via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const authMethodCount = getAuthMethodCount();
|
||||
@@ -203,6 +285,15 @@ module('Acceptance | auth-methods | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel delete ldap auth method via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
} from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | auth-methods | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -104,6 +105,15 @@ module('Acceptance | auth-methods | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specifc auth-method by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.authMethods));
|
||||
@@ -118,6 +128,15 @@ module('Acceptance | auth-methods | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for auth-methods and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.authMethods));
|
||||
@@ -135,6 +154,15 @@ module('Acceptance | auth-methods | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for auth-methods by type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.authMethods));
|
||||
@@ -152,6 +180,15 @@ module('Acceptance | auth-methods | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for auth-methods by primary', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.authMethods));
|
||||
@@ -176,6 +213,15 @@ module('Acceptance | auth-methods | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('auth-methods table is sorted by `created_time` descending by default', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.authMethods.all().destroy();
|
||||
const years = ['2006', '2005', '2004', '2003'];
|
||||
faker.helpers.shuffle(years).map((year) => {
|
||||
@@ -228,6 +274,15 @@ module('Acceptance | auth-methods | list', function (hooks) {
|
||||
},
|
||||
},
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.authMethods.all().destroy();
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
this.server.create('auth-method', {
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
} from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | auth-methods | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -67,6 +68,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting auth methods in org scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.orgAuthMethods));
|
||||
@@ -75,6 +85,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting auth methods in global scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.globalAuthMethods));
|
||||
@@ -83,6 +102,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to an auth method form in org scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.orgAuthMethods));
|
||||
@@ -102,6 +130,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to an auth method form in global scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.globalAuthMethods));
|
||||
@@ -121,6 +158,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an auth method form without proper authorization in org scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.passwordAuthMethodOrg.authorized_actions =
|
||||
instances.passwordAuthMethodOrg.authorized_actions.filter(
|
||||
(item) => item !== 'read',
|
||||
@@ -135,6 +181,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an auth method form without proper authorization in global scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.oidcAuthMethodGlobal.authorized_actions =
|
||||
instances.oidcAuthMethodGlobal.authorized_actions.filter(
|
||||
(item) => item !== 'read',
|
||||
@@ -149,6 +204,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an ldap auth method form in global scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.ldapAuthMethod = this.server.create('auth-method', {
|
||||
scope: instances.scopes.global,
|
||||
type: TYPE_AUTH_METHOD_LDAP,
|
||||
@@ -169,6 +233,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an ldap auth method form in org scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.ldapAuthMethod = this.server.create('auth-method', {
|
||||
scope: instances.scopes.org,
|
||||
type: TYPE_AUTH_METHOD_LDAP,
|
||||
@@ -189,6 +262,15 @@ module('Acceptance | auth-methods | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to auth method and incorrect url autocorrects', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const orgScope = this.server.create('scope', {
|
||||
type: 'org',
|
||||
scope: { id: 'global', type: 'global' },
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
} from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | auth-methods | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -66,6 +67,15 @@ module('Acceptance | auth-methods | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update an auth method and save changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.authMethods);
|
||||
|
||||
await click(commonSelectors.HREF(urls.authMethod));
|
||||
@@ -85,6 +95,15 @@ module('Acceptance | auth-methods | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update an oidc auth method and save changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod = this.server.create('auth-method', {
|
||||
scope: instances.scopes.org,
|
||||
type: TYPE_AUTH_METHOD_OIDC,
|
||||
@@ -232,6 +251,15 @@ module('Acceptance | auth-methods | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update an ldap auth method and save changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
await visit(urls.authMethods);
|
||||
|
||||
@@ -362,6 +390,15 @@ module('Acceptance | auth-methods | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update an ldap auth method and cancel changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
await visit(urls.authMethods);
|
||||
const name = instances.ldapAuthMethod.name;
|
||||
@@ -392,6 +429,15 @@ module('Acceptance | auth-methods | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot make changes to an existing auth method without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_actions =
|
||||
instances.authMethod.authorized_actions.filter(
|
||||
(item) => item !== 'update',
|
||||
@@ -404,6 +450,15 @@ module('Acceptance | auth-methods | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot make changes to an existing ldap auth method without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
instances.ldapAuthMethod.authorized_actions =
|
||||
instances.ldapAuthMethod.authorized_actions.filter(
|
||||
@@ -417,6 +472,15 @@ module('Acceptance | auth-methods | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving an existing auth method with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const errorMessage = 'The request was invalid.';
|
||||
const errorDescription = 'Name is required.';
|
||||
this.server.patch('/auth-methods/:id', () => {
|
||||
@@ -450,6 +514,15 @@ module('Acceptance | auth-methods | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving an existing ldap auth method with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
const errorMessage = 'The request was invalid.';
|
||||
const errorDescription = 'URL field is required';
|
||||
|
||||
@@ -12,6 +12,7 @@ import { Response } from 'miragejs';
|
||||
import { TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE } from 'api/models/credential-library';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -75,6 +76,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting credential libraries', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.credentialLibraries);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.credentialLibraries);
|
||||
@@ -85,6 +95,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create a new credential library of type vault generic', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getCredentialLibraryCount();
|
||||
await visit(urls.newCredentialLibrary);
|
||||
|
||||
@@ -116,6 +135,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create a new credential library of type vault ssh cert', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
const count = getCredentialLibraryCount();
|
||||
await visit(urls.newCredentialLibrary);
|
||||
@@ -191,6 +219,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('ecdsa and rsa key types bring up a key bits field', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
await visit(urls.newCredentialLibrary);
|
||||
await click(selectors.TYPE_VAULT_SSH_CERT);
|
||||
@@ -208,6 +245,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users cannot navigate to new credential library route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.credentialStore.authorized_collection_actions[
|
||||
'credential-libraries'
|
||||
] = [];
|
||||
@@ -223,6 +269,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel create a new credential library', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getCredentialLibraryCount();
|
||||
await visit(urls.newCredentialLibrary);
|
||||
|
||||
@@ -234,6 +289,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new credential library with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/credential-libraries', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -266,6 +330,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot select vault ssh cert when feature is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.newCredentialLibrary);
|
||||
|
||||
assert.false(featuresService.isEnabled('ssh-target'));
|
||||
@@ -273,6 +346,15 @@ module('Acceptance | credential-libraries | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot directly navigate to new credential library route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.credentialStore.authorized_collection_actions[
|
||||
'credential-libraries'
|
||||
] = instances.credentialStore.authorized_collection_actions[
|
||||
|
||||
@@ -13,6 +13,7 @@ import { resolve, reject } from 'rsvp';
|
||||
import sinon from 'sinon';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-libraries | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -69,6 +70,15 @@ module('Acceptance | credential-libraries | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete resource', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getCredentialLibraryCount();
|
||||
await visit(urls.credentialLibrary);
|
||||
|
||||
@@ -90,6 +100,15 @@ module('Acceptance | credential-libraries | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete credential library via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(resolve());
|
||||
@@ -104,6 +123,15 @@ module('Acceptance | credential-libraries | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot cancel delete credential library via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(reject());
|
||||
@@ -118,6 +146,15 @@ module('Acceptance | credential-libraries | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a credential library which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/credential-libraries/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE } from 'api/models/credential-library';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-libraries | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -68,6 +69,15 @@ module('Acceptance | credential-libraries | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to resource', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.credentialLibraries);
|
||||
|
||||
await click(commonSelectors.TABLE_RESOURCE_LINK(urls.credentialLibrary));
|
||||
@@ -76,6 +86,15 @@ module('Acceptance | credential-libraries | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to resource without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.credentialLibrary.authorized_actions =
|
||||
instances.credentialLibrary.authorized_actions.filter(
|
||||
(item) => item !== 'read',
|
||||
@@ -88,6 +107,15 @@ module('Acceptance | credential-libraries | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to vault ssh cert form when feature is not enabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.credentialLibrary = this.server.create('credential-library', {
|
||||
scope: instances.scopes.project,
|
||||
credentialStore: instances.credentialStore,
|
||||
@@ -107,6 +135,15 @@ module('Acceptance | credential-libraries | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown credential library displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownCredentialLibrary);
|
||||
|
||||
assert
|
||||
|
||||
@@ -12,6 +12,7 @@ import { Response } from 'miragejs';
|
||||
import { TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE } from 'api/models/credential-library';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-libraries | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -80,6 +81,15 @@ module('Acceptance | credential-libraries | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update a credential library and cancel changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.credentialLibrary);
|
||||
await click(commonSelectors.EDIT_BTN, 'Activate edit mode');
|
||||
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
|
||||
@@ -95,6 +105,15 @@ module('Acceptance | credential-libraries | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update a vault generic credential library and save changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.credentialLibrary);
|
||||
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
@@ -133,6 +152,15 @@ module('Acceptance | credential-libraries | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving an existing credential library with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.patch('/credential-libraries/:id', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -166,6 +194,15 @@ module('Acceptance | credential-libraries | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved credential library changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -197,6 +234,15 @@ module('Acceptance | credential-libraries | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel discard unsaved credential library via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -228,6 +274,15 @@ module('Acceptance | credential-libraries | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot update credential type in a vault generic credential library', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.credentialLibrary);
|
||||
await click(commonSelectors.EDIT_BTN, 'Activate edit mode');
|
||||
|
||||
@@ -235,6 +290,15 @@ module('Acceptance | credential-libraries | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update a vault ssh cert credential library and save changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.credentialLibrary = this.server.create('credential-library', {
|
||||
scope: instances.scopes.project,
|
||||
credentialStore: instances.credentialStore,
|
||||
|
||||
@@ -12,6 +12,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { Response } from 'miragejs';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-stores | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -78,6 +79,15 @@ module('Acceptance | credential-stores | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can create a new credential store of type vault', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('static-credentials');
|
||||
const count = getVaultCredentialStoresCount();
|
||||
await visit(urls.newCredentialStore);
|
||||
@@ -90,6 +100,20 @@ module('Acceptance | credential-stores | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can create a new credential store of type vault with a worker filter', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('static-credentials');
|
||||
featuresService.enable('worker-filter');
|
||||
const count = getVaultCredentialStoresCount();
|
||||
@@ -108,6 +132,15 @@ module('Acceptance | credential-stores | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can cancel create new credential stores', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getCredentialStoresCount();
|
||||
await visit(urls.newCredentialStore);
|
||||
|
||||
@@ -133,6 +166,15 @@ module('Acceptance | credential-stores | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new static credential store with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const errorMsg =
|
||||
'Invalid request. Request attempted to make second resource with the same field value that must be unique.';
|
||||
this.server.post('/credential-stores', () => {
|
||||
@@ -154,6 +196,15 @@ module('Acceptance | credential-stores | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new vault credential store with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/credential-stores', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -187,6 +238,15 @@ module('Acceptance | credential-stores | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can link to docs page for new credential store', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.newCredentialStore);
|
||||
|
||||
assert
|
||||
|
||||
@@ -12,6 +12,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { Response } from 'miragejs';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module(
|
||||
'Acceptance | credential-stores | credentials | create',
|
||||
@@ -83,6 +84,15 @@ module(
|
||||
});
|
||||
|
||||
test('users can create a new username & password credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const credentialsCount = getCredentialsCount();
|
||||
const usernamePasswordCredentialCount =
|
||||
getUsernamePasswordCredentialCount();
|
||||
@@ -103,6 +113,15 @@ module(
|
||||
});
|
||||
|
||||
test('users can create a new username & key pair credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const credentialsCount = getCredentialsCount();
|
||||
const usernameKeyPairCredentialCount =
|
||||
getUsernameKeyPairCredentialCount();
|
||||
@@ -124,6 +143,20 @@ module(
|
||||
});
|
||||
|
||||
test('users can create a new json credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('json-credentials');
|
||||
const credentialsCount = getCredentialsCount();
|
||||
const jsonCredentialCount = getJsonCredentialCount();
|
||||
@@ -142,6 +175,15 @@ module(
|
||||
});
|
||||
|
||||
test('users can cancel create new username & password credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const credentialsCount = getCredentialsCount();
|
||||
await visit(urls.credentials);
|
||||
|
||||
@@ -157,6 +199,15 @@ module(
|
||||
});
|
||||
|
||||
test('users can cancel create new username & key pair credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const credentialsCount = getCredentialsCount();
|
||||
await visit(urls.credentials);
|
||||
|
||||
@@ -173,6 +224,20 @@ module(
|
||||
});
|
||||
|
||||
test('users can cancel create new json credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('json-credentials');
|
||||
const credentialsCount = getCredentialsCount();
|
||||
await visit(urls.credentials);
|
||||
@@ -190,6 +255,20 @@ module(
|
||||
});
|
||||
|
||||
test('users can switch away from JSON type credentials and the json_object value will be cleared', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('json-credentials');
|
||||
|
||||
await visit(urls.credentials);
|
||||
@@ -205,6 +284,15 @@ module(
|
||||
});
|
||||
|
||||
test('users cannot navigate to new credential route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('static-credentials');
|
||||
instances.staticCredentialStore.authorized_collection_actions.credentials =
|
||||
instances.staticCredentialStore.authorized_collection_actions.credentials.filter(
|
||||
@@ -225,6 +313,15 @@ module(
|
||||
});
|
||||
|
||||
test('saving a new username & password credential with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const errorMessage = 'Error in provided request.';
|
||||
const errorDescription =
|
||||
'Field required for creating a username-password credential.';
|
||||
@@ -257,6 +354,15 @@ module(
|
||||
});
|
||||
|
||||
test('saving a new username & key pair credential with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const errorMessage = 'Error in provided request.';
|
||||
const errorDescription =
|
||||
'Field required for creating a username-key-pair credential.';
|
||||
@@ -292,6 +398,20 @@ module(
|
||||
});
|
||||
|
||||
test('saving a new json credential with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('json-credentials');
|
||||
const errorMessage = 'Error in provided request.';
|
||||
await visit(urls.credentials);
|
||||
@@ -323,6 +443,15 @@ module(
|
||||
});
|
||||
|
||||
test('cannot navigate to json credential when feature is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.credentials);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newCredential));
|
||||
@@ -345,6 +474,15 @@ module(
|
||||
});
|
||||
|
||||
test('users cannot create a new credential without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.staticCredentialStore.authorized_collection_actions.credentials =
|
||||
instances.staticCredentialStore.authorized_collection_actions.credentials.filter(
|
||||
(item) => item !== 'create',
|
||||
|
||||
@@ -11,6 +11,7 @@ import { click, currentURL, visit } from '@ember/test-helpers';
|
||||
import { Response } from 'miragejs';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module(
|
||||
'Acceptance | credential-stores | credentials | delete',
|
||||
@@ -106,6 +107,15 @@ module(
|
||||
});
|
||||
|
||||
test('can delete username & password credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const usernamePasswordCredentialCount =
|
||||
getUsernamePasswordCredentialCount();
|
||||
await visit(urls.usernamePasswordCredential);
|
||||
@@ -121,6 +131,15 @@ module(
|
||||
});
|
||||
|
||||
test('can delete username & key pair credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const usernameKeyPairCredentialCount =
|
||||
getUsernameKeyPairCredentialCount();
|
||||
await visit(urls.usernameKeyPairCredential);
|
||||
@@ -136,6 +155,15 @@ module(
|
||||
});
|
||||
|
||||
test('can delete JSON credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const jsonCredentialCount = getJSONCredentialCount();
|
||||
await visit(urls.jsonCredential);
|
||||
|
||||
@@ -194,6 +222,15 @@ module(
|
||||
});
|
||||
|
||||
test('can accept delete username & password credential via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const usernamePasswordCredentialCount =
|
||||
@@ -211,6 +248,15 @@ module(
|
||||
});
|
||||
|
||||
test('can accept delete username & key pair credential via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const usernameKeyPairCredentialCount =
|
||||
@@ -229,6 +275,15 @@ module(
|
||||
});
|
||||
|
||||
test('can accept delete JSON credential via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const jsonCredentialCount = getJSONCredentialCount();
|
||||
@@ -243,6 +298,15 @@ module(
|
||||
});
|
||||
|
||||
test('can cancel delete username & password credential via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const usernamePasswordCredentialCount =
|
||||
@@ -261,6 +325,15 @@ module(
|
||||
});
|
||||
|
||||
test('can cancel delete username & key pair credential via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const usernameKeyPairCredentialCount =
|
||||
@@ -279,6 +352,15 @@ module(
|
||||
});
|
||||
|
||||
test('can cancel delete JSON credential via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const jsonCredentialCount = getJSONCredentialCount();
|
||||
@@ -293,6 +375,15 @@ module(
|
||||
});
|
||||
|
||||
test('deleting a username & password credential which errors displays error message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/credentials/:id', mockResponse);
|
||||
await visit(urls.usernamePasswordCredential);
|
||||
|
||||
@@ -303,6 +394,15 @@ module(
|
||||
});
|
||||
|
||||
test('deleting a username & key pair credential which errors displays error message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/credentials/:id', mockResponse);
|
||||
await visit(urls.usernameKeyPairCredential);
|
||||
|
||||
@@ -313,6 +413,15 @@ module(
|
||||
});
|
||||
|
||||
test('deleting a JSON credential which errors displays error message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/credentials/:id', mockResponse);
|
||||
await visit(urls.jsonCredential);
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as credentialStoreSelectors from '../selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-stores | credentials | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -73,6 +74,15 @@ module('Acceptance | credential-stores | credentials | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can navigate to credentials with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.staticCredentialStore);
|
||||
|
||||
assert.ok(
|
||||
@@ -109,6 +119,15 @@ module('Acceptance | credential-stores | credentials | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to new credential screen with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.staticCredentialStore.authorized_collection_actions.credentials =
|
||||
['create'];
|
||||
await visit(urls.staticCredentialStore);
|
||||
|
||||
@@ -9,6 +9,7 @@ import { setupApplicationTest } from 'admin/tests/helpers';
|
||||
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -81,6 +82,15 @@ module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting username & password credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.staticCredentialStore);
|
||||
await click(commonSelectors.HREF(urls.credentials));
|
||||
|
||||
@@ -92,6 +102,15 @@ module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting username & key pair credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.staticCredentialStore);
|
||||
await click(commonSelectors.HREF(urls.credentials));
|
||||
|
||||
@@ -103,6 +122,15 @@ module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting JSON credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('json-credentials');
|
||||
await visit(urls.staticCredentialStore);
|
||||
await click(commonSelectors.HREF(urls.credentials));
|
||||
@@ -115,6 +143,15 @@ module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a username & password credential form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.usernamePasswordCredential.authorized_actions =
|
||||
instances.usernamePasswordCredential.authorized_actions.filter(
|
||||
(item) => item != 'read',
|
||||
@@ -130,6 +167,15 @@ module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a username & key pair credential form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.usernameKeyPairCredential.authorized_actions =
|
||||
instances.usernameKeyPairCredential.authorized_actions.filter(
|
||||
(item) => item != 'read',
|
||||
@@ -145,6 +191,15 @@ module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a JSON credential form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.jsonCredential.authorized_actions =
|
||||
instances.jsonCredential.authorized_actions.filter(
|
||||
(item) => item != 'read',
|
||||
@@ -160,6 +215,15 @@ module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a JSON credential form when feature not enabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.credentials);
|
||||
|
||||
assert.false(featuresService.isEnabled('json-credentials'));
|
||||
@@ -172,6 +236,15 @@ module('Acceptance | credential-stores | credentials | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown credential displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownCredential);
|
||||
|
||||
assert
|
||||
|
||||
@@ -18,6 +18,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module(
|
||||
'Acceptance | credential-stores | credentials | update',
|
||||
@@ -137,6 +138,15 @@ module(
|
||||
});
|
||||
|
||||
test('can save changes to existing username & key pair credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.notEqual(
|
||||
instances.usernameKeyPairCredential.name,
|
||||
commonSelectors.FIELD_NAME_VALUE,
|
||||
@@ -230,6 +240,15 @@ module(
|
||||
});
|
||||
|
||||
test('can cancel changes to existing username & key pair credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.usernameKeyPairCredential);
|
||||
|
||||
await click(commonSelectors.EDIT_BTN, 'Activate edit mode');
|
||||
@@ -285,6 +304,15 @@ module(
|
||||
});
|
||||
|
||||
test('saving an existing username & key pair credential with invalid fields displays error message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.patch('/credentials/:id', mockResponse);
|
||||
await visit(urls.usernameKeyPairCredential);
|
||||
|
||||
@@ -319,6 +347,15 @@ module(
|
||||
});
|
||||
|
||||
test('can discard unsaved username & password credential changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -351,6 +388,15 @@ module(
|
||||
});
|
||||
|
||||
test('can discard unsaved username & key pair credential changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -385,6 +431,15 @@ module(
|
||||
});
|
||||
|
||||
test('can discard unsaved JSON credential changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -455,6 +510,15 @@ module(
|
||||
});
|
||||
|
||||
test('can cancel discard unsaved username & key pair credential changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(6);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -537,6 +601,15 @@ module(
|
||||
});
|
||||
|
||||
test('private_key and private_key_passphrase fields render in edit mode only for a username & key pair credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.usernameKeyPairCredential);
|
||||
|
||||
assert.dom(selectors.FIELD_SSH_PRIVATE_KEY).doesNotExist();
|
||||
@@ -561,6 +634,15 @@ module(
|
||||
});
|
||||
|
||||
test('secret editor enters editing state when clicking edit button in the secret editor of a JSON credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.jsonCredential);
|
||||
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
|
||||
@@ -14,6 +14,7 @@ import { resolve, reject } from 'rsvp';
|
||||
import sinon from 'sinon';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -73,6 +74,15 @@ module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete credential store of type vault', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getVaultCredentialStoresCount();
|
||||
await visit(urls.vaultCredentialStore);
|
||||
|
||||
@@ -83,6 +93,15 @@ module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete credential store of type static', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getStaticCredentialStoresCount();
|
||||
await visit(urls.staticCredentialStore);
|
||||
|
||||
@@ -117,6 +136,15 @@ module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete static credential store via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(resolve());
|
||||
@@ -131,6 +159,15 @@ module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete vault credential store via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(resolve());
|
||||
@@ -145,6 +182,15 @@ module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot cancel delete for static credential store via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(reject());
|
||||
@@ -159,6 +205,15 @@ module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot cancel delete for vault credential store via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(reject());
|
||||
@@ -173,6 +228,15 @@ module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a static credential store which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/credential-stores/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
@@ -193,6 +257,15 @@ module('Acceptance | credential-stores | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a vault credential store which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/credential-stores/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
} from 'api/models/credential-store';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-stores | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -70,6 +71,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to credential-stores with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.projectScope));
|
||||
@@ -83,6 +93,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot navigate to index without either list or create actions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions[
|
||||
'credential-stores'
|
||||
] = [];
|
||||
@@ -104,6 +123,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions[
|
||||
'credential-stores'
|
||||
] = ['create'];
|
||||
@@ -115,6 +143,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can link to docs page for credential stores', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.credentialStores));
|
||||
@@ -127,6 +164,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific credential-store by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.credentialStores));
|
||||
@@ -147,6 +193,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for credential-stores and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.credentialStores));
|
||||
@@ -166,6 +221,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for credential-stores by type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.credentialStores));
|
||||
@@ -185,6 +249,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('credential stores table is sorted by `created_time` descending by default', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.credentialStores.all().destroy();
|
||||
const years = ['2006', '2005', '2004', '2003'];
|
||||
faker.helpers.shuffle(years).map((year) => {
|
||||
@@ -236,6 +309,15 @@ module('Acceptance | credential-stores | list', function (hooks) {
|
||||
},
|
||||
},
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.credentialStores.all().destroy();
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
this.server.create('credential-store', {
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-stores | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -67,6 +68,15 @@ module('Acceptance | credential-stores | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting static credential store', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('static-credentials');
|
||||
await visit(urls.credentialStores);
|
||||
|
||||
@@ -78,6 +88,15 @@ module('Acceptance | credential-stores | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting vault credential store', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.credentialStores);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.credentialStores);
|
||||
@@ -88,6 +107,15 @@ module('Acceptance | credential-stores | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a static credential store form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
instances.staticCredentialStore.authorized_actions =
|
||||
instances.staticCredentialStore.authorized_actions.filter(
|
||||
@@ -105,6 +133,15 @@ module('Acceptance | credential-stores | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a vault credential store form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('static-credentials');
|
||||
await visit(urls.projectScope);
|
||||
instances.vaultCredentialStore.authorized_actions =
|
||||
@@ -123,6 +160,15 @@ module('Acceptance | credential-stores | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown credential store displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownCredentialStore);
|
||||
|
||||
assert
|
||||
@@ -131,6 +177,15 @@ module('Acceptance | credential-stores | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can link to docs page for credential store', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.credentialStores));
|
||||
|
||||
@@ -12,6 +12,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { Response } from 'miragejs';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | credential-stores | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -84,6 +85,15 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can save changes to existing vault credential store', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.notEqual(instances.vaultCredentialStore.name, 'random string');
|
||||
|
||||
await visit(urls.vaultCredentialStore);
|
||||
@@ -139,6 +149,15 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to existing vault credential store', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.vaultCredentialStore);
|
||||
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
@@ -178,6 +197,15 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving an existing vault credential store with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const desc = 'Field required for creating a vault credential store.';
|
||||
const msg = 'The request was invalid';
|
||||
this.server.patch('/credential-stores/:id', () => {
|
||||
@@ -210,6 +238,15 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved static credential store changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -243,6 +280,15 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved vault credential store changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -302,6 +348,15 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel discard unsaved vault credential store via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -348,6 +403,20 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('manage actions dropdown displays edit option and routes to correct url', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.vaultCredentialStore);
|
||||
|
||||
await click(commonSelectors.HREF(urls.workerFilter));
|
||||
@@ -358,6 +427,15 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('when work filters code editor is empty, save btn reroutes to empty state template', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.vaultCredentialStore.update({
|
||||
attributes: { worker_filter: null },
|
||||
});
|
||||
@@ -372,6 +450,20 @@ module('Acceptance | credential-stores | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('when worker filter exists, readonly code block displays the filter text', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.vaultCredentialStore.update({
|
||||
attributes: { worker_filter: null },
|
||||
});
|
||||
|
||||
@@ -11,6 +11,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | groups | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -50,6 +51,15 @@ module('Acceptance | groups | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete a group', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getGroupsCount();
|
||||
await visit(urls.group);
|
||||
|
||||
@@ -70,6 +80,15 @@ module('Acceptance | groups | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a group which displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/groups/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -12,6 +12,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | groups | members', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -56,6 +57,15 @@ module('Acceptance | groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting group members', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.members);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.members);
|
||||
@@ -63,6 +73,15 @@ module('Acceptance | groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('can remove a member', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.members);
|
||||
|
||||
assert.dom(commonSelectors.TABLE_ROWS).exists({ count: membersCount });
|
||||
@@ -74,6 +93,15 @@ module('Acceptance | groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot remove a member without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authorized_actions = instances.group.authorized_actions.filter(
|
||||
(item) => item !== 'remove-members',
|
||||
);
|
||||
@@ -86,6 +114,15 @@ module('Acceptance | groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on member remove', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const errorMsg = 'The request was invalid.';
|
||||
this.server.post('/groups/:idMethod', () => {
|
||||
return new Response(
|
||||
@@ -109,18 +146,45 @@ module('Acceptance | groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting member selection', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.addMembers);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.addMembers);
|
||||
});
|
||||
|
||||
test('can navigate to add members with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.group);
|
||||
await click(selectors.MANAGE_DROPDOWN);
|
||||
assert.dom(selectors.MANAGE_DROPDOWN_ADD_MEMBER).isVisible();
|
||||
});
|
||||
|
||||
test('cannot navigate to add members without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authorized_actions = instances.group.authorized_actions.filter(
|
||||
(item) => item !== 'add-members',
|
||||
);
|
||||
@@ -133,6 +197,15 @@ module('Acceptance | groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and save members to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.group.update({ memberIds: [] });
|
||||
await visit(urls.members);
|
||||
|
||||
@@ -152,6 +225,15 @@ module('Acceptance | groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and cancel members to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.members);
|
||||
|
||||
assert.dom(commonSelectors.TABLE_ROWS).exists({ count: membersCount });
|
||||
@@ -175,6 +257,15 @@ module('Acceptance | groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on member add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const errorMsg = 'The request was invalid.';
|
||||
this.server.post('/groups/:idMethod', () => {
|
||||
return new Response(
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | groups | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -60,6 +61,15 @@ module('Acceptance | groups | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to group and incorrect url auto-corrects', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const orgScope = this.server.create('scope', {
|
||||
type: 'org',
|
||||
scope: { id: 'global', type: 'global' },
|
||||
|
||||
@@ -12,6 +12,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -104,6 +105,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can create new dynamic aws host catalogs with aws provider', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCatalogCount();
|
||||
await visit(urls.newAWSDynamicHostCatalog);
|
||||
|
||||
@@ -119,6 +129,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can create new dynamic azure host catalogs with azure provider', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCatalogCount();
|
||||
await visit(urls.newAzureDynamicHostCatalog);
|
||||
|
||||
@@ -134,6 +153,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can create new dynamic host catalogs with GCP provider ', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCatalogCount();
|
||||
await visit(urls.newGCPDynamicHostCatalog);
|
||||
|
||||
@@ -154,6 +182,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can cancel creation of new static host catalogs', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCatalogCount();
|
||||
await visit(urls.newStaticHostCatalog);
|
||||
|
||||
@@ -165,6 +202,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can cancel creation of new dynamic host catalogs with AWS provider', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCatalogCount();
|
||||
await visit(urls.newAWSDynamicHostCatalog);
|
||||
|
||||
@@ -176,6 +222,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can cancel creation of new dynamic host catalogs with GCP provider', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCatalogCount();
|
||||
await visit(urls.newGCPDynamicHostCatalog);
|
||||
|
||||
@@ -187,6 +242,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can cancel creation of new dynamic host catalogs with Azure provider', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCatalogCount();
|
||||
await visit(urls.newAzureDynamicHostCatalog);
|
||||
|
||||
@@ -198,6 +262,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can navigate to new static host catalogs route with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostCatalogs);
|
||||
|
||||
assert.ok(
|
||||
@@ -253,18 +326,45 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users should not see worker filter field in community edition when AWS host catalog is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.newAWSDynamicHostCatalog);
|
||||
|
||||
assert.dom(selectors.FIELD_WORKER_FILTER).doesNotExist();
|
||||
});
|
||||
|
||||
test('users should not see worker filter field in community edition when GCP host catalog is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.newGCPDynamicHostCatalog);
|
||||
|
||||
assert.dom(selectors.FIELD_WORKER_FILTER).doesNotExist();
|
||||
});
|
||||
|
||||
test('users should see optional worker filter field in enterprise edition when AWS host catalog is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
featureEdition.setEdition('enterprise');
|
||||
await visit(urls.newAWSDynamicHostCatalog);
|
||||
@@ -276,6 +376,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users should see required worker filter field in hcp edition when AWS host catalog is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
featureEdition.setEdition('hcp');
|
||||
await visit(urls.newAWSDynamicHostCatalog);
|
||||
@@ -287,6 +396,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users should see worker filter field in enterprise edition when GCP host catalog is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
await visit(urls.newAWSDynamicHostCatalog);
|
||||
|
||||
@@ -294,6 +412,15 @@ module('Acceptance | host-catalogs | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot directly navigate to new host catalog route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions['host-catalogs'] =
|
||||
instances.scopes.project.authorized_collection_actions[
|
||||
'host-catalogs'
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
TYPE_HOST_CATALOG_PLUGIN_GCP,
|
||||
} from 'api/models/host-catalog';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -77,6 +78,15 @@ module('Acceptance | host-catalogs | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete host catalog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const hostCatalogCount = getHostCatalogCount();
|
||||
await visit(urls.hostCatalogs);
|
||||
|
||||
@@ -88,6 +98,15 @@ module('Acceptance | host-catalogs | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete GCP host catalog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const hostCatalogCount = getHostCatalogCount();
|
||||
|
||||
await visit(urls.hostCatalogs);
|
||||
@@ -100,6 +119,15 @@ module('Acceptance | host-catalogs | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot delete host catalog without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostCatalogs);
|
||||
instances.hostCatalog.authorized_actions =
|
||||
instances.hostCatalog.authorized_actions.filter(
|
||||
@@ -113,6 +141,15 @@ module('Acceptance | host-catalogs | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete host catalog via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const hostCatalogCount = getHostCatalogCount();
|
||||
@@ -131,6 +168,15 @@ module('Acceptance | host-catalogs | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel delete host catalog via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const hostCatalogCount = getHostCatalogCount();
|
||||
@@ -146,6 +192,15 @@ module('Acceptance | host-catalogs | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a host catalog which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostCatalogs);
|
||||
this.server.del('/host-catalogs/:id', () => {
|
||||
return new Response(
|
||||
|
||||
@@ -11,6 +11,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | host sets | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -174,6 +175,15 @@ module('Acceptance | host-catalogs | host sets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users cannot create a new host set without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.hostCatalog.authorized_collection_actions['host-sets'] =
|
||||
instances.hostCatalog.authorized_collection_actions['host-sets'].filter(
|
||||
(item) => item !== 'create',
|
||||
@@ -202,6 +212,15 @@ module('Acceptance | host-catalogs | host sets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel create new host', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostSetCount();
|
||||
await visit(urls.newHostSet);
|
||||
|
||||
@@ -242,6 +261,15 @@ module('Acceptance | host-catalogs | host sets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot directly navigate to new host set route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.hostCatalog.authorized_collection_actions['host-sets'] =
|
||||
instances.hostCatalog.authorized_collection_actions['host-sets'].filter(
|
||||
(item) => item !== 'create',
|
||||
|
||||
@@ -13,6 +13,7 @@ import sinon from 'sinon';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | host sets | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -75,6 +76,15 @@ module('Acceptance | host-catalogs | host sets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete host', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostSetCount();
|
||||
await visit(urls.hostSet);
|
||||
|
||||
@@ -85,6 +95,15 @@ module('Acceptance | host-catalogs | host sets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete host set via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(resolve());
|
||||
@@ -109,6 +128,15 @@ module('Acceptance | host-catalogs | host sets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot cancel delete host set via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(reject());
|
||||
@@ -123,6 +151,15 @@ module('Acceptance | host-catalogs | host sets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a host set which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/host-sets/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -11,6 +11,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -77,6 +78,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting host set hosts', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostSetHostCount();
|
||||
await visit(urls.hostSetHosts);
|
||||
|
||||
@@ -85,6 +95,20 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('can remove a host', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
'target-size': {
|
||||
// [ember-a11y-ignore]: axe rule "target-size" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostSetHostCount();
|
||||
await visit(urls.hostSetHosts);
|
||||
|
||||
@@ -97,6 +121,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot remove a host without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authorized_actions = instances.hostSet.authorized_actions.filter(
|
||||
(item) => item !== 'remove-hosts',
|
||||
);
|
||||
@@ -107,6 +140,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on host remove error', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostSetHostCount();
|
||||
this.server.post('/host-sets/:idMethod', () => {
|
||||
return new Response(
|
||||
@@ -133,12 +175,30 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting add hosts', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.addHosts);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.addHosts);
|
||||
});
|
||||
|
||||
test('can navigate to add hosts with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostSet);
|
||||
|
||||
await click(selectors.MANAGE_DROPDOWN_HOST_SETS);
|
||||
@@ -157,6 +217,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and save hosts to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.hostSet.update({ hostIds: [] });
|
||||
await visit(urls.hostSetHosts);
|
||||
|
||||
@@ -177,6 +246,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and cancel hosts to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostSetHostCount();
|
||||
await visit(urls.hostSetHosts);
|
||||
|
||||
@@ -200,6 +278,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on host add error', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/host-sets/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -224,12 +311,30 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting host creation from a host set', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.createAndAddHost);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.createAndAddHost);
|
||||
});
|
||||
|
||||
test('create and add host to host set', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.hostSet.update({ hostIds: [] });
|
||||
await visit(urls.hostSetHosts);
|
||||
|
||||
@@ -249,6 +354,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('create and cancel host add to host set', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.createAndAddHost);
|
||||
|
||||
await click(commonSelectors.CANCEL_BTN);
|
||||
@@ -257,6 +371,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on host creation error', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/hosts', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -281,6 +404,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on host addition to host set error', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/host-sets/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -305,6 +437,15 @@ module('Acceptance | host-catalogs | host-sets | hosts', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to host and incorrect url autocorrects', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const hostCatalog = this.server.create('host-catalog', {
|
||||
scope: instances.scopes.project,
|
||||
type: 'plugin',
|
||||
|
||||
@@ -9,6 +9,7 @@ import { setupApplicationTest } from 'admin/tests/helpers';
|
||||
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | host-sets | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -67,6 +68,15 @@ module('Acceptance | host-catalogs | host-sets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting host sets', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostSets);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.hostSets);
|
||||
@@ -77,6 +87,15 @@ module('Acceptance | host-catalogs | host-sets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a host set form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostCatalog);
|
||||
instances.hostSet.authorized_actions =
|
||||
instances.hostSet.authorized_actions.filter((item) => item !== 'read');
|
||||
@@ -89,6 +108,15 @@ module('Acceptance | host-catalogs | host-sets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown host set displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownHostSet);
|
||||
|
||||
assert
|
||||
@@ -97,6 +125,15 @@ module('Acceptance | host-catalogs | host-sets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can link to docs page for host sets', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostSets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.hostSet));
|
||||
|
||||
@@ -18,6 +18,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | host sets | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -328,6 +329,15 @@ module('Acceptance | host-catalogs | host sets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved host set changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const mockName = 'random string';
|
||||
assert.expect(5);
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
|
||||
@@ -11,6 +11,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | hosts | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -74,6 +75,15 @@ module('Acceptance | host-catalogs | hosts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create new host', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCount();
|
||||
await visit(urls.newHost);
|
||||
|
||||
@@ -100,6 +110,15 @@ module('Acceptance | host-catalogs | hosts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('Users can navigate to new host route with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hosts);
|
||||
|
||||
assert.ok(
|
||||
@@ -128,6 +147,15 @@ module('Acceptance | host-catalogs | hosts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel create new host', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCount();
|
||||
await visit(urls.newHost);
|
||||
await fillIn(commonSelectors.FIELD_NAME, commonSelectors.FIELD_NAME_VALUE);
|
||||
@@ -138,6 +166,15 @@ module('Acceptance | host-catalogs | hosts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new host with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/hosts', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -168,6 +205,15 @@ module('Acceptance | host-catalogs | hosts | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot directly navigate to new host route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.hostCatalog.authorized_collection_actions.hosts =
|
||||
instances.hostCatalog.authorized_collection_actions.hosts.filter(
|
||||
(item) => item !== 'create',
|
||||
|
||||
@@ -13,6 +13,7 @@ import sinon from 'sinon';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | hosts | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -75,6 +76,15 @@ module('Acceptance | host-catalogs | hosts | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete host', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = getHostCount();
|
||||
await visit(urls.host);
|
||||
|
||||
@@ -92,6 +102,15 @@ module('Acceptance | host-catalogs | hosts | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete host via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(resolve());
|
||||
@@ -106,6 +125,15 @@ module('Acceptance | host-catalogs | hosts | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot cancel delete host via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
confirmService.confirm = sinon.fake.returns(reject());
|
||||
@@ -120,6 +148,15 @@ module('Acceptance | host-catalogs | hosts | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a host which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/hosts/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | hosts | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -93,6 +94,15 @@ module('Acceptance | host-catalogs | hosts | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.hostCatalog.authorized_collection_actions.hosts = ['create'];
|
||||
await visit(urls.hostCatalog);
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import { setupApplicationTest } from 'admin/tests/helpers';
|
||||
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | hosts | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -67,6 +68,15 @@ module('Acceptance | host-catalogs | hosts | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting hosts', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hosts);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.hosts);
|
||||
@@ -77,6 +87,15 @@ module('Acceptance | host-catalogs | hosts | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a host form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostCatalog);
|
||||
instances.host.authorized_actions =
|
||||
instances.host.authorized_actions.filter((item) => item !== 'read');
|
||||
@@ -87,6 +106,15 @@ module('Acceptance | host-catalogs | hosts | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown host displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownHost);
|
||||
|
||||
assert
|
||||
@@ -95,6 +123,15 @@ module('Acceptance | host-catalogs | hosts | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can link to docs page for hosts', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hosts);
|
||||
|
||||
await click(commonSelectors.HREF(urls.host));
|
||||
|
||||
@@ -11,6 +11,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | hosts | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -70,6 +71,15 @@ module('Acceptance | host-catalogs | hosts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can save changes to existing host', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.notEqual(instances.host.name, commonSelectors.FIELD_NAME_VALUE);
|
||||
await visit(urls.host);
|
||||
|
||||
@@ -96,6 +106,15 @@ module('Acceptance | host-catalogs | hosts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to existing host', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const { name, description } = instances.host;
|
||||
await visit(urls.host);
|
||||
|
||||
@@ -114,6 +133,15 @@ module('Acceptance | host-catalogs | hosts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving an existing host with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.patch('/hosts/:id', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -146,6 +174,15 @@ module('Acceptance | host-catalogs | hosts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved host changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(7);
|
||||
const { name, description } = this.server.schema.hosts.all().models[0];
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
@@ -175,6 +212,15 @@ module('Acceptance | host-catalogs | hosts | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel discard unsaved host changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(7);
|
||||
const { name, description } = this.server.schema.hosts.all().models[0];
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -89,6 +90,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to host catalogs with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.projectScope));
|
||||
@@ -107,6 +117,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot navigate to index without either list or create actions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions['host-catalogs'] =
|
||||
[];
|
||||
await visit(urls.orgScope);
|
||||
@@ -127,6 +146,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions['host-catalogs'] =
|
||||
instances.scopes.project.authorized_collection_actions[
|
||||
'host-catalogs'
|
||||
@@ -156,6 +184,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to index with only list action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions['host-catalogs'] =
|
||||
instances.scopes.project.authorized_collection_actions[
|
||||
'host-catalogs'
|
||||
@@ -182,6 +219,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific host catalog by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.hostCatalogs));
|
||||
@@ -199,6 +245,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for aws host catalog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.hostCatalogs));
|
||||
@@ -214,6 +269,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for azure host catalog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.hostCatalogs));
|
||||
@@ -229,6 +293,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for gcp host catalog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.hostCatalogs));
|
||||
@@ -245,6 +318,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for host catalogs and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.hostCatalogs));
|
||||
@@ -266,6 +348,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('Host catalogs table is sorted by `created_time` descending by default', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.hostCatalogs.all().destroy();
|
||||
const years = ['2006', '2005', '2004', '2003'];
|
||||
faker.helpers.shuffle(years).map((year) => {
|
||||
@@ -309,6 +400,15 @@ module('Acceptance | host-catalogs | list', function (hooks) {
|
||||
},
|
||||
},
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.hostCatalogs.all().destroy();
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
this.server.create('host-catalog', {
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -59,6 +60,15 @@ module('Acceptance | host-catalogs | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting host catalogs', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostCatalogs);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.hostCatalogs);
|
||||
@@ -69,6 +79,15 @@ module('Acceptance | host-catalogs | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a host catalog form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
instances.hostCatalog.authorized_actions =
|
||||
instances.hostCatalog.authorized_actions.filter(
|
||||
@@ -83,6 +102,15 @@ module('Acceptance | host-catalogs | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown host catalog displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownHostCatalog);
|
||||
|
||||
assert
|
||||
@@ -91,6 +119,15 @@ module('Acceptance | host-catalogs | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can link to docs page for host catalog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.hostCatalogs));
|
||||
@@ -105,6 +142,15 @@ module('Acceptance | host-catalogs | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to host catalog and incorrect url autocorrects', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const projectScope = this.server.create('scope', {
|
||||
type: 'project',
|
||||
scope: { id: instances.scopes.org.id, type: 'org' },
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
TYPE_HOST_CATALOG_PLUGIN_GCP,
|
||||
} from 'api/models/host-catalog';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | host-catalogs | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -83,6 +84,15 @@ module('Acceptance | host-catalogs | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update static AWS credentials to Dynamic AWS credentials', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.AWSHostCatalogWithStaticCredential);
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
|
||||
@@ -101,6 +111,15 @@ module('Acceptance | host-catalogs | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can update GCP host catalog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.GCPHostCatalog);
|
||||
await click(commonSelectors.EDIT_BTN);
|
||||
await fillIn(selectors.FIELD_PROJECT, selectors.FIELD_PROJECT_VALUE);
|
||||
@@ -129,6 +148,15 @@ module('Acceptance | host-catalogs | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot make changes to an existing host catalog without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.hostCatalogs);
|
||||
instances.hostCatalog.authorized_actions =
|
||||
instances.hostCatalog.authorized_actions.filter(
|
||||
@@ -178,6 +206,15 @@ module('Acceptance | host-catalogs | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved host catalog changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
assert.notEqual(
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
} from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | managed-groups | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -74,6 +75,15 @@ module('Acceptance | managed-groups | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create a new managed group', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const managedGroupsCount = getManagedGroupCount();
|
||||
await visit(urls.authMethod);
|
||||
await click(selectors.MANAGE_DROPDOWN_AUTH_METHOD);
|
||||
@@ -98,6 +108,15 @@ module('Acceptance | managed-groups | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create a new ldap managed group', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const managedGroupsCount = getManagedGroupCount();
|
||||
await visit(urls.ldapAuthMethod);
|
||||
await click(selectors.MANAGE_DROPDOWN_AUTH_METHOD);
|
||||
@@ -130,6 +149,15 @@ module('Acceptance | managed-groups | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('User cannot create a new managed group without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_collection_actions['managed-groups'] =
|
||||
instances.authMethod.authorized_collection_actions[
|
||||
'managed-groups'
|
||||
@@ -147,6 +175,15 @@ module('Acceptance | managed-groups | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('User cannot create a new ldap managed group without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
instances.ldapAuthMethod.authorized_collection_actions['managed-groups'] =
|
||||
instances.ldapAuthMethod.authorized_collection_actions[
|
||||
@@ -165,6 +202,15 @@ module('Acceptance | managed-groups | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can cancel a new managed group creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const managedGroupsCount = getManagedGroupCount();
|
||||
await visit(urls.authMethod);
|
||||
await click(selectors.MANAGE_DROPDOWN_AUTH_METHOD);
|
||||
@@ -178,6 +224,15 @@ module('Acceptance | managed-groups | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can cancel a new ldap managed group creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const managedGroupsCount = getManagedGroupCount();
|
||||
await visit(urls.ldapAuthMethod);
|
||||
await click(selectors.MANAGE_DROPDOWN_AUTH_METHOD);
|
||||
@@ -191,6 +246,15 @@ module('Acceptance | managed-groups | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('When user saving a new managed group with invalid fields displays error message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/managed-groups', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -223,6 +287,15 @@ module('Acceptance | managed-groups | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('When user saving a new ldap managed group with invalid fields displays error message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/managed-groups', () => {
|
||||
return new Response(
|
||||
400,
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
} from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | managed-groups | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -80,6 +81,15 @@ module('Acceptance | managed-groups | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can delete a managed group', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const managedGroupsCount = getManagedGroupCount();
|
||||
await visit(urls.managedGroups);
|
||||
|
||||
@@ -92,6 +102,15 @@ module('Acceptance | managed-groups | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can delete a ldap managed group', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const managedGroupsCount = getManagedGroupCount();
|
||||
await visit(urls.ldapManagedGroups);
|
||||
|
||||
@@ -104,6 +123,15 @@ module('Acceptance | managed-groups | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('User cannot delete a managed-group without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.managedGroup.authorized_actions =
|
||||
instances.managedGroup.authorized_actions.filter(
|
||||
(item) => item !== 'delete',
|
||||
@@ -116,6 +144,15 @@ module('Acceptance | managed-groups | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('User cannot delete a ldap managed-group without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.ldapManagedGroup.authorized_actions =
|
||||
instances.ldapManagedGroup.authorized_actions.filter(
|
||||
(item) => item !== 'delete',
|
||||
@@ -128,6 +165,15 @@ module('Acceptance | managed-groups | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('Errors are displayed when delete on managed group fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/managed-groups/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
@@ -150,6 +196,15 @@ module('Acceptance | managed-groups | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('Errors are displayed when delete on ldap managed group fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/managed-groups/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
} from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | managed-groups | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -74,6 +75,15 @@ module('Acceptance | managed-groups | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to managed groups with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.authMethods);
|
||||
|
||||
await click(commonSelectors.HREF(urls.authMethod));
|
||||
@@ -92,6 +102,15 @@ module('Acceptance | managed-groups | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to ldap managed groups with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
await visit(urls.authMethods);
|
||||
|
||||
@@ -111,6 +130,15 @@ module('Acceptance | managed-groups | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User cannot navigate to index without either list or create actions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_collection_actions['managed-groups'] = [];
|
||||
await visit(urls.authMethods);
|
||||
|
||||
@@ -130,6 +158,15 @@ module('Acceptance | managed-groups | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User cannot navigate to ldap managed group index without either list or create actions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
instances.ldapAuthMethod.authorized_collection_actions['managed-groups'] =
|
||||
[];
|
||||
@@ -151,6 +188,15 @@ module('Acceptance | managed-groups | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.authMethod.authorized_collection_actions['managed-groups'] = [
|
||||
'create',
|
||||
];
|
||||
@@ -164,6 +210,15 @@ module('Acceptance | managed-groups | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to ldap managed groups index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ldap-auth-methods');
|
||||
instances.authMethod.authorized_collection_actions['managed-groups'] = [
|
||||
'create',
|
||||
|
||||
@@ -9,6 +9,7 @@ import { setupApplicationTest } from 'admin/tests/helpers';
|
||||
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { TYPE_AUTH_METHOD_OIDC } from 'api/models/auth-method';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | managed-groups | members', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -57,6 +58,15 @@ module('Acceptance | managed-groups | members', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to index', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const membersCount = instances.managedGroup.memberIds.length;
|
||||
await visit(urls.managedGroupMembers);
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import {
|
||||
TYPE_AUTH_METHOD_LDAP,
|
||||
} from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | managed-groups | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -74,6 +75,15 @@ module('Acceptance | managed-groups | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to a managed group form', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.managedGroups);
|
||||
|
||||
await click(commonSelectors.HREF(urls.managedGroup));
|
||||
@@ -82,6 +92,15 @@ module('Acceptance | managed-groups | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to a ldap managed group form', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.ldapManagedGroups);
|
||||
|
||||
await click(commonSelectors.HREF(urls.ldapManagedGroup));
|
||||
@@ -90,6 +109,15 @@ module('Acceptance | managed-groups | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('User cannot navigate to a managed group form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.managedGroup.authorized_actions =
|
||||
instances.managedGroup.authorized_actions.filter(
|
||||
(item) => item !== 'read',
|
||||
@@ -102,6 +130,15 @@ module('Acceptance | managed-groups | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('User cannot navigate to a ldap managed group form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.ldapManagedGroup.authorized_actions =
|
||||
instances.ldapManagedGroup.authorized_actions.filter(
|
||||
(item) => item !== 'read',
|
||||
@@ -114,6 +151,15 @@ module('Acceptance | managed-groups | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('User can navigate to managed group and incorrect url autocorrects', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authMethod = this.server.create('auth-method', {
|
||||
scope: instances.scopes.org,
|
||||
type: TYPE_AUTH_METHOD_LDAP,
|
||||
|
||||
@@ -10,6 +10,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { visit, fillIn, click, currentURL } from '@ember/test-helpers';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | onboarding', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -26,6 +27,15 @@ module('Acceptance | onboarding', function (hooks) {
|
||||
});
|
||||
|
||||
test('show targetAddress and targetPort fields', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.onboarding);
|
||||
|
||||
assert.dom(selectors.FIELD_TARGET_ADDRESS).isVisible();
|
||||
@@ -33,6 +43,15 @@ module('Acceptance | onboarding', function (hooks) {
|
||||
});
|
||||
|
||||
test('redirect user to success when fill targetAddress, targetPort and click Save', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.onboarding);
|
||||
|
||||
await fillIn(
|
||||
@@ -49,6 +68,15 @@ module('Acceptance | onboarding', function (hooks) {
|
||||
});
|
||||
|
||||
test('redirect user to orgs screen when click do this later', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.onboarding);
|
||||
|
||||
await click(selectors.DO_THIS_LATER_BTN);
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | onboarding | success', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -26,12 +27,30 @@ module('Acceptance | onboarding | success', function (hooks) {
|
||||
};
|
||||
|
||||
test('check if the done button is present', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.success);
|
||||
|
||||
assert.dom(selectors.DONE_BTN).isVisible();
|
||||
});
|
||||
|
||||
test('check the controller url is copyable', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const origin = window.location.origin;
|
||||
await visit(urls.success);
|
||||
|
||||
@@ -39,6 +58,15 @@ module('Acceptance | onboarding | success', function (hooks) {
|
||||
});
|
||||
|
||||
test('fill the onboarding form and redirect user to target detail when done is clicked', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.onboarding);
|
||||
await fillIn(
|
||||
selectors.FIELD_TARGET_ADDRESS,
|
||||
|
||||
@@ -11,6 +11,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | policies | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -48,6 +49,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new policy with global scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const policyCount = getPolicyCount();
|
||||
await visit(urls.policies);
|
||||
|
||||
@@ -69,6 +79,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('delete policy is automatically disabled when forever retention policy is chosen', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newPolicy));
|
||||
@@ -78,6 +97,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can enter custom value when custom retain option is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newPolicy));
|
||||
@@ -87,6 +115,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can enter custom value when custom delete option is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newPolicy));
|
||||
@@ -95,6 +132,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
assert.dom(selectors.FIELD_NUMBER_OF_DAYS('delete_after')).isVisible();
|
||||
});
|
||||
test('user can select SOC option and will not see custom input', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newPolicy));
|
||||
@@ -104,6 +150,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can select do_not_delete option and will not see custom input', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newPolicy));
|
||||
@@ -113,6 +168,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('org override is disabled when do_not_protect is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newPolicy));
|
||||
@@ -122,6 +186,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('org override is disabled when do_not_delete is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newPolicy));
|
||||
@@ -131,6 +204,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel new policy creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const policyCount = getPolicyCount();
|
||||
await visit(urls.policies);
|
||||
|
||||
@@ -143,6 +225,15 @@ module('Acceptance | policies | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new policy with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const errorMessage =
|
||||
'Invalid request. Request attempted to make second resource with the same field value that must be unique.';
|
||||
this.server.post('/policies', () => {
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | policies | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -53,6 +54,15 @@ module('Acceptance | policies | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can delete a storage policy', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const count = policyCount();
|
||||
featuresService.enable('ssh-session-recording');
|
||||
|
||||
@@ -75,6 +85,15 @@ module('Acceptance | policies | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot delete a storage policy without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
|
||||
instances.policy.authorized_actions =
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | policies | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -49,6 +50,15 @@ module('Acceptance | policies | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to policies with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -102,6 +112,15 @@ module('Acceptance | policies | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
|
||||
instances.scopes.global.authorized_collection_actions['policies'] =
|
||||
@@ -172,6 +191,15 @@ module('Acceptance | policies | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('edit action in table directs user to appropriate page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.globalScope);
|
||||
instances.policy = this.server.create('policy', {
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | policies | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -53,6 +54,15 @@ module('Acceptance | policies | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting a policy', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.policies));
|
||||
@@ -62,6 +72,15 @@ module('Acceptance | policies | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a policy without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
instances.policy.authorized_actions =
|
||||
instances.policy.authorized_actions.filter((item) => item !== 'read');
|
||||
@@ -72,6 +91,15 @@ module('Acceptance | policies | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown policy displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownPolicy);
|
||||
|
||||
assert
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | policies | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -48,6 +49,15 @@ module('Acceptance | policies | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can update forever select option to a custom input', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.policy));
|
||||
@@ -73,6 +83,15 @@ module('Acceptance | policies | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can update a custom input', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.policy));
|
||||
@@ -99,6 +118,15 @@ module('Acceptance | policies | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can update from do_not_delete to a custom input', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.policy));
|
||||
@@ -124,6 +152,15 @@ module('Acceptance | policies | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot update delete override when do_not_protect is selected', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.policies);
|
||||
|
||||
await click(commonSelectors.HREF(urls.policy));
|
||||
@@ -134,6 +171,15 @@ module('Acceptance | policies | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to an existing storage policy', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const name = instances.policy.name;
|
||||
await visit(urls.policies);
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | roles | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -57,6 +58,15 @@ module('Acceptance | roles | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete a role', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const rolesCount = this.server.schema.roles.all().models.length;
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -80,6 +90,15 @@ module('Acceptance | roles | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('errors are displayed when delete project fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.del('/roles/:id', () => {
|
||||
return new Response(
|
||||
490,
|
||||
|
||||
@@ -25,6 +25,7 @@ import {
|
||||
import { TYPE_SCOPE_ORG } from 'api/models/scope';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | roles | global-scope', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -80,6 +81,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting role scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -91,6 +101,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to scope from role grant scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const grantScopeUrl = `/scopes/${instances.role.grant_scope_ids[1]}`;
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -101,6 +120,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for existing grant scope on a role', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -132,6 +160,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for grant scopes on a role and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -163,6 +200,20 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for grant scopes on a role by parent scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
'target-size': {
|
||||
// [ember-a11y-ignore]: axe rule "target-size" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -189,6 +240,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for grant scopes on a role by type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -213,6 +273,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to parent scope from role grant scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({
|
||||
grant_scope_ids: ['this', instances.scopes.org.id],
|
||||
});
|
||||
@@ -228,6 +297,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user sees no scopes message and action when role has no grant scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -252,6 +330,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('correct toggles are visible for global level role on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(selectors.MANAGE_DROPDOWN_ROLES);
|
||||
@@ -264,6 +351,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('manage custom scopes button is not visible when "descendants" is toggled on for global level role on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(selectors.MANAGE_DROPDOWN_ROLES);
|
||||
@@ -278,6 +374,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can save scope keywords to add on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -301,6 +406,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel scope keywords to add on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -324,6 +438,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on scope save on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/roles/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -348,6 +471,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user is prompted to confirm exit when there are unsaved changes on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.role);
|
||||
@@ -365,6 +497,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user user can cancel transition when there are unsaved changes on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.role);
|
||||
@@ -420,6 +561,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel custom scopes to add on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -449,6 +599,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on custom scope save on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/roles/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -474,6 +633,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user is prompted to confirm exit when there are unsaved changes on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.manageScopes);
|
||||
@@ -491,6 +659,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user user can cancel transition when there are unsaved changes on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.manageScopes);
|
||||
@@ -508,6 +685,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can choose to only deselect an org using modal on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({
|
||||
grant_scope_ids: [instances.scopes.org.id, instances.scopes.project.id],
|
||||
});
|
||||
@@ -531,6 +717,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can choose to deselect an org and projects using modal on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({
|
||||
grant_scope_ids: [instances.scopes.org.id, instances.scopes.project.id],
|
||||
});
|
||||
@@ -554,6 +749,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot trigger modal when deselecting an org with no projects selected on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [instances.scopes.org.id] });
|
||||
await visit(urls.manageScopes);
|
||||
|
||||
@@ -574,6 +778,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can choose to only deselect all orgs using modal on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({
|
||||
grant_scope_ids: [instances.scopes.org.id, instances.scopes.project.id],
|
||||
});
|
||||
@@ -600,6 +813,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can choose to deselect all orgs and projects using modal on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({
|
||||
grant_scope_ids: [instances.scopes.org.id, instances.scopes.project.id],
|
||||
});
|
||||
@@ -626,6 +848,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot trigger modal when deselecting all orgs with no projects selected on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [instances.scopes.org.id] });
|
||||
await visit(urls.manageScopes);
|
||||
|
||||
@@ -649,6 +880,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific org scope by id on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const anotherOrg = this.server.create('scope', {
|
||||
type: 'org',
|
||||
scope: { id: 'global', type: 'global' },
|
||||
@@ -675,6 +915,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for org scopes and get no results on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const anotherOrg = this.server.create('scope', {
|
||||
type: 'org',
|
||||
scope: { id: 'global', type: 'global' },
|
||||
@@ -706,6 +955,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can select projects when `children` is applied on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [GRANT_SCOPE_CHILDREN] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -741,6 +999,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific project scope by id on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [GRANT_SCOPE_CHILDREN] });
|
||||
const anotherProject = this.server.create('scope', {
|
||||
type: 'project',
|
||||
@@ -771,6 +1038,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific project scope by id and get no results on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [GRANT_SCOPE_CHILDREN] });
|
||||
await visit(urls.manageScopes);
|
||||
|
||||
@@ -792,6 +1068,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter a project scope by parent scope on manage custom scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [GRANT_SCOPE_CHILDREN] });
|
||||
const anotherOrg = this.server.create('scope', {
|
||||
type: 'org',
|
||||
@@ -818,6 +1103,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can save custom scopes to add on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -856,6 +1150,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel custom scopes to add on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -893,6 +1196,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on custom scope save on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/roles/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -921,6 +1233,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user is prompted to confirm exit when there are unsaved changes on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.manageScopes);
|
||||
@@ -940,6 +1261,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user user can cancel transition when there are unsaved changes on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.manageScopes);
|
||||
@@ -962,6 +1292,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific project scope by id on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const anotherProject = this.server.create('scope', {
|
||||
type: 'project',
|
||||
scope: { id: instances.scopes.org.id, type: 'org' },
|
||||
@@ -996,6 +1335,15 @@ module('Acceptance | roles | global-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for project scopes and get no results on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const anotherProject = this.server.create('scope', {
|
||||
type: 'project',
|
||||
scope: { id: instances.scopes.org.id, type: 'org' },
|
||||
|
||||
@@ -21,6 +21,7 @@ import { GRANT_SCOPE_THIS } from 'api/models/role';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | roles | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -65,6 +66,15 @@ module('Acceptance | roles | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to roles with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.orgScope));
|
||||
@@ -76,6 +86,15 @@ module('Acceptance | roles | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot navigate to index without either list or create actions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.org.authorized_collection_actions.roles = [];
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -88,6 +107,15 @@ module('Acceptance | roles | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.org.authorized_collection_actions.roles = ['create'];
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -97,6 +125,15 @@ module('Acceptance | roles | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific role by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roles));
|
||||
@@ -114,6 +151,15 @@ module('Acceptance | roles | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for roles and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roles));
|
||||
@@ -130,6 +176,15 @@ module('Acceptance | roles | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('correct badge in grants applied column is visible to user', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role1.grant_scope_ids = instances.role1.grant_scope_ids.filter(
|
||||
(id) => id !== GRANT_SCOPE_THIS,
|
||||
);
|
||||
@@ -211,6 +266,15 @@ module('Acceptance | roles | list', function (hooks) {
|
||||
},
|
||||
},
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.roles.all().destroy();
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
this.server.create('role', {
|
||||
|
||||
@@ -23,6 +23,7 @@ import {
|
||||
GRANT_SCOPE_CHILDREN,
|
||||
GRANT_SCOPE_DESCENDANTS,
|
||||
} from 'api/models/role';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | roles | org-scope', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -94,6 +95,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to scope from role grant scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const scopeUrl = `/scopes/${instances.role.grant_scope_ids[1]}`;
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -104,6 +114,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to parent scope from role grant scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -116,6 +135,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for existing grant scope on a role', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -147,6 +175,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for grant scopes on a role and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -178,6 +215,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot filter grant scopes on an org level role', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -187,6 +233,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user sees no scopes message and action when role has no grant scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -211,6 +266,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('correct toggles are visible for org level role on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(selectors.MANAGE_DROPDOWN_ROLES);
|
||||
@@ -223,6 +287,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('manage custom scopes button is not visible when "children" is toggled on for org level role on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(selectors.MANAGE_DROPDOWN_ROLES);
|
||||
@@ -237,6 +310,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can save scope keywords to add on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -260,6 +342,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel scope keywords to add on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -283,6 +374,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on scope save on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/roles/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -307,6 +407,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user is prompted to confirm exit when there are unsaved changes on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.role);
|
||||
@@ -324,6 +433,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user user can cancel transition when there are unsaved changes on manage scopes page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.role);
|
||||
@@ -341,6 +459,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can save custom scopes to add on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -374,6 +501,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel custom scopes to add on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
await visit(urls.role);
|
||||
|
||||
@@ -406,6 +542,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on custom scope save on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/roles/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -433,6 +578,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user is prompted to confirm exit when there are unsaved changes on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ grant_scope_ids: [] });
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.manageScopes);
|
||||
@@ -469,6 +623,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific project scope by id on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const anotherProject = this.server.create('scope', {
|
||||
type: 'project',
|
||||
scope: { id: instances.scopes.org.id, type: 'org' },
|
||||
@@ -502,6 +665,15 @@ module('Acceptance | roles | org-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for project scopes and get no results on manage org projects page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const anotherProject = this.server.create('scope', {
|
||||
type: 'project',
|
||||
scope: { id: instances.scopes.org.id, type: 'org' },
|
||||
|
||||
@@ -12,6 +12,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | roles | principals', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -59,6 +60,15 @@ module('Acceptance | roles | principals', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting role principals', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.rolePrincipals);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.rolePrincipals);
|
||||
@@ -66,6 +76,15 @@ module('Acceptance | roles | principals', function (hooks) {
|
||||
});
|
||||
|
||||
test('principal can be removed from a role', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.rolePrincipals);
|
||||
|
||||
assert.dom(commonSelectors.TABLE_ROWS).exists({ count: principalsCount });
|
||||
@@ -79,6 +98,15 @@ module('Acceptance | roles | principals', function (hooks) {
|
||||
});
|
||||
|
||||
test('principal cannot be removed from a role without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authorized_actions = instances.role.authorized_actions.filter(
|
||||
(item) => item !== 'remove-principals',
|
||||
);
|
||||
@@ -90,6 +118,15 @@ module('Acceptance | roles | principals', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on principal remove', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/roles/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -115,6 +152,15 @@ module('Acceptance | roles | principals', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to add principals without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authorized_actions = instances.role.authorized_actions.filter(
|
||||
(item) => item !== 'add-principals',
|
||||
);
|
||||
@@ -127,6 +173,15 @@ module('Acceptance | roles | principals', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and save principals to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.role.update({ userIds: [], groupIds: [], managedGroupIds: [] });
|
||||
await visit(urls.rolePrincipals);
|
||||
|
||||
@@ -148,6 +203,15 @@ module('Acceptance | roles | principals', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and cancel principals to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.rolePrincipals);
|
||||
|
||||
assert.dom(commonSelectors.TABLE_ROWS).exists({ count: principalsCount });
|
||||
@@ -175,6 +239,15 @@ module('Acceptance | roles | principals', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on principal add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/roles/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
|
||||
@@ -11,6 +11,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { GRANT_SCOPE_THIS } from 'api/models/role';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | roles | project-scope', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -52,6 +53,15 @@ module('Acceptance | roles | project-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting role scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -64,6 +74,15 @@ module('Acceptance | roles | project-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('search and pagination is not visible for project role scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
@@ -74,6 +93,15 @@ module('Acceptance | roles | project-scope', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot manage scopes for project role scopes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.role);
|
||||
|
||||
await click(commonSelectors.HREF(urls.roleScopes));
|
||||
|
||||
@@ -11,6 +11,7 @@ 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 { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | scopes', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -110,6 +111,30 @@ module('Acceptance | scopes', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate among org scopes via side-nav', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
'aria-required-children': {
|
||||
// [ember-a11y-ignore]: axe rule "aria-required-children" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
listitem: {
|
||||
// [ember-a11y-ignore]: axe rule "listitem" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
'target-size': {
|
||||
// [ember-a11y-ignore]: axe rule "target-size" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.globalScope);
|
||||
@@ -125,6 +150,25 @@ module('Acceptance | scopes', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate among project scopes via side-nav', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
'aria-required-children': {
|
||||
// [ember-a11y-ignore]: axe rule "aria-required-children" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
listitem: {
|
||||
// [ember-a11y-ignore]: axe rule "listitem" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.projectTargets);
|
||||
|
||||
@@ -11,6 +11,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import select from '@ember/test-helpers/dom/select';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | scope | add storage policy', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -76,6 +77,15 @@ module('Acceptance | scope | add storage policy', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can click on add storage policy button in the sidebar and it takes them to add a policy', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.orgScopeEdit);
|
||||
|
||||
@@ -87,6 +97,15 @@ module('Acceptance | scope | add storage policy', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can click on settings link in the sidebar and it takes them to enable session recording', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.scopes.org.update({
|
||||
storagePolicyId: policyOne.id,
|
||||
@@ -99,6 +118,15 @@ module('Acceptance | scope | add storage policy', function (hooks) {
|
||||
});
|
||||
|
||||
test('link to add new storage policy should be displayed and redirect to new storage policy form', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.orgScopeEdit);
|
||||
await click(selectors.ADD_STORAGE_POLICY_BTN);
|
||||
@@ -112,6 +140,15 @@ module('Acceptance | scope | add storage policy', function (hooks) {
|
||||
});
|
||||
|
||||
test('can assign a storage policy for the scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.orgScopeEdit);
|
||||
await click(selectors.ADD_STORAGE_POLICY_BTN);
|
||||
@@ -131,6 +168,15 @@ module('Acceptance | scope | add storage policy', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to an existing storage policy selection', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.scopes.org.update({
|
||||
storagePolicyId: policyOne.id,
|
||||
|
||||
@@ -12,6 +12,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | scopes | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -59,6 +60,15 @@ module('Acceptance | scopes | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const orgScopeCount = getScopeCount('org');
|
||||
await visit(urls.orgScope);
|
||||
|
||||
@@ -84,6 +94,15 @@ module('Acceptance | scopes | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete scope via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
confirmService.enabled = true;
|
||||
const orgScopeCount = getScopeCount('org');
|
||||
await visit(urls.orgScope);
|
||||
@@ -98,6 +117,15 @@ module('Acceptance | scopes | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel delete scope via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
confirmService.enabled = true;
|
||||
const orgScopeCount = getScopeCount('org');
|
||||
await visit(urls.orgScope);
|
||||
@@ -112,6 +140,15 @@ module('Acceptance | scopes | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a scope which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
this.server.del('/scopes/:id', () => {
|
||||
return new Response(
|
||||
|
||||
@@ -11,6 +11,7 @@ import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | scopes | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -51,6 +52,15 @@ module('Acceptance | scopes | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting org scope edit', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.orgScopeEdit));
|
||||
@@ -99,6 +109,15 @@ module('Acceptance | scopes | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting org scope edit without read permission results in no form displayed', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.org.update({
|
||||
authorized_actions: instances.scopes.org.authorized_actions.filter(
|
||||
(item) => item !== 'read',
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
STATE_SESSION_RECORDING_AVAILABLE,
|
||||
STATE_SESSION_RECORDING_UNKNOWN,
|
||||
} from 'api/models/session-recording';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | session recordings | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -126,6 +127,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to session-recordings with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
assert.true(
|
||||
instances.scopes.global.authorized_collection_actions[
|
||||
@@ -162,6 +172,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a session recording by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessionRecordings));
|
||||
@@ -177,6 +196,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a session recording by id and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessionRecordings));
|
||||
@@ -193,6 +221,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter session recordings by user', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessionRecordings));
|
||||
@@ -207,6 +244,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter session recordings by scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessionRecordings));
|
||||
@@ -221,6 +267,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter session recordings by target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessionRecordings));
|
||||
@@ -237,6 +292,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter session recordings by time', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessionRecordings));
|
||||
@@ -250,6 +314,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('session recordings table is sorted by `created_time` descending by default', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.sessionRecordings.all().destroy();
|
||||
const expectedDescendingSort = CREATED_TIME_VALUES_ARRAY.toReversed();
|
||||
faker.helpers.shuffle(expectedDescendingSort).forEach((value) => {
|
||||
@@ -296,6 +369,15 @@ module('Acceptance | session recordings | list', function (hooks) {
|
||||
},
|
||||
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.sessionRecordings.all().destroy();
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
this.server.create('session-recording', {
|
||||
|
||||
@@ -12,6 +12,7 @@ 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 { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | session-recordings | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -71,6 +72,15 @@ module('Acceptance | session-recordings | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting a session recording', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -83,6 +93,15 @@ module('Acceptance | session-recordings | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to a session recording with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -99,6 +118,15 @@ module('Acceptance | session-recordings | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot navigate to a session recording without the read action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.sessionRecording.authorized_actions =
|
||||
instances.sessionRecording.authorized_actions.filter(
|
||||
@@ -113,6 +141,15 @@ module('Acceptance | session-recordings | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to a channel recording', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.sessionRecordings);
|
||||
|
||||
@@ -125,6 +162,15 @@ module('Acceptance | session-recordings | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to session recording and incorrect url auto-corrects', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
const incorrectUrl = `/scopes/${instances.scopes.org.id}/session-recordings/${instances.sessionRecording.id}/channels-by-connection`;
|
||||
|
||||
|
||||
+118
@@ -13,6 +13,7 @@ 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 { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module(
|
||||
'Acceptance | session-recordings | session-recording | channels-by-connection | channel',
|
||||
@@ -84,6 +85,15 @@ module(
|
||||
});
|
||||
|
||||
test('user can navigate to a channel', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.sessionRecording);
|
||||
|
||||
// Visit channel
|
||||
@@ -93,6 +103,15 @@ module(
|
||||
});
|
||||
|
||||
test('user can view recording with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.sessionRecording);
|
||||
|
||||
// Visit channel
|
||||
@@ -103,6 +122,15 @@ module(
|
||||
});
|
||||
|
||||
test('user cannot view recording without proper authorization: channel mime_types', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.channelRecording.mime_types = [];
|
||||
await visit(urls.sessionRecording);
|
||||
|
||||
@@ -114,6 +142,15 @@ module(
|
||||
});
|
||||
|
||||
test('user cannot view recording without proper authorization: session recording download action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.sessionRecording.authorized_actions =
|
||||
instances.sessionRecording.authorized_actions.filter(
|
||||
(item) => item !== 'download',
|
||||
@@ -127,6 +164,15 @@ module(
|
||||
});
|
||||
|
||||
test('user cannot view recording if asciicast download errors out', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.get(
|
||||
`/session-recordings/${instances.channelRecording.id}:download`,
|
||||
() =>
|
||||
@@ -154,6 +200,15 @@ module(
|
||||
});
|
||||
|
||||
test('user can navigate back to session recording screen', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.sessionRecording);
|
||||
|
||||
// Visit channel
|
||||
@@ -165,6 +220,15 @@ module(
|
||||
});
|
||||
|
||||
test('users can navigate to channel recording and incorrect url auto corrects', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
const sessionRecording = this.server.create('session-recording', {
|
||||
scope: instances.scopes.global,
|
||||
@@ -179,6 +243,15 @@ module(
|
||||
});
|
||||
|
||||
test('users are redirected to session-recordings list with incorrect url', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
const sessionRecording = this.server.create('session-recording', {
|
||||
scope: instances.scopes.global,
|
||||
@@ -198,6 +271,15 @@ module(
|
||||
});
|
||||
|
||||
test('user cannot view manage dropdown without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Visit channel
|
||||
featuresService.enable('ssh-session-recording');
|
||||
|
||||
@@ -211,6 +293,15 @@ module(
|
||||
});
|
||||
|
||||
test('user can view manage dropdown with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Visit channel
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.sessionRecordings);
|
||||
@@ -221,6 +312,15 @@ module(
|
||||
});
|
||||
|
||||
test('user can delete a recording with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Visit channel
|
||||
const count = getRecordingCount();
|
||||
featuresService.enable('ssh-session-recording');
|
||||
@@ -239,6 +339,15 @@ module(
|
||||
});
|
||||
|
||||
test('user cannot delete a recording without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Visit channel
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.sessionRecording.authorized_actions =
|
||||
@@ -253,6 +362,15 @@ module(
|
||||
});
|
||||
|
||||
test('both retain until and delete after can be seen with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Visit channel
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.sessionRecordings);
|
||||
|
||||
@@ -20,6 +20,7 @@ import {
|
||||
} from 'api/models/session';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | sessions | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -112,6 +113,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting sessions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessions));
|
||||
@@ -123,6 +133,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot navigate to sessions tab without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
instances.scopes.project.authorized_collection_actions.sessions =
|
||||
instances.scopes.project.authorized_collection_actions.sessions.filter(
|
||||
@@ -141,6 +160,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to sessions with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.projectScope));
|
||||
@@ -154,6 +182,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting sessions without users or targets is OK', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
instances.sessions[0].update({
|
||||
userId: null,
|
||||
@@ -168,6 +205,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('cancelling a session', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessions));
|
||||
@@ -179,6 +225,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('cancelling a session with error shows notification', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
this.server.post('/sessions/:id_method', () => new Response(400));
|
||||
|
||||
@@ -189,6 +244,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can link to docs page for sessions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const docsUrl =
|
||||
'https://developer.hashicorp.com/boundary/docs/concepts/domain-model/sessions';
|
||||
await visit(urls.projectScope);
|
||||
@@ -199,6 +263,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific session by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
const sessionId = instances.sessions[0].id;
|
||||
|
||||
@@ -210,6 +283,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for sessions and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
const sessionId = 'fake session that does not exist';
|
||||
|
||||
@@ -221,6 +303,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for sessions by user', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
instances.sessions[2].update({
|
||||
userId: instances.dev.id,
|
||||
@@ -236,6 +327,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users filter is hidden if no users returned or no list permissions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.global.authorized_collection_actions.users =
|
||||
instances.scopes.global.authorized_collection_actions.users.filter(
|
||||
(item) => item !== 'list',
|
||||
@@ -251,6 +351,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for sessions by target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
instances.sessions[2].update({
|
||||
targetId: instances.sshTarget.id,
|
||||
@@ -266,6 +375,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('targets filter is hidden if no targets returned or no list permissions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions.targets =
|
||||
instances.scopes.project.authorized_collection_actions.targets.filter(
|
||||
(item) => item !== 'list',
|
||||
@@ -277,6 +395,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for sessions by status', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.sessions));
|
||||
@@ -288,6 +415,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('sessions table is sorted by `created_time` descending by default', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.sessions.all().destroy();
|
||||
const expectedDescendingSort = CREATED_TIME_ISO_VALUES_ARRAY.toReversed();
|
||||
faker.helpers.shuffle(CREATED_TIME_VALUES_ARRAY).forEach((value) => {
|
||||
@@ -343,6 +479,15 @@ module('Acceptance | sessions | list', function (hooks) {
|
||||
},
|
||||
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.sessions.all().destroy();
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
this.server.create('session', {
|
||||
|
||||
@@ -11,6 +11,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -50,6 +51,20 @@ module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new storage bucket aws plugin type with global scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
@@ -81,6 +96,20 @@ module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new storage bucket aws plugin type with org scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
@@ -112,6 +141,20 @@ module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new storage bucket minio plugin type with org scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
|
||||
// Navigate to new storage bucket
|
||||
@@ -158,6 +201,20 @@ module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new storage bucket aws plugin type with dynamic credentials', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
@@ -186,6 +243,20 @@ module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new storage bucket aws plugin type with static credentials', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
@@ -214,6 +285,20 @@ module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new storage bucket minio plugin type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
|
||||
// Navigate to new storage bucket
|
||||
@@ -258,6 +343,20 @@ module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel new storage bucket creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
@@ -271,6 +370,20 @@ module('Acceptance | storage-buckets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new storage bucket with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/storage-buckets', () => {
|
||||
return new Response(
|
||||
400,
|
||||
|
||||
@@ -10,6 +10,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | storage-buckets | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -58,6 +59,15 @@ module('Acceptance | storage-buckets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can delete a storage bucket', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.globalScope);
|
||||
assert.true(instances.storageBucket.authorized_actions.includes('delete'));
|
||||
@@ -70,6 +80,15 @@ module('Acceptance | storage-buckets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can accept delete storage bucket via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
@@ -91,6 +110,15 @@ module('Acceptance | storage-buckets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel delete storage bucket via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
@@ -122,6 +150,15 @@ module('Acceptance | storage-buckets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot delete storage bucket without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
instances.storageBucket.authorized_actions =
|
||||
instances.storageBucket.authorized_actions.filter(
|
||||
@@ -135,6 +172,15 @@ module('Acceptance | storage-buckets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a storage bucket which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
this.server.del('/storage-buckets/:id', () => {
|
||||
return new Response(
|
||||
|
||||
@@ -11,6 +11,7 @@ import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | storage-buckets | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -50,6 +51,15 @@ module('Acceptance | storage-buckets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to storage-buckets with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -109,6 +119,15 @@ module('Acceptance | storage-buckets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
|
||||
instances.scopes.global.authorized_collection_actions['storage-buckets'] =
|
||||
@@ -182,6 +201,15 @@ module('Acceptance | storage-buckets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('edit action in table directs user to appropriate page', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.globalScope);
|
||||
instances.storageBucket = this.server.create('storage-bucket', {
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | storage-buckets | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -53,6 +54,15 @@ module('Acceptance | storage-buckets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting a storage bucket', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.storageBucket));
|
||||
@@ -61,6 +71,15 @@ module('Acceptance | storage-buckets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a storage bucket without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
instances.storageBucket.authorized_actions =
|
||||
instances.storageBucket.authorized_actions.filter(
|
||||
@@ -75,6 +94,15 @@ module('Acceptance | storage-buckets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown storage bucket displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownStorageBucket);
|
||||
|
||||
assert
|
||||
@@ -83,6 +111,15 @@ module('Acceptance | storage-buckets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to storage bucket and incorrect url auto-corrects', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const incorrectUrl = `/scopes/${instances.scopes.org.id}/storage-buckets/${instances.storageBucket.id}`;
|
||||
|
||||
await visit(incorrectUrl);
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { Response } from 'miragejs';
|
||||
import * as selectors from './selectors';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -49,6 +50,20 @@ module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can save changes to an existing storage-bucket', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.storageBucket));
|
||||
@@ -67,6 +82,20 @@ module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to an existing storage-bucket', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const name = instances.storageBucket.name;
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
@@ -80,6 +109,20 @@ module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can save changes to access key fields', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.storageBucket));
|
||||
@@ -115,6 +158,20 @@ module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to access key fields', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.storageBucket));
|
||||
@@ -138,6 +195,20 @@ module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving an existing storage-bucket with invalid fields will display error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.storageBuckets);
|
||||
this.server.patch('/storage-buckets/:id', () => {
|
||||
return new Response(
|
||||
@@ -183,6 +254,20 @@ module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot edit scope, provider, bucket name, bucket prefix and region fields in a Amazon S3 storage bucket form', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.storageBucket));
|
||||
@@ -203,6 +288,20 @@ module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot edit scope, provider, endpoint_url, bucket name or region fields in a MinIO storage bucket', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.storageBuckets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.storageBucketMinio));
|
||||
@@ -219,6 +318,20 @@ module('Acceptance | storage-buckets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('user sees an editable code editor while updating and readonly code block before/after', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.storageBuckets);
|
||||
await click(commonSelectors.HREF(urls.storageBucketMinio));
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { TYPE_CREDENTIAL_USERNAME_PASSWORD } from 'api/models/credential';
|
||||
import { TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC } from 'api/models/credential-library';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -124,6 +125,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting target brokered credential sources', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.brokeredCredentialSources);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.brokeredCredentialSources);
|
||||
@@ -133,6 +143,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to a vault type credential library', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.brokeredCredentialSources);
|
||||
|
||||
await click(commonSelectors.TABLE_RESOURCE_LINK(urls.credentialLibrary));
|
||||
@@ -141,6 +160,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to a username & password type credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [...randomlySelectedCredentials],
|
||||
});
|
||||
@@ -152,6 +180,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a json type credential when feature is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const jsonCredential = instances.credentials[2];
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [...randomlySelectedCredentials],
|
||||
@@ -164,12 +201,30 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting add brokered credential sources', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.addBrokeredCredentialSources);
|
||||
|
||||
assert.strictEqual(currentURL(), urls.addBrokeredCredentialSources);
|
||||
});
|
||||
|
||||
test('displays list of all brokered credential source types available', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [],
|
||||
});
|
||||
@@ -182,6 +237,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('displays list of brokered credential sources with only credential libraries available', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [...randomlySelectedCredentials],
|
||||
});
|
||||
@@ -194,6 +258,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('displays no brokered credential sources message when none available', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.addBrokeredCredentialSources);
|
||||
|
||||
assert
|
||||
@@ -202,6 +275,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('when no brokered credential sources available, button routes to add brokered credential sources', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [],
|
||||
});
|
||||
@@ -254,6 +336,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
},
|
||||
},
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [],
|
||||
});
|
||||
@@ -282,6 +373,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
);
|
||||
|
||||
test('cannot add credential sources without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.authorized_actions =
|
||||
instances.target.authorized_actions.filter(
|
||||
(item) => item !== 'add-credential-sources',
|
||||
@@ -296,6 +396,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('adding credential sources which errors displays error message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/targets/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -329,6 +438,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('can remove a vault type credential library', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [...randomlySelectedCredentialLibraries],
|
||||
});
|
||||
@@ -356,6 +474,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('can remove a username & password type credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [...randomlySelectedCredentials],
|
||||
});
|
||||
@@ -383,6 +510,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot remove credential libraries without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.authorized_actions =
|
||||
instances.target.authorized_actions.filter(
|
||||
(item) => item !== 'remove-credential-sources',
|
||||
@@ -393,6 +529,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('removing a target credential library which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [...randomlySelectedCredentialLibraries],
|
||||
});
|
||||
@@ -420,6 +565,15 @@ module('Acceptance | targets | brokered credential sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('removing a target credential which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
brokeredCredentialSourceIds: [...randomlySelectedCredentials],
|
||||
});
|
||||
|
||||
@@ -14,6 +14,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | create-alias', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -73,6 +74,15 @@ module('Acceptance | targets | create-alias', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new alias for a target of TCP type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const aliasCount = getAliasCount();
|
||||
await visit(urls.targets);
|
||||
|
||||
@@ -92,6 +102,15 @@ module('Acceptance | targets | create-alias', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can create a new alias for a target of SSH type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
instances.target.update({
|
||||
type: TYPE_TARGET_SSH,
|
||||
@@ -115,6 +134,15 @@ module('Acceptance | targets | create-alias', function (hooks) {
|
||||
});
|
||||
|
||||
test('destination id should be readonly', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target = this.server.create('target', {
|
||||
scope: instances.scopes.project,
|
||||
type: TYPE_TARGET_SSH,
|
||||
@@ -140,6 +168,15 @@ module('Acceptance | targets | create-alias', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel new alias creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const aliasCount = getAliasCount();
|
||||
instances.target = this.server.create('target', {
|
||||
scope: instances.scopes.project,
|
||||
@@ -156,6 +193,15 @@ module('Acceptance | targets | create-alias', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new alias with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/aliases', () => {
|
||||
return new Response(
|
||||
400,
|
||||
|
||||
@@ -20,6 +20,7 @@ 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 { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -81,6 +82,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('defaults to type `ssh` when no query param provided', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
await visit(urls.targets);
|
||||
|
||||
@@ -90,6 +100,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create a type `ssh` target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
|
||||
const targetCount = getTargetCount();
|
||||
@@ -110,6 +129,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create a type `tcp` target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
|
||||
const targetCount = getTargetCount();
|
||||
@@ -130,6 +158,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('default port is not marked required for SSH targets', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
await visit(urls.targets);
|
||||
|
||||
@@ -139,6 +176,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('default port is marked required for TCP targets', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
await visit(urls.targets);
|
||||
|
||||
@@ -149,6 +195,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to new targets route with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targets));
|
||||
@@ -162,6 +217,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to new targets route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions.targets =
|
||||
instances.scopes.project.authorized_collection_actions.targets.filter(
|
||||
(item) => item !== 'create',
|
||||
@@ -179,6 +243,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to new SSH targets route when ssh feature is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newTarget));
|
||||
@@ -194,6 +267,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel create new TCP target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const targetCount = getTargetCount();
|
||||
const tcpTargetCount = getTCPTargetCount();
|
||||
await visit(urls.targets);
|
||||
@@ -208,6 +290,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can add aliases during target creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const targetCount = getTargetCount();
|
||||
const tcpTargetCount = getTCPTargetCount();
|
||||
const name = 'target';
|
||||
@@ -238,6 +329,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel create new SSH target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
const targetCount = getTargetCount();
|
||||
const sshTargetCount = getSSHTargetCount();
|
||||
@@ -254,6 +354,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new TCP target with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/targets', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -291,6 +400,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new SSH target with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/targets', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -321,6 +439,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can save address', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('target-network-address');
|
||||
const targetCount = getTargetCount();
|
||||
await visit(urls.targets);
|
||||
@@ -338,6 +465,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('address field does not exist when target network address feature is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.newTarget));
|
||||
@@ -347,6 +483,15 @@ module('Acceptance | targets | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot directly navigate to new storage bucket route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions.targets =
|
||||
instances.scopes.project.authorized_collection_actions.targets.filter(
|
||||
(item) => item !== 'create',
|
||||
|
||||
@@ -13,6 +13,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -64,6 +65,15 @@ module('Acceptance | targets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const targetCount = getTargetCount();
|
||||
await visit(urls.targets);
|
||||
|
||||
@@ -75,6 +85,15 @@ module('Acceptance | targets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete target via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const targetCount = getTargetCount();
|
||||
@@ -93,6 +112,15 @@ module('Acceptance | targets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot cancel delete target via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const targetCount = getTargetCount();
|
||||
@@ -108,6 +136,15 @@ module('Acceptance | targets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot delete target without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targets);
|
||||
instances.target.authorized_actions =
|
||||
instances.target.authorized_actions.filter((item) => item !== 'delete');
|
||||
@@ -118,6 +155,15 @@ module('Acceptance | targets | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('deleting a target which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targets);
|
||||
this.server.del('/targets/:id', () => {
|
||||
return new Response(
|
||||
|
||||
@@ -11,6 +11,7 @@ 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 { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -89,6 +90,15 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can click on enable-recording button in target session-recording sidebar and it takes them to enable session recording', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -100,6 +110,15 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can click on settings link in target session-recording sidebar and it takes them to enable session recording', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.target.update({
|
||||
storageBucketId: storageBucketOne.id,
|
||||
@@ -113,6 +132,15 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can click on associated storage bucket card on an ssh target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.target.update({
|
||||
storageBucketId: storageBucketOne.id,
|
||||
@@ -126,6 +154,15 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('toggle should be disabled and storage buckets list should be shown when enable session recording button is clicked', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -137,6 +174,15 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('storage buckets list is hidden when toggle is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -152,6 +198,20 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('link to add new storage bucket should be displayed and redirect to new storage buckets form', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -166,6 +226,15 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('retain last selected dropdown list value when the toggle is off', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.target.update({
|
||||
storageBucketId: storageBucketOne.id,
|
||||
@@ -193,6 +262,15 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('can assign a storage bucket for the target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -218,6 +296,15 @@ module('Acceptance | targets | enable session recording', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to an existing storage bucket selection', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.target.update({
|
||||
storageBucketId: storageBucketOne.id,
|
||||
|
||||
+57
@@ -11,6 +11,7 @@ import { Response } from 'miragejs';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { TYPE_TARGET_SSH } from 'api/models/target';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module(
|
||||
'Acceptance | targets | enable session recording | create storage bucket',
|
||||
@@ -70,6 +71,20 @@ module(
|
||||
});
|
||||
|
||||
test('users can create a new storage bucket with global scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.enableSessionRecording);
|
||||
|
||||
@@ -97,6 +112,20 @@ module(
|
||||
});
|
||||
|
||||
test('users can create a new storage bucket with org scope', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.enableSessionRecording);
|
||||
|
||||
@@ -124,6 +153,20 @@ module(
|
||||
});
|
||||
|
||||
test('user can cancel new storage bucket creation', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const storageBucketCount = getStorageBucketCount();
|
||||
await visit(urls.enableSessionRecording);
|
||||
|
||||
@@ -139,6 +182,20 @@ module(
|
||||
});
|
||||
|
||||
test('saving a new storage bucket with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const errorMessage = 'The request was invalid.';
|
||||
const errorDescription = 'Name is required.';
|
||||
this.server.post('/storage-buckets', () => {
|
||||
|
||||
@@ -12,6 +12,7 @@ import { TYPE_TARGET_SSH } from 'api/models/target';
|
||||
import select from '@ember/test-helpers/dom/select';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from '../selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module(
|
||||
'Acceptance | targets | enable session recording | index',
|
||||
@@ -97,6 +98,15 @@ module(
|
||||
});
|
||||
|
||||
test('users can click on enable-recording button in target session-recording sidebar and it takes them to enable session recording', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -108,6 +118,15 @@ module(
|
||||
});
|
||||
|
||||
test('users can click on settings link in target session-recording sidebar and it takes them to enable session recording', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.target.update({
|
||||
storageBucketId: storageBucketOne.id,
|
||||
@@ -120,6 +139,15 @@ module(
|
||||
});
|
||||
|
||||
test('users can click on associated storage bucket card on an ssh target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.target.update({
|
||||
storageBucketId: storageBucketOne.id,
|
||||
@@ -132,6 +160,15 @@ module(
|
||||
});
|
||||
|
||||
test('toggle should be disabled and storage buckets list should be shown when enable session recording button is clicked', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
await click(SESSION_RECORDING_ENABLE_BTN);
|
||||
@@ -142,6 +179,15 @@ module(
|
||||
});
|
||||
|
||||
test('storage buckets list is hidden when toggle is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
await click(SESSION_RECORDING_ENABLE_BTN);
|
||||
@@ -156,6 +202,20 @@ module(
|
||||
});
|
||||
|
||||
test('link to add new storage bucket should be displayed and redirect to new storage buckets form', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
await click(SESSION_RECORDING_ENABLE_BTN);
|
||||
@@ -169,6 +229,15 @@ module(
|
||||
});
|
||||
|
||||
test('retain last selected dropdown list value when the toggle is off', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.target.update({
|
||||
storageBucketId: storageBucketOne.id,
|
||||
@@ -198,6 +267,15 @@ module(
|
||||
});
|
||||
|
||||
test('can assign a storage bucket for the target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
await visit(urls.target);
|
||||
await click(SESSION_RECORDING_ENABLE_BTN);
|
||||
@@ -226,6 +304,15 @@ module(
|
||||
});
|
||||
|
||||
test('can cancel changes to an existing storage bucket selection', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-session-recording');
|
||||
instances.target.update({
|
||||
storageBucketId: storageBucketOne.id,
|
||||
|
||||
@@ -11,6 +11,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | host-sources', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -83,6 +84,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting target host sources', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const targetHostSetCount = getTargetHostSetCount();
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -95,6 +105,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to a known host set type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targetHostSources);
|
||||
|
||||
await click(commonSelectors.HREF(urls.hostSet));
|
||||
@@ -103,6 +122,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an unknown host set type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
hostSets: instances.hostCatalogPlugin.hostSets,
|
||||
});
|
||||
@@ -120,6 +148,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('can remove a host set', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const targetHostSetCount = getTargetHostSetCount();
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -134,6 +171,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot remove a host set without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.authorized_actions =
|
||||
instances.target.authorized_actions.filter(
|
||||
(item) => item !== 'remove-host-sources',
|
||||
@@ -146,6 +192,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('removing a target host set which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/targets/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -174,6 +229,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and save host sets to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({ hostSetIds: [] });
|
||||
const targetHostSetCount = getTargetHostSetCount();
|
||||
await visit(urls.target);
|
||||
@@ -201,6 +265,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot add host sources without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.authorized_actions =
|
||||
instances.target.authorized_actions.filter(
|
||||
(item) => item !== 'add-host-sources',
|
||||
@@ -214,6 +287,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and cancel host sets to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const targetHostSetCount = getTargetHostSetCount();
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -247,6 +329,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('adding a target host set which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/targets/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -279,6 +370,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving host source with address brings up confirmation modal and removes address', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const target = this.server.create('target', {
|
||||
@@ -315,6 +415,15 @@ module('Acceptance | targets | host-sources', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving host source with address brings up confirmation modal and can cancel', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
const target = this.server.create('target', {
|
||||
|
||||
@@ -14,6 +14,7 @@ import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { TYPE_CREDENTIAL_USERNAME_PASSWORD } from 'api/models/credential';
|
||||
import { TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC } from 'api/models/credential-library';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module(
|
||||
'Acceptance | targets | injected application credential sources',
|
||||
@@ -123,6 +124,15 @@ module(
|
||||
});
|
||||
|
||||
test('visiting target injected application credential sources', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.injectedApplicationCredentialSources);
|
||||
|
||||
assert.strictEqual(
|
||||
@@ -135,6 +145,15 @@ module(
|
||||
});
|
||||
|
||||
test('can navigate to a vault type credential library', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.injectedApplicationCredentialSources);
|
||||
|
||||
await click(commonSelectors.TABLE_RESOURCE_LINK(urls.credentialLibrary));
|
||||
@@ -143,6 +162,15 @@ module(
|
||||
});
|
||||
|
||||
test('can navigate to a username & password type credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [
|
||||
...randomlySelectedCredentials,
|
||||
@@ -156,6 +184,15 @@ module(
|
||||
});
|
||||
|
||||
test('visiting add injected application credential sources', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.addInjectedApplicationCredentialSources);
|
||||
|
||||
assert.strictEqual(
|
||||
@@ -165,6 +202,15 @@ module(
|
||||
});
|
||||
|
||||
test('displays list of all injected application credential source types available', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [],
|
||||
});
|
||||
@@ -177,6 +223,15 @@ module(
|
||||
});
|
||||
|
||||
test('displays list of injected application credential sources with only credential libraries available', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [
|
||||
...randomlySelectedCredentialLibraries,
|
||||
@@ -191,6 +246,15 @@ module(
|
||||
});
|
||||
|
||||
test('displays no injected application credential sources message when none available', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.addInjectedApplicationCredentialSources);
|
||||
|
||||
assert
|
||||
@@ -199,6 +263,15 @@ module(
|
||||
});
|
||||
|
||||
test('when no injected application credential sources available, button routes to add injected application credential sources', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [],
|
||||
});
|
||||
@@ -254,6 +327,15 @@ module(
|
||||
},
|
||||
},
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [],
|
||||
});
|
||||
@@ -288,6 +370,15 @@ module(
|
||||
);
|
||||
|
||||
test('cannot add credential sources without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.expect(1);
|
||||
instances.target.authorized_actions =
|
||||
instances.target.authorized_actions.filter(
|
||||
@@ -303,6 +394,15 @@ module(
|
||||
});
|
||||
|
||||
test('adding credential sources which errors displays error message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/targets/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -336,6 +436,15 @@ module(
|
||||
});
|
||||
|
||||
test('can remove a vault type credential library', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [
|
||||
...randomlySelectedCredentialLibraries,
|
||||
@@ -364,6 +473,15 @@ module(
|
||||
});
|
||||
|
||||
test('can remove a username & password type credential', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [
|
||||
...randomlySelectedCredentials,
|
||||
@@ -392,6 +510,15 @@ module(
|
||||
});
|
||||
|
||||
test('cannot remove credential libraries without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.authorized_actions =
|
||||
instances.target.authorized_actions.filter(
|
||||
(item) => item !== 'remove-credential-sources',
|
||||
@@ -404,6 +531,15 @@ module(
|
||||
});
|
||||
|
||||
test('removing a target credential library which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [
|
||||
...randomlySelectedCredentialLibraries,
|
||||
@@ -433,6 +569,15 @@ module(
|
||||
});
|
||||
|
||||
test('removing a target credential which errors displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({
|
||||
injectedApplicationCredentialSourceIds: [
|
||||
...randomlySelectedCredentials,
|
||||
|
||||
@@ -22,6 +22,7 @@ import { STATUS_SESSION_ACTIVE } from 'api/models/session';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -95,6 +96,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to targets with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.projectScope));
|
||||
@@ -134,6 +144,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to index with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions.targets =
|
||||
instances.scopes.project.authorized_collection_actions.targets.filter(
|
||||
(item) => item !== 'list',
|
||||
@@ -156,6 +175,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to index with only list action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions.targets =
|
||||
instances.scopes.project.authorized_collection_actions.targets.filter(
|
||||
(item) => item !== 'create',
|
||||
@@ -178,6 +206,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a specific target by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targets));
|
||||
@@ -193,6 +230,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for targets and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targets));
|
||||
@@ -212,6 +258,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for targets by type', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targets));
|
||||
@@ -228,6 +283,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can filter for targets by active sessions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targets));
|
||||
@@ -246,6 +310,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('active sessions filter is hidden if user does not have permission to list sessions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.project.authorized_collection_actions.sessions =
|
||||
instances.scopes.project.authorized_collection_actions.sessions.filter(
|
||||
(item) => item !== 'list',
|
||||
@@ -260,6 +333,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to active sessions from targets table', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targets));
|
||||
@@ -270,6 +352,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('targets table is sorted by `created_time` descending by default', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.targets.all().destroy();
|
||||
const createdTimeToNameMapping = {};
|
||||
CREATED_TIME_VALUES_ARRAY.forEach((value, index) => {
|
||||
@@ -323,6 +414,15 @@ module('Acceptance | targets | list', function (hooks) {
|
||||
},
|
||||
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.targets.all().destroy();
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
this.server.create('target', {
|
||||
|
||||
@@ -11,6 +11,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | manage-alias', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -95,6 +96,15 @@ module('Acceptance | targets | manage-alias', function (hooks) {
|
||||
});
|
||||
|
||||
test('clicking on `clear alias` from the dropdown should remove the destination ID and alias should disapper from the target sidebar', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
aliasResourceOne.update({
|
||||
destination_id: instances.tcpTarget.id,
|
||||
});
|
||||
@@ -119,6 +129,15 @@ module('Acceptance | targets | manage-alias', function (hooks) {
|
||||
});
|
||||
|
||||
test('clicking on `delete alias` from the dropdown should remove the destination ID and alias should disapper from the target sidebar and deleted from aliases list', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const aliasCount = getAliasCount();
|
||||
aliasResourceOne.update({
|
||||
destination_id: instances.tcpTarget.id,
|
||||
|
||||
@@ -13,6 +13,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import { TYPE_TARGET_TCP, TYPE_TARGET_SSH } from 'api/models/target';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -87,6 +88,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting ssh target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
await visit(urls.projectScope);
|
||||
|
||||
@@ -100,6 +110,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting tcp target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targets));
|
||||
@@ -111,6 +130,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an ssh target form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
instances.sshTarget.authorized_actions =
|
||||
instances.sshTarget.authorized_actions.filter((item) => item !== 'read');
|
||||
@@ -124,6 +152,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to a tcp target form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
instances.tcpTarget.authorized_actions =
|
||||
instances.tcpTarget.authorized_actions.filter((item) => item !== 'read');
|
||||
@@ -137,6 +174,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting an unknown target displays 404 message', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.unknownTarget);
|
||||
|
||||
assert
|
||||
@@ -145,6 +191,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can link to docs page for target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.projectScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targets));
|
||||
@@ -168,6 +223,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('can view aliases on the right sidebar', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.tcpTarget.update({
|
||||
aliases: [{ id: aliasResource.id, value: aliasResource.value }],
|
||||
});
|
||||
@@ -181,6 +245,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot view aliases list on the right sidebar if there is no alias associated with the target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
aliasResource.authorized_collection_actions = ['create'];
|
||||
await visit(urls.targets);
|
||||
|
||||
@@ -194,6 +267,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('user should not see add a new alias button without proper auth ', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.global.authorized_collection_actions['aliases'] =
|
||||
instances.scopes.global.authorized_collection_actions['aliases'].filter(
|
||||
(item) => item !== 'create',
|
||||
@@ -208,6 +290,15 @@ module('Acceptance | targets | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('can click `view more aliases` to see the remaining associated aliases if there are more than 3', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.tcpTarget.update({
|
||||
aliases: [
|
||||
{ id: aliasResource.id, value: 'alias 1' },
|
||||
|
||||
@@ -13,6 +13,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | update', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -60,6 +61,15 @@ module('Acceptance | targets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can save changes to existing target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targets);
|
||||
assert.notEqual(instances.target.name, 'random string');
|
||||
assert.notEqual(instances.target.worker_filter, 'random filter');
|
||||
@@ -77,6 +87,15 @@ module('Acceptance | targets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel changes to existing target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targets);
|
||||
|
||||
await click(commonSelectors.HREF(urls.target));
|
||||
@@ -89,6 +108,15 @@ module('Acceptance | targets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving an existing target with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targets);
|
||||
this.server.patch('/targets/:id', () => {
|
||||
return new Response(
|
||||
@@ -123,6 +151,15 @@ module('Acceptance | targets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved target changes via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
assert.notEqual(instances.target.name, commonSelectors.FIELD_NAME_VALUE);
|
||||
@@ -148,6 +185,15 @@ module('Acceptance | targets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('can click cancel on discard dialog box for unsaved target changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
assert.notEqual(instances.target.name, commonSelectors.FIELD_NAME_VALUE);
|
||||
@@ -173,6 +219,15 @@ module('Acceptance | targets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot make changes to an existing target without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.targets);
|
||||
instances.target.authorized_actions =
|
||||
instances.target.authorized_actions.filter((item) => item !== 'update');
|
||||
@@ -183,6 +238,15 @@ module('Acceptance | targets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving address with existing host sources brings up confirmation modal and removes host sources', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
featuresService.enable('target-network-address');
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
@@ -230,6 +294,15 @@ module('Acceptance | targets | update', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving address with existing host sources brings up confirmation modal and can cancel', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('ssh-target');
|
||||
featuresService.enable('target-network-address');
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | targets | workers', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -71,6 +72,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting target workers', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.target);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targetWorkers));
|
||||
@@ -79,6 +89,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can view egress and ingress filters in enterprise edition', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featureEdition.setEdition('enterprise');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -93,6 +112,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can view egress and ingress filters in hcp edition', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featureEdition.setEdition('hcp');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -107,6 +135,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can only view egress filter in oss edition', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featureEdition.setEdition('oss');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -119,6 +156,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user will automatically see worker filters if set', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featureEdition.setEdition('hcp');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -133,6 +179,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user will not automatically see worker filters if not set', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featureEdition.setEdition('hcp');
|
||||
instances.target.egress_worker_filter = null;
|
||||
instances.target.ingress_worker_filter = null;
|
||||
@@ -145,6 +200,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can view egress and ingress filters when `worker-filter` is enabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -159,6 +223,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can only view egress filter when `worker-filter` is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.disable('worker-filter');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -171,6 +244,20 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can save ingress worker filter to a target when `worker-filter` is enabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
instances.target.update({ ingress_worker_filter: '' });
|
||||
await visit(urls.target);
|
||||
@@ -193,6 +280,20 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel changes to ingress worker filter in a target when `worker-filter` is enabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -218,6 +319,20 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can save egress worker filter to a target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.target.update({ egress_worker_filter: '' });
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -239,6 +354,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user will see "Add worker filter" if no filter set', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
instances.target.update({
|
||||
egress_worker_filter: '',
|
||||
@@ -257,6 +381,15 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user will see "Edit worker filter" if filter is set', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -271,6 +404,20 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can cancel changes to egress worker filter in a target', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.target);
|
||||
|
||||
await click(commonSelectors.HREF(urls.targetWorkers));
|
||||
@@ -295,6 +442,20 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved ingress worker filter changes in a target via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -322,6 +483,20 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('can click cancel on discard dialog box for unsaved ingress worker filter changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
featuresService.enable('worker-filter');
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
@@ -349,6 +524,20 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('can discard unsaved egress worker filter changes in a target via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.target);
|
||||
@@ -375,6 +564,20 @@ module('Acceptance | targets | workers', function (hooks) {
|
||||
});
|
||||
|
||||
test('can click cancel on discard dialog box for unsaved egress worker filter changes', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
|
||||
label: {
|
||||
// [ember-a11y-ignore]: axe rule "label" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const confirmService = this.owner.lookup('service:confirm');
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.target);
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
} from 'api/models/auth-method';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | users | accounts', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -65,6 +66,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting user accounts', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.user);
|
||||
|
||||
await click(commonSelectors.HREF(urls.accounts));
|
||||
@@ -74,6 +84,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('can remove an account', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.user);
|
||||
|
||||
await click(commonSelectors.HREF(urls.accounts));
|
||||
@@ -87,6 +106,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot remove an account without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authorized_actions = instances.user.authorized_actions.filter(
|
||||
(item) => item !== 'remove-accounts',
|
||||
);
|
||||
@@ -101,6 +129,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot remove an ldap account when feature flag disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authMethod = this.server.create('auth-method', {
|
||||
scope: instances.scopes.org,
|
||||
type: TYPE_AUTH_METHOD_LDAP,
|
||||
@@ -120,6 +157,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('can remove an ldap account when feature flag enabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
features.enable('ldap-auth-methods');
|
||||
const authMethod = this.server.create('auth-method', {
|
||||
scope: instances.scopes.org,
|
||||
@@ -140,6 +186,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on account remove', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/users/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -165,6 +220,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting account add accounts', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.accounts);
|
||||
|
||||
await click(selectors.MANAGE_DROPDOWN_USER);
|
||||
@@ -174,6 +238,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to add accounts with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.user);
|
||||
|
||||
await click(commonSelectors.HREF(urls.accounts));
|
||||
@@ -183,6 +256,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to add accounts without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authorized_actions = instances.user.authorized_actions.filter(
|
||||
(item) => item !== 'add-accounts',
|
||||
);
|
||||
@@ -195,6 +277,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot add ldap accounts to user when feature flag is disabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const authMethod = this.server.create('auth-method', {
|
||||
scope: instances.scopes.org,
|
||||
type: TYPE_AUTH_METHOD_LDAP,
|
||||
@@ -219,6 +310,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('can add ldap accounts to user when feature flag is enabled', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
features.enable('ldap-auth-methods');
|
||||
const authMethod = this.server.create('auth-method', {
|
||||
scope: instances.scopes.org,
|
||||
@@ -244,6 +344,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and save accounts to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.user.update({ accountIds: [] });
|
||||
await visit(urls.user);
|
||||
|
||||
@@ -268,6 +377,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('select and cancel accounts to add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.user);
|
||||
|
||||
await click(commonSelectors.HREF(urls.accounts));
|
||||
@@ -287,6 +405,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('shows error message on account add', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.post('/users/:idMethod', () => {
|
||||
return new Response(
|
||||
400,
|
||||
@@ -309,6 +436,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to account link for password account', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.user);
|
||||
await click(commonSelectors.HREF(urls.accounts));
|
||||
|
||||
@@ -323,6 +459,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to account link for oidc account', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.authMethods.all().destroy();
|
||||
this.server.schema.users.all().destroy();
|
||||
this.server.schema.accounts.all().destroy();
|
||||
@@ -352,6 +497,15 @@ module('Acceptance | users | accounts', function (hooks) {
|
||||
});
|
||||
|
||||
test('can navigate to account link for ldap account', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.authMethods.all().destroy();
|
||||
this.server.schema.users.all().destroy();
|
||||
this.server.schema.accounts.all().destroy();
|
||||
|
||||
@@ -11,6 +11,7 @@ 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 { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | users | create', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -54,6 +55,15 @@ module('Acceptance | users | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can create new users', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const usersCount = getUsersCount();
|
||||
await visit(urls.users);
|
||||
|
||||
@@ -65,6 +75,15 @@ module('Acceptance | users | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to new users route with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.users));
|
||||
@@ -78,6 +97,15 @@ module('Acceptance | users | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot navigate to new users route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.org.authorized_collection_actions.users =
|
||||
instances.scopes.org.authorized_collection_actions.users.filter(
|
||||
(item) => item !== 'create',
|
||||
@@ -96,6 +124,15 @@ module('Acceptance | users | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel creation of a new user', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const usersCount = getUsersCount();
|
||||
await visit(urls.users);
|
||||
|
||||
@@ -108,6 +145,15 @@ module('Acceptance | users | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('saving a new user with invalid fields displays error messages', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const usersCount = getUsersCount();
|
||||
const errorMessage =
|
||||
'Invalid request. Request attempted to make second resource with the same field value that must be unique.';
|
||||
@@ -136,6 +182,15 @@ module('Acceptance | users | create', function (hooks) {
|
||||
});
|
||||
|
||||
test('users cannot directly navigate to new user route without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.org.authorized_collection_actions.users =
|
||||
instances.scopes.org.authorized_collection_actions.users.filter(
|
||||
(item) => item !== 'create',
|
||||
|
||||
@@ -12,6 +12,7 @@ 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';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | users | delete', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -53,6 +54,15 @@ module('Acceptance | users | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can delete a user', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const usersCount = getUsersCount();
|
||||
await visit(urls.users);
|
||||
|
||||
@@ -65,6 +75,15 @@ module('Acceptance | users | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot delete a user without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.user.authorized_actions =
|
||||
instances.user.authorized_actions.filter((item) => item !== 'delete');
|
||||
await visit(urls.users);
|
||||
@@ -76,6 +95,15 @@ module('Acceptance | users | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can accept delete user via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const usersCount = getUsersCount();
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.users);
|
||||
@@ -93,6 +121,15 @@ module('Acceptance | users | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('can cancel delete user via dialog', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const usersCount = getUsersCount();
|
||||
confirmService.enabled = true;
|
||||
await visit(urls.users);
|
||||
@@ -107,6 +144,15 @@ module('Acceptance | users | delete', function (hooks) {
|
||||
});
|
||||
|
||||
test('errors are displayed when user deletion fails', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.users);
|
||||
this.server.del('/users/:id', () => {
|
||||
return new Response(
|
||||
|
||||
@@ -19,6 +19,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import * as selectors from './selectors';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | users | list', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -63,6 +64,15 @@ module('Acceptance | users | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can navigate to users with proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.globalScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.orgScope));
|
||||
@@ -79,6 +89,15 @@ module('Acceptance | users | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user cannot navigate to users tab without either list or create actions', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.org.authorized_collection_actions.users = [];
|
||||
await visit(urls.globalScope);
|
||||
|
||||
@@ -96,6 +115,15 @@ module('Acceptance | users | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to users tab with only create action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.org.authorized_collection_actions.users =
|
||||
instances.scopes.org.authorized_collection_actions.users.filter(
|
||||
(item) => item !== 'list',
|
||||
@@ -121,6 +149,15 @@ module('Acceptance | users | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can navigate to users tab with only list action', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.scopes.org.authorized_collection_actions.users =
|
||||
instances.scopes.org.authorized_collection_actions.users.filter(
|
||||
(item) => item !== 'create',
|
||||
@@ -145,6 +182,15 @@ module('Acceptance | users | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for a user by id', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.users));
|
||||
@@ -162,6 +208,15 @@ module('Acceptance | users | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('user can search for users and get no results', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.users));
|
||||
@@ -178,6 +233,15 @@ module('Acceptance | users | list', function (hooks) {
|
||||
});
|
||||
|
||||
test('users are sorted by created_time descending by default', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.users.all().destroy();
|
||||
|
||||
const years = ['2026', '2025', '2024', '2023'];
|
||||
@@ -226,6 +290,15 @@ module('Acceptance | users | list', function (hooks) {
|
||||
},
|
||||
},
|
||||
async function (assert, input) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-04
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.server.schema.users.all().destroy();
|
||||
|
||||
faker.helpers.shuffle(input.attribute.values).forEach((value) => {
|
||||
|
||||
@@ -10,6 +10,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
|
||||
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
|
||||
import { authenticateSession } from 'ember-simple-auth/test-support';
|
||||
import * as commonSelectors from 'admin/tests/helpers/selectors';
|
||||
import { setRunOptions } from 'ember-a11y-testing/test-support';
|
||||
|
||||
module('Acceptance | users | read', function (hooks) {
|
||||
setupApplicationTest(hooks);
|
||||
@@ -46,6 +47,15 @@ module('Acceptance | users | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting users', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.users));
|
||||
@@ -54,6 +64,15 @@ module('Acceptance | users | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('visiting user', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.users);
|
||||
|
||||
await click(commonSelectors.HREF(urls.user));
|
||||
@@ -62,6 +81,15 @@ module('Acceptance | users | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('cannot navigate to an account form without proper authorization', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
instances.user.authorized_actions =
|
||||
instances.user.authorized_actions.filter((item) => item !== 'read');
|
||||
await visit(urls.orgScope);
|
||||
@@ -72,6 +100,15 @@ module('Acceptance | users | read', function (hooks) {
|
||||
});
|
||||
|
||||
test('users can link to docs page for users', async function (assert) {
|
||||
setRunOptions({
|
||||
rules: {
|
||||
'color-contrast': {
|
||||
// [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await visit(urls.orgScope);
|
||||
|
||||
await click(commonSelectors.HREF(urls.users));
|
||||
|
||||
Loaded 100 of 114 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user