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