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) { 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` `); await settled(); 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` `); await settled(); 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` `); await settled(); 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}`); }); });