open-nomad/ui/tests/acceptance/regions-test.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

232 lines
7.3 KiB
JavaScript
Raw Normal View History

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
/* eslint-disable qunit/require-expect */
/* eslint-disable qunit/no-conditional-assertions */
2019-03-13 00:08:16 +00:00
import { currentURL } from '@ember/test-helpers';
2019-03-13 00:04:16 +00:00
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
import { selectChoose } from 'ember-power-select/test-support';
2019-09-26 18:47:07 +00:00
import { setupMirage } from 'ember-cli-mirage/test-support';
import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit';
import JobsList from 'nomad-ui/tests/pages/jobs/list';
import ClientsList from 'nomad-ui/tests/pages/clients/list';
import Layout from 'nomad-ui/tests/pages/layout';
import Allocation from 'nomad-ui/tests/pages/allocations/detail';
2021-12-28 14:45:20 +00:00
module('Acceptance | regions (only one)', function (hooks) {
2019-03-13 00:04:16 +00:00
setupApplicationTest(hooks);
2019-03-13 01:09:19 +00:00
setupMirage(hooks);
2019-03-13 00:04:16 +00:00
2021-12-28 14:45:20 +00:00
hooks.beforeEach(function () {
server.create('agent');
server.create('node-pool');
server.create('node');
2021-12-28 16:08:12 +00:00
server.createList('job', 2, {
createAllocations: false,
noDeployments: true,
});
2019-03-13 00:04:16 +00:00
});
2021-12-28 14:45:20 +00:00
test('it passes an accessibility audit', async function (assert) {
await JobsList.visit();
await a11yAudit(assert);
});
2021-12-28 14:45:20 +00:00
test('when there is only one region, the region switcher is not shown in the nav bar and the region is not in the page title', async function (assert) {
2019-03-13 00:04:16 +00:00
server.create('region', { id: 'global' });
await JobsList.visit();
assert.notOk(Layout.navbar.regionSwitcher.isPresent, 'No region switcher');
assert.ok(document.title.includes('Jobs'));
});
2021-12-28 14:45:20 +00:00
test('when the only region is not named "global", the region switcher still is not shown', async function (assert) {
2019-03-13 00:04:16 +00:00
server.create('region', { id: 'some-region' });
await JobsList.visit();
assert.notOk(Layout.navbar.regionSwitcher.isPresent, 'No region switcher');
});
2021-12-28 14:45:20 +00:00
test('pages do not include the region query param', async function (assert) {
2019-03-13 00:04:16 +00:00
server.create('region', { id: 'global' });
await JobsList.visit();
assert.equal(currentURL(), '/jobs', 'No region query param');
const jobId = JobsList.jobs.objectAt(0).id;
await JobsList.jobs.objectAt(0).clickRow();
assert.equal(
currentURL(),
`/jobs/${jobId}@default`,
'No region query param'
);
await ClientsList.visit();
assert.equal(currentURL(), '/clients', 'No region query param');
});
2021-12-28 14:45:20 +00:00
test('api requests do not include the region query param', async function (assert) {
2019-03-13 00:04:16 +00:00
server.create('region', { id: 'global' });
await JobsList.visit();
await JobsList.jobs.objectAt(0).clickRow();
await Layout.gutter.visitClients();
await Layout.gutter.visitServers();
2021-12-28 14:45:20 +00:00
server.pretender.handledRequests.forEach((req) => {
assert.notOk(req.url.includes('region='), req.url);
});
});
});
2021-12-28 14:45:20 +00:00
module('Acceptance | regions (many)', function (hooks) {
2019-03-13 00:04:16 +00:00
setupApplicationTest(hooks);
setupMirage(hooks);
2019-03-13 00:04:16 +00:00
2021-12-28 14:45:20 +00:00
hooks.beforeEach(function () {
server.create('agent');
server.create('node-pool');
server.create('node');
2021-12-28 16:08:12 +00:00
server.createList('job', 2, {
createAllocations: false,
noDeployments: true,
});
server.create('allocation');
server.create('region', { id: 'global' });
server.create('region', { id: 'region-2' });
2019-03-13 00:04:16 +00:00
});
2021-12-28 14:45:20 +00:00
test('the region switcher is rendered in the nav bar and the region is in the page title', async function (assert) {
await JobsList.visit();
2021-12-28 16:08:12 +00:00
assert.ok(
Layout.navbar.regionSwitcher.isPresent,
'Region switcher is shown'
);
assert.ok(document.title.includes('Jobs - global'));
});
2021-12-28 14:45:20 +00:00
test('when on the default region, pages do not include the region query param', async function (assert) {
await JobsList.visit();
assert.equal(currentURL(), '/jobs', 'No region query param');
2021-12-28 16:08:12 +00:00
assert.equal(
window.localStorage.nomadActiveRegion,
'global',
'Region in localStorage'
);
});
2021-12-28 14:45:20 +00:00
test('switching regions sets localStorage and the region query param', async function (assert) {
2019-03-13 00:04:16 +00:00
const newRegion = server.db.regions[1].id;
await JobsList.visit();
await selectChoose('[data-test-region-switcher-parent]', newRegion);
assert.ok(
currentURL().includes(`region=${newRegion}`),
'New region is the region query param value'
);
2021-12-28 16:08:12 +00:00
assert.equal(
window.localStorage.nomadActiveRegion,
newRegion,
'New region in localStorage'
);
});
2021-12-28 14:45:20 +00:00
test('switching regions to the default region, unsets the region query param', async function (assert) {
2019-03-13 00:04:16 +00:00
const startingRegion = server.db.regions[1].id;
const defaultRegion = server.db.regions[0].id;
await JobsList.visit({ region: startingRegion });
await selectChoose('[data-test-region-switcher-parent]', defaultRegion);
2021-12-28 16:08:12 +00:00
assert.notOk(
currentURL().includes('region='),
'No region query param for the default region'
);
assert.equal(
window.localStorage.nomadActiveRegion,
defaultRegion,
'New region in localStorage'
);
});
2021-12-28 14:45:20 +00:00
test('switching regions on deep pages redirects to the application root', async function (assert) {
2019-03-13 00:04:16 +00:00
const newRegion = server.db.regions[1].id;
await Allocation.visit({ id: server.db.allocations[0].id });
await selectChoose('[data-test-region-switcher-parent]', newRegion);
assert.ok(currentURL().includes('/jobs?'), 'Back at the jobs page');
});
2021-12-28 14:45:20 +00:00
test('navigating directly to a page with the region query param sets the application to that region', async function (assert) {
2019-03-13 00:04:16 +00:00
const allocation = server.db.allocations[0];
const region = server.db.regions[1].id;
await Allocation.visit({ id: allocation.id, region });
assert.equal(
currentURL(),
`/allocations/${allocation.id}?region=${region}`,
'Region param is persisted when navigating straight to a detail page'
);
assert.equal(
window.localStorage.nomadActiveRegion,
region,
'Region is also set in localStorage from a detail page'
);
});
2021-12-28 14:45:20 +00:00
test('when the region is not the default region, all api requests other than the agent/self request include the region query param', async function (assert) {
window.localStorage.removeItem('nomadTokenSecret');
2019-03-13 00:04:16 +00:00
const region = server.db.regions[1].id;
await JobsList.visit({ region });
await JobsList.jobs.objectAt(0).clickRow();
await Layout.gutter.visitClients();
await Layout.gutter.visitServers();
[ui] ACL Roles in the UI, plus Role, Policy and Token management (#17770) (#18599) * Rename pages to include roles * Models and adapters * [ui] Any policy checks in the UI now check for roles' policies as well as token policies (#18346) * combinedPolicies as a concept * Classic decorator on role adapter * We added a new request for roles, so the test based on a specific order of requests got fickle fast * Mirage roles cluster scaffolded * Acceptance test for roles and policies on the login page * Update mirage mock for nodes fetch to account for role policies / empty token.policies * Roles-derived policies checks * [ui] Access Control with Roles and Tokens (#18413) * top level policies routes moved into access control * A few more routes and name cleanup * Delog and test fixes to account for new url prefix and document titles * Overview page * Tokens and Roles routes * Tokens helios table * Add a role * Hacky role page and deletion * New policy keyboard shortcut and roles breadcrumb nav * If you leave New Role but havent made any changes, remove the newly-created record from store * Roles index list and general role route crud * Roles index actually links to roles now * Helios button styles for new roles and policies * Handle when you try to create a new role without having any policies * Token editing generally * Create Token functionality * Cant delete self-token but management token editing and deleting is fine * Upgrading helios caused codemirror to explode, shimmed * Policies table fix * without bang-element condition, modifier would refire over and over * Token TTL or Time setting * time will take you on * Mirage hooks for create and list roles * Ensure policy names only use allow characters in mirage mocks * Mirage mocked roles and policies in the default cluster * log and lintfix * chromedriver to 2.1.2 * unused unit tests removed * Nice profile dropdown * With the HDS accordion, rename our internal component scss ref * design revisions after discussion * Tooltip on deleted-policy tokens * Two-step button peripheral isDeleting gcode removed * Never to null on token save * copywrite headers added and empty routefiles removed * acceptance test fixes for policies endpoint * Route for updating a token * Policies testfixes * Ember on-click-outside modifier upgraded with general ember-modifier upgrade * Test adjustments to account for new profile header dropdown * Test adjustments for tokens via policy pages * Removed an unused route * Access Control index page tests * a11y tests * Tokens index acceptance tests generally * Lintfix * Token edit page tests * Token editing tests * New token expiration tests * Roles Index tests * Role editing policies tests * A complete set of Access Control Roles tests * Policies test * Be more specific about which row to check for expiration time * Nil check on expirationTime equality * Management tokens shouldnt show No Roles/Policies, give them their own designation * Route guard on selftoken, conditional columns, and afterModel at parent to prevent orphaned policies on tokens/roles from stopping a new save * Policy unloading on delete and other todos plus autofocus conditionally re-enabled * Invalid policies non-links now a concept for Roles index * HDS style links to make job.variables.alert links look like links again * Mirage finding looks weird so making model async in hash even though redundant * Drop rsvp * RSVP wasnt the problem, cached lookups were * remove old todo comments * de-log
2023-09-27 21:02:48 +00:00
const regionsRequest = server.pretender.handledRequests.find((req) =>
req.responseURL.includes('/v1/regions')
);
const licenseRequest = server.pretender.handledRequests.find((req) =>
req.responseURL.includes('/v1/operator/license')
);
const appRequests = server.pretender.handledRequests.filter(
(req) =>
!req.responseURL.includes('/v1/regions') &&
!req.responseURL.includes('/v1/operator/license')
);
assert.notOk(
regionsRequest.url.includes('region='),
'The regions request is made without a region qp'
);
assert.notOk(
[ui] ACL Roles in the UI, plus Role, Policy and Token management (#17770) (#18599) * Rename pages to include roles * Models and adapters * [ui] Any policy checks in the UI now check for roles' policies as well as token policies (#18346) * combinedPolicies as a concept * Classic decorator on role adapter * We added a new request for roles, so the test based on a specific order of requests got fickle fast * Mirage roles cluster scaffolded * Acceptance test for roles and policies on the login page * Update mirage mock for nodes fetch to account for role policies / empty token.policies * Roles-derived policies checks * [ui] Access Control with Roles and Tokens (#18413) * top level policies routes moved into access control * A few more routes and name cleanup * Delog and test fixes to account for new url prefix and document titles * Overview page * Tokens and Roles routes * Tokens helios table * Add a role * Hacky role page and deletion * New policy keyboard shortcut and roles breadcrumb nav * If you leave New Role but havent made any changes, remove the newly-created record from store * Roles index list and general role route crud * Roles index actually links to roles now * Helios button styles for new roles and policies * Handle when you try to create a new role without having any policies * Token editing generally * Create Token functionality * Cant delete self-token but management token editing and deleting is fine * Upgrading helios caused codemirror to explode, shimmed * Policies table fix * without bang-element condition, modifier would refire over and over * Token TTL or Time setting * time will take you on * Mirage hooks for create and list roles * Ensure policy names only use allow characters in mirage mocks * Mirage mocked roles and policies in the default cluster * log and lintfix * chromedriver to 2.1.2 * unused unit tests removed * Nice profile dropdown * With the HDS accordion, rename our internal component scss ref * design revisions after discussion * Tooltip on deleted-policy tokens * Two-step button peripheral isDeleting gcode removed * Never to null on token save * copywrite headers added and empty routefiles removed * acceptance test fixes for policies endpoint * Route for updating a token * Policies testfixes * Ember on-click-outside modifier upgraded with general ember-modifier upgrade * Test adjustments to account for new profile header dropdown * Test adjustments for tokens via policy pages * Removed an unused route * Access Control index page tests * a11y tests * Tokens index acceptance tests generally * Lintfix * Token edit page tests * Token editing tests * New token expiration tests * Roles Index tests * Role editing policies tests * A complete set of Access Control Roles tests * Policies test * Be more specific about which row to check for expiration time * Nil check on expirationTime equality * Management tokens shouldnt show No Roles/Policies, give them their own designation * Route guard on selftoken, conditional columns, and afterModel at parent to prevent orphaned policies on tokens/roles from stopping a new save * Policy unloading on delete and other todos plus autofocus conditionally re-enabled * Invalid policies non-links now a concept for Roles index * HDS style links to make job.variables.alert links look like links again * Mirage finding looks weird so making model async in hash even though redundant * Drop rsvp * RSVP wasnt the problem, cached lookups were * remove old todo comments * de-log
2023-09-27 21:02:48 +00:00
licenseRequest.url.includes('region='),
'The default region request is made without a region qp'
);
2021-12-28 14:45:20 +00:00
appRequests.forEach((req) => {
[ui] ACL Roles in the UI, plus Role, Policy and Token management (#17770) (#18599) * Rename pages to include roles * Models and adapters * [ui] Any policy checks in the UI now check for roles' policies as well as token policies (#18346) * combinedPolicies as a concept * Classic decorator on role adapter * We added a new request for roles, so the test based on a specific order of requests got fickle fast * Mirage roles cluster scaffolded * Acceptance test for roles and policies on the login page * Update mirage mock for nodes fetch to account for role policies / empty token.policies * Roles-derived policies checks * [ui] Access Control with Roles and Tokens (#18413) * top level policies routes moved into access control * A few more routes and name cleanup * Delog and test fixes to account for new url prefix and document titles * Overview page * Tokens and Roles routes * Tokens helios table * Add a role * Hacky role page and deletion * New policy keyboard shortcut and roles breadcrumb nav * If you leave New Role but havent made any changes, remove the newly-created record from store * Roles index list and general role route crud * Roles index actually links to roles now * Helios button styles for new roles and policies * Handle when you try to create a new role without having any policies * Token editing generally * Create Token functionality * Cant delete self-token but management token editing and deleting is fine * Upgrading helios caused codemirror to explode, shimmed * Policies table fix * without bang-element condition, modifier would refire over and over * Token TTL or Time setting * time will take you on * Mirage hooks for create and list roles * Ensure policy names only use allow characters in mirage mocks * Mirage mocked roles and policies in the default cluster * log and lintfix * chromedriver to 2.1.2 * unused unit tests removed * Nice profile dropdown * With the HDS accordion, rename our internal component scss ref * design revisions after discussion * Tooltip on deleted-policy tokens * Two-step button peripheral isDeleting gcode removed * Never to null on token save * copywrite headers added and empty routefiles removed * acceptance test fixes for policies endpoint * Route for updating a token * Policies testfixes * Ember on-click-outside modifier upgraded with general ember-modifier upgrade * Test adjustments to account for new profile header dropdown * Test adjustments for tokens via policy pages * Removed an unused route * Access Control index page tests * a11y tests * Tokens index acceptance tests generally * Lintfix * Token edit page tests * Token editing tests * New token expiration tests * Roles Index tests * Role editing policies tests * A complete set of Access Control Roles tests * Policies test * Be more specific about which row to check for expiration time * Nil check on expirationTime equality * Management tokens shouldnt show No Roles/Policies, give them their own designation * Route guard on selftoken, conditional columns, and afterModel at parent to prevent orphaned policies on tokens/roles from stopping a new save * Policy unloading on delete and other todos plus autofocus conditionally re-enabled * Invalid policies non-links now a concept for Roles index * HDS style links to make job.variables.alert links look like links again * Mirage finding looks weird so making model async in hash even though redundant * Drop rsvp * RSVP wasnt the problem, cached lookups were * remove old todo comments * de-log
2023-09-27 21:02:48 +00:00
if (
req.url === '/v1/agent/self' ||
req.url === '/v1/acl/token/self' ||
req.url === '/v1/agent/members'
) {
assert.notOk(req.url.includes('region='), `(no region) ${req.url}`);
} else {
assert.ok(req.url.includes(`region=${region}`), req.url);
}
});
});
});