github.com/hspak/nomad@v0.7.2-0.20180309000617-bc4ae22a39a5/ui/tests/acceptance/nodes-list-test.js (about) 1 import { click, find, findAll, currentURL, visit } from 'ember-native-dom-helpers'; 2 import { test } from 'qunit'; 3 import moduleForAcceptance from 'nomad-ui/tests/helpers/module-for-acceptance'; 4 import { findLeader } from '../../mirage/config'; 5 import ipParts from 'nomad-ui/utils/ip-parts'; 6 7 function minimumSetup() { 8 server.createList('node', 1); 9 server.createList('agent', 1); 10 } 11 12 moduleForAcceptance('Acceptance | clients list'); 13 14 test('/clients should list one page of clients', function(assert) { 15 // Make sure to make more nodes than 1 page to assert that pagination is working 16 const nodesCount = 10; 17 const pageSize = 8; 18 19 server.createList('node', nodesCount); 20 server.createList('agent', 1); 21 22 visit('/clients'); 23 24 andThen(() => { 25 assert.equal(findAll('[data-test-client-node-row]').length, pageSize); 26 assert.ok(find('[data-test-pagination]'), 'Pagination found on the page'); 27 28 const sortedNodes = server.db.nodes.sortBy('modifyIndex').reverse(); 29 30 for (var nodeNumber = 0; nodeNumber < pageSize; nodeNumber++) { 31 const nodeRow = findAll('[data-test-client-node-row]')[nodeNumber]; 32 assert.equal( 33 nodeRow.querySelector('[data-test-client-id]').textContent.trim(), 34 sortedNodes[nodeNumber].id.split('-')[0], 35 'Clients are ordered' 36 ); 37 } 38 }); 39 }); 40 41 test('each client record should show high-level info of the client', function(assert) { 42 minimumSetup(); 43 const node = server.db.nodes[0]; 44 45 visit('/clients'); 46 47 andThen(() => { 48 const nodeRow = find('[data-test-client-node-row]'); 49 const allocations = server.db.allocations.where({ nodeId: node.id }); 50 const { address, port } = ipParts(node.httpAddr); 51 52 assert.equal( 53 nodeRow.querySelector('[data-test-client-id]').textContent.trim(), 54 node.id.split('-')[0], 55 'ID' 56 ); 57 assert.equal( 58 nodeRow.querySelector('[data-test-client-name]').textContent.trim(), 59 node.name, 60 'Name' 61 ); 62 assert.equal( 63 nodeRow.querySelector('[data-test-client-status]').textContent.trim(), 64 node.status, 65 'Status' 66 ); 67 assert.equal( 68 nodeRow.querySelector('[data-test-client-address]').textContent.trim(), 69 address, 70 'Address' 71 ); 72 assert.equal(nodeRow.querySelector('[data-test-client-port]').textContent.trim(), port, 'Port'); 73 assert.equal( 74 nodeRow.querySelector('[data-test-client-datacenter]').textContent.trim(), 75 node.datacenter, 76 'Datacenter' 77 ); 78 assert.equal( 79 nodeRow.querySelector('[data-test-client-allocations]').textContent.trim(), 80 allocations.length, 81 '# Allocations' 82 ); 83 }); 84 }); 85 86 test('each client should link to the client detail page', function(assert) { 87 minimumSetup(); 88 const node = server.db.nodes[0]; 89 90 visit('/clients'); 91 andThen(() => { 92 click('[data-test-client-node-row]'); 93 }); 94 95 andThen(() => { 96 assert.equal(currentURL(), `/clients/${node.id}`); 97 }); 98 }); 99 100 test('when there are no clients, there is an empty message', function(assert) { 101 server.createList('agent', 1); 102 103 visit('/clients'); 104 105 andThen(() => { 106 assert.ok(find('[data-test-empty-clients-list]')); 107 assert.equal(find('[data-test-empty-clients-list-headline]').textContent, 'No Clients'); 108 }); 109 }); 110 111 test('when there are clients, but no matches for a search term, there is an empty message', function( 112 assert 113 ) { 114 server.createList('agent', 1); 115 server.create('node', { name: 'node' }); 116 117 visit('/clients'); 118 119 andThen(() => { 120 fillIn('.search-box input', 'client'); 121 }); 122 123 andThen(() => { 124 assert.ok(find('[data-test-empty-clients-list]')); 125 assert.equal(find('[data-test-empty-clients-list-headline]').textContent, 'No Matches'); 126 }); 127 }); 128 129 test('when accessing clients is forbidden, show a message with a link to the tokens page', function( 130 assert 131 ) { 132 server.create('agent'); 133 server.create('node', { name: 'node' }); 134 server.pretender.get('/v1/nodes', () => [403, {}, null]); 135 136 visit('/clients'); 137 138 andThen(() => { 139 assert.equal(find('[data-test-error-title]').textContent, 'Not Authorized'); 140 }); 141 142 andThen(() => { 143 click('[data-test-error-message] a'); 144 }); 145 146 andThen(() => { 147 assert.equal(currentURL(), '/settings/tokens'); 148 }); 149 }); 150 151 test('/servers should list all servers', function(assert) { 152 const agentsCount = 10; 153 const pageSize = 8; 154 155 server.createList('node', 1); 156 server.createList('agent', agentsCount); 157 158 const leader = findLeader(server.schema); 159 160 visit('/servers'); 161 162 andThen(() => { 163 assert.equal(findAll('[data-test-server-agent-row]').length, pageSize); 164 165 const sortedAgents = server.db.agents 166 .sort((a, b) => { 167 if (`${a.address}:${a.tags.port}` === leader) { 168 return 1; 169 } else if (`${b.address}:${b.tags.port}` === leader) { 170 return -1; 171 } 172 return 0; 173 }) 174 .reverse(); 175 176 for (var agentNumber = 0; agentNumber < 8; agentNumber++) { 177 const serverRow = findAll('[data-test-server-agent-row]')[agentNumber]; 178 assert.equal( 179 serverRow.querySelector('[data-test-server-name]').textContent.trim(), 180 sortedAgents[agentNumber].name, 181 'Servers are ordered' 182 ); 183 } 184 }); 185 }); 186 187 test('each server should show high-level info of the server', function(assert) { 188 minimumSetup(); 189 const agent = server.db.agents[0]; 190 191 visit('/servers'); 192 193 andThen(() => { 194 const agentRow = find('[data-test-server-agent-row]'); 195 196 assert.equal(agentRow.querySelector('[data-test-server-name]').textContent, agent.name, 'Name'); 197 assert.equal( 198 agentRow.querySelector('[data-test-server-status]').textContent, 199 agent.status, 200 'Status' 201 ); 202 assert.equal( 203 agentRow.querySelector('[data-test-server-is-leader]').textContent, 204 'True', 205 'Leader?' 206 ); 207 assert.equal( 208 agentRow.querySelector('[data-test-server-address]').textContent, 209 agent.address, 210 'Address' 211 ); 212 assert.equal( 213 agentRow.querySelector('[data-test-server-port]').textContent, 214 agent.serf_port, 215 'Serf Port' 216 ); 217 assert.equal( 218 agentRow.querySelector('[data-test-server-datacenter]').textContent, 219 agent.tags.dc, 220 'Datacenter' 221 ); 222 }); 223 }); 224 225 test('each server should link to the server detail page', function(assert) { 226 minimumSetup(); 227 const agent = server.db.agents[0]; 228 229 visit('/servers'); 230 andThen(() => { 231 click('[data-test-server-agent-row]'); 232 }); 233 234 andThen(() => { 235 assert.equal(currentURL(), `/servers/${agent.name}`); 236 }); 237 }); 238 239 test('when accessing servers is forbidden, show a message with a link to the tokens page', function( 240 assert 241 ) { 242 server.create('agent'); 243 server.pretender.get('/v1/agent/members', () => [403, {}, null]); 244 245 visit('/servers'); 246 247 andThen(() => { 248 assert.equal(find('[data-test-error-title]').textContent, 'Not Authorized'); 249 }); 250 251 andThen(() => { 252 click('[data-test-error-message] a'); 253 }); 254 255 andThen(() => { 256 assert.equal(currentURL(), '/settings/tokens'); 257 }); 258 });