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