147 lines
4.6 KiB
JavaScript
147 lines
4.6 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 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('/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}`);
|
||
|
});
|
||
|
}
|
||
|
});
|