open-nomad/ui/tests/integration/components/job-page/parts/body-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

117 lines
3.2 KiB
JavaScript

import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { find, findAll, render } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';
import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage';
import { componentA11yAudit } from 'nomad-ui/tests/helpers/a11y-audit';
module('Integration | Component | job-page/parts/body', function (hooks) {
setupRenderingTest(hooks);
hooks.beforeEach(function () {
window.localStorage.clear();
this.server = startMirage();
this.server.createList('namespace', 3);
});
hooks.afterEach(function () {
this.server.shutdown();
window.localStorage.clear();
});
test('includes a subnav for the job', async function (assert) {
this.set('job', {});
await render(hbs`
<JobPage::Parts::Body @job={{job}}>
<div class="inner-content">Inner content</div>
</JobPage::Parts::Body>
`);
assert.ok(find('[data-test-subnav="job"]'), 'Job subnav is rendered');
});
test('the subnav includes the deployments link when the job is a service', async function (assert) {
assert.expect(4);
const store = this.owner.lookup('service:store');
const job = await store.createRecord('job', {
id: 'service-job',
type: 'service',
});
this.set('job', job);
await render(hbs`
<JobPage::Parts::Body @job={{job}}>
<div class="inner-content">Inner content</div>
</JobPage::Parts::Body>
`);
const subnavLabels = findAll('[data-test-tab]').map(
(anchor) => anchor.textContent
);
assert.ok(
subnavLabels.some((label) => label === 'Definition'),
'Definition link'
);
assert.ok(
subnavLabels.some((label) => label === 'Versions'),
'Versions link'
);
assert.ok(
subnavLabels.some((label) => label === 'Deployments'),
'Deployments link'
);
await componentA11yAudit(this.element, assert);
});
test('the subnav does not include the deployments link when the job is not a service', async function (assert) {
const store = this.owner.lookup('service:store');
const job = await store.createRecord('job', {
id: 'batch-job',
type: 'batch',
});
this.set('job', job);
await render(hbs`
<JobPage::Parts::Body @job={{job}}>
<div class="inner-content">Inner content</div>
</JobPage::Parts::Body>
`);
const subnavLabels = findAll('[data-test-tab]').map(
(anchor) => anchor.textContent
);
assert.ok(
subnavLabels.some((label) => label === 'Definition'),
'Definition link'
);
assert.ok(
subnavLabels.some((label) => label === 'Versions'),
'Versions link'
);
assert.notOk(
subnavLabels.some((label) => label === 'Deployments'),
'Deployments link'
);
});
test('body yields content to a section after the subnav', async function (assert) {
this.set('job', {});
await render(hbs`
<JobPage::Parts::Body @job={{job}}>
<div class="inner-content">Inner content</div>
</JobPage::Parts::Body>
`);
assert.ok(
find('[data-test-subnav="job"] + .section > .inner-content'),
'Content is rendered immediately after the subnav'
);
});
});