github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/ui/tests/integration/job-page/parts/placement-failures-test.js (about) 1 import { run } from '@ember/runloop'; 2 import hbs from 'htmlbars-inline-precompile'; 3 import { findAll, find } from 'ember-native-dom-helpers'; 4 import { module, test } from 'qunit'; 5 import { setupRenderingTest } from 'ember-qunit'; 6 import { render, settled } from '@ember/test-helpers'; 7 import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage'; 8 import { initialize as fragmentSerializerInitializer } from 'nomad-ui/initializers/fragment-serializer'; 9 10 module('Integration | Component | job-page/parts/placement-failures', function(hooks) { 11 setupRenderingTest(hooks); 12 13 hooks.beforeEach(function() { 14 fragmentSerializerInitializer(this.owner); 15 window.localStorage.clear(); 16 this.store = this.owner.lookup('service:store'); 17 this.server = startMirage(); 18 this.server.create('namespace'); 19 }); 20 21 hooks.afterEach(function() { 22 this.server.shutdown(); 23 window.localStorage.clear(); 24 }); 25 26 test('when the job has placement failures, they are called out', function(assert) { 27 this.server.create('job', { failedPlacements: true, createAllocations: false }); 28 this.store.findAll('job').then(jobs => { 29 jobs.forEach(job => job.reload()); 30 }); 31 32 return settled().then(async () => { 33 run(() => { 34 this.set('job', this.store.peekAll('job').get('firstObject')); 35 }); 36 37 await render(hbs` 38 {{job-page/parts/placement-failures job=job}}) 39 `); 40 41 return settled().then(() => { 42 const failedEvaluation = this.get('job.evaluations') 43 .filterBy('hasPlacementFailures') 44 .sortBy('modifyIndex') 45 .reverse() 46 .get('firstObject'); 47 const failedTGAllocs = failedEvaluation.get('failedTGAllocs'); 48 49 assert.ok(find('[data-test-placement-failures]'), 'Placement failures section found'); 50 51 const taskGroupLabels = findAll('[data-test-placement-failure-task-group]').map(title => 52 title.textContent.trim() 53 ); 54 55 failedTGAllocs.forEach(alloc => { 56 const name = alloc.get('name'); 57 assert.ok( 58 taskGroupLabels.find(label => label.includes(name)), 59 `${name} included in placement failures list` 60 ); 61 assert.ok( 62 taskGroupLabels.find(label => label.includes(alloc.get('coalescedFailures') + 1)), 63 'The number of unplaced allocs = CoalescedFailures + 1' 64 ); 65 }); 66 }); 67 }); 68 }); 69 70 test('when the job has no placement failures, the placement failures section is gone', function(assert) { 71 this.server.create('job', { noFailedPlacements: true, createAllocations: false }); 72 this.store.findAll('job'); 73 74 return settled().then(async () => { 75 run(() => { 76 this.set('job', this.store.peekAll('job').get('firstObject')); 77 }); 78 79 await render(hbs` 80 {{job-page/parts/placement-failures job=job}}) 81 `); 82 83 return settled().then(() => { 84 assert.notOk( 85 find('[data-test-placement-failures]'), 86 'Placement failures section not found' 87 ); 88 }); 89 }); 90 }); 91 });