mirror of
https://github.com/kemko/nomad.git
synced 2026-01-05 09:55:44 +03:00
This introduces ember-a11y-testing to acceptance tests via a helper wrapper that allows us to globally ignore rules that we can address separately. It also adds fixes for the aXe rules that were failing.
161 lines
5.0 KiB
JavaScript
161 lines
5.0 KiB
JavaScript
import { module, test } from 'qunit';
|
|
import { currentURL } from '@ember/test-helpers';
|
|
import { setupApplicationTest } from 'ember-qunit';
|
|
import { setupMirage } from 'ember-cli-mirage/test-support';
|
|
import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit';
|
|
import pageSizeSelect from './behaviors/page-size-select';
|
|
import PluginAllocations from 'nomad-ui/tests/pages/storage/plugins/plugin/allocations';
|
|
|
|
module('Acceptance | plugin allocations', function(hooks) {
|
|
setupApplicationTest(hooks);
|
|
setupMirage(hooks);
|
|
|
|
let plugin;
|
|
|
|
hooks.beforeEach(function() {
|
|
server.create('node');
|
|
window.localStorage.clear();
|
|
});
|
|
|
|
test('it passes an accessibility audit', async function(assert) {
|
|
plugin = server.create('csi-plugin', {
|
|
shallow: true,
|
|
controllerRequired: true,
|
|
controllersExpected: 3,
|
|
nodesExpected: 3,
|
|
});
|
|
|
|
await PluginAllocations.visit({ id: plugin.id });
|
|
await a11yAudit();
|
|
assert.ok(true, 'a11y audit passes');
|
|
});
|
|
|
|
test('/csi/plugins/:id/allocations shows all allocations in a single table', async function(assert) {
|
|
plugin = server.create('csi-plugin', {
|
|
shallow: true,
|
|
controllerRequired: true,
|
|
controllersExpected: 3,
|
|
nodesExpected: 3,
|
|
});
|
|
|
|
await PluginAllocations.visit({ id: plugin.id });
|
|
assert.equal(PluginAllocations.allocations.length, 6);
|
|
});
|
|
|
|
pageSizeSelect({
|
|
resourceName: 'allocation',
|
|
pageObject: PluginAllocations,
|
|
pageObjectList: PluginAllocations.allocations,
|
|
async setup() {
|
|
const total = PluginAllocations.pageSize;
|
|
plugin = server.create('csi-plugin', {
|
|
shallow: true,
|
|
controllerRequired: true,
|
|
controllersExpected: Math.floor(total / 2),
|
|
nodesExpected: Math.ceil(total / 2),
|
|
});
|
|
|
|
await PluginAllocations.visit({ id: plugin.id });
|
|
},
|
|
});
|
|
|
|
testFacet('Health', {
|
|
facet: PluginAllocations.facets.health,
|
|
paramName: 'healthy',
|
|
async beforeEach() {
|
|
plugin = server.create('csi-plugin', {
|
|
shallow: true,
|
|
controllerRequired: true,
|
|
controllersExpected: 3,
|
|
nodesExpected: 3,
|
|
});
|
|
|
|
await PluginAllocations.visit({ id: plugin.id });
|
|
},
|
|
filter: (allocation, selection) => selection.includes(allocation.healthy.toString()),
|
|
});
|
|
|
|
testFacet('Type', {
|
|
facet: PluginAllocations.facets.type,
|
|
paramName: 'type',
|
|
async beforeEach() {
|
|
plugin = server.create('csi-plugin', {
|
|
shallow: true,
|
|
controllerRequired: true,
|
|
controllersExpected: 3,
|
|
nodesExpected: 3,
|
|
});
|
|
|
|
await PluginAllocations.visit({ id: plugin.id });
|
|
},
|
|
filter: (allocation, selection) => {
|
|
if (selection.length === 0 || selection.length === 2) return true;
|
|
if (selection[0] === 'controller') return plugin.controllers.models.includes(allocation);
|
|
return plugin.nodes.models.includes(allocation);
|
|
},
|
|
});
|
|
|
|
function testFacet(label, { facet, paramName, beforeEach, filter }) {
|
|
test(`the ${label} facet filters the allocations list by ${label}`, async function(assert) {
|
|
let option;
|
|
|
|
await beforeEach();
|
|
await facet.toggle();
|
|
|
|
option = facet.options.objectAt(0);
|
|
await option.toggle();
|
|
|
|
const selection = [option.key];
|
|
const allAllocations = [...plugin.controllers.models, ...plugin.nodes.models];
|
|
const expectedAllocations = allAllocations
|
|
.filter(allocation => filter(allocation, selection))
|
|
.sortBy('updateTime');
|
|
|
|
PluginAllocations.allocations.forEach((allocation, index) => {
|
|
assert.equal(allocation.id, expectedAllocations[index].allocID);
|
|
});
|
|
});
|
|
|
|
test(`selecting multiple options in the ${label} facet results in a broader search`, async function(assert) {
|
|
const selection = [];
|
|
|
|
await beforeEach();
|
|
await facet.toggle();
|
|
|
|
const option1 = facet.options.objectAt(0);
|
|
const option2 = facet.options.objectAt(1);
|
|
await option1.toggle();
|
|
selection.push(option1.key);
|
|
await option2.toggle();
|
|
selection.push(option2.key);
|
|
|
|
const allAllocations = [...plugin.controllers.models, ...plugin.nodes.models];
|
|
const expectedAllocations = allAllocations
|
|
.filter(allocation => filter(allocation, selection))
|
|
.sortBy('updateTime');
|
|
|
|
PluginAllocations.allocations.forEach((allocation, index) => {
|
|
assert.equal(allocation.id, expectedAllocations[index].allocID);
|
|
});
|
|
});
|
|
|
|
test(`selecting options in the ${label} facet updates the ${paramName} query param`, async function(assert) {
|
|
const selection = [];
|
|
|
|
await beforeEach();
|
|
await facet.toggle();
|
|
|
|
const option1 = facet.options.objectAt(0);
|
|
const option2 = facet.options.objectAt(1);
|
|
await option1.toggle();
|
|
selection.push(option1.key);
|
|
await option2.toggle();
|
|
selection.push(option2.key);
|
|
|
|
const queryString = `${paramName}=${window.encodeURIComponent(JSON.stringify(selection))}`;
|
|
|
|
assert.equal(currentURL(), `/csi/plugins/${plugin.id}/allocations?${queryString}`);
|
|
});
|
|
}
|
|
});
|