diff --git a/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java b/src/main/java/com/apiflows/parser/OpenAPIWorkflowValidator.java index 7a402bb..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; } @@ -493,6 +500,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"));