mirror of
https://github.com/kemko/nomad.git
synced 2026-01-03 17:05:43 +03:00
This continues #8455 by adding accessibility audits to component integration tests and fixing associated errors. It adds audits to existing tests rather than adding separate ones to facilitate auditing the various permutations a component’s rendering can go through. It also adds linting to ensure audits happen in component tests. This necessitated consolidating test files that were scattered.
171 lines
6.0 KiB
JavaScript
171 lines
6.0 KiB
JavaScript
import { currentURL } from '@ember/test-helpers';
|
|
import { module, test } from 'qunit';
|
|
import { setupApplicationTest } from 'ember-qunit';
|
|
import { setupMirage } from 'ember-cli-mirage/test-support';
|
|
import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit';
|
|
import { selectChoose } from 'ember-power-select/test-support';
|
|
import JobsList from 'nomad-ui/tests/pages/jobs/list';
|
|
import ClientsList from 'nomad-ui/tests/pages/clients/list';
|
|
import Allocation from 'nomad-ui/tests/pages/allocations/detail';
|
|
import PluginsList from 'nomad-ui/tests/pages/storage/plugins/list';
|
|
import VolumesList from 'nomad-ui/tests/pages/storage/volumes/list';
|
|
|
|
module('Acceptance | namespaces (disabled)', function(hooks) {
|
|
setupApplicationTest(hooks);
|
|
setupMirage(hooks);
|
|
|
|
hooks.beforeEach(function() {
|
|
server.create('agent');
|
|
server.create('node');
|
|
server.createList('job', 5, { createAllocations: false });
|
|
});
|
|
|
|
test('the namespace switcher is not in the gutter menu', async function(assert) {
|
|
await JobsList.visit();
|
|
assert.notOk(JobsList.namespaceSwitcher.isPresent, 'No namespace switcher found');
|
|
});
|
|
|
|
test('the jobs request is made with no query params', async function(assert) {
|
|
await JobsList.visit();
|
|
|
|
const request = server.pretender.handledRequests.findBy('url', '/v1/jobs');
|
|
assert.equal(request.queryParams.namespace, undefined, 'No namespace query param');
|
|
});
|
|
});
|
|
|
|
module('Acceptance | namespaces (enabled)', function(hooks) {
|
|
setupApplicationTest(hooks);
|
|
setupMirage(hooks);
|
|
|
|
hooks.beforeEach(function() {
|
|
server.createList('namespace', 3);
|
|
server.create('agent');
|
|
server.create('node');
|
|
server.createList('job', 5);
|
|
});
|
|
|
|
hooks.afterEach(function() {
|
|
window.localStorage.clear();
|
|
});
|
|
|
|
test('it passes an accessibility audit', async function(assert) {
|
|
await JobsList.visit();
|
|
await a11yAudit(assert);
|
|
});
|
|
|
|
test('the namespace switcher lists all namespaces', async function(assert) {
|
|
const namespaces = server.db.namespaces;
|
|
|
|
await JobsList.visit();
|
|
|
|
assert.ok(JobsList.namespaceSwitcher.isPresent, 'Namespace switcher found');
|
|
await JobsList.namespaceSwitcher.open();
|
|
// TODO this selector should be scoped to only the namespace switcher options,
|
|
// but ember-wormhole makes that difficult.
|
|
assert.equal(
|
|
JobsList.namespaceSwitcher.options.length,
|
|
namespaces.length,
|
|
'All namespaces are in the switcher'
|
|
);
|
|
assert.equal(
|
|
JobsList.namespaceSwitcher.options.objectAt(0).label,
|
|
'Default Namespace',
|
|
'The first namespace is always the default one'
|
|
);
|
|
|
|
const sortedNamespaces = namespaces.slice(1).sortBy('name');
|
|
JobsList.namespaceSwitcher.options.forEach((option, index) => {
|
|
// Default Namespace handled separately
|
|
if (index === 0) return;
|
|
|
|
const namespace = sortedNamespaces[index - 1];
|
|
assert.equal(option.label, namespace.name, `index ${index}: ${namespace.name}`);
|
|
});
|
|
});
|
|
|
|
test('changing the namespace sets the namespace in localStorage', async function(assert) {
|
|
const namespace = server.db.namespaces[1];
|
|
|
|
await JobsList.visit();
|
|
await selectChoose('[data-test-namespace-switcher]', namespace.name);
|
|
|
|
assert.equal(
|
|
window.localStorage.nomadActiveNamespace,
|
|
namespace.id,
|
|
'Active namespace was set'
|
|
);
|
|
});
|
|
|
|
test('changing the namespace refreshes the jobs list when on the jobs page', async function(assert) {
|
|
const namespace = server.db.namespaces[1];
|
|
|
|
await JobsList.visit();
|
|
|
|
let requests = server.pretender.handledRequests.filter(req => req.url.startsWith('/v1/jobs'));
|
|
assert.equal(requests.length, 1, 'First request to jobs');
|
|
assert.equal(
|
|
requests[0].queryParams.namespace,
|
|
undefined,
|
|
'Namespace query param is defaulted to "default"/undefined'
|
|
);
|
|
|
|
// TODO: handle this with Page Objects
|
|
await selectChoose('[data-test-namespace-switcher]', namespace.name);
|
|
|
|
requests = server.pretender.handledRequests.filter(req => req.url.startsWith('/v1/jobs'));
|
|
assert.equal(requests.length, 2, 'Second request to jobs');
|
|
assert.equal(
|
|
requests[1].queryParams.namespace,
|
|
namespace.name,
|
|
'Namespace query param on second request'
|
|
);
|
|
});
|
|
|
|
test('changing the namespace in the clients hierarchy navigates to the jobs page', async function(assert) {
|
|
const namespace = server.db.namespaces[1];
|
|
|
|
await ClientsList.visit();
|
|
await selectChoose('[data-test-namespace-switcher]', namespace.name);
|
|
|
|
assert.equal(currentURL(), `/jobs?namespace=${namespace.name}`);
|
|
});
|
|
|
|
test('changing the namespace in the allocations hierarchy navigates to the jobs page', async function(assert) {
|
|
const namespace = server.db.namespaces[1];
|
|
const allocation = server.create('allocation', { job: server.db.jobs[0] });
|
|
|
|
await Allocation.visit({ id: allocation.id });
|
|
await selectChoose('[data-test-namespace-switcher]', namespace.name);
|
|
|
|
assert.equal(currentURL(), `/jobs?namespace=${namespace.name}`);
|
|
});
|
|
|
|
test('changing the namespace in the storage hierarchy navigates to the volumes page', async function(assert) {
|
|
const namespace = server.db.namespaces[1];
|
|
|
|
await PluginsList.visit();
|
|
await selectChoose('[data-test-namespace-switcher]', namespace.name);
|
|
|
|
assert.equal(currentURL(), `/csi/volumes?namespace=${namespace.name}`);
|
|
});
|
|
|
|
test('changing the namespace refreshes the volumes list when on the volumes page', async function(assert) {
|
|
const namespace = server.db.namespaces[1];
|
|
|
|
await VolumesList.visit();
|
|
|
|
let requests = server.pretender.handledRequests.filter(req =>
|
|
req.url.startsWith('/v1/volumes')
|
|
);
|
|
assert.equal(requests.length, 1);
|
|
assert.equal(requests[0].queryParams.namespace, undefined);
|
|
|
|
// TODO: handle this with Page Objects
|
|
await selectChoose('[data-test-namespace-switcher]', namespace.name);
|
|
|
|
requests = server.pretender.handledRequests.filter(req => req.url.startsWith('/v1/volumes'));
|
|
assert.equal(requests.length, 2);
|
|
assert.equal(requests[1].queryParams.namespace, namespace.name);
|
|
});
|
|
});
|