2020-05-20 02:22:12 +00:00
|
|
|
import { module, test } from 'qunit';
|
|
|
|
import { currentURL } from '@ember/test-helpers';
|
|
|
|
import { setupApplicationTest } from 'ember-qunit';
|
|
|
|
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';
|
2020-05-20 02:22:12 +00:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
|
2020-07-28 17:59:14 +00:00
|
|
|
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');
|
|
|
|
});
|
|
|
|
|
2020-05-20 02:22:12 +00:00
|
|
|
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}`);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|