{job.name || node.unifiedJobTemplate.name}
+ {job.status !== 'pending' &&{jobName}
Automation JT
)).toEqual(true); + expect(wrapper.text('p')).toContain('Automation JT'); expect(wrapper.find('WorkflowOutputNode Elapsed').text()).toBe('00:00:07'); }); test('node contents displayed correctly when Job Template deleted', () => { @@ -95,7 +101,7 @@ describe('WorkflowOutputNode', () => { ); - expect(wrapper.contains(Automation JT 2
)).toEqual(true); + expect(wrapper.contains(Automation JT 2
)).toBe(true); expect(wrapper.find('WorkflowOutputNode Elapsed').text()).toBe('00:00:07'); }); test('node contents displayed correctly when Job deleted', () => { diff --git a/awx/ui_next/src/screens/Template/Survey/SurveyPreviewModal.jsx b/awx/ui_next/src/screens/Template/Survey/SurveyPreviewModal.jsx index d542c1b56b..1b1086e6b2 100644 --- a/awx/ui_next/src/screens/Template/Survey/SurveyPreviewModal.jsx +++ b/awx/ui_next/src/screens/Template/Survey/SurveyPreviewModal.jsx @@ -104,7 +104,9 @@ function SurveyPreviewModal({ isReadOnly variant={SelectVariant.typeaheadMulti} isOpen={false} - selections={q.default.length > 0 && q.default.split('\n')} + selections={ + q.default.length > 0 ? q.default.split('\n') : [] + } onToggle={() => {}} aria-label={i18n._(t`Multi-Select`)} id={`survey-preview-multiSelect-${q.variable}`} diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeAddModal.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeAddModal.jsx index 18ee5fcdc9..12c1deb2f8 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeAddModal.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeAddModal.jsx @@ -6,18 +6,56 @@ import { WorkflowStateContext, } from '../../../../../contexts/Workflow'; import NodeModal from './NodeModal'; +import { getAddedAndRemoved } from '../../../../../util/lists'; function NodeAddModal({ i18n }) { const dispatch = useContext(WorkflowDispatchContext); const { addNodeSource } = useContext(WorkflowStateContext); - const addNode = (resource, linkType) => { + const addNode = (values, config) => { + const { + approvalName, + approvalDescription, + timeoutMinutes, + timeoutSeconds, + linkType, + } = values; + + if (values) { + const { added, removed } = getAddedAndRemoved( + config?.defaults?.credentials, + values?.credentials + ); + + values.addedCredentials = added; + values.removedCredentials = removed; + } + + const node = { + linkType, + }; + + delete values.linkType; + + if (values.nodeType === 'workflow_approval_template') { + node.nodeResource = { + description: approvalDescription, + name: approvalName, + timeout: Number(timeoutMinutes) * 60 + Number(timeoutSeconds), + type: 'workflow_approval_template', + }; + } else { + node.nodeResource = values.nodeResource; + if ( + values?.nodeType === 'job_template' || + values?.nodeType === 'workflow_job_template' + ) { + node.promptValues = values; + } + } dispatch({ type: 'CREATE_NODE', - node: { - linkType, - nodeResource: resource, - }, + node, }); }; diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeAddModal.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeAddModal.test.jsx index 723de11c73..036d7b7bb8 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeAddModal.test.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeAddModal.test.jsx @@ -1,6 +1,9 @@ import React from 'react'; import { act } from 'react-dom/test-utils'; -import { mountWithContexts } from '../../../../../../testUtils/enzymeHelpers'; +import { + mountWithContexts, + waitForElement, +} from '../../../../../../testUtils/enzymeHelpers'; import { WorkflowDispatchContext, WorkflowStateContext, @@ -13,6 +16,9 @@ const nodeResource = { id: 448, type: 'job_template', name: 'Test JT', + summary_fields: { + credentials: [], + }, }; const workflowContext = { @@ -20,23 +26,37 @@ const workflowContext = { }; describe('NodeAddModal', () => { - test('Node modal confirmation dispatches as expected', () => { + test('Node modal confirmation dispatches as expected', async () => { const wrapper = mountWithContexts(