199 lines
5.6 KiB
JavaScript
199 lines
5.6 KiB
JavaScript
|
import { getOwner } from '@ember/application';
|
||
|
import { test, moduleForComponent } from 'ember-qunit';
|
||
|
import { find, findAll } from 'ember-native-dom-helpers';
|
||
|
import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage';
|
||
|
import wait from 'ember-test-helpers/wait';
|
||
|
import hbs from 'htmlbars-inline-precompile';
|
||
|
import moment from 'moment';
|
||
|
|
||
|
moduleForComponent(
|
||
|
'reschedule-event-timeline',
|
||
|
'Integration | Component | reschedule event timeline',
|
||
|
{
|
||
|
integration: true,
|
||
|
beforeEach() {
|
||
|
this.store = getOwner(this).lookup('service:store');
|
||
|
this.server = startMirage();
|
||
|
this.server.create('namespace');
|
||
|
this.server.create('node');
|
||
|
this.server.create('job', { createAllocations: false });
|
||
|
},
|
||
|
afterEach() {
|
||
|
this.server.shutdown();
|
||
|
},
|
||
|
}
|
||
|
);
|
||
|
|
||
|
const commonTemplate = hbs`
|
||
|
{{reschedule-event-timeline allocation=allocation}}
|
||
|
`;
|
||
|
|
||
|
test('when the allocation is running, the timeline shows past allocations', function(assert) {
|
||
|
const attempts = 2;
|
||
|
|
||
|
this.server.create('allocation', 'rescheduled', {
|
||
|
rescheduleAttempts: attempts,
|
||
|
rescheduleSuccess: true,
|
||
|
});
|
||
|
|
||
|
this.store.findAll('allocation');
|
||
|
let allocation;
|
||
|
|
||
|
return wait()
|
||
|
.then(() => {
|
||
|
allocation = this.store
|
||
|
.peekAll('allocation')
|
||
|
.find(alloc => !alloc.get('nextAllocation.content'));
|
||
|
|
||
|
this.set('allocation', allocation);
|
||
|
this.render(commonTemplate);
|
||
|
|
||
|
return wait();
|
||
|
})
|
||
|
.then(() => {
|
||
|
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'
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('when the allocation has failed and there is a follow up evaluation, a note with a time is shown', function(assert) {
|
||
|
const attempts = 2;
|
||
|
|
||
|
this.server.create('allocation', 'rescheduled', {
|
||
|
rescheduleAttempts: attempts,
|
||
|
rescheduleSuccess: false,
|
||
|
});
|
||
|
|
||
|
this.store.findAll('allocation');
|
||
|
let allocation;
|
||
|
|
||
|
return wait()
|
||
|
.then(() => {
|
||
|
allocation = this.store
|
||
|
.peekAll('allocation')
|
||
|
.find(alloc => !alloc.get('nextAllocation.content'));
|
||
|
|
||
|
this.set('allocation', allocation);
|
||
|
this.render(commonTemplate);
|
||
|
|
||
|
return wait();
|
||
|
})
|
||
|
.then(() => {
|
||
|
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');
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('when the allocation has failed and there is no follow up evaluation, a warning is shown', 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,
|
||
|
});
|
||
|
|
||
|
this.store.findAll('allocation');
|
||
|
let allocation;
|
||
|
|
||
|
return wait()
|
||
|
.then(() => {
|
||
|
allocation = this.store
|
||
|
.peekAll('allocation')
|
||
|
.find(alloc => !alloc.get('nextAllocation.content'));
|
||
|
|
||
|
this.set('allocation', allocation);
|
||
|
this.render(commonTemplate);
|
||
|
|
||
|
return wait();
|
||
|
})
|
||
|
.then(() => {
|
||
|
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');
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('when the allocation has a next allocation already, it is shown in the timeline', function(assert) {
|
||
|
const attempts = 2;
|
||
|
|
||
|
const originalAllocation = this.server.create('allocation', 'rescheduled', {
|
||
|
rescheduleAttempts: attempts,
|
||
|
rescheduleSuccess: true,
|
||
|
});
|
||
|
|
||
|
this.store.findAll('allocation');
|
||
|
let allocation;
|
||
|
|
||
|
return wait()
|
||
|
.then(() => {
|
||
|
allocation = this.store.peekAll('allocation').findBy('id', originalAllocation.id);
|
||
|
|
||
|
this.set('allocation', allocation);
|
||
|
this.render(commonTemplate);
|
||
|
|
||
|
return wait();
|
||
|
})
|
||
|
.then(() => {
|
||
|
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');
|
||
|
});
|
||
|
});
|