|
18 | 18 | import static io.serverlessworkflow.api.states.DefaultState.Type.OPERATION;
|
19 | 19 | import static io.serverlessworkflow.api.states.DefaultState.Type.SLEEP;
|
20 | 20 |
|
| 21 | +import com.fasterxml.jackson.databind.ObjectMapper; |
21 | 22 | import io.serverlessworkflow.api.Workflow;
|
22 | 23 | import io.serverlessworkflow.api.actions.Action;
|
23 | 24 | import io.serverlessworkflow.api.end.End;
|
| 25 | +import io.serverlessworkflow.api.error.ErrorDefinition; |
24 | 26 | import io.serverlessworkflow.api.events.EventDefinition;
|
25 | 27 | import io.serverlessworkflow.api.events.EventRef;
|
26 | 28 | import io.serverlessworkflow.api.functions.FunctionDefinition;
|
|
30 | 32 | import io.serverlessworkflow.api.retry.RetryDefinition;
|
31 | 33 | import io.serverlessworkflow.api.start.Start;
|
32 | 34 | import io.serverlessworkflow.api.states.ForEachState;
|
| 35 | +import io.serverlessworkflow.api.states.InjectState; |
33 | 36 | import io.serverlessworkflow.api.states.OperationState;
|
34 | 37 | import io.serverlessworkflow.api.states.SleepState;
|
35 | 38 | import io.serverlessworkflow.api.validation.ValidationError;
|
| 39 | +import io.serverlessworkflow.api.workflow.Errors; |
36 | 40 | import io.serverlessworkflow.api.workflow.Events;
|
37 | 41 | import io.serverlessworkflow.api.workflow.Functions;
|
38 | 42 | import io.serverlessworkflow.api.workflow.Retries;
|
@@ -376,60 +380,83 @@ void testActionDefForEach() {
|
376 | 380 | public void testValidateRetry() {
|
377 | 381 | WorkflowValidator workflowValidator = new WorkflowValidatorImpl();
|
378 | 382 | List<ValidationError> validationErrors =
|
379 |
| - workflowValidator |
380 |
| - .setSource( |
381 |
| - "{\n" |
382 |
| - + " \"id\": \"workflow_1\",\n" |
383 |
| - + " \"name\": \"workflow_1\",\n" |
384 |
| - + " \"description\": \"workflow_1\",\n" |
385 |
| - + " \"version\": \"1.0\",\n" |
386 |
| - + " \"specVersion\": \"0.8\",\n" |
387 |
| - + " \"start\": \"Task1\",\n" |
388 |
| - + " \"functions\": [\n" |
389 |
| - + " {\n" |
390 |
| - + " \"name\": \"increment\",\n" |
391 |
| - + " \"type\": \"custom\",\n" |
392 |
| - + " \"operation\": \"worker\"\n" |
393 |
| - + " }\n" |
394 |
| - + " ],\n" |
395 |
| - + " \"retries\": [\n" |
396 |
| - + " {\n" |
397 |
| - + " \"maxAttempts\": 3\n" |
398 |
| - + " },\n" |
399 |
| - + " {\n" |
400 |
| - + " \"name\": \"testRetry\" \n" |
401 |
| - + " }\n" |
402 |
| - + " ],\n" |
403 |
| - + " \"states\": [\n" |
404 |
| - + " {\n" |
405 |
| - + " \"name\": \"Task1\",\n" |
406 |
| - + " \"type\": \"operation\",\n" |
407 |
| - + " \"actionMode\": \"sequential\",\n" |
408 |
| - + " \"actions\": [\n" |
409 |
| - + " {\n" |
410 |
| - + " \"functionRef\": {\n" |
411 |
| - + " \"refName\": \"increment\",\n" |
412 |
| - + " \"arguments\": {\n" |
413 |
| - + " \"input\": \"some text\"\n" |
414 |
| - + " }\n" |
415 |
| - + " },\n" |
416 |
| - + " \"retryRef\": \"const\",\n" |
417 |
| - + " \"actionDataFilter\": {\n" |
418 |
| - + " \"toStateData\": \"${ .result }\"\n" |
419 |
| - + " }\n" |
420 |
| - + " }\n" |
421 |
| - + " ],\n" |
422 |
| - + " \"end\": true\n" |
423 |
| - + " }\n" |
424 |
| - + " ]\n" |
425 |
| - + "}") |
426 |
| - .validate(); |
| 383 | + workflowValidator |
| 384 | + .setSource( |
| 385 | + "{\n" |
| 386 | + + " \"id\": \"workflow_1\",\n" |
| 387 | + + " \"name\": \"workflow_1\",\n" |
| 388 | + + " \"description\": \"workflow_1\",\n" |
| 389 | + + " \"version\": \"1.0\",\n" |
| 390 | + + " \"specVersion\": \"0.8\",\n" |
| 391 | + + " \"start\": \"Task1\",\n" |
| 392 | + + " \"functions\": [\n" |
| 393 | + + " {\n" |
| 394 | + + " \"name\": \"increment\",\n" |
| 395 | + + " \"type\": \"custom\",\n" |
| 396 | + + " \"operation\": \"worker\"\n" |
| 397 | + + " }\n" |
| 398 | + + " ],\n" |
| 399 | + + " \"retries\": [\n" |
| 400 | + + " {\n" |
| 401 | + + " \"maxAttempts\": 3\n" |
| 402 | + + " },\n" |
| 403 | + + " {\n" |
| 404 | + + " \"name\": \"testRetry\" \n" |
| 405 | + + " }\n" |
| 406 | + + " ],\n" |
| 407 | + + " \"states\": [\n" |
| 408 | + + " {\n" |
| 409 | + + " \"name\": \"Task1\",\n" |
| 410 | + + " \"type\": \"operation\",\n" |
| 411 | + + " \"actionMode\": \"sequential\",\n" |
| 412 | + + " \"actions\": [\n" |
| 413 | + + " {\n" |
| 414 | + + " \"functionRef\": {\n" |
| 415 | + + " \"refName\": \"increment\",\n" |
| 416 | + + " \"arguments\": {\n" |
| 417 | + + " \"input\": \"some text\"\n" |
| 418 | + + " }\n" |
| 419 | + + " },\n" |
| 420 | + + " \"retryRef\": \"const\",\n" |
| 421 | + + " \"actionDataFilter\": {\n" |
| 422 | + + " \"toStateData\": \"${ .result }\"\n" |
| 423 | + + " }\n" |
| 424 | + + " }\n" |
| 425 | + + " ],\n" |
| 426 | + + " \"end\": true\n" |
| 427 | + + " }\n" |
| 428 | + + " ]\n" |
| 429 | + + "}") |
| 430 | + .validate(); |
427 | 431 |
|
428 | 432 | Assertions.assertNotNull(validationErrors);
|
429 | 433 | Assertions.assertEquals(2, validationErrors.size());
|
430 | 434 | Assertions.assertEquals("Retry name should not be empty", validationErrors.get(0).getMessage());
|
431 | 435 | Assertions.assertEquals(
|
432 |
| - "Operation State action 'null' retryRef does not reference an existing workflow retry definition", |
433 |
| - validationErrors.get(1).getMessage()); |
| 436 | + "Operation State action 'null' retryRef does not reference an existing workflow retry definition", |
| 437 | + validationErrors.get(1).getMessage()); |
| 438 | + } |
| 439 | + |
| 440 | + /** |
| 441 | + * @see <a href="https://github.com/serverlessworkflow/sdk-java/issues/232">WorkflowValidator |
| 442 | + * validate Wrokflow.tojson(workflow) failed</a> |
| 443 | + */ |
| 444 | + @Test |
| 445 | + void testErrorsArrayParsing() { |
| 446 | + final Workflow workflow = |
| 447 | + new Workflow() |
| 448 | + .withId("test-workflow") |
| 449 | + .withName("test-workflow") |
| 450 | + .withVersion("1.0") |
| 451 | + .withStart(new Start().withStateName("testingErrors")) |
| 452 | + .withErrors(new Errors(Arrays.asList(new ErrorDefinition()))) |
| 453 | + .withStates( |
| 454 | + Arrays.asList( |
| 455 | + new InjectState() |
| 456 | + .withName("testingErrors") |
| 457 | + .withData(new ObjectMapper().createObjectNode().put("name", "Skywalker")) |
| 458 | + .withEnd(new End()))); |
| 459 | + Assertions.assertTrue( |
| 460 | + new WorkflowValidatorImpl().setSource(Workflow.toJson(workflow)).isValid()); |
434 | 461 | }
|
435 | 462 | }
|
0 commit comments