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