diff --git a/support/ember-a11y-ignore.mjs b/support/ember-a11y-ignore.mjs new file mode 100644 index 000000000..bc76e8592 --- /dev/null +++ b/support/ember-a11y-ignore.mjs @@ -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( + /(?\n)(import .*ember-a11y-testing\/test-support.*)/g, + '$2', + ); +} diff --git a/ui/admin/tests/acceptance/accounts/change-password-test.js b/ui/admin/tests/acceptance/accounts/change-password-test.js index 6c1d3765b..663bc0357 100644 --- a/ui/admin/tests/acceptance/accounts/change-password-test.js +++ b/ui/admin/tests/acceptance/accounts/change-password-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/accounts/create-test.js b/ui/admin/tests/acceptance/accounts/create-test.js index 142c957a9..7377d4261 100644 --- a/ui/admin/tests/acceptance/accounts/create-test.js +++ b/ui/admin/tests/acceptance/accounts/create-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/accounts/delete-test.js b/ui/admin/tests/acceptance/accounts/delete-test.js index 5ff76a8d8..3bb142497 100644 --- a/ui/admin/tests/acceptance/accounts/delete-test.js +++ b/ui/admin/tests/acceptance/accounts/delete-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/accounts/list-test.js b/ui/admin/tests/acceptance/accounts/list-test.js index 57396a8c3..bda43162d 100644 --- a/ui/admin/tests/acceptance/accounts/list-test.js +++ b/ui/admin/tests/acceptance/accounts/list-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/accounts/read-test.js b/ui/admin/tests/acceptance/accounts/read-test.js index 0f2d277f9..6a5cdfdbc 100644 --- a/ui/admin/tests/acceptance/accounts/read-test.js +++ b/ui/admin/tests/acceptance/accounts/read-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/accounts/set-password-test.js b/ui/admin/tests/acceptance/accounts/set-password-test.js index aa09d7b00..63cd1ab90 100644 --- a/ui/admin/tests/acceptance/accounts/set-password-test.js +++ b/ui/admin/tests/acceptance/accounts/set-password-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/accounts/update-test.js b/ui/admin/tests/acceptance/accounts/update-test.js index 43446aff0..2ec182af2 100644 --- a/ui/admin/tests/acceptance/accounts/update-test.js +++ b/ui/admin/tests/acceptance/accounts/update-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/aliases/create-test.js b/ui/admin/tests/acceptance/aliases/create-test.js index 2a8daaefd..dd544ad5d 100644 --- a/ui/admin/tests/acceptance/aliases/create-test.js +++ b/ui/admin/tests/acceptance/aliases/create-test.js @@ -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( diff --git a/ui/admin/tests/acceptance/aliases/delete-test.js b/ui/admin/tests/acceptance/aliases/delete-test.js index c516b51e5..3e039393f 100644 --- a/ui/admin/tests/acceptance/aliases/delete-test.js +++ b/ui/admin/tests/acceptance/aliases/delete-test.js @@ -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'); diff --git a/ui/admin/tests/acceptance/aliases/list-test.js b/ui/admin/tests/acceptance/aliases/list-test.js index 7e81ee868..032c50420 100644 --- a/ui/admin/tests/acceptance/aliases/list-test.js +++ b/ui/admin/tests/acceptance/aliases/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/aliases/read-test.js b/ui/admin/tests/acceptance/aliases/read-test.js index 0b80c8fa7..0d76d4a39 100644 --- a/ui/admin/tests/acceptance/aliases/read-test.js +++ b/ui/admin/tests/acceptance/aliases/read-test.js @@ -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 diff --git a/ui/admin/tests/acceptance/aliases/update-test.js b/ui/admin/tests/acceptance/aliases/update-test.js index 2861cab16..c90c4ab31 100644 --- a/ui/admin/tests/acceptance/aliases/update-test.js +++ b/ui/admin/tests/acceptance/aliases/update-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/auth-methods/create-test.js b/ui/admin/tests/acceptance/auth-methods/create-test.js index af44bd330..79ef3da69 100644 --- a/ui/admin/tests/acceptance/auth-methods/create-test.js +++ b/ui/admin/tests/acceptance/auth-methods/create-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/auth-methods/delete-test.js b/ui/admin/tests/acceptance/auth-methods/delete-test.js index 09af6ed43..ac1a24625 100644 --- a/ui/admin/tests/acceptance/auth-methods/delete-test.js +++ b/ui/admin/tests/acceptance/auth-methods/delete-test.js @@ -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'); diff --git a/ui/admin/tests/acceptance/auth-methods/list-test.js b/ui/admin/tests/acceptance/auth-methods/list-test.js index a7a2a6d48..aba737a7e 100644 --- a/ui/admin/tests/acceptance/auth-methods/list-test.js +++ b/ui/admin/tests/acceptance/auth-methods/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/auth-methods/read-test.js b/ui/admin/tests/acceptance/auth-methods/read-test.js index 521b2c548..66c46324a 100644 --- a/ui/admin/tests/acceptance/auth-methods/read-test.js +++ b/ui/admin/tests/acceptance/auth-methods/read-test.js @@ -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' }, diff --git a/ui/admin/tests/acceptance/auth-methods/update-test.js b/ui/admin/tests/acceptance/auth-methods/update-test.js index 722bc7eb5..7de8456ae 100644 --- a/ui/admin/tests/acceptance/auth-methods/update-test.js +++ b/ui/admin/tests/acceptance/auth-methods/update-test.js @@ -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'; diff --git a/ui/admin/tests/acceptance/credential-library/create-test.js b/ui/admin/tests/acceptance/credential-library/create-test.js index 08c2d3580..d8b9fb52d 100644 --- a/ui/admin/tests/acceptance/credential-library/create-test.js +++ b/ui/admin/tests/acceptance/credential-library/create-test.js @@ -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[ diff --git a/ui/admin/tests/acceptance/credential-library/delete-test.js b/ui/admin/tests/acceptance/credential-library/delete-test.js index 03a352c53..68fcb2768 100644 --- a/ui/admin/tests/acceptance/credential-library/delete-test.js +++ b/ui/admin/tests/acceptance/credential-library/delete-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/credential-library/read-test.js b/ui/admin/tests/acceptance/credential-library/read-test.js index 95ac057cd..1d0163a5f 100644 --- a/ui/admin/tests/acceptance/credential-library/read-test.js +++ b/ui/admin/tests/acceptance/credential-library/read-test.js @@ -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 diff --git a/ui/admin/tests/acceptance/credential-library/update-test.js b/ui/admin/tests/acceptance/credential-library/update-test.js index 6aa318dae..caeb5b24a 100644 --- a/ui/admin/tests/acceptance/credential-library/update-test.js +++ b/ui/admin/tests/acceptance/credential-library/update-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/credential-store/create-test.js b/ui/admin/tests/acceptance/credential-store/create-test.js index b8dbe5e1f..9e7476ecc 100644 --- a/ui/admin/tests/acceptance/credential-store/create-test.js +++ b/ui/admin/tests/acceptance/credential-store/create-test.js @@ -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 diff --git a/ui/admin/tests/acceptance/credential-store/credentials/create-test.js b/ui/admin/tests/acceptance/credential-store/credentials/create-test.js index 62dae4d43..d8d28c134 100644 --- a/ui/admin/tests/acceptance/credential-store/credentials/create-test.js +++ b/ui/admin/tests/acceptance/credential-store/credentials/create-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/credential-store/credentials/delete-test.js b/ui/admin/tests/acceptance/credential-store/credentials/delete-test.js index 71164825a..f4e768ca9 100644 --- a/ui/admin/tests/acceptance/credential-store/credentials/delete-test.js +++ b/ui/admin/tests/acceptance/credential-store/credentials/delete-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/credential-store/credentials/list-test.js b/ui/admin/tests/acceptance/credential-store/credentials/list-test.js index c835a1ecc..058911f5f 100644 --- a/ui/admin/tests/acceptance/credential-store/credentials/list-test.js +++ b/ui/admin/tests/acceptance/credential-store/credentials/list-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/credential-store/credentials/read-test.js b/ui/admin/tests/acceptance/credential-store/credentials/read-test.js index 79a8f70fb..db61094ed 100644 --- a/ui/admin/tests/acceptance/credential-store/credentials/read-test.js +++ b/ui/admin/tests/acceptance/credential-store/credentials/read-test.js @@ -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 diff --git a/ui/admin/tests/acceptance/credential-store/credentials/update-test.js b/ui/admin/tests/acceptance/credential-store/credentials/update-test.js index 31f27727e..7a4d94411 100644 --- a/ui/admin/tests/acceptance/credential-store/credentials/update-test.js +++ b/ui/admin/tests/acceptance/credential-store/credentials/update-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/credential-store/delete-test.js b/ui/admin/tests/acceptance/credential-store/delete-test.js index e5532689d..a887a5503 100644 --- a/ui/admin/tests/acceptance/credential-store/delete-test.js +++ b/ui/admin/tests/acceptance/credential-store/delete-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/credential-store/list-test.js b/ui/admin/tests/acceptance/credential-store/list-test.js index 9180ece1a..9fa2483bf 100644 --- a/ui/admin/tests/acceptance/credential-store/list-test.js +++ b/ui/admin/tests/acceptance/credential-store/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/credential-store/read-test.js b/ui/admin/tests/acceptance/credential-store/read-test.js index d94e9b737..a3b4a7af9 100644 --- a/ui/admin/tests/acceptance/credential-store/read-test.js +++ b/ui/admin/tests/acceptance/credential-store/read-test.js @@ -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)); diff --git a/ui/admin/tests/acceptance/credential-store/update-test.js b/ui/admin/tests/acceptance/credential-store/update-test.js index 93091815c..6a6d954fd 100644 --- a/ui/admin/tests/acceptance/credential-store/update-test.js +++ b/ui/admin/tests/acceptance/credential-store/update-test.js @@ -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 }, }); diff --git a/ui/admin/tests/acceptance/groups/delete-test.js b/ui/admin/tests/acceptance/groups/delete-test.js index 126dca3a7..99deca0a8 100644 --- a/ui/admin/tests/acceptance/groups/delete-test.js +++ b/ui/admin/tests/acceptance/groups/delete-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/groups/members-test.js b/ui/admin/tests/acceptance/groups/members-test.js index c89b0f602..aa9720936 100644 --- a/ui/admin/tests/acceptance/groups/members-test.js +++ b/ui/admin/tests/acceptance/groups/members-test.js @@ -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( diff --git a/ui/admin/tests/acceptance/groups/read-test.js b/ui/admin/tests/acceptance/groups/read-test.js index 90d33cad7..3c93a2472 100644 --- a/ui/admin/tests/acceptance/groups/read-test.js +++ b/ui/admin/tests/acceptance/groups/read-test.js @@ -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' }, diff --git a/ui/admin/tests/acceptance/host-catalogs/create-test.js b/ui/admin/tests/acceptance/host-catalogs/create-test.js index 39f416184..dadefadc1 100644 --- a/ui/admin/tests/acceptance/host-catalogs/create-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/create-test.js @@ -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' diff --git a/ui/admin/tests/acceptance/host-catalogs/delete-test.js b/ui/admin/tests/acceptance/host-catalogs/delete-test.js index e485be5f9..875028d62 100644 --- a/ui/admin/tests/acceptance/host-catalogs/delete-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/delete-test.js @@ -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( diff --git a/ui/admin/tests/acceptance/host-catalogs/host-sets/create-test.js b/ui/admin/tests/acceptance/host-catalogs/host-sets/create-test.js index 0f80eb004..1b64e2df8 100644 --- a/ui/admin/tests/acceptance/host-catalogs/host-sets/create-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/host-sets/create-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/host-catalogs/host-sets/delete-test.js b/ui/admin/tests/acceptance/host-catalogs/host-sets/delete-test.js index 6447acbb6..e3f26bd66 100644 --- a/ui/admin/tests/acceptance/host-catalogs/host-sets/delete-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/host-sets/delete-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/host-catalogs/host-sets/hosts-test.js b/ui/admin/tests/acceptance/host-catalogs/host-sets/hosts-test.js index a0138fd40..49715c2a1 100644 --- a/ui/admin/tests/acceptance/host-catalogs/host-sets/hosts-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/host-sets/hosts-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/host-catalogs/host-sets/read-test.js b/ui/admin/tests/acceptance/host-catalogs/host-sets/read-test.js index d5df51755..51ef81667 100644 --- a/ui/admin/tests/acceptance/host-catalogs/host-sets/read-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/host-sets/read-test.js @@ -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)); diff --git a/ui/admin/tests/acceptance/host-catalogs/host-sets/update-test.js b/ui/admin/tests/acceptance/host-catalogs/host-sets/update-test.js index c2c0d082e..e0db24b38 100644 --- a/ui/admin/tests/acceptance/host-catalogs/host-sets/update-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/host-sets/update-test.js @@ -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'); diff --git a/ui/admin/tests/acceptance/host-catalogs/hosts/create-test.js b/ui/admin/tests/acceptance/host-catalogs/hosts/create-test.js index d5158b74f..78f3a7343 100644 --- a/ui/admin/tests/acceptance/host-catalogs/hosts/create-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/hosts/create-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/host-catalogs/hosts/delete-test.js b/ui/admin/tests/acceptance/host-catalogs/hosts/delete-test.js index 670a3fcba..01e69d4a2 100644 --- a/ui/admin/tests/acceptance/host-catalogs/hosts/delete-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/hosts/delete-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/host-catalogs/hosts/list-test.js b/ui/admin/tests/acceptance/host-catalogs/hosts/list-test.js index e56c4e09b..2f903e715 100644 --- a/ui/admin/tests/acceptance/host-catalogs/hosts/list-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/hosts/list-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/host-catalogs/hosts/read-test.js b/ui/admin/tests/acceptance/host-catalogs/hosts/read-test.js index 30d3f281f..32833a5bd 100644 --- a/ui/admin/tests/acceptance/host-catalogs/hosts/read-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/hosts/read-test.js @@ -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)); diff --git a/ui/admin/tests/acceptance/host-catalogs/hosts/update-test.js b/ui/admin/tests/acceptance/host-catalogs/hosts/update-test.js index 3965bcd30..7a7343008 100644 --- a/ui/admin/tests/acceptance/host-catalogs/hosts/update-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/hosts/update-test.js @@ -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'); diff --git a/ui/admin/tests/acceptance/host-catalogs/list-test.js b/ui/admin/tests/acceptance/host-catalogs/list-test.js index 0c9455bdf..848a69cfc 100644 --- a/ui/admin/tests/acceptance/host-catalogs/list-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/host-catalogs/read-test.js b/ui/admin/tests/acceptance/host-catalogs/read-test.js index 7ee513aa6..7e8ef67a8 100644 --- a/ui/admin/tests/acceptance/host-catalogs/read-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/read-test.js @@ -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' }, diff --git a/ui/admin/tests/acceptance/host-catalogs/update-test.js b/ui/admin/tests/acceptance/host-catalogs/update-test.js index a95339e06..09af7e7ae 100644 --- a/ui/admin/tests/acceptance/host-catalogs/update-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/update-test.js @@ -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( diff --git a/ui/admin/tests/acceptance/managed-groups/create-test.js b/ui/admin/tests/acceptance/managed-groups/create-test.js index 686955e26..d80efc7bf 100644 --- a/ui/admin/tests/acceptance/managed-groups/create-test.js +++ b/ui/admin/tests/acceptance/managed-groups/create-test.js @@ -16,6 +16,7 @@ import { } 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, diff --git a/ui/admin/tests/acceptance/managed-groups/delete-test.js b/ui/admin/tests/acceptance/managed-groups/delete-test.js index 715688f6c..c99f05b27 100644 --- a/ui/admin/tests/acceptance/managed-groups/delete-test.js +++ b/ui/admin/tests/acceptance/managed-groups/delete-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/managed-groups/list-test.js b/ui/admin/tests/acceptance/managed-groups/list-test.js index f5b99bd9b..bad5d04ae 100644 --- a/ui/admin/tests/acceptance/managed-groups/list-test.js +++ b/ui/admin/tests/acceptance/managed-groups/list-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/managed-groups/members-test.js b/ui/admin/tests/acceptance/managed-groups/members-test.js index 3a0345c9b..815faee18 100644 --- a/ui/admin/tests/acceptance/managed-groups/members-test.js +++ b/ui/admin/tests/acceptance/managed-groups/members-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/managed-groups/read-test.js b/ui/admin/tests/acceptance/managed-groups/read-test.js index 3fe458a11..bfd05292f 100644 --- a/ui/admin/tests/acceptance/managed-groups/read-test.js +++ b/ui/admin/tests/acceptance/managed-groups/read-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/onboarding/onboarding-test.js b/ui/admin/tests/acceptance/onboarding/onboarding-test.js index 3c3a43b77..aa8647a87 100644 --- a/ui/admin/tests/acceptance/onboarding/onboarding-test.js +++ b/ui/admin/tests/acceptance/onboarding/onboarding-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/onboarding/success-test.js b/ui/admin/tests/acceptance/onboarding/success-test.js index 7a4320134..b68d17899 100644 --- a/ui/admin/tests/acceptance/onboarding/success-test.js +++ b/ui/admin/tests/acceptance/onboarding/success-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/policy/create-test.js b/ui/admin/tests/acceptance/policy/create-test.js index f42f53a89..a6f160421 100644 --- a/ui/admin/tests/acceptance/policy/create-test.js +++ b/ui/admin/tests/acceptance/policy/create-test.js @@ -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', () => { diff --git a/ui/admin/tests/acceptance/policy/delete-test.js b/ui/admin/tests/acceptance/policy/delete-test.js index 1fa091ec5..23e365e3c 100644 --- a/ui/admin/tests/acceptance/policy/delete-test.js +++ b/ui/admin/tests/acceptance/policy/delete-test.js @@ -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 = diff --git a/ui/admin/tests/acceptance/policy/list-test.js b/ui/admin/tests/acceptance/policy/list-test.js index c11399a53..f51aa479e 100644 --- a/ui/admin/tests/acceptance/policy/list-test.js +++ b/ui/admin/tests/acceptance/policy/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/policy/read-test.js b/ui/admin/tests/acceptance/policy/read-test.js index b6ec1c170..c3925f058 100644 --- a/ui/admin/tests/acceptance/policy/read-test.js +++ b/ui/admin/tests/acceptance/policy/read-test.js @@ -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 diff --git a/ui/admin/tests/acceptance/policy/update-test.js b/ui/admin/tests/acceptance/policy/update-test.js index 789bbb181..ddfe66fb2 100644 --- a/ui/admin/tests/acceptance/policy/update-test.js +++ b/ui/admin/tests/acceptance/policy/update-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/roles/delete-test.js b/ui/admin/tests/acceptance/roles/delete-test.js index 18483f5e0..f88709660 100644 --- a/ui/admin/tests/acceptance/roles/delete-test.js +++ b/ui/admin/tests/acceptance/roles/delete-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/roles/global-scope-test.js b/ui/admin/tests/acceptance/roles/global-scope-test.js index 625e5261a..5164e0004 100644 --- a/ui/admin/tests/acceptance/roles/global-scope-test.js +++ b/ui/admin/tests/acceptance/roles/global-scope-test.js @@ -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' }, diff --git a/ui/admin/tests/acceptance/roles/list-test.js b/ui/admin/tests/acceptance/roles/list-test.js index 3112c3d66..2499bf72c 100644 --- a/ui/admin/tests/acceptance/roles/list-test.js +++ b/ui/admin/tests/acceptance/roles/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/roles/org-scope-test.js b/ui/admin/tests/acceptance/roles/org-scope-test.js index a9e9a80b9..252aea606 100644 --- a/ui/admin/tests/acceptance/roles/org-scope-test.js +++ b/ui/admin/tests/acceptance/roles/org-scope-test.js @@ -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' }, diff --git a/ui/admin/tests/acceptance/roles/principals-test.js b/ui/admin/tests/acceptance/roles/principals-test.js index c87adf085..a0e9a02f4 100644 --- a/ui/admin/tests/acceptance/roles/principals-test.js +++ b/ui/admin/tests/acceptance/roles/principals-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/roles/project-scope-test.js b/ui/admin/tests/acceptance/roles/project-scope-test.js index 93409a52e..ac07d37ef 100644 --- a/ui/admin/tests/acceptance/roles/project-scope-test.js +++ b/ui/admin/tests/acceptance/roles/project-scope-test.js @@ -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)); diff --git a/ui/admin/tests/acceptance/scopes-test.js b/ui/admin/tests/acceptance/scopes-test.js index a53aff262..8c6277b6f 100644 --- a/ui/admin/tests/acceptance/scopes-test.js +++ b/ui/admin/tests/acceptance/scopes-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/scopes/add-storage-policy-test.js b/ui/admin/tests/acceptance/scopes/add-storage-policy-test.js index eb9114448..7c4b4a758 100644 --- a/ui/admin/tests/acceptance/scopes/add-storage-policy-test.js +++ b/ui/admin/tests/acceptance/scopes/add-storage-policy-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/scopes/delete-test.js b/ui/admin/tests/acceptance/scopes/delete-test.js index b7091dbfb..e58bc2d09 100644 --- a/ui/admin/tests/acceptance/scopes/delete-test.js +++ b/ui/admin/tests/acceptance/scopes/delete-test.js @@ -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( diff --git a/ui/admin/tests/acceptance/scopes/read-test.js b/ui/admin/tests/acceptance/scopes/read-test.js index f517f8a83..3b9c4a911 100644 --- a/ui/admin/tests/acceptance/scopes/read-test.js +++ b/ui/admin/tests/acceptance/scopes/read-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/session-recordings/list-test.js b/ui/admin/tests/acceptance/session-recordings/list-test.js index fc87d62f6..4bf8f721f 100644 --- a/ui/admin/tests/acceptance/session-recordings/list-test.js +++ b/ui/admin/tests/acceptance/session-recordings/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/session-recordings/read-test.js b/ui/admin/tests/acceptance/session-recordings/read-test.js index 825c892a3..493cb7022 100644 --- a/ui/admin/tests/acceptance/session-recordings/read-test.js +++ b/ui/admin/tests/acceptance/session-recordings/read-test.js @@ -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`; diff --git a/ui/admin/tests/acceptance/session-recordings/session-recording/channels-by-connection/channel-test.js b/ui/admin/tests/acceptance/session-recordings/session-recording/channels-by-connection/channel-test.js index 8be857ea8..20950f39f 100644 --- a/ui/admin/tests/acceptance/session-recordings/session-recording/channels-by-connection/channel-test.js +++ b/ui/admin/tests/acceptance/session-recordings/session-recording/channels-by-connection/channel-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/sessions/list-test.js b/ui/admin/tests/acceptance/sessions/list-test.js index bb1b57d3d..4ee760696 100644 --- a/ui/admin/tests/acceptance/sessions/list-test.js +++ b/ui/admin/tests/acceptance/sessions/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/storage-buckets/create-test.js b/ui/admin/tests/acceptance/storage-buckets/create-test.js index 28d455d4c..12455bdbb 100644 --- a/ui/admin/tests/acceptance/storage-buckets/create-test.js +++ b/ui/admin/tests/acceptance/storage-buckets/create-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/storage-buckets/delete-test.js b/ui/admin/tests/acceptance/storage-buckets/delete-test.js index d54d3b9c0..0399c6260 100644 --- a/ui/admin/tests/acceptance/storage-buckets/delete-test.js +++ b/ui/admin/tests/acceptance/storage-buckets/delete-test.js @@ -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( diff --git a/ui/admin/tests/acceptance/storage-buckets/list-test.js b/ui/admin/tests/acceptance/storage-buckets/list-test.js index d363a032b..ae96a93be 100644 --- a/ui/admin/tests/acceptance/storage-buckets/list-test.js +++ b/ui/admin/tests/acceptance/storage-buckets/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/storage-buckets/read-test.js b/ui/admin/tests/acceptance/storage-buckets/read-test.js index b82dc2438..0908a0d83 100644 --- a/ui/admin/tests/acceptance/storage-buckets/read-test.js +++ b/ui/admin/tests/acceptance/storage-buckets/read-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/storage-buckets/update-test.js b/ui/admin/tests/acceptance/storage-buckets/update-test.js index 8621ceacd..13d5fbec1 100644 --- a/ui/admin/tests/acceptance/storage-buckets/update-test.js +++ b/ui/admin/tests/acceptance/storage-buckets/update-test.js @@ -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)); diff --git a/ui/admin/tests/acceptance/targets/brokered-credential-sources-test.js b/ui/admin/tests/acceptance/targets/brokered-credential-sources-test.js index 14763e07e..0efffde2b 100644 --- a/ui/admin/tests/acceptance/targets/brokered-credential-sources-test.js +++ b/ui/admin/tests/acceptance/targets/brokered-credential-sources-test.js @@ -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], }); diff --git a/ui/admin/tests/acceptance/targets/create-alias-test.js b/ui/admin/tests/acceptance/targets/create-alias-test.js index 238ec1a15..fe1afcfad 100644 --- a/ui/admin/tests/acceptance/targets/create-alias-test.js +++ b/ui/admin/tests/acceptance/targets/create-alias-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/targets/create-test.js b/ui/admin/tests/acceptance/targets/create-test.js index e7c189d24..d714cce1c 100644 --- a/ui/admin/tests/acceptance/targets/create-test.js +++ b/ui/admin/tests/acceptance/targets/create-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/targets/delete-test.js b/ui/admin/tests/acceptance/targets/delete-test.js index 2b3a83f26..7dc7de9f4 100644 --- a/ui/admin/tests/acceptance/targets/delete-test.js +++ b/ui/admin/tests/acceptance/targets/delete-test.js @@ -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( diff --git a/ui/admin/tests/acceptance/targets/enable-session-recording-test.js b/ui/admin/tests/acceptance/targets/enable-session-recording-test.js index 0c340cc38..0a298ab8a 100644 --- a/ui/admin/tests/acceptance/targets/enable-session-recording-test.js +++ b/ui/admin/tests/acceptance/targets/enable-session-recording-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/targets/enable-session-recording/create-storage-bucket-test.js b/ui/admin/tests/acceptance/targets/enable-session-recording/create-storage-bucket-test.js index 5ba8f1276..f4e85a7b7 100644 --- a/ui/admin/tests/acceptance/targets/enable-session-recording/create-storage-bucket-test.js +++ b/ui/admin/tests/acceptance/targets/enable-session-recording/create-storage-bucket-test.js @@ -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', () => { diff --git a/ui/admin/tests/acceptance/targets/enable-session-recording/index-test.js b/ui/admin/tests/acceptance/targets/enable-session-recording/index-test.js index 7cd758133..662f5b5f1 100644 --- a/ui/admin/tests/acceptance/targets/enable-session-recording/index-test.js +++ b/ui/admin/tests/acceptance/targets/enable-session-recording/index-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/targets/host-sources-test.js b/ui/admin/tests/acceptance/targets/host-sources-test.js index d3d251d53..a44d3af7a 100644 --- a/ui/admin/tests/acceptance/targets/host-sources-test.js +++ b/ui/admin/tests/acceptance/targets/host-sources-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/targets/injected-application-credential-sources-test.js b/ui/admin/tests/acceptance/targets/injected-application-credential-sources-test.js index bf83c266d..9ede290bc 100644 --- a/ui/admin/tests/acceptance/targets/injected-application-credential-sources-test.js +++ b/ui/admin/tests/acceptance/targets/injected-application-credential-sources-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/targets/list-test.js b/ui/admin/tests/acceptance/targets/list-test.js index 91f968e40..d96b0679b 100644 --- a/ui/admin/tests/acceptance/targets/list-test.js +++ b/ui/admin/tests/acceptance/targets/list-test.js @@ -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', { diff --git a/ui/admin/tests/acceptance/targets/manage-alias-test.js b/ui/admin/tests/acceptance/targets/manage-alias-test.js index 04f11d264..221644a0a 100644 --- a/ui/admin/tests/acceptance/targets/manage-alias-test.js +++ b/ui/admin/tests/acceptance/targets/manage-alias-test.js @@ -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, diff --git a/ui/admin/tests/acceptance/targets/read-test.js b/ui/admin/tests/acceptance/targets/read-test.js index 0bb1a580d..90cc2aa0b 100644 --- a/ui/admin/tests/acceptance/targets/read-test.js +++ b/ui/admin/tests/acceptance/targets/read-test.js @@ -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' }, diff --git a/ui/admin/tests/acceptance/targets/update-test.js b/ui/admin/tests/acceptance/targets/update-test.js index 5e870b041..0b9089e4d 100644 --- a/ui/admin/tests/acceptance/targets/update-test.js +++ b/ui/admin/tests/acceptance/targets/update-test.js @@ -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'); diff --git a/ui/admin/tests/acceptance/targets/workers-test.js b/ui/admin/tests/acceptance/targets/workers-test.js index b10a6f35c..89b7bab7b 100644 --- a/ui/admin/tests/acceptance/targets/workers-test.js +++ b/ui/admin/tests/acceptance/targets/workers-test.js @@ -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); diff --git a/ui/admin/tests/acceptance/users/accounts-test.js b/ui/admin/tests/acceptance/users/accounts-test.js index c0dfa86bc..f638b2ba0 100644 --- a/ui/admin/tests/acceptance/users/accounts-test.js +++ b/ui/admin/tests/acceptance/users/accounts-test.js @@ -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(); diff --git a/ui/admin/tests/acceptance/users/create-test.js b/ui/admin/tests/acceptance/users/create-test.js index 68fdbbaa9..4e71d5965 100644 --- a/ui/admin/tests/acceptance/users/create-test.js +++ b/ui/admin/tests/acceptance/users/create-test.js @@ -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', diff --git a/ui/admin/tests/acceptance/users/delete-test.js b/ui/admin/tests/acceptance/users/delete-test.js index cf225b66c..edf98fb3f 100644 --- a/ui/admin/tests/acceptance/users/delete-test.js +++ b/ui/admin/tests/acceptance/users/delete-test.js @@ -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( diff --git a/ui/admin/tests/acceptance/users/list-test.js b/ui/admin/tests/acceptance/users/list-test.js index 32f183509..34e61097f 100644 --- a/ui/admin/tests/acceptance/users/list-test.js +++ b/ui/admin/tests/acceptance/users/list-test.js @@ -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) => { diff --git a/ui/admin/tests/acceptance/users/read-test.js b/ui/admin/tests/acceptance/users/read-test.js index ec60a5a00..13f32a47f 100644 --- a/ui/admin/tests/acceptance/users/read-test.js +++ b/ui/admin/tests/acceptance/users/read-test.js @@ -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)); diff --git a/ui/admin/tests/acceptance/users/update-test.js b/ui/admin/tests/acceptance/users/update-test.js index 8f88bb0de..5e47a5933 100644 --- a/ui/admin/tests/acceptance/users/update-test.js +++ b/ui/admin/tests/acceptance/users/update-test.js @@ -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 | update', function (hooks) { setupApplicationTest(hooks); @@ -51,6 +52,15 @@ module('Acceptance | users | update', function (hooks) { }); test('can save changes to an existing 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)); @@ -66,6 +76,15 @@ module('Acceptance | users | update', function (hooks) { }); test('cannot make changes to an existing 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 !== 'update'); await visit(urls.users); @@ -77,6 +96,15 @@ module('Acceptance | users | update', function (hooks) { }); test('can cancel changes to an existing 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)); @@ -89,6 +117,15 @@ module('Acceptance | users | update', function (hooks) { }); test('saving an existing 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 errorMessage = 'Invalid request. Request attempted to make second resource with the same field value that must be unique.'; await visit(urls.users); @@ -113,6 +150,15 @@ module('Acceptance | users | update', function (hooks) { }); test('can discard unsaved user 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, + }, + }, + }); + confirmService.enabled = true; assert.notEqual(instances.user.name, commonSelectors.FIELD_NAME_VALUE); await visit(urls.user); diff --git a/ui/admin/tests/acceptance/workers/create-tags-test.js b/ui/admin/tests/acceptance/workers/create-tags-test.js index 3806f4946..547d251ef 100644 --- a/ui/admin/tests/acceptance/workers/create-tags-test.js +++ b/ui/admin/tests/acceptance/workers/create-tags-test.js @@ -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 | workers | worker | create-tags', function (hooks) { setupApplicationTest(hooks); @@ -46,6 +47,15 @@ module('Acceptance | workers | worker | create-tags', function (hooks) { }); test('visiting worker create tags', 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.worker); await click(selectors.MANAGE_DROPDOWN_WORKER); @@ -55,6 +65,15 @@ module('Acceptance | workers | worker | create-tags', function (hooks) { }); test('cannot visit worker create tags without proper permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.worker.authorized_actions = instances.worker.authorized_actions.filter( (item) => item !== 'set-worker-tags', @@ -67,6 +86,15 @@ module('Acceptance | workers | worker | create-tags', function (hooks) { }); test('user can save worker tags', 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.tags); assert.dom(commonSelectors.TABLE_ROWS).exists({ count: 11 }); @@ -83,6 +111,15 @@ module('Acceptance | workers | worker | create-tags', function (hooks) { }); test('user can cancel tag creation', 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.worker); await click(selectors.MANAGE_DROPDOWN_WORKER); @@ -93,6 +130,15 @@ module('Acceptance | workers | worker | create-tags', function (hooks) { }); test('user is prompted to confirm exit when there are unsaved changes', 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; await visit(urls.createTags); diff --git a/ui/admin/tests/acceptance/workers/create-test.js b/ui/admin/tests/acceptance/workers/create-test.js index d23093b5b..df9d535ba 100644 --- a/ui/admin/tests/acceptance/workers/create-test.js +++ b/ui/admin/tests/acceptance/workers/create-test.js @@ -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 | workers | create', function (hooks) { setupApplicationTest(hooks); @@ -34,6 +35,20 @@ module('Acceptance | workers | create', function (hooks) { }); test('can create new workers', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + const workersCount = getWorkersCount(); await visit(newWorkerURL); @@ -47,6 +62,20 @@ module('Acceptance | workers | create', function (hooks) { }); test('cluster id input field is visible for `hcp` binary', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow-pki-hcp-cluster-id'); await visit(newWorkerURL); @@ -57,6 +86,20 @@ module('Acceptance | workers | create', function (hooks) { }); test('initial upstreams input field is visible for `oss` binary', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + await visit(newWorkerURL); const labels = findAll(selectors.WORKER_CREATE_SECTION_FORM_LABEL); @@ -67,6 +110,20 @@ module('Acceptance | workers | create', function (hooks) { }); test('download and install step shows correct oss instructions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + await visit(newWorkerURL); const createSection = findAll(selectors.WORKER_CREATE_SECTION); @@ -85,6 +142,20 @@ module('Acceptance | workers | create', function (hooks) { }); test('download and install step shows correct hcp instructions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow-pki-hcp-cluster-id'); await visit(newWorkerURL); @@ -103,6 +174,15 @@ module('Acceptance | workers | create', function (hooks) { }); test('Users can navigate to new workers 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(workersURL); assert.ok( @@ -126,6 +206,20 @@ module('Acceptance | workers | create', function (hooks) { }); test('saving a new worker 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, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.server.post('/workers:create:worker-led', () => { return new Response( 500, diff --git a/ui/admin/tests/acceptance/workers/delete-test.js b/ui/admin/tests/acceptance/workers/delete-test.js index ea9d23c11..b58e025c2 100644 --- a/ui/admin/tests/acceptance/workers/delete-test.js +++ b/ui/admin/tests/acceptance/workers/delete-test.js @@ -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 | workers | delete', function (hooks) { setupApplicationTest(hooks); @@ -50,6 +51,15 @@ module('Acceptance | workers | delete', function (hooks) { }); test('can delete a worker', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + const count = getWorkerCount(); await visit(urls.worker); @@ -60,6 +70,15 @@ module('Acceptance | workers | delete', function (hooks) { }); test('can accept delete worker 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; confirmService.confirm = sinon.fake.returns(resolve()); const count = getWorkerCount(); @@ -73,6 +92,15 @@ module('Acceptance | workers | delete', function (hooks) { }); test('can cancel delete worker 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; confirmService.confirm = sinon.fake.returns(reject()); const count = getWorkerCount(); @@ -96,6 +124,15 @@ module('Acceptance | workers | delete', function (hooks) { }); test('deleting a worker 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('/workers/:id', () => { return new Response( 490, diff --git a/ui/admin/tests/acceptance/workers/list-test.js b/ui/admin/tests/acceptance/workers/list-test.js index dcbeaac9b..9e7f5c3f1 100644 --- a/ui/admin/tests/acceptance/workers/list-test.js +++ b/ui/admin/tests/acceptance/workers/list-test.js @@ -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 | workers | list', function (hooks) { setupApplicationTest(hooks); @@ -51,6 +52,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users can navigate to workers 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('byow'); await visit(urls.globalScope); @@ -63,6 +73,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users cannot navigate to workers without list or create permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); instances.scopes.global.authorized_collection_actions.workers = []; await visit(urls.globalScope); @@ -71,6 +90,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users can navigate to workers with only create permission', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); instances.scopes.global.authorized_collection_actions.workers = [ 'create:worker-led', @@ -81,6 +109,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users can navigate to workers with only list permission', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); instances.scopes.global.authorized_collection_actions.workers = ['list']; await visit(urls.globalScope); @@ -89,6 +126,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users can filter by tags', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); await visit(urls.workers); @@ -102,6 +148,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users can open and close tags flyout for a specific worker', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); await visit(urls.workers); @@ -119,6 +174,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users can see worker tags in the tags flyout', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); await visit(urls.workers); @@ -132,6 +196,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users can only see first 10 tags in the tags flyout', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); instances.worker.update({ configTags: { @@ -159,6 +232,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users can click on "view more tags" if there are more than 10 tags', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); instances.worker.update({ configTags: { @@ -187,6 +269,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users do not see "view more tags" if there are 10 or less tags', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); instances.worker.update({ configTags: { @@ -211,6 +302,15 @@ module('Acceptance | workers | list', function (hooks) { }); test('Users do not see worker tags flyout when returning to workers list', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + featuresService.enable('byow'); await visit(urls.workers); diff --git a/ui/admin/tests/acceptance/workers/read-test.js b/ui/admin/tests/acceptance/workers/read-test.js index d43c4fda4..231cb68bd 100644 --- a/ui/admin/tests/acceptance/workers/read-test.js +++ b/ui/admin/tests/acceptance/workers/read-test.js @@ -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 | workers | read', function (hooks) { setupApplicationTest(hooks); @@ -53,6 +54,15 @@ module('Acceptance | workers | read', function (hooks) { }); test('visiting worker', 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.workers); await click(commonSelectors.HREF(urls.worker)); @@ -61,6 +71,15 @@ module('Acceptance | workers | read', function (hooks) { }); test('cannot navigate to an worker 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.worker.authorized_actions = instances.worker.authorized_actions.filter((itm) => itm !== 'read'); await visit(urls.globalScope); @@ -71,6 +90,15 @@ module('Acceptance | workers | read', function (hooks) { }); test('can navigate to an worker form 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.workers)); diff --git a/ui/admin/tests/acceptance/workers/tags-test.js b/ui/admin/tests/acceptance/workers/tags-test.js index 5d1ddc0a5..55a7e0fad 100644 --- a/ui/admin/tests/acceptance/workers/tags-test.js +++ b/ui/admin/tests/acceptance/workers/tags-test.js @@ -18,6 +18,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support'; import { HCP_MANAGED_KEY } from 'api/models/worker'; import * as commonSelectors from 'admin/tests/helpers/selectors'; import * as selectors from './selectors'; +import { setRunOptions } from 'ember-a11y-testing/test-support'; module('Acceptance | workers | worker | tags', function (hooks) { setupApplicationTest(hooks); @@ -49,6 +50,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('visiting worker tags', 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.worker); await click(commonSelectors.HREF(urls.tags)); @@ -58,6 +68,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('config tags display a tooltip for HCP managed tag', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.worker.config_tags = { [HCP_MANAGED_KEY]: ['true'] }; await visit(urls.tags); @@ -71,6 +90,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('config tags display a tooltip self managed tag', 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.tags); await focus(selectors.TABLE_ROW_CONFIG_TAG_TOOLTIP_BUTTON); @@ -81,6 +109,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('users can remove a specific tag', 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.tags); assert.dom(commonSelectors.TABLE_ROWS).exists({ count: 11 }); @@ -100,6 +137,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('user can cancel tag removal', 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.tags); assert.dom(commonSelectors.TABLE_ROWS).exists({ count: 11 }); @@ -113,6 +159,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('user cannot remove a tag without proper permission', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.worker.authorized_actions = instances.worker.authorized_actions.filter( (item) => item !== 'remove-worker-tags', @@ -133,6 +188,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('users can edit a specific tag', 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.tags); const key = find(selectors.TABLE_ROW_API_TAG_KEY(4)).textContent.trim(); const value = find(selectors.TABLE_ROW_API_TAG_VALUE(4)).textContent.trim(); @@ -153,6 +217,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('users can cancel editing a tag', 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.tags); const key = find(selectors.TABLE_ROW_API_TAG_KEY(4)).textContent.trim(); const value = find(selectors.TABLE_ROW_API_TAG_VALUE(4)).textContent.trim(); @@ -173,6 +246,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('user cannot edit a tag without proper permission', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.worker.authorized_actions = instances.worker.authorized_actions.filter( (item) => item !== 'set-worker-tags', @@ -191,6 +273,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('user does not see tag action dropdown if they cannot edit or remove tags', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.worker.authorized_actions = instances.worker.authorized_actions.filter( (item) => item !== 'set-worker-tags' && item !== 'remove-worker-tags', @@ -202,6 +293,15 @@ module('Acceptance | workers | worker | tags', function (hooks) { }); test('shows "No tags added" message when there are no worker tags', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.worker.api_tags = {}; instances.worker.config_tags = {}; instances.worker.canonical_tags = {}; diff --git a/ui/desktop/tests/acceptance/authentication-test.js b/ui/desktop/tests/acceptance/authentication-test.js index 34af52648..75321171d 100644 --- a/ui/desktop/tests/acceptance/authentication-test.js +++ b/ui/desktop/tests/acceptance/authentication-test.js @@ -22,6 +22,7 @@ import { import WindowMockIPC from '../helpers/window-mock-ipc'; import Service from '@ember/service'; import sinon from 'sinon'; +import { setRunOptions } from 'ember-a11y-testing/test-support'; module('Acceptance | authentication', function (hooks) { setupApplicationTest(hooks); @@ -195,6 +196,15 @@ module('Acceptance | authentication', function (hooks) { }); test('signing out redirects to first global authenticate method', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(3); await visit(urls.authenticate.methods.global); @@ -214,6 +224,15 @@ module('Acceptance | authentication', function (hooks) { }); test('401 responses result in deauthentication', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(3); await authenticateSession({ scope: { diff --git a/ui/desktop/tests/acceptance/projects/sessions/index-test.js b/ui/desktop/tests/acceptance/projects/sessions/index-test.js index 768708add..a5cc0042d 100644 --- a/ui/desktop/tests/acceptance/projects/sessions/index-test.js +++ b/ui/desktop/tests/acceptance/projects/sessions/index-test.js @@ -21,6 +21,7 @@ import { STATUS_SESSION_TERMINATED, } from 'api/models/session'; import setupStubs from 'api/test-support/handlers/cache-daemon-search'; +import { setRunOptions } from 'ember-a11y-testing/test-support'; module('Acceptance | projects | sessions | index', function (hooks) { setupApplicationTest(hooks); @@ -175,6 +176,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('visiting index', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + const sessionsCount = this.server.schema.sessions.all().models.length; await visit(urls.projects); @@ -186,6 +196,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('visiting empty sessions', 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(); this.stubCacheDaemonSearch('sessions', 'sessions'); await visit(urls.projects); @@ -196,6 +215,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('visiting sessions without 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, + }, + }, + }); + instances.session.update({ targetId: undefined }); const sessionsCount = this.server.schema.sessions.all().models.length; await visit(urls.projects); @@ -207,6 +235,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('visiting 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.projects); await click(`[href="${urls.sessions}"]`); @@ -216,6 +253,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('can link to an active 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.projects); await click(`[href="${urls.sessions}"]`); @@ -227,6 +273,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('can link to an active session with read:self permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.update({ authorized_actions: ['read:self'] }); this.stubCacheDaemonSearch('sessions', 'sessions', 'targets'); await visit(urls.projects); @@ -239,6 +294,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('can link to a pending session', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.update({ status: STATUS_SESSION_PENDING }); this.stubCacheDaemonSearch('sessions', 'sessions', 'targets'); await visit(urls.projects); @@ -251,6 +315,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('can link to session even without read permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.update({ authorized_actions: [] }); this.stubCacheDaemonSearch('sessions', 'sessions', 'targets'); await visit(urls.projects); @@ -263,6 +336,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('cannot link to a canceling session', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.update({ status: STATUS_SESSION_CANCELING }); this.stubCacheDaemonSearch('sessions', 'sessions', 'targets'); await visit(urls.sessions); @@ -276,6 +358,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('cannot link to a terminated session', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.update({ status: STATUS_SESSION_TERMINATED }); this.stubCacheDaemonSearch('sessions', 'sessions', 'targets'); await visit(urls.sessions); @@ -288,6 +379,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('can cancel an active session with cancel permissions', 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.projects); await click(`[href="${urls.sessions}"]`); @@ -298,6 +398,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('can cancel an active session with cancel:self permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.update({ authorized_actions: ['cancel:self'] }); this.stubCacheDaemonSearch('sessions', 'sessions', 'targets'); await visit(urls.projects); @@ -310,6 +419,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('cannot click cancel button without cancel permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.update({ authorized_actions: [] }); this.stubCacheDaemonSearch('sessions', 'sessions', 'targets'); await visit(urls.sessions); @@ -320,6 +438,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('cancelling a session shows success alert', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.ipcStub.withArgs('stop'); await visit(urls.projects); @@ -332,6 +459,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('cancelling a session keeps you on the sessions list screen', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.ipcStub.withArgs('stop'); await visit(urls.projects); @@ -342,6 +478,15 @@ module('Acceptance | projects | sessions | index', 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, + }, + }, + }); + this.server.post('/sessions/:id_method', () => new Response(400)); await visit(urls.projects); @@ -354,6 +499,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('cancelling a session with ipc 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, + }, + }, + }); + this.ipcStub.withArgs('stop').throws(); await visit(urls.projects); @@ -366,6 +520,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('user can change org scope and only sessions for that org will be displayed', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.stubCacheDaemonSearch( 'sessions', 'sessions', @@ -403,6 +566,15 @@ module('Acceptance | projects | sessions | index', function (hooks) { }); test('sessions list view still loads with no cache daemon', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.ipcStub.withArgs('isCacheDaemonRunning').returns(false); this.stubCacheDaemonSearch(); const sessionsCount = this.server.schema.sessions.all().models.length; diff --git a/ui/desktop/tests/acceptance/projects/sessions/session-test.js b/ui/desktop/tests/acceptance/projects/sessions/session-test.js index 50ea1a5fc..39475ec4c 100644 --- a/ui/desktop/tests/acceptance/projects/sessions/session-test.js +++ b/ui/desktop/tests/acceptance/projects/sessions/session-test.js @@ -14,6 +14,7 @@ import { authenticateSession } from 'ember-simple-auth/test-support'; import WindowMockIPC from '../../../helpers/window-mock-ipc'; import { STATUS_SESSION_ACTIVE } from 'api/models/session'; import setupStubs from 'api/test-support/handlers/cache-daemon-search'; +import { setRunOptions } from 'ember-a11y-testing/test-support'; module('Acceptance | projects | sessions | session', function (hooks) { setupApplicationTest(hooks); @@ -125,6 +126,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('visiting session detail', 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); await visit(urls.session); @@ -133,6 +143,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('visiting session with no credentials', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(4); this.ipcStub.withArgs('cliExists').returns(true); this.ipcStub.withArgs('connect').returns({ @@ -154,6 +173,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('visiting session with vault type credentials should display nested data in a key/value format without escape characters', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.ipcStub.withArgs('cliExists').returns(true); this.ipcStub.withArgs('connect').returns({ session_id: instances.session.id, @@ -217,6 +245,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('visiting session with static type credentials should display nested data in a key/value format without escape characters', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.ipcStub.withArgs('cliExists').returns(true); this.ipcStub.withArgs('connect').returns({ session_id: instances.session.id, @@ -266,6 +303,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('visiting a session that does not have permissions to read a host', 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.get('/hosts/:id', () => new Response(403)); this.ipcStub.withArgs('cliExists').returns(true); @@ -284,6 +330,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('visiting a session that does not have read permissions but a successful connect', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(2); // verifies second call to sessions/:id is also a 403 QUnit.onUncaughtException = (err) => { @@ -307,6 +362,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('can cancel a session with cancel:self permissions', 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.session.update({ authorized_actions: ['cancel:self'] }); @@ -316,6 +380,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('cannot cancel a session without cancel permissions', 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.session.update({ authorized_actions: [] }); @@ -325,6 +398,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('cancelling a session shows success alert', 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); await visit(urls.session); @@ -336,6 +418,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('cancelling a session takes you to the targets list screen', 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); await visit(urls.session); @@ -345,6 +436,15 @@ module('Acceptance | projects | sessions | session', 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, + }, + }, + }); + assert.expect(1); this.server.post('/sessions/:id_method', () => new Response(400)); @@ -357,6 +457,15 @@ module('Acceptance | projects | sessions | session', function (hooks) { }); test('cancelling a session with ipc 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, + }, + }, + }); + assert.expect(1); this.ipcStub.withArgs('stop').throws(); diff --git a/ui/desktop/tests/acceptance/projects/settings/index-test.js b/ui/desktop/tests/acceptance/projects/settings/index-test.js index 6e1eeb341..14d81167e 100644 --- a/ui/desktop/tests/acceptance/projects/settings/index-test.js +++ b/ui/desktop/tests/acceptance/projects/settings/index-test.js @@ -19,6 +19,7 @@ import { } from 'ember-simple-auth/test-support'; import WindowMockIPC from '../../../helpers/window-mock-ipc'; import setupStubs from 'api/test-support/handlers/cache-daemon-search'; +import { setRunOptions } from 'ember-a11y-testing/test-support'; module('Acceptance | projects | settings | index', function (hooks) { setupApplicationTest(hooks); @@ -105,12 +106,40 @@ module('Acceptance | projects | settings | index', function (hooks) { }); test('can navigate to the settings page', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + await visit(urls.projects); await click(`[href="${urls.settings}"]`); assert.strictEqual(currentURL(), urls.settings); }); test('color theme is applied from session data', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + await visit(urls.settings); // system default @@ -141,6 +170,21 @@ module('Acceptance | projects | settings | index', function (hooks) { }); test('clicking signout button logs out the user', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + + 'heading-order': { + // [ember-a11y-ignore]: axe rule "heading-order" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + + await authenticateSession({ username: 'testuser' }); assert.expect(2); await authenticateSession({ username: 'testuser' }); diff --git a/ui/desktop/tests/acceptance/projects/targets/index-test.js b/ui/desktop/tests/acceptance/projects/targets/index-test.js index fa3d8378b..5cab4c301 100644 --- a/ui/desktop/tests/acceptance/projects/targets/index-test.js +++ b/ui/desktop/tests/acceptance/projects/targets/index-test.js @@ -19,6 +19,7 @@ import { currentSession, } from 'ember-simple-auth/test-support'; import setupStubs from 'api/test-support/handlers/cache-daemon-search'; +import { setRunOptions } from 'ember-a11y-testing/test-support'; module('Acceptance | projects | targets | index', function (hooks) { setupApplicationTest(hooks); @@ -173,6 +174,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('visiting targets index', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + const targetsCount = getTargetCount(); await visit(urls.projects); @@ -184,6 +194,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('visiting a 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.projects); await click(`[href="${urls.targets}"]`); @@ -208,6 +227,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user cannot navigate to a 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, + }, + }, + }); + instances.target.authorized_actions = instances.target.authorized_actions.filter((item) => item !== 'read'); this.stubCacheDaemonSearch('sessions', 'targets', 'aliases'); @@ -222,6 +250,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user can connect to a target 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.projects); await click(`[href="${urls.targets}"]`); @@ -235,6 +272,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user cannot connect to a 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, + }, + }, + }); + instances.target.authorized_actions = instances.target.authorized_actions.filter( (item) => item !== 'authorize-session', @@ -254,6 +300,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user is redirected to target details page when unable to connect from list view if they have read and authorize-session permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.ipcStub.withArgs('cliExists').returns(true); this.ipcStub.withArgs('connect').rejects(); const confirmService = this.owner.lookup('service:confirm'); @@ -269,6 +324,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user can connect without target read permissions', 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 !== 'read'); this.stubCacheDaemonSearch('sessions', 'targets', 'aliases'); @@ -293,6 +357,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user can retry connect without target read permissions', 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 !== 'read'); this.ipcStub.withArgs('cliExists').returns(true); @@ -314,6 +387,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user can open sessions flyout when target has active or pending 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.projects); await click(`[href="${urls.targets}"]`); @@ -337,6 +419,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user can cancel a session from inside target sessions flyout', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.stubCacheDaemonSearch( 'sessions', 'targets', @@ -374,6 +465,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user cannot cancel a session from inside target sessions flyout without permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.authorized_actions = instances.session.authorized_actions.filter((item) => item !== 'cancel'); this.stubCacheDaemonSearch('sessions', 'targets', 'aliases'); @@ -395,6 +495,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user can navigate to session details from sessions table in flyout', 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.projects); await click(`[href="${urls.targets}"]`); @@ -412,6 +521,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user can navigate to session details from sessions table in flyout without permissions', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + instances.session.authorized_actions = instances.session.authorized_actions.filter((item) => item !== 'read'); this.stubCacheDaemonSearch('sessions', 'targets', 'aliases'); @@ -435,6 +553,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('user can change org scope and only targets for that org will be displayed', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.stubCacheDaemonSearch( 'sessions', 'targets', @@ -468,6 +595,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('targets list view still loads with no cache daemon', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + this.ipcStub.withArgs('isCacheDaemonRunning').returns(false); this.stubCacheDaemonSearch(); const targetsCount = getTargetCount(); @@ -482,6 +618,15 @@ module('Acceptance | projects | targets | index', function (hooks) { }); test('target includes aliases', 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.projects); await click(`[href="${urls.targets}"]`); diff --git a/ui/desktop/tests/acceptance/projects/targets/target-test.js b/ui/desktop/tests/acceptance/projects/targets/target-test.js index 257d00014..419e299f5 100644 --- a/ui/desktop/tests/acceptance/projects/targets/target-test.js +++ b/ui/desktop/tests/acceptance/projects/targets/target-test.js @@ -18,6 +18,7 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; import WindowMockIPC from '../../../helpers/window-mock-ipc'; import setupStubs from 'api/test-support/handlers/cache-daemon-search'; +import { setRunOptions } from 'ember-a11y-testing/test-support'; module('Acceptance | projects | targets | target', function (hooks) { setupApplicationTest(hooks); @@ -159,6 +160,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can connect to a target with an address', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(3); this.ipcStub.withArgs('cliExists').returns(true); this.ipcStub.withArgs('connect').returns({ @@ -180,6 +190,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('handles cli error on connect', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(4); this.ipcStub.withArgs('cliExists').returns(true); const confirmService = this.owner.lookup('service:confirm'); @@ -196,6 +215,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('handles connect error', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(4); this.ipcStub.withArgs('cliExists').returns(true); this.ipcStub.withArgs('connect').rejects(); @@ -233,6 +261,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can connect to a target with one host', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(2); this.ipcStub.withArgs('cliExists').returns(true); this.ipcStub.withArgs('connect').returns({ @@ -253,6 +290,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can search for a host source by name, description, and address', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + const host1 = instances.targetWithTwoHosts.hostSets.models[0].hosts.models[0]; const host2 = @@ -293,6 +339,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can search for host sources 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.targets); await click(`[href="${urls.targetWithTwoHosts}"]`); @@ -305,6 +360,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can see host source table when visiting a target via resource link', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + const targetId = instances.targetWithTwoHosts.id; await visit(urls.targets); @@ -314,6 +378,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can see host source table when visiting a target via connect button', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + const targetId = instances.targetWithTwoHosts.id; await visit(urls.targets); @@ -323,6 +396,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can connect to a target with two hosts using host source table', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + const hostId = instances.targetWithTwoHosts.hostSets.models[0].hosts.models[0].id; @@ -359,6 +441,15 @@ module('Acceptance | projects | targets | target', 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, + }, + }, + }); + await visit(urls.targets); await click(`[href="${urls[input.target]}"]`); @@ -368,6 +459,15 @@ module('Acceptance | projects | targets | target', function (hooks) { ); test('user can use table pagination to see more 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.targets); await click(`[href="${urls.targetWithManyHosts}"]`); @@ -380,6 +480,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can change page size', 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(`[href="${urls.targetWithManyHosts}"]`); @@ -391,6 +500,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can visit target details screen without read permissions for host-set', 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.get('/host-sets/:id', () => new Response(403)); @@ -402,6 +520,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can visit target details screen without read permissions for host', 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.get('/hosts/:id', () => new Response(403)); @@ -413,6 +540,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can visit target details and should not see the associated aliases if there are none', 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(`[href="${urls.targetWithOneHost}"]`); @@ -422,6 +558,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can visit target details and see the associated aliases', 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.targetWithOneHost.update({ aliases: [{ id: instances.alias.id, value: instances.alias.value }], @@ -432,6 +577,15 @@ module('Acceptance | projects | targets | target', function (hooks) { assert.dom('.aliases').exists(); }); test('user can connect to a target without read permissions for host-set', 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.get('/host-sets/:id', () => new Response(403)); this.ipcStub.withArgs('cliExists').returns(true); @@ -451,6 +605,15 @@ module('Acceptance | projects | targets | target', function (hooks) { }); test('user can connect to a target without read permissions for host', 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.get('/hosts/:id', () => new Response(403)); this.ipcStub.withArgs('cliExists').returns(true); diff --git a/ui/desktop/tests/acceptance/scopes-test.js b/ui/desktop/tests/acceptance/scopes-test.js index 84f13e9db..8e866ddbc 100644 --- a/ui/desktop/tests/acceptance/scopes-test.js +++ b/ui/desktop/tests/acceptance/scopes-test.js @@ -22,6 +22,7 @@ import { } from 'ember-simple-auth/test-support'; import WindowMockIPC from '../helpers/window-mock-ipc'; import setupStubs from 'api/test-support/handlers/cache-daemon-search'; +import { setRunOptions } from 'ember-a11y-testing/test-support'; module('Acceptance | scopes', function (hooks) { setupApplicationTest(hooks); @@ -146,6 +147,15 @@ module('Acceptance | scopes', function (hooks) { }); test('visiting index', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(2); const targetsCount = this.server.schema.targets.all().models.length; @@ -156,6 +166,15 @@ module('Acceptance | scopes', function (hooks) { }); test('visiting global scope', 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); await visit(urls.scopes.global); @@ -168,6 +187,15 @@ module('Acceptance | scopes', function (hooks) { // In order to resolve this, we might hoist authentication routes up from // under scopes. test('visiting global scope is not successful when the global scope cannot be fetched', 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.get('/scopes/:id', ({ scopes }, { params: { id } }) => { const scope = scopes.find(id); @@ -181,6 +209,15 @@ module('Acceptance | scopes', function (hooks) { }); test('visiting org scope', 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); await visit(urls.scopes.org); @@ -189,6 +226,15 @@ module('Acceptance | scopes', function (hooks) { }); test('can navigate among org scopes via header navigation', async function (assert) { + setRunOptions({ + rules: { + 'color-contrast': { + // [ember-a11y-ignore]: axe rule "color-contrast" automatically ignored on 2025-08-01 + enabled: false, + }, + }, + }); + assert.expect(3); this.stubCacheDaemonSearch( 'sessions', @@ -233,6 +279,15 @@ module('Acceptance | scopes', function (hooks) { }); test('visiting a target', 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); await visit(urls.targets);