Skip to content

Commit c1ef0fb

Browse files
committed
Fix #232 - Add Errors validation to skipMessages
Signed-off-by: Ricardo Zanini <[email protected]>
1 parent 14345dc commit c1ef0fb

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public class WorkflowValidatorImpl implements WorkflowValidator {
4343

4444
private static final Logger logger = LoggerFactory.getLogger(WorkflowValidatorImpl.class);
4545
private boolean schemaValidationEnabled = true;
46-
private List<ValidationError> validationErrors = new ArrayList<>();
47-
private JsonNode workflowSchema = WorkflowSchemaLoader.getWorkflowSchema();
46+
private final List<ValidationError> validationErrors = new ArrayList<>();
47+
private final JsonNode workflowSchema = WorkflowSchemaLoader.getWorkflowSchema();
4848
private String source;
4949
private Workflow workflow;
5050

@@ -371,7 +371,10 @@ private boolean haveEventsDefinition(String eventName, List<EventDefinition> eve
371371
}
372372

373373
private static final Set<String> skipMessages =
374-
Set.of("$.start: string found, object expected", "$.functions: array found, object expected");
374+
Set.of(
375+
"$.start: string found, object expected",
376+
"$.functions: array found, object expected",
377+
"$.errors: array found, object expected");
375378

376379
private void addValidationError(String message, String type) {
377380
if (skipMessages.contains(message)) {

validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java

+27
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@
1818
import static io.serverlessworkflow.api.states.DefaultState.Type.OPERATION;
1919
import static io.serverlessworkflow.api.states.DefaultState.Type.SLEEP;
2020

21+
import com.fasterxml.jackson.databind.ObjectMapper;
2122
import io.serverlessworkflow.api.Workflow;
2223
import io.serverlessworkflow.api.actions.Action;
2324
import io.serverlessworkflow.api.end.End;
25+
import io.serverlessworkflow.api.error.ErrorDefinition;
2426
import io.serverlessworkflow.api.events.EventDefinition;
2527
import io.serverlessworkflow.api.events.EventRef;
2628
import io.serverlessworkflow.api.functions.FunctionDefinition;
@@ -30,9 +32,11 @@
3032
import io.serverlessworkflow.api.retry.RetryDefinition;
3133
import io.serverlessworkflow.api.start.Start;
3234
import io.serverlessworkflow.api.states.ForEachState;
35+
import io.serverlessworkflow.api.states.InjectState;
3336
import io.serverlessworkflow.api.states.OperationState;
3437
import io.serverlessworkflow.api.states.SleepState;
3538
import io.serverlessworkflow.api.validation.ValidationError;
39+
import io.serverlessworkflow.api.workflow.Errors;
3640
import io.serverlessworkflow.api.workflow.Events;
3741
import io.serverlessworkflow.api.workflow.Functions;
3842
import io.serverlessworkflow.api.workflow.Retries;
@@ -367,4 +371,27 @@ void testActionDefForEach() {
367371
"State action 'callFn' functionRef does not reference an existing workflow function definition",
368372
validationErrors.get(0).getMessage());
369373
}
374+
375+
/**
376+
* @see <a href="https://github.com/serverlessworkflow/sdk-java/issues/232">WorkflowValidator
377+
* validate Wrokflow.tojson(workflow) failed</a>
378+
*/
379+
@Test
380+
void testErrorsArrayParsing() {
381+
final Workflow workflow =
382+
new Workflow()
383+
.withId("test-workflow")
384+
.withName("test-workflow")
385+
.withVersion("1.0")
386+
.withStart(new Start().withStateName("testingErrors"))
387+
.withErrors(new Errors(Arrays.asList(new ErrorDefinition())))
388+
.withStates(
389+
Arrays.asList(
390+
new InjectState()
391+
.withName("testingErrors")
392+
.withData(new ObjectMapper().createObjectNode().put("name", "Skywalker"))
393+
.withEnd(new End())));
394+
Assertions.assertTrue(
395+
new WorkflowValidatorImpl().setSource(Workflow.toJson(workflow)).isValid());
396+
}
370397
}

0 commit comments

Comments
 (0)