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  });