diff --git a/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeViewModal.js b/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeViewModal.js
index 51fc3eca1d..0ee832f652 100644
--- a/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeViewModal.js
+++ b/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeViewModal.js
@@ -187,12 +187,27 @@ function NodeViewModal({ readOnly }) {
}
}
+ let nodeUpdatedConvergence = {};
+
+ if (
+ nodeToView.all_parents_must_converge !== undefined &&
+ nodeToView.all_parents_must_converge !==
+ nodeToView.originalNodeObject.all_parents_must_converge
+ ) {
+ nodeUpdatedConvergence = {
+ ...nodeToView.originalNodeObject,
+ all_parents_must_converge: nodeToView.all_parents_must_converge,
+ };
+ } else {
+ nodeUpdatedConvergence = nodeToView.originalNodeObject;
+ }
+
Content = (
);
}
diff --git a/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.js b/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.js
index da1e65f472..ac0802f5a0 100644
--- a/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.js
+++ b/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.js
@@ -148,7 +148,7 @@ function VisualizerNode({
if (addingLink) {
updateHelpText(
node.isInvalidLinkTarget
- ? t`Invalid link target. Unable to link to children or ancestor nodes. Graph cycles are not supported.`
+ ? t`Invalid link target. Unable to link to children or ancestor nodes. Graph cycles are not supported.`
: t`Click to create a new link to this node.`
);
onMouseOver(node);
@@ -264,8 +264,12 @@ function VisualizerNode({
nodePositions[node.id].y - nodePositions[1].y
})`}
>
- {(node.all_parents_must_converge ||
- node?.originalNodeObject?.all_parents_must_converge) && (
+ {(Object.prototype.hasOwnProperty.call(
+ node,
+ 'all_parents_must_converge'
+ )
+ ? node.all_parents_must_converge
+ : node?.originalNodeObject?.all_parents_must_converge) && (
<>
- {t`ALL`}
+ {t`ALL`}
>
)}
diff --git a/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.test.js b/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.test.js
index 78fd0a6122..bcf722e8e7 100644
--- a/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.test.js
+++ b/awx/ui/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.test.js
@@ -270,6 +270,68 @@ describe('VisualizerNode', () => {
});
});
+ describe('Node should display convergence label', () => {
+ test('Should display ALL convergence label', async () => {
+ const wrapper = mountWithContexts(
+
+
+
+
+
+ );
+ expect(wrapper.find('p[data-cy="convergence-label"]').length).toBe(1);
+ expect(
+ wrapper.find('p[data-cy="convergence-label"]').prop('children')
+ ).toEqual('ALL');
+ });
+ });
+
describe('Node without full unified job template', () => {
let wrapper;
beforeEach(() => {
@@ -336,6 +398,7 @@ describe('VisualizerNode', () => {
.simulate('click');
});
expect(JobTemplatesAPI.readDetail).toHaveBeenCalledWith(7);
+ expect(wrapper.find('p[data-cy="convergence-label"]').length).toBe(0);
});
test('Displays error fetching full unified job template', async () => {