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.
119 lines
3.6 KiB
JavaScript
119 lines
3.6 KiB
JavaScript
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`
|
|
<PluginAllocationRow @pluginAllocation={{plugin}} />
|
|
`);
|
|
|
|
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`
|
|
<PluginAllocationRow @pluginAllocation={{plugin}} />
|
|
`);
|
|
|
|
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`
|
|
<PluginAllocationRow @pluginAllocation={{plugin}} />
|
|
`);
|
|
|
|
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}`
|
|
);
|
|
});
|
|
});
|