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