github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/ui/tests/integration/job-page/parts/task-groups-test.js (about) 1 import { assign } from '@ember/polyfills'; 2 import hbs from 'htmlbars-inline-precompile'; 3 import { click, 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 sinon from 'sinon'; 8 import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage'; 9 import { initialize as fragmentSerializerInitializer } from 'nomad-ui/initializers/fragment-serializer'; 10 11 module('Integration | Component | job-page/parts/task-groups', function(hooks) { 12 setupRenderingTest(hooks); 13 14 hooks.beforeEach(function() { 15 fragmentSerializerInitializer(this.owner); 16 window.localStorage.clear(); 17 this.store = this.owner.lookup('service:store'); 18 this.server = startMirage(); 19 this.server.create('namespace'); 20 }); 21 22 hooks.afterEach(function() { 23 this.server.shutdown(); 24 }); 25 26 const props = (job, options = {}) => 27 assign( 28 { 29 job, 30 sortProperty: 'name', 31 sortDescending: true, 32 gotoTaskGroup: () => {}, 33 }, 34 options 35 ); 36 37 test('the job detail page should list all task groups', function(assert) { 38 this.server.create('job', { 39 createAllocations: false, 40 }); 41 42 this.store.findAll('job').then(jobs => { 43 jobs.forEach(job => job.reload()); 44 }); 45 46 return settled().then(async () => { 47 const job = this.store.peekAll('job').get('firstObject'); 48 this.setProperties(props(job)); 49 50 await render(hbs` 51 {{job-page/parts/task-groups 52 job=job 53 sortProperty=sortProperty 54 sortDescending=sortDescending 55 gotoTaskGroup=gotoTaskGroup}} 56 `); 57 58 return settled().then(() => { 59 assert.equal( 60 findAll('[data-test-task-group]').length, 61 job.get('taskGroups.length'), 62 'One row per task group' 63 ); 64 }); 65 }); 66 }); 67 68 test('each row in the task group table should show basic information about the task group', function(assert) { 69 this.server.create('job', { 70 createAllocations: false, 71 }); 72 73 this.store.findAll('job').then(jobs => { 74 jobs.forEach(job => job.reload()); 75 }); 76 77 return settled().then(async () => { 78 const job = this.store.peekAll('job').get('firstObject'); 79 const taskGroup = job 80 .get('taskGroups') 81 .sortBy('name') 82 .reverse() 83 .get('firstObject'); 84 85 this.setProperties(props(job)); 86 87 await render(hbs` 88 {{job-page/parts/task-groups 89 job=job 90 sortProperty=sortProperty 91 sortDescending=sortDescending 92 gotoTaskGroup=gotoTaskGroup}} 93 `); 94 95 return settled().then(() => { 96 const taskGroupRow = find('[data-test-task-group]'); 97 98 assert.equal( 99 taskGroupRow.querySelector('[data-test-task-group-name]').textContent.trim(), 100 taskGroup.get('name'), 101 'Name' 102 ); 103 assert.equal( 104 taskGroupRow.querySelector('[data-test-task-group-count]').textContent.trim(), 105 taskGroup.get('count'), 106 'Count' 107 ); 108 assert.equal( 109 taskGroupRow.querySelector('[data-test-task-group-cpu]').textContent.trim(), 110 `${taskGroup.get('reservedCPU')} MHz`, 111 'Reserved CPU' 112 ); 113 assert.equal( 114 taskGroupRow.querySelector('[data-test-task-group-mem]').textContent.trim(), 115 `${taskGroup.get('reservedMemory')} MiB`, 116 'Reserved Memory' 117 ); 118 assert.equal( 119 taskGroupRow.querySelector('[data-test-task-group-disk]').textContent.trim(), 120 `${taskGroup.get('reservedEphemeralDisk')} MiB`, 121 'Reserved Disk' 122 ); 123 }); 124 }); 125 }); 126 127 test('gotoTaskGroup is called when task group rows are clicked', function(assert) { 128 this.server.create('job', { 129 createAllocations: false, 130 }); 131 132 this.store.findAll('job').then(jobs => { 133 jobs.forEach(job => job.reload()); 134 }); 135 136 return settled().then(async () => { 137 const taskGroupSpy = sinon.spy(); 138 const job = this.store.peekAll('job').get('firstObject'); 139 const taskGroup = job 140 .get('taskGroups') 141 .sortBy('name') 142 .reverse() 143 .get('firstObject'); 144 145 this.setProperties( 146 props(job, { 147 gotoTaskGroup: taskGroupSpy, 148 }) 149 ); 150 151 await render(hbs` 152 {{job-page/parts/task-groups 153 job=job 154 sortProperty=sortProperty 155 sortDescending=sortDescending 156 gotoTaskGroup=gotoTaskGroup}} 157 `); 158 159 return settled().then(() => { 160 click('[data-test-task-group]'); 161 assert.ok( 162 taskGroupSpy.withArgs(taskGroup).calledOnce, 163 'Clicking the task group row calls the gotoTaskGroup action' 164 ); 165 }); 166 }); 167 }); 168 });