open-nomad/ui/tests/acceptance/application-errors-test.js
Jai Bhagat 3350f3fb11 ui: apply new qunit linting rules to tests
Async tests should use  in integrations tests.
Acceptance tests are using Mirage and can't use
since we can't know the number of assertions.
2022-01-20 10:01:35 -05:00

89 lines
2.8 KiB
JavaScript

import { currentURL, visit } from '@ember/test-helpers';
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
import { setupMirage } from 'ember-cli-mirage/test-support';
import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit';
import ClientsList from 'nomad-ui/tests/pages/clients/list';
import JobsList from 'nomad-ui/tests/pages/jobs/list';
import Job from 'nomad-ui/tests/pages/jobs/detail';
module('Acceptance | application errors ', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
hooks.beforeEach(function () {
server.create('agent');
server.create('node');
server.create('job');
});
test('it passes an accessibility audit', async function (assert) {
assert.expect(1);
server.pretender.get('/v1/nodes', () => [500, {}, null]);
await ClientsList.visit();
await a11yAudit(assert);
});
test('transitioning away from an error page resets the global error', async function (assert) {
server.pretender.get('/v1/nodes', () => [500, {}, null]);
await ClientsList.visit();
assert.ok(ClientsList.error.isPresent, 'Application has errored');
await JobsList.visit();
assert.notOk(
JobsList.error.isPresent,
'Application is no longer in an error state'
);
});
test('the 403 error page links to the ACL tokens page', async function (assert) {
const job = server.db.jobs[0];
server.pretender.get(`/v1/job/${job.id}`, () => [403, {}, null]);
await Job.visit({ id: job.id });
assert.ok(Job.error.isPresent, 'Error message is shown');
assert.equal(Job.error.title, 'Not Authorized', 'Error message is for 403');
await Job.error.seekHelp();
assert.equal(
currentURL(),
'/settings/tokens',
'Error message contains a link to the tokens page'
);
});
test('the no leader error state gets its own error message', async function (assert) {
server.pretender.get('/v1/jobs', () => [500, {}, 'No cluster leader']);
await JobsList.visit();
assert.ok(JobsList.error.isPresent, 'An error is shown');
assert.equal(
JobsList.error.title,
'No Cluster Leader',
'The error is specifically for the lack of a cluster leader'
);
});
test('error pages include links to the jobs and clients pages', async function (assert) {
await visit('/a/non-existent/page');
assert.ok(JobsList.error.isPresent, 'An error is shown');
await JobsList.error.gotoJobs();
assert.equal(currentURL(), '/jobs', 'Now on the jobs page');
assert.notOk(JobsList.error.isPresent, 'The error is gone now');
await visit('/a/non-existent/page');
assert.ok(JobsList.error.isPresent, 'An error is shown');
await JobsList.error.gotoClients();
assert.equal(currentURL(), '/clients', 'Now on the clients page');
assert.notOk(JobsList.error.isPresent, 'The error is gone now');
});
});