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
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: