From c92873bbd1627ba921c79ac5320e0d682c45df80 Mon Sep 17 00:00:00 2001 From: Tihomir Surdilovic Date: Mon, 4 Apr 2022 13:45:11 -0400 Subject: [PATCH] fix validation for callback state Signed-off-by: Tihomir Surdilovic --- .../validation/WorkflowValidatorImpl.java | 2 +- .../test/WorkflowValidationTest.java | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java b/validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java index f226c9a8..1e0999c9 100644 --- a/validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java +++ b/validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java @@ -330,7 +330,7 @@ public List validate() { ValidationError.WORKFLOW_VALIDATION); } - if (haveFunctionDefinition( + if (!haveFunctionDefinition( callbackState.getAction().getFunctionRef().getRefName(), functions)) { addValidationError( "CallbackState action function ref does not reference a defined workflow function definition", diff --git a/validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java b/validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java index 601e667b..38dbe2d2 100644 --- a/validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java +++ b/validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java @@ -213,4 +213,48 @@ public void testValidateWorkflowForOptionalIterationParam() { 1, validationErrors.size()); // validation error raised for functionref not for iterationParam } + + @Test + public void testMissingFunctionRefForCallbackState() { + WorkflowValidator workflowValidator = new WorkflowValidatorImpl(); + List validationErrors = + workflowValidator + .setSource( + "{\n" + + " \"id\": \"callbackstatemissingfuncref\",\n" + + " \"version\": \"1.0\",\n" + + " \"specVersion\": \"0.8\",\n" + + " \"name\": \"Callback State Test\",\n" + + " \"start\": \"CheckCredit\",\n" + + " \"states\": [\n" + + " {\n" + + " \"name\": \"CheckCredit\",\n" + + " \"type\": \"callback\",\n" + + " \"action\": {\n" + + " \"functionRef\": {\n" + + " \"refName\": \"callCreditCheckMicroservice\",\n" + + " \"arguments\": {\n" + + " \"customer\": \"${ .customer }\"\n" + + " }\n" + + " }\n" + + " },\n" + + " \"eventRef\": \"CreditCheckCompletedEvent\",\n" + + " \"timeouts\": {\n" + + " \"stateExecTimeout\": \"PT15M\"\n" + + " },\n" + + " \"end\": true\n" + + " }\n" + + " ]\n" + + "}") + .validate(); + + Assertions.assertNotNull(validationErrors); + Assertions.assertEquals(2, validationErrors.size()); + Assertions.assertEquals( + "CallbackState event ref does not reference a defined workflow event definition", + validationErrors.get(0).getMessage()); + Assertions.assertEquals( + "CallbackState action function ref does not reference a defined workflow function definition", + validationErrors.get(1).getMessage()); + } }