From 6f44f789171d326cc1fc0bd1e00472e14ff0a7ac Mon Sep 17 00:00:00 2001 From: Luiz Aoqui Date: Tue, 3 Aug 2021 13:50:43 -0400 Subject: [PATCH] ui: fix job dispatch page when job doesn't have any meta fields (#10934) --- ui/app/components/job-dispatch.js | 6 +++--- ui/tests/acceptance/job-dispatch-test.js | 14 ++++++++++++++ ui/tests/pages/jobs/dispatch.js | 1 + 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ui/app/components/job-dispatch.js b/ui/app/components/job-dispatch.js index 8c9b4fbc2e7b..020c8374da17 100644 --- a/ui/app/components/job-dispatch.js +++ b/ui/app/components/job-dispatch.js @@ -47,7 +47,7 @@ export default class JobDispatch extends Component { super(...arguments); // Helper for mapping the params into a useable form. - const mapper = (values = [], required) => + const mapper = (values, required) => values.map( x => new MetaField({ @@ -59,8 +59,8 @@ export default class JobDispatch extends Component { ); // Fetch the different types of parameters. - const required = mapper(this.args.job.parameterizedDetails.MetaRequired, true); - const optional = mapper(this.args.job.parameterizedDetails.MetaOptional, false); + const required = mapper(this.args.job.parameterizedDetails.MetaRequired || [], true); + const optional = mapper(this.args.job.parameterizedDetails.MetaOptional || [], false); // Merge them, required before optional. this.metaFields = required.concat(optional); diff --git a/ui/tests/acceptance/job-dispatch-test.js b/ui/tests/acceptance/job-dispatch-test.js index c64b69676df3..8dff73409071 100644 --- a/ui/tests/acceptance/job-dispatch-test.js +++ b/ui/tests/acceptance/job-dispatch-test.js @@ -100,6 +100,20 @@ module('Acceptance | job dispatch', function(hooks) { }); }); + test('job without meta fields', async function(assert) { + const jobWithoutMeta = server.create('job', 'parameterized', { + status: 'running', + namespaceId: namespace.name, + parameterizedJob: { + MetaRequired: null, + MetaOptional: null, + }, + }); + + await JobDispatch.visit({ id: jobWithoutMeta.id, namespace: namespace.name }); + assert.ok(JobDispatch.dispatchButton.isPresent); + }); + test('payload text area is hidden when forbidden', async function(assert) { job.parameterizedJob.Payload = 'forbidden'; job.save(); diff --git a/ui/tests/pages/jobs/dispatch.js b/ui/tests/pages/jobs/dispatch.js index 26ea87219934..3080c167e8c3 100644 --- a/ui/tests/pages/jobs/dispatch.js +++ b/ui/tests/pages/jobs/dispatch.js @@ -18,6 +18,7 @@ export default create({ scope: '[data-test-dispatch-button]', isDisabled: property('disabled'), click: clickable(), + isPresent: isPresent(), }, hasError: isVisible('[data-test-dispatch-error]'),