github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/tests/acceptance/servers-list-test.js (about) 1 /* eslint-disable qunit/require-expect */ 2 import { currentURL } from '@ember/test-helpers'; 3 import { module, test } from 'qunit'; 4 import { setupApplicationTest } from 'ember-qunit'; 5 import { setupMirage } from 'ember-cli-mirage/test-support'; 6 import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; 7 import { findLeader } from '../../mirage/config'; 8 import ServersList from 'nomad-ui/tests/pages/servers/list'; 9 import formatHost from 'nomad-ui/utils/format-host'; 10 import percySnapshot from '@percy/ember'; 11 import faker from 'nomad-ui/mirage/faker'; 12 13 const minimumSetup = () => { 14 faker.seed(1); 15 server.createList('node', 1); 16 server.createList('agent', 1); 17 }; 18 19 const agentSort = (leader) => (a, b) => { 20 if (formatHost(a.member.Address, a.member.Tags.port) === leader) { 21 return 1; 22 } else if (formatHost(b.member.Address, b.member.Tags.port) === leader) { 23 return -1; 24 } 25 return 0; 26 }; 27 28 module('Acceptance | servers list', function (hooks) { 29 setupApplicationTest(hooks); 30 setupMirage(hooks); 31 32 test('it passes an accessibility audit', async function (assert) { 33 minimumSetup(); 34 await ServersList.visit(); 35 await a11yAudit(assert); 36 }); 37 38 test('/servers should list all servers', async function (assert) { 39 faker.seed(1); 40 server.createList('node', 1); 41 server.createList('agent', 10); 42 43 const leader = findLeader(server.schema); 44 const sortedAgents = server.db.agents.sort(agentSort(leader)).reverse(); 45 46 await ServersList.visit(); 47 48 await percySnapshot(assert); 49 50 assert.equal( 51 ServersList.servers.length, 52 ServersList.pageSize, 53 'List is stopped at pageSize' 54 ); 55 56 ServersList.servers.forEach((server, index) => { 57 assert.equal( 58 server.name, 59 sortedAgents[index].name, 60 'Servers are ordered' 61 ); 62 }); 63 64 assert.equal(document.title, 'Servers - Nomad'); 65 }); 66 67 test('each server should show high-level info of the server', async function (assert) { 68 minimumSetup(); 69 const agent = server.db.agents[0]; 70 71 await ServersList.visit(); 72 73 const agentRow = ServersList.servers.objectAt(0); 74 75 assert.equal(agentRow.name, agent.name, 'Name'); 76 assert.equal(agentRow.status, agent.member.Status, 'Status'); 77 assert.equal(agentRow.leader, 'True', 'Leader?'); 78 assert.equal(agentRow.address, agent.member.Address, 'Address'); 79 assert.equal(agentRow.serfPort, agent.member.Port, 'Serf Port'); 80 assert.equal(agentRow.datacenter, agent.member.Tags.dc, 'Datacenter'); 81 assert.equal(agentRow.version, agent.version, 'Version'); 82 }); 83 84 test('each server should link to the server detail page', async function (assert) { 85 minimumSetup(); 86 const agent = server.db.agents[0]; 87 88 await ServersList.visit(); 89 await ServersList.servers.objectAt(0).clickRow(); 90 91 assert.equal( 92 currentURL(), 93 `/servers/${agent.name}`, 94 'Now at the server detail page' 95 ); 96 }); 97 98 test('when accessing servers is forbidden, show a message with a link to the tokens page', async function (assert) { 99 server.create('agent'); 100 server.pretender.get('/v1/agent/members', () => [403, {}, null]); 101 102 await ServersList.visit(); 103 assert.equal(ServersList.error.title, 'Not Authorized'); 104 105 await ServersList.error.seekHelp(); 106 assert.equal(currentURL(), '/settings/tokens'); 107 }); 108 });