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