29de8f4f76
This continues #8455 by adding accessibility audits to component integration tests and fixing associated errors. It adds audits to existing tests rather than adding separate ones to facilitate auditing the various permutations a component’s rendering can go through. It also adds linting to ensure audits happen in component tests. This necessitated consolidating test files that were scattered.
175 lines
5.4 KiB
JavaScript
175 lines
5.4 KiB
JavaScript
import { module, test } from 'qunit';
|
|
import { setupRenderingTest } from 'ember-qunit';
|
|
import { find, findAll, render } from '@ember/test-helpers';
|
|
import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage';
|
|
import hbs from 'htmlbars-inline-precompile';
|
|
import { componentA11yAudit } from 'nomad-ui/tests/helpers/a11y-audit';
|
|
import moment from 'moment';
|
|
|
|
module('Integration | Component | reschedule event timeline', function(hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
hooks.beforeEach(function() {
|
|
this.store = this.owner.lookup('service:store');
|
|
this.server = startMirage();
|
|
this.server.create('namespace');
|
|
this.server.create('node');
|
|
this.server.create('job', { createAllocations: false });
|
|
});
|
|
|
|
hooks.afterEach(function() {
|
|
this.server.shutdown();
|
|
});
|
|
|
|
const commonTemplate = hbs`
|
|
<RescheduleEventTimeline @allocation={{allocation}} />
|
|
`;
|
|
|
|
test('when the allocation is running, the timeline shows past allocations', async function(assert) {
|
|
const attempts = 2;
|
|
|
|
this.server.create('allocation', 'rescheduled', {
|
|
rescheduleAttempts: attempts,
|
|
rescheduleSuccess: true,
|
|
});
|
|
|
|
await this.store.findAll('allocation');
|
|
|
|
const allocation = this.store
|
|
.peekAll('allocation')
|
|
.find(alloc => !alloc.get('nextAllocation.content'));
|
|
|
|
this.set('allocation', allocation);
|
|
await render(commonTemplate);
|
|
|
|
assert.equal(
|
|
findAll('[data-test-allocation]').length,
|
|
attempts + 1,
|
|
'Total allocations equals current allocation plus all past allocations'
|
|
);
|
|
assert.equal(
|
|
find('[data-test-allocation]'),
|
|
find(`[data-test-allocation="${allocation.id}"]`),
|
|
'First allocation is the current allocation'
|
|
);
|
|
|
|
assert.notOk(find('[data-test-stop-warning]'), 'No stop warning');
|
|
assert.notOk(find('[data-test-attempt-notice]'), 'No attempt notice');
|
|
|
|
assert.equal(
|
|
find(
|
|
`[data-test-allocation="${allocation.id}"] [data-test-allocation-link]`
|
|
).textContent.trim(),
|
|
allocation.get('shortId'),
|
|
'The "this" allocation is correct'
|
|
);
|
|
assert.equal(
|
|
find(
|
|
`[data-test-allocation="${allocation.id}"] [data-test-allocation-status]`
|
|
).textContent.trim(),
|
|
allocation.get('clientStatus'),
|
|
'Allocation shows the status'
|
|
);
|
|
|
|
await componentA11yAudit(this.element, assert);
|
|
});
|
|
|
|
test('when the allocation has failed and there is a follow up evaluation, a note with a time is shown', async function(assert) {
|
|
const attempts = 2;
|
|
|
|
this.server.create('allocation', 'rescheduled', {
|
|
rescheduleAttempts: attempts,
|
|
rescheduleSuccess: false,
|
|
});
|
|
|
|
await this.store.findAll('allocation');
|
|
|
|
const allocation = this.store
|
|
.peekAll('allocation')
|
|
.find(alloc => !alloc.get('nextAllocation.content'));
|
|
|
|
this.set('allocation', allocation);
|
|
await render(commonTemplate);
|
|
|
|
assert.ok(
|
|
find('[data-test-stop-warning]'),
|
|
'Stop warning is shown since the last allocation failed'
|
|
);
|
|
assert.notOk(find('[data-test-attempt-notice]'), 'Reschdule attempt notice is not shown');
|
|
|
|
await componentA11yAudit(this.element, assert);
|
|
});
|
|
|
|
test('when the allocation has failed and there is no follow up evaluation, a warning is shown', async function(assert) {
|
|
const attempts = 2;
|
|
|
|
this.server.create('allocation', 'rescheduled', {
|
|
rescheduleAttempts: attempts,
|
|
rescheduleSuccess: false,
|
|
});
|
|
|
|
const lastAllocation = server.schema.allocations.findBy({ nextAllocation: undefined });
|
|
lastAllocation.update({
|
|
followupEvalId: server.create('evaluation', {
|
|
waitUntil: moment()
|
|
.add(2, 'hours')
|
|
.toDate(),
|
|
}).id,
|
|
});
|
|
|
|
await this.store.findAll('allocation');
|
|
|
|
let allocation = this.store
|
|
.peekAll('allocation')
|
|
.find(alloc => !alloc.get('nextAllocation.content'));
|
|
this.set('allocation', allocation);
|
|
|
|
await render(commonTemplate);
|
|
|
|
assert.ok(
|
|
find('[data-test-attempt-notice]'),
|
|
'Reschedule notice is shown since the follow up eval says so'
|
|
);
|
|
assert.notOk(find('[data-test-stop-warning]'), 'Stop warning is not shown');
|
|
|
|
await componentA11yAudit(this.element, assert);
|
|
});
|
|
|
|
test('when the allocation has a next allocation already, it is shown in the timeline', async function(assert) {
|
|
const attempts = 2;
|
|
|
|
const originalAllocation = this.server.create('allocation', 'rescheduled', {
|
|
rescheduleAttempts: attempts,
|
|
rescheduleSuccess: true,
|
|
});
|
|
|
|
await this.store.findAll('allocation');
|
|
|
|
const allocation = this.store.peekAll('allocation').findBy('id', originalAllocation.id);
|
|
|
|
this.set('allocation', allocation);
|
|
await render(commonTemplate);
|
|
|
|
assert.ok(
|
|
find('[data-test-reschedule-label]').textContent.trim(),
|
|
'Next Allocation',
|
|
'The first allocation is the next allocation and labeled as such'
|
|
);
|
|
|
|
assert.equal(
|
|
find('[data-test-allocation] [data-test-allocation-link]').textContent.trim(),
|
|
allocation.get('nextAllocation.shortId'),
|
|
'The next allocation item is for the correct allocation'
|
|
);
|
|
|
|
assert.equal(
|
|
findAll('[data-test-allocation]')[1],
|
|
find(`[data-test-allocation="${allocation.id}"]`),
|
|
'Second allocation is the current allocation'
|
|
);
|
|
|
|
assert.notOk(find('[data-test-stop-warning]'), 'No stop warning');
|
|
assert.notOk(find('[data-test-attempt-notice]'), 'No attempt notice');
|
|
});
|
|
});
|