diff --git a/api/src/main/java/io/serverlessworkflow/api/deserializers/ConstantsDeserializer.java b/api/src/main/java/io/serverlessworkflow/api/deserializers/ConstantsDeserializer.java index c3789b52..71b6f456 100644 --- a/api/src/main/java/io/serverlessworkflow/api/deserializers/ConstantsDeserializer.java +++ b/api/src/main/java/io/serverlessworkflow/api/deserializers/ConstantsDeserializer.java @@ -62,6 +62,7 @@ public Constants deserialize(JsonParser jp, DeserializationContext ctxt) throws constantsDefinition = node; } else { String constantsFileDef = node.asText(); + constants.setRefValue(constantsFileDef); String constantsFileSrc = Utils.getResourceFileAsString(constantsFileDef); JsonNode constantsRefNode; ObjectMapper jsonWriter = new ObjectMapper(); diff --git a/api/src/main/java/io/serverlessworkflow/api/serializers/WorkflowSerializer.java b/api/src/main/java/io/serverlessworkflow/api/serializers/WorkflowSerializer.java index 67e6af86..e933f8a8 100644 --- a/api/src/main/java/io/serverlessworkflow/api/serializers/WorkflowSerializer.java +++ b/api/src/main/java/io/serverlessworkflow/api/serializers/WorkflowSerializer.java @@ -159,8 +159,13 @@ public void serialize(Workflow workflow, JsonGenerator gen, SerializerProvider p gen.writeEndArray(); } - if (workflow.getConstants() != null && !workflow.getConstants().getConstantsDef().isEmpty()) { - gen.writeObjectField("constants", workflow.getConstants().getConstantsDef()); + if (workflow.getConstants() != null) { + if (workflow.getConstants().getConstantsDef() != null + && !workflow.getConstants().getConstantsDef().isEmpty()) { + gen.writeObjectField("constants", workflow.getConstants().getConstantsDef()); + } else if (workflow.getConstants().getRefValue() != null) { + gen.writeStringField("constants", workflow.getConstants().getRefValue()); + } } if (workflow.getTimeouts() != null) { diff --git a/api/src/test/java/io/serverlessworkflow/api/test/MarkupToWorkflowTest.java b/api/src/test/java/io/serverlessworkflow/api/test/MarkupToWorkflowTest.java index 768085e1..eb126597 100644 --- a/api/src/test/java/io/serverlessworkflow/api/test/MarkupToWorkflowTest.java +++ b/api/src/test/java/io/serverlessworkflow/api/test/MarkupToWorkflowTest.java @@ -570,6 +570,21 @@ public void testConstants(String workflowLocation) { assertEquals("pas", serbianTranslationNode.asText()); } + @ParameterizedTest + @ValueSource(strings = {"/features/constantsRef.json", "/features/constantsRef.yml"}) + public void testConstantsRef(String workflowLocation) { + Workflow workflow = Workflow.fromSource(WorkflowTestUtils.readWorkflowFile(workflowLocation)); + + assertNotNull(workflow); + assertNotNull(workflow.getId()); + assertNotNull(workflow.getName()); + assertNotNull(workflow.getStates()); + + assertNotNull(workflow.getConstants()); + Constants constants = workflow.getConstants(); + assertEquals("constantValues.json", constants.getRefValue()); + } + @ParameterizedTest @ValueSource(strings = {"/features/timeouts.json", "/features/timeouts.yml"}) public void testTimeouts(String workflowLocation) { diff --git a/api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java b/api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java index ff43f167..7bc34c04 100644 --- a/api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java +++ b/api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java @@ -32,6 +32,7 @@ import io.serverlessworkflow.api.start.Start; import io.serverlessworkflow.api.states.SleepState; import io.serverlessworkflow.api.workflow.Auth; +import io.serverlessworkflow.api.workflow.Constants; import io.serverlessworkflow.api.workflow.Events; import io.serverlessworkflow.api.workflow.Functions; import java.util.Arrays; @@ -47,6 +48,7 @@ public void testSingleState() { .withName("test-workflow-name") .withVersion("1.0") .withStart(new Start().withSchedule(new Schedule().withInterval("PT1S"))) + .withConstants(new Constants("constantsValues.json")) .withStates( Arrays.asList( new SleepState() @@ -62,11 +64,13 @@ public void testSingleState() { assertNotNull(workflow); assertNotNull(workflow.getStart()); + Constants constants = workflow.getConstants(); + assertNotNull(constants); + assertEquals("constantsValues.json", constants.getRefValue()); assertEquals(1, workflow.getStates().size()); State state = workflow.getStates().get(0); assertTrue(state instanceof SleepState); assertNotNull(state.getEnd()); - assertNotNull(Workflow.toJson(workflow)); assertNotNull(Workflow.toYaml(workflow)); } diff --git a/api/src/test/resources/features/constantsRef.json b/api/src/test/resources/features/constantsRef.json new file mode 100644 index 00000000..cd0fcb60 --- /dev/null +++ b/api/src/test/resources/features/constantsRef.json @@ -0,0 +1,17 @@ +{ + "id": "secrets", + "version": "1.0", + "specVersion": "0.8", + "name": "Custom secrets flow", + "expressionLang": "abc", + "start": "TestFunctionRefs", + "constants": "constantValues.json", + "states": [ + { + "name": "TestFunctionRefs", + "type": "operation", + "actions": [], + "end": true + } + ] +} \ No newline at end of file diff --git a/api/src/test/resources/features/constantsRef.yml b/api/src/test/resources/features/constantsRef.yml new file mode 100644 index 00000000..cdc48332 --- /dev/null +++ b/api/src/test/resources/features/constantsRef.yml @@ -0,0 +1,14 @@ +id: secrets +version: '1.0' +specVersion: '0.8' +name: Custom secrets flow +expressionLang: abc +start: TestFunctionRefs +constants: + constantValues.json +states: + - name: TestFunctionRefs + type: operation + actionMode: sequential + actions: + end: true