From 91c9e092d7d5ae5de650b217063bb4015700fd8c Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Thu, 19 Apr 2018 11:56:11 -0700 Subject: [PATCH] Refactor periodic job tests --- .../integration/job-page/periodic-test.js | 211 ++++++++---------- 1 file changed, 93 insertions(+), 118 deletions(-) diff --git a/ui/tests/integration/job-page/periodic-test.js b/ui/tests/integration/job-page/periodic-test.js index 10b961fd0..76f8ede6e 100644 --- a/ui/tests/integration/job-page/periodic-test.js +++ b/ui/tests/integration/job-page/periodic-test.js @@ -19,6 +19,23 @@ moduleForComponent('job-page/periodic', 'Integration | Component | job-page/peri }, }); +const commonTemplate = hbs` + {{job-page/periodic + job=job + sortProperty=sortProperty + sortDescending=sortDescending + currentPage=currentPage + gotoJob=gotoJob}} +`; + +const commonProperties = job => ({ + job, + sortProperty: 'name', + sortDescending: true, + currentPage: 1, + gotoJob: () => {}, +}); + test('Clicking Force Launch launches a new periodic child job', function(assert) { const childrenCount = 3; @@ -32,22 +49,9 @@ test('Clicking Force Launch launches a new periodic child job', function(assert) return wait().then(() => { const job = this.store.peekAll('job').findBy('plainId', 'parent'); - this.setProperties({ - job, - sortProperty: 'name', - sortDescending: true, - currentPage: 1, - gotoJob: () => {}, - }); - this.render(hbs` - {{job-page/periodic - job=job - sortProperty=sortProperty - sortDescending=sortDescending - currentPage=currentPage - gotoJob=gotoJob}} - `); + this.setProperties(commonProperties(job)); + this.render(commonTemplate); return wait().then(() => { const currentJobCount = server.db.jobs.length; @@ -61,12 +65,7 @@ test('Clicking Force Launch launches a new periodic child job', function(assert) click('[data-test-force-launch]'); return wait().then(() => { - const id = job.get('plainId'); - const namespace = job.get('namespace.name') || 'default'; - let expectedURL = `/v1/job/${id}/periodic/force`; - if (namespace !== 'default') { - expectedURL += `?namespace=${namespace}`; - } + const expectedURL = jobURL(job, '/periodic/force'); assert.ok( server.pretender.handledRequests @@ -88,28 +87,16 @@ test('Clicking force launch without proper permissions shows an error message', id: 'parent', childrenCount: 1, createAllocations: false, + status: 'running', }); this.store.findAll('job'); return wait().then(() => { const job = this.store.peekAll('job').findBy('plainId', 'parent'); - this.setProperties({ - job, - sortProperty: 'name', - sortDescending: true, - currentPage: 1, - gotoJob: () => {}, - }); - this.render(hbs` - {{job-page/periodic - job=job - sortProperty=sortProperty - sortDescending=sortDescending - currentPage=currentPage - gotoJob=gotoJob}} - `); + this.setProperties(commonProperties(job)); + this.render(commonTemplate); return wait().then(() => { assert.notOk(find('[data-test-job-error-title]'), 'No error message yet'); @@ -139,53 +126,23 @@ test('Stopping a job sends a delete request for the job', function(assert) { const mirageJob = this.server.create('job', 'periodic', { childrenCount: 0, createAllocations: false, + status: 'running', }); + let job; this.store.findAll('job'); - return wait().then(() => { - const job = this.store.peekAll('job').findBy('plainId', mirageJob.id); + return wait() + .then(() => { + job = this.store.peekAll('job').findBy('plainId', mirageJob.id); - this.setProperties({ - job, - sortProperty: 'name', - sortDescending: true, - currentPage: 1, - gotoJob: () => {}, - }); + this.setProperties(commonProperties(job)); + this.render(commonTemplate); - this.render(hbs` - {{job-page/periodic - job=job - sortProperty=sortProperty - sortDescending=sortDescending - currentPage=currentPage - gotoJob=gotoJob}} - `); - - return wait().then(() => { - click('[data-test-stop] [data-test-idle-button]'); - return wait().then(() => { - click('[data-test-stop] [data-test-confirm-button]'); - - return wait().then(() => { - const id = job.get('plainId'); - const namespace = job.get('namespace.name') || 'default'; - let expectedURL = `/v1/job/${id}`; - if (namespace !== 'default') { - expectedURL += `?namespace=${namespace}`; - } - - assert.ok( - server.pretender.handledRequests - .filterBy('method', 'DELETE') - .find(req => req.url === expectedURL), - 'DELETE URL was made correctly' - ); - }); - }); - }); - }); + return wait(); + }) + .then(stopJob) + .then(() => expectDeleteRequest(assert, job)); }); test('Stopping a job without proper permissions shows an error message', function(assert) { @@ -194,51 +151,69 @@ test('Stopping a job without proper permissions shows an error message', functio const mirageJob = this.server.create('job', 'periodic', { childrenCount: 0, createAllocations: false, + status: 'running', }); this.store.findAll('job'); - return wait().then(() => { - const job = this.store.peekAll('job').findBy('plainId', mirageJob.id); + return wait() + .then(() => { + const job = this.store.peekAll('job').findBy('plainId', mirageJob.id); - this.setProperties({ - job, - sortProperty: 'name', - sortDescending: true, - currentPage: 1, - gotoJob: () => {}, - }); + this.setProperties(commonProperties(job)); + this.render(commonTemplate); - this.render(hbs` - {{job-page/periodic - job=job - sortProperty=sortProperty - sortDescending=sortDescending - currentPage=currentPage - gotoJob=gotoJob}} - `); - - return wait().then(() => { - click('[data-test-stop] [data-test-idle-button]'); - return wait().then(() => { - click('[data-test-stop] [data-test-confirm-button]'); - - return wait().then(() => { - assert.equal( - find('[data-test-job-error-title]').textContent, - 'Could Not Stop Job', - 'Appropriate error is shown' - ); - assert.ok( - find('[data-test-job-error-body]').textContent.includes('ACL'), - 'The error message mentions ACLs' - ); - - click('[data-test-job-error-close]'); - - assert.notOk(find('[data-test-job-error-title]'), 'Error message is dismissable'); - }); - }); - }); - }); + return wait(); + }) + .then(stopJob) + .then(expectStopError(assert)); }); + +function expectDeleteRequest(assert, job) { + const expectedURL = jobURL(job); + + assert.ok( + server.pretender.handledRequests + .filterBy('method', 'DELETE') + .find(req => req.url === expectedURL), + 'DELETE URL was made correctly' + ); + + return wait(); +} + +function jobURL(job, path = '') { + const id = job.get('plainId'); + const namespace = job.get('namespace.name') || 'default'; + let expectedURL = `/v1/job/${id}${path}`; + if (namespace !== 'default') { + expectedURL += `?namespace=${namespace}`; + } + return expectedURL; +} + +function stopJob() { + click('[data-test-stop] [data-test-idle-button]'); + return wait().then(() => { + click('[data-test-stop] [data-test-confirm-button]'); + return wait(); + }); +} + +function expectStopError(assert) { + return () => { + assert.equal( + find('[data-test-job-error-title]').textContent, + 'Could Not Stop Job', + 'Appropriate error is shown' + ); + assert.ok( + find('[data-test-job-error-body]').textContent.includes('ACL'), + 'The error message mentions ACLs' + ); + + click('[data-test-job-error-close]'); + assert.notOk(find('[data-test-job-error-title]'), 'Error message is dismissable'); + return wait(); + }; +}