github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/tests/acceptance/application-errors-test.js (about)

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