import { currentURL } from '@ember/test-helpers'; import { assign } from '@ember/polyfills'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; import { setupMirage } from 'ember-cli-mirage/test-support'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import setupCodeMirror from 'nomad-ui/tests/helpers/codemirror'; import JobRun from 'nomad-ui/tests/pages/jobs/run'; const newJobName = 'new-job'; const newJobTaskGroupName = 'redis'; let managementToken, clientToken; const jsonJob = overrides => { return JSON.stringify( assign( {}, { Name: newJobName, Namespace: 'default', Datacenters: ['dc1'], Priority: 50, TaskGroups: [ { Name: newJobTaskGroupName, Tasks: [ { Name: 'redis', Driver: 'docker', }, ], }, ], }, overrides ), null, 2 ); }; module('Acceptance | job run', function(hooks) { setupApplicationTest(hooks); setupMirage(hooks); setupCodeMirror(hooks); hooks.beforeEach(function() { // Required for placing allocations (a result of creating jobs) server.create('node'); managementToken = server.create('token'); clientToken = server.create('token'); window.localStorage.nomadTokenSecret = managementToken.secretId; }); test('it passes an accessibility audit', async function(assert) { await JobRun.visit(); await a11yAudit(assert); }); test('visiting /jobs/run', async function(assert) { await JobRun.visit(); assert.equal(currentURL(), '/jobs/run'); assert.equal(document.title, 'Run a job - Nomad'); }); test('when submitting a job, the site redirects to the new job overview page', async function(assert) { const spec = jsonJob(); await JobRun.visit(); await JobRun.editor.editor.fillIn(spec); await JobRun.editor.plan(); await JobRun.editor.run(); assert.equal( currentURL(), `/jobs/${newJobName}`, `Redirected to the job overview page for ${newJobName}` ); }); test('when submitting a job to a different namespace, the redirect to the job overview page takes namespace into account', async function(assert) { const newNamespace = 'second-namespace'; server.create('namespace', { id: newNamespace }); const spec = jsonJob({ Namespace: newNamespace }); await JobRun.visit(); await JobRun.editor.editor.fillIn(spec); await JobRun.editor.plan(); await JobRun.editor.run(); assert.equal( currentURL(), `/jobs/${newJobName}?namespace=${newNamespace}`, `Redirected to the job overview page for ${newJobName} and switched the namespace to ${newNamespace}` ); }); test('when the user doesn’t have permission to run a job, redirects to the job overview page', async function(assert) { window.localStorage.nomadTokenSecret = clientToken.secretId; await JobRun.visit(); assert.equal(currentURL(), '/jobs'); }); });