import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';
import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage';
import { render, settled } from '@ember/test-helpers';
import { initialize as fragmentSerializerInitializer } from 'nomad-ui/initializers/fragment-serializer';
import { componentA11yAudit } from 'nomad-ui/tests/helpers/a11y-audit';
module('Integration | Component | plugin allocation row', function (hooks) {
setupRenderingTest(hooks);
hooks.beforeEach(function () {
fragmentSerializerInitializer(this.owner);
this.store = this.owner.lookup('service:store');
this.server = startMirage();
this.server.create('node');
});
hooks.afterEach(function () {
this.server.shutdown();
});
test('Plugin allocation row immediately fetches the plugin allocation', async function (assert) {
assert.expect(2);
const plugin = this.server.create('csi-plugin', {
id: 'plugin',
controllerRequired: true,
});
const storageController = plugin.controllers.models[0];
const pluginRecord = await this.store.find('plugin', 'csi/plugin');
this.setProperties({
plugin: pluginRecord.get('controllers.firstObject'),
});
await render(hbs`
`);
const allocationRequest = this.server.pretender.handledRequests.find(
(req) => req.url.startsWith('/v1/allocation')
);
assert.equal(
allocationRequest.url,
`/v1/allocation/${storageController.allocID}`
);
await componentA11yAudit(this.element, assert);
});
test('After the plugin allocation row fetches the plugin allocation, allocation stats are fetched', async function (assert) {
const plugin = this.server.create('csi-plugin', {
id: 'plugin',
controllerRequired: true,
});
const storageController = plugin.controllers.models[0];
const pluginRecord = await this.store.find('plugin', 'csi/plugin');
this.setProperties({
plugin: pluginRecord.get('controllers.firstObject'),
});
await render(hbs`
`);
const [statsRequest] = this.server.pretender.handledRequests.slice(-1);
assert.equal(
statsRequest.url,
`/v1/client/allocation/${storageController.allocID}/stats`
);
});
test('Setting a new plugin fetches the new plugin allocation', async function (assert) {
const plugin = this.server.create('csi-plugin', {
id: 'plugin',
isMonolith: false,
controllerRequired: true,
controllersExpected: 2,
});
const storageController = plugin.controllers.models[0];
const storageController2 = plugin.controllers.models[1];
const pluginRecord = await this.store.find('plugin', 'csi/plugin');
this.setProperties({
plugin: pluginRecord.get('controllers.firstObject'),
});
await render(hbs`
`);
const allocationRequest = this.server.pretender.handledRequests.find(
(req) => req.url.startsWith('/v1/allocation')
);
assert.equal(
allocationRequest.url,
`/v1/allocation/${storageController.allocID}`
);
this.set('plugin', pluginRecord.get('controllers').toArray()[1]);
await settled();
const latestAllocationRequest = this.server.pretender.handledRequests
.filter((req) => req.url.startsWith('/v1/allocation'))
.reverse()[0];
assert.equal(
latestAllocationRequest.url,
`/v1/allocation/${storageController2.allocID}`
);
});
});