github.com/hernad/nomad@v1.6.112/ui/tests/acceptance/application-errors-test.js (about)

     1  /**
     2   * Copyright (c) HashiCorp, Inc.
     3   * SPDX-License-Identifier: MPL-2.0
     4   */
     5  
     6  import { currentURL, visit } from '@ember/test-helpers';
     7  import { module, test } from 'qunit';
     8  import { setupApplicationTest } from 'ember-qunit';
     9  import { setupMirage } from 'ember-cli-mirage/test-support';
    10  import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit';
    11  import ClientsList from 'nomad-ui/tests/pages/clients/list';
    12  import JobsList from 'nomad-ui/tests/pages/jobs/list';
    13  import Job from 'nomad-ui/tests/pages/jobs/detail';
    14  import percySnapshot from '@percy/ember';
    15  import faker from 'nomad-ui/mirage/faker';
    16  
    17  module('Acceptance | application errors ', function (hooks) {
    18    setupApplicationTest(hooks);
    19    setupMirage(hooks);
    20  
    21    hooks.beforeEach(function () {
    22      faker.seed(1);
    23      server.create('agent');
    24      server.create('node-pool');
    25      server.create('node');
    26      server.create('job');
    27    });
    28  
    29    test('it passes an accessibility audit', async function (assert) {
    30      assert.expect(1);
    31  
    32      server.pretender.get('/v1/nodes', () => [500, {}, null]);
    33      await ClientsList.visit();
    34      await a11yAudit(assert);
    35      await percySnapshot(assert);
    36    });
    37  
    38    test('transitioning away from an error page resets the global error', async function (assert) {
    39      server.pretender.get('/v1/nodes', () => [500, {}, null]);
    40  
    41      await ClientsList.visit();
    42      assert.ok(ClientsList.error.isPresent, 'Application has errored');
    43  
    44      await JobsList.visit();
    45      assert.notOk(
    46        JobsList.error.isPresent,
    47        'Application is no longer in an error state'
    48      );
    49    });
    50  
    51    test('the 403 error page links to the ACL tokens page', async function (assert) {
    52      assert.expect(3);
    53      const job = server.db.jobs[0];
    54  
    55      server.pretender.get(`/v1/job/${job.id}`, () => [403, {}, null]);
    56  
    57      await Job.visit({ id: job.id });
    58  
    59      assert.ok(Job.error.isPresent, 'Error message is shown');
    60      assert.equal(Job.error.title, 'Not Authorized', 'Error message is for 403');
    61      await percySnapshot(assert);
    62  
    63      await Job.error.seekHelp();
    64      assert.equal(
    65        currentURL(),
    66        '/settings/tokens',
    67        'Error message contains a link to the tokens page'
    68      );
    69    });
    70  
    71    test('the no leader error state gets its own error message', async function (assert) {
    72      assert.expect(2);
    73      server.pretender.get('/v1/jobs', () => [500, {}, 'No cluster leader']);
    74  
    75      await JobsList.visit();
    76  
    77      assert.ok(JobsList.error.isPresent, 'An error is shown');
    78      assert.equal(
    79        JobsList.error.title,
    80        'No Cluster Leader',
    81        'The error is specifically for the lack of a cluster leader'
    82      );
    83      await percySnapshot(assert);
    84    });
    85  
    86    test('error pages include links to the jobs, clients and auth pages', async function (assert) {
    87      await visit('/a/non-existent/page');
    88  
    89      assert.ok(JobsList.error.isPresent, 'An error is shown');
    90  
    91      await JobsList.error.gotoJobs();
    92      assert.equal(currentURL(), '/jobs', 'Now on the jobs page');
    93      assert.notOk(JobsList.error.isPresent, 'The error is gone now');
    94  
    95      await visit('/a/non-existent/page');
    96      assert.ok(JobsList.error.isPresent, 'An error is shown');
    97  
    98      await JobsList.error.gotoClients();
    99      assert.equal(currentURL(), '/clients', 'Now on the clients page');
   100      assert.notOk(JobsList.error.isPresent, 'The error is gone now');
   101  
   102      await visit('/a/non-existent/page');
   103      assert.ok(JobsList.error.isPresent, 'An error is shown');
   104  
   105      await JobsList.error.gotoSignin();
   106      assert.equal(currentURL(), '/settings/tokens', 'Now on the sign-in page');
   107      assert.notOk(JobsList.error.isPresent, 'The error is gone now');
   108    });
   109  });