github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/ui/tests/acceptance/plugins-list-test.js (about) 1 import { currentURL } from '@ember/test-helpers'; 2 import { module, test } from 'qunit'; 3 import { setupApplicationTest } from 'ember-qunit'; 4 import { setupMirage } from 'ember-cli-mirage/test-support'; 5 import pageSizeSelect from './behaviors/page-size-select'; 6 import PluginsList from 'nomad-ui/tests/pages/storage/plugins/list'; 7 8 module('Acceptance | plugins list', function(hooks) { 9 setupApplicationTest(hooks); 10 setupMirage(hooks); 11 12 hooks.beforeEach(function() { 13 server.create('node'); 14 window.localStorage.clear(); 15 }); 16 17 test('visiting /csi/plugins', async function(assert) { 18 await PluginsList.visit(); 19 20 assert.equal(currentURL(), '/csi/plugins'); 21 assert.equal(document.title, 'CSI Plugins - Nomad'); 22 }); 23 24 test('/csi/plugins should list the first page of plugins sorted by id', async function(assert) { 25 const pluginCount = PluginsList.pageSize + 1; 26 server.createList('csi-plugin', pluginCount, { shallow: true }); 27 28 await PluginsList.visit(); 29 30 const sortedPlugins = server.db.csiPlugins.sortBy('id'); 31 assert.equal(PluginsList.plugins.length, PluginsList.pageSize); 32 PluginsList.plugins.forEach((plugin, index) => { 33 assert.equal(plugin.id, sortedPlugins[index].id, 'Plugins are ordered'); 34 }); 35 }); 36 37 test('each plugin row should contain information about the plugin', async function(assert) { 38 const plugin = server.create('csi-plugin', { shallow: true }); 39 40 await PluginsList.visit(); 41 42 const pluginRow = PluginsList.plugins.objectAt(0); 43 const controllerHealthStr = plugin.controllersHealthy > 0 ? 'Healthy' : 'Unhealthy'; 44 const nodeHealthStr = plugin.nodesHealthy > 0 ? 'Healthy' : 'Unhealthy'; 45 46 assert.equal(pluginRow.id, plugin.id); 47 assert.equal( 48 pluginRow.controllerHealth, 49 `${controllerHealthStr} (${plugin.controllersHealthy}/${plugin.controllersExpected})` 50 ); 51 assert.equal( 52 pluginRow.nodeHealth, 53 `${nodeHealthStr} (${plugin.nodesHealthy}/${plugin.nodesExpected})` 54 ); 55 assert.equal(pluginRow.provider, plugin.provider); 56 }); 57 58 test('each plugin row should link to the corresponding plugin', async function(assert) { 59 const plugin = server.create('csi-plugin', { shallow: true }); 60 61 await PluginsList.visit(); 62 63 await PluginsList.plugins.objectAt(0).clickName(); 64 assert.equal(currentURL(), `/csi/plugins/${plugin.id}`); 65 66 await PluginsList.visit(); 67 assert.equal(currentURL(), '/csi/plugins'); 68 69 await PluginsList.plugins.objectAt(0).clickRow(); 70 assert.equal(currentURL(), `/csi/plugins/${plugin.id}`); 71 }); 72 73 test('when there are no plugins, there is an empty message', async function(assert) { 74 await PluginsList.visit(); 75 76 assert.ok(PluginsList.isEmpty); 77 assert.equal(PluginsList.emptyState.headline, 'No Plugins'); 78 }); 79 80 test('when there are plugins, but no matches for a search, there is an empty message', async function(assert) { 81 server.create('csi-plugin', { id: 'cat 1', shallow: true }); 82 server.create('csi-plugin', { id: 'cat 2', shallow: true }); 83 84 await PluginsList.visit(); 85 86 await PluginsList.search('dog'); 87 assert.ok(PluginsList.isEmpty); 88 assert.equal(PluginsList.emptyState.headline, 'No Matches'); 89 }); 90 91 test('search resets the current page', async function(assert) { 92 server.createList('csi-plugin', PluginsList.pageSize + 1, { shallow: true }); 93 94 await PluginsList.visit(); 95 await PluginsList.nextPage(); 96 97 assert.equal(currentURL(), '/csi/plugins?page=2'); 98 99 await PluginsList.search('foobar'); 100 101 assert.equal(currentURL(), '/csi/plugins?search=foobar'); 102 }); 103 104 test('when accessing plugins is forbidden, a message is shown with a link to the tokens page', async function(assert) { 105 server.pretender.get('/v1/plugins', () => [403, {}, null]); 106 107 await PluginsList.visit(); 108 assert.equal(PluginsList.error.title, 'Not Authorized'); 109 110 await PluginsList.error.seekHelp(); 111 assert.equal(currentURL(), '/settings/tokens'); 112 }); 113 114 pageSizeSelect({ 115 resourceName: 'plugin', 116 pageObject: PluginsList, 117 pageObjectList: PluginsList.plugins, 118 async setup() { 119 server.createList('csi-plugin', PluginsList.pageSize, { shallow: true }); 120 await PluginsList.visit(); 121 }, 122 }); 123 });