From a85075aceab787a10642f6dedf369b48055a919e Mon Sep 17 00:00:00 2001 From: Aaron Tan Date: Sun, 30 Oct 2016 15:36:28 -0400 Subject: [PATCH] Mutex validator added. --- awx/api/views.py | 5 +++++ awx/main/tests/functional/models/test_workflow.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/awx/api/views.py b/awx/api/views.py index 84306332b0..1e5c4284b9 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -2657,6 +2657,11 @@ class WorkflowJobTemplateNodeChildrenBaseList(EnforceParentRelationshipMixin, Su return getattr(parent, self.relationship).all() def is_valid_relation(self, parent, sub, created=False): + mutex_list = ('success_nodes', 'failure_nodes') if self.relationship == 'always_nodes' else ('always_nodes',) + for relation in mutex_list: + if getattr(parent, relation).all().exists(): + return {'Error': 'Cannot associate {0} when {1} have been associated.'.format(self.relationship, relation)} + if created: return None diff --git a/awx/main/tests/functional/models/test_workflow.py b/awx/main/tests/functional/models/test_workflow.py index b8053ff9b2..0d39d6c091 100644 --- a/awx/main/tests/functional/models/test_workflow.py +++ b/awx/main/tests/functional/models/test_workflow.py @@ -100,6 +100,11 @@ class TestWorkflowJobTemplate: assert test_view.is_valid_relation(node_assoc, nodes[0]) == {'Error': 'Cycle detected!'} # test multi-ancestor validation assert test_view.is_valid_relation(node_assoc, nodes[1]) == {'Error': 'Multiple ancestor detected!'} + # test mutex validation + test_view.relationship = 'failure_nodes' + node_assoc_1 = WorkflowJobTemplateNode.objects.create(workflow_job_template=wfjt) + assert (test_view.is_valid_relation(nodes[2], node_assoc_1) == + {'Error': 'Cannot associate failure_nodes when always_nodes have been associated.'}) @pytest.mark.django_db class TestWorkflowJobFailure: