3350f3fb11
Async tests should use in integrations tests. Acceptance tests are using Mirage and can't use since we can't know the number of assertions.
174 lines
5.1 KiB
JavaScript
174 lines
5.1 KiB
JavaScript
/* eslint-disable qunit/require-expect */
|
|
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);
|
|
});
|
|
|
|
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}`
|
|
);
|
|
});
|
|
}
|
|
});
|