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