From 98b971e71f436da79e99c12b6b7323c02410e120 Mon Sep 17 00:00:00 2001 From: Beppe Catanese Date: Wed, 7 Feb 2024 21:00:56 +0100 Subject: [PATCH 1/2] Add workflowExists method --- .../parser/OpenAPIWorkflowValidator.java | 4 ++ .../parser/OpenAPIWorkflowValidatorTest.java | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java b/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java index 7a402bb..beff222 100644 --- a/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java +++ b/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java @@ -493,6 +493,10 @@ boolean stepExists(String workflowId, String stepId) { return this.stepIds.get(workflowId) != null && this.stepIds.get(workflowId).contains(stepId); } + boolean workflowExists(String workflowId) { + return this.workflowIds.stream().anyMatch(p -> p.contains(workflowId)); + } + List validateWorkflowIdsUniqueness(List workflows) { List errors = new ArrayList<>(); diff --git a/src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java b/src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java index e361953..4b056ac 100644 --- a/src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java +++ b/src/test/java/com/apiflows/parser/OpenAPIWorkflowValidatorTest.java @@ -624,6 +624,44 @@ public void validateStepsWorkflowIdsWithoutRuntimeExpression() { assertEquals(0, new OpenAPIWorkflowValidator().validateStepsWorkflowIds(steps, multipleWorkflowsSpecFiles).size()); } + @Test + void stepExists() { + OpenAPIWorkflowValidator validator = new OpenAPIWorkflowValidator(); + Map> stepIds = new HashMap<>(); + stepIds.put("w1", Set.of("step-one", "step-two", "step-three")); + + validator.stepIds = stepIds; + + assertTrue(validator.stepExists("w1", "step-one")); + } + + @Test + void stepNotFound() { + OpenAPIWorkflowValidator validator = new OpenAPIWorkflowValidator(); + Map> stepIds = new HashMap<>(); + stepIds.put("w1", Set.of("step-one", "step-two", "step-three")); + + validator.stepIds = stepIds; + + assertFalse(validator.stepExists("w1", "step-dummy")); + } + + @Test + void workflowExists() { + OpenAPIWorkflowValidator validator = new OpenAPIWorkflowValidator(); + validator.workflowIds.add("w1"); + + assertTrue(validator.workflowExists("w1")); + } + + @Test + void workflowNotFound() { + OpenAPIWorkflowValidator validator = new OpenAPIWorkflowValidator(); + validator.workflowIds.add("w1"); + + assertFalse(validator.workflowExists("dummy")); + } + @Test void validWorkflowId() { assertTrue(new OpenAPIWorkflowValidator().isValidWorkflowId("idOfTheWorkflow_1")); From 754af4a17df6c0358ce3f9487cfd822780f2cf51 Mon Sep 17 00:00:00 2001 From: Beppe Catanese Date: Wed, 7 Feb 2024 21:01:05 +0100 Subject: [PATCH 2/2] Validate SuccessAction workflowId --- .../java/com/apiflows/parser/OpenAPIWorkflowValidator.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java b/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java index beff222..cbfb784 100644 --- a/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java +++ b/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java @@ -273,6 +273,13 @@ List validateSuccessAction(String workflowId, String stepId, SuccessActi } } + if(successAction.getWorkflowId() != null && successAction.getType() != null && successAction.getType().equals("goto")) { + // when type `goto` workflowId must exist (if provided) + if(!workflowExists(workflowId)) { + errors.add("Step " + stepId + " SuccessAction workflowId is invalid (no such a workflow exists)"); + } + } + return errors; }