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';
|
2019-03-14 06:44:53 +00:00
|
|
|
import { selectChoose } from 'ember-power-select/test-support';
|
2019-09-26 18:47:07 +00:00
|
|
|
import { setupMirage } from 'ember-cli-mirage/test-support';
|
2020-07-28 17:59:14 +00:00
|
|
|
import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit';
|
2018-08-10 18:20:44 +00:00
|
|
|
import JobsList from 'nomad-ui/tests/pages/jobs/list';
|
|
|
|
import ClientsList from 'nomad-ui/tests/pages/clients/list';
|
|
|
|
import PageLayout from 'nomad-ui/tests/pages/layout';
|
|
|
|
import Allocation from 'nomad-ui/tests/pages/allocations/detail';
|
|
|
|
|
2019-03-13 00:04:16 +00:00
|
|
|
module('Acceptance | regions (only one)', function(hooks) {
|
|
|
|
setupApplicationTest(hooks);
|
2019-03-13 01:09:19 +00:00
|
|
|
setupMirage(hooks);
|
2019-03-13 00:04:16 +00:00
|
|
|
|
|
|
|
hooks.beforeEach(function() {
|
2018-08-10 18:20:44 +00:00
|
|
|
server.create('agent');
|
|
|
|
server.create('node');
|
2019-04-12 03:08:43 +00:00
|
|
|
server.createList('job', 2, { createAllocations: false, noDeployments: true });
|
2019-03-13 00:04:16 +00:00
|
|
|
});
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2020-07-28 17:59:14 +00:00
|
|
|
test('it passes an accessibility audit', async function(assert) {
|
|
|
|
await JobsList.visit();
|
|
|
|
await a11yAudit();
|
|
|
|
assert.ok(true, 'a11y audit passes');
|
|
|
|
});
|
|
|
|
|
2019-07-17 20:02:58 +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' });
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.visit();
|
2018-08-10 18:20:44 +00:00
|
|
|
|
|
|
|
assert.notOk(PageLayout.navbar.regionSwitcher.isPresent, 'No region switcher');
|
2019-07-17 20:02:58 +00:00
|
|
|
assert.equal(document.title, 'Jobs - Nomad');
|
2018-08-10 18:20:44 +00:00
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +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' });
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.visit();
|
2018-08-10 18:20:44 +00:00
|
|
|
|
|
|
|
assert.notOk(PageLayout.navbar.regionSwitcher.isPresent, 'No region switcher');
|
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +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' });
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.visit();
|
2018-08-10 18:20:44 +00:00
|
|
|
assert.equal(currentURL(), '/jobs', 'No region query param');
|
2019-03-14 06:44:53 +00:00
|
|
|
|
|
|
|
const jobId = JobsList.jobs.objectAt(0).id;
|
|
|
|
await JobsList.jobs.objectAt(0).clickRow();
|
2018-08-10 18:20:44 +00:00
|
|
|
assert.equal(currentURL(), `/jobs/${jobId}`, 'No region query param');
|
2019-03-14 06:44:53 +00:00
|
|
|
|
|
|
|
await ClientsList.visit();
|
2018-08-10 18:20:44 +00:00
|
|
|
assert.equal(currentURL(), '/clients', 'No region query param');
|
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +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' });
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.visit();
|
|
|
|
await JobsList.jobs.objectAt(0).clickRow();
|
|
|
|
await PageLayout.gutter.visitClients();
|
|
|
|
await PageLayout.gutter.visitServers();
|
2018-08-10 18:20:44 +00:00
|
|
|
server.pretender.handledRequests.forEach(req => {
|
|
|
|
assert.notOk(req.url.includes('region='), req.url);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2019-03-13 00:04:16 +00:00
|
|
|
module('Acceptance | regions (many)', function(hooks) {
|
|
|
|
setupApplicationTest(hooks);
|
2019-03-14 06:44:53 +00:00
|
|
|
setupMirage(hooks);
|
2019-03-13 00:04:16 +00:00
|
|
|
|
|
|
|
hooks.beforeEach(function() {
|
2018-08-10 18:20:44 +00:00
|
|
|
server.create('agent');
|
|
|
|
server.create('node');
|
2019-04-12 03:08:43 +00:00
|
|
|
server.createList('job', 2, { createAllocations: false, noDeployments: true });
|
|
|
|
server.create('allocation');
|
2018-08-10 18:20:44 +00:00
|
|
|
server.create('region', { id: 'global' });
|
|
|
|
server.create('region', { id: 'region-2' });
|
2019-03-13 00:04:16 +00:00
|
|
|
});
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-07-17 20:02:58 +00:00
|
|
|
test('the region switcher is rendered in the nav bar and the region is in the page title', async function(assert) {
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.visit();
|
2018-08-10 18:20:44 +00:00
|
|
|
|
|
|
|
assert.ok(PageLayout.navbar.regionSwitcher.isPresent, 'Region switcher is shown');
|
2019-07-17 20:02:58 +00:00
|
|
|
assert.equal(document.title, 'Jobs - global - Nomad');
|
2018-08-10 18:20:44 +00:00
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
test('when on the default region, pages do not include the region query param', async function(assert) {
|
|
|
|
await JobsList.visit();
|
2018-08-10 18:20:44 +00:00
|
|
|
|
|
|
|
assert.equal(currentURL(), '/jobs', 'No region query param');
|
|
|
|
assert.equal(window.localStorage.nomadActiveRegion, 'global', 'Region in localStorage');
|
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +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;
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.visit();
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await selectChoose('[data-test-region-switcher]', newRegion);
|
2018-08-10 18:20:44 +00:00
|
|
|
|
|
|
|
assert.ok(
|
|
|
|
currentURL().includes(`region=${newRegion}`),
|
|
|
|
'New region is the region query param value'
|
|
|
|
);
|
|
|
|
assert.equal(window.localStorage.nomadActiveRegion, newRegion, 'New region in localStorage');
|
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +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;
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.visit({ region: startingRegion });
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await selectChoose('[data-test-region-switcher]', defaultRegion);
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2018-08-13 23:18:06 +00:00
|
|
|
assert.notOk(currentURL().includes('region='), 'No region query param for the default region');
|
2018-08-10 18:20:44 +00:00
|
|
|
assert.equal(
|
|
|
|
window.localStorage.nomadActiveRegion,
|
|
|
|
defaultRegion,
|
|
|
|
'New region in localStorage'
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +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;
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await Allocation.visit({ id: server.db.allocations[0].id });
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await selectChoose('[data-test-region-switcher]', newRegion);
|
2018-08-10 18:20:44 +00:00
|
|
|
|
|
|
|
assert.ok(currentURL().includes('/jobs?'), 'Back at the jobs page');
|
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +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;
|
2019-03-14 06:44:53 +00:00
|
|
|
await Allocation.visit({ id: allocation.id, region });
|
2018-08-10 18:20:44 +00:00
|
|
|
|
|
|
|
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'
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
test('when the region is not the default region, all api requests include the region query param', async function(assert) {
|
2020-01-20 20:57:01 +00:00
|
|
|
window.localStorage.removeItem('nomadTokenSecret');
|
2019-03-13 00:04:16 +00:00
|
|
|
const region = server.db.regions[1].id;
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.visit({ region });
|
2018-08-10 18:20:44 +00:00
|
|
|
|
2019-03-14 06:44:53 +00:00
|
|
|
await JobsList.jobs.objectAt(0).clickRow();
|
|
|
|
await PageLayout.gutter.visitClients();
|
|
|
|
await PageLayout.gutter.visitServers();
|
2020-01-20 20:57:01 +00:00
|
|
|
const [
|
|
|
|
,
|
|
|
|
regionsRequest,
|
|
|
|
defaultRegionRequest,
|
|
|
|
...appRequests
|
|
|
|
] = server.pretender.handledRequests;
|
2018-08-10 18:20:44 +00:00
|
|
|
|
|
|
|
assert.notOk(
|
|
|
|
regionsRequest.url.includes('region='),
|
|
|
|
'The regions request is made without a region qp'
|
|
|
|
);
|
|
|
|
assert.notOk(
|
|
|
|
defaultRegionRequest.url.includes('region='),
|
|
|
|
'The default region request is made without a region qp'
|
|
|
|
);
|
|
|
|
|
|
|
|
appRequests.forEach(req => {
|
|
|
|
assert.ok(req.url.includes(`region=${region}`), req.url);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|