|
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