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