Skip to content

Commit 5e40aef

Browse files
authored
[Fix #1018] Initializing context (#1019)
Signed-off-by: fjtirado <ftirados@redhat.com>
1 parent 41399e8 commit 5e40aef

File tree

5 files changed

+55
-9
lines changed

5 files changed

+55
-9
lines changed

experimental/lambda/src/test/java/io/serverless/workflow/impl/CallTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void testSwitch() throws InterruptedException, ExecutionException {
116116
Workflow workflow =
117117
new Workflow()
118118
.withDocument(
119-
new Document().withNamespace("test").withName("testSwith").withVersion("1.0"))
119+
new Document().withNamespace("test").withName("testSwitch").withVersion("1.0"))
120120
.withDo(
121121
List.of(
122122
new TaskItem(

experimental/lambda/src/test/java/io/serverless/workflow/impl/FluentDSLCallTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515
*/
1616
package io.serverless.workflow.impl;
1717

18+
import static io.serverlessworkflow.fluent.func.dsl.FuncDSL.function;
1819
import static org.assertj.core.api.Assertions.assertThat;
1920

2021
import io.serverlessworkflow.api.types.FlowDirectiveEnum;
2122
import io.serverlessworkflow.api.types.Workflow;
2223
import io.serverlessworkflow.fluent.func.FuncWorkflowBuilder;
2324
import io.serverlessworkflow.impl.WorkflowApplication;
2425
import io.serverlessworkflow.impl.WorkflowDefinition;
26+
import io.serverlessworkflow.impl.WorkflowInstance;
2527
import java.util.Collection;
2628
import java.util.List;
2729
import java.util.concurrent.ExecutionException;
@@ -47,6 +49,23 @@ void testJavaFunction() throws InterruptedException, ExecutionException {
4749
}
4850
}
4951

52+
@Test
53+
void textExportFunction() {
54+
try (WorkflowApplication app = WorkflowApplication.builder().build()) {
55+
final Workflow workflow =
56+
FuncWorkflowBuilder.workflow("testExportFunction")
57+
.tasks(
58+
function(JavaFunctions::getName, Person.class)
59+
.exportAs(
60+
(prevContext, w, t) -> t.output().asText().orElseThrow() + " Tirado"))
61+
.build();
62+
WorkflowInstance instance =
63+
app.workflowDefinition(workflow).instance(new Person("Francisco", 33));
64+
assertThat(instance.start().join().asText().orElseThrow()).isEqualTo("Francisco Javierito");
65+
assertThat(instance.context().asText().orElseThrow()).isEqualTo("Francisco Javierito Tirado");
66+
}
67+
}
68+
5069
@Test
5170
void testForLoop() throws InterruptedException, ExecutionException {
5271
try (WorkflowApplication app = WorkflowApplication.builder().build()) {

impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class WorkflowContext implements WorkflowContextData {
2323
WorkflowContext(WorkflowDefinition definition, WorkflowMutableInstance instance) {
2424
this.definition = definition;
2525
this.instance = instance;
26+
this.context = definition.application().modelFactory().fromNull();
2627
}
2728

2829
@Override

impl/test/src/test/java/io/serverlessworkflow/impl/test/WorkflowDefinitionTest.java

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@
2525
import io.serverlessworkflow.impl.WorkflowApplication;
2626
import io.serverlessworkflow.impl.WorkflowDefinition;
2727
import io.serverlessworkflow.impl.WorkflowException;
28+
import io.serverlessworkflow.impl.WorkflowInstance;
2829
import io.serverlessworkflow.impl.WorkflowModel;
2930
import io.serverlessworkflow.impl.jackson.JsonUtils;
3031
import java.io.IOException;
3132
import java.time.Instant;
3233
import java.util.Arrays;
3334
import java.util.Map;
35+
import java.util.Optional;
3436
import java.util.concurrent.CompletionException;
3537
import java.util.function.Consumer;
3638
import java.util.stream.Stream;
@@ -76,7 +78,8 @@ private static Stream<Arguments> provideParameters() {
7678
args(
7779
"workflows-samples/for-sum.yaml",
7880
Map.of("input", Arrays.asList(1, 2, 3)),
79-
o -> assertThat(o).isEqualTo(6)),
81+
o -> assertThat(o).isEqualTo(6),
82+
c -> assertThat(c).isEqualTo(Map.of("incr", Arrays.asList(2, 3, 4)))),
8083
args(
8184
"workflows-samples/switch-then-loop.yaml",
8285
Map.of("count", 1),
@@ -116,16 +119,36 @@ private static Stream<Arguments> provideParameters() {
116119
}
117120

118121
private static Arguments args(
119-
String fileName, Map<String, Object> input, Consumer<Object> instance) {
122+
String fileName,
123+
Map<String, Object> input,
124+
Consumer<Object> modelAssert,
125+
Optional<Consumer<Object>> context) {
120126
return Arguments.of(
121127
fileName,
122128
(Consumer<WorkflowDefinition>)
123-
d ->
124-
instance.accept(
125-
d.instance(input)
126-
.start()
127-
.thenApply(model -> JsonUtils.toJavaValue(JsonUtils.modelToJson(model)))
128-
.join()));
129+
d -> {
130+
WorkflowInstance instance = d.instance(input);
131+
modelAssert.accept(
132+
instance
133+
.start()
134+
.thenApply(model -> JsonUtils.toJavaValue(JsonUtils.modelToJson(model)))
135+
.join());
136+
context.ifPresent(
137+
c -> c.accept(JsonUtils.toJavaValue(JsonUtils.fromValue(instance.context()))));
138+
});
139+
}
140+
141+
private static Arguments args(
142+
String fileName,
143+
Map<String, Object> input,
144+
Consumer<Object> instance,
145+
Consumer<Object> context) {
146+
return args(fileName, input, instance, Optional.of(context));
147+
}
148+
149+
private static Arguments args(
150+
String fileName, Map<String, Object> input, Consumer<Object> instance) {
151+
return args(fileName, input, instance, Optional.empty());
129152
}
130153

131154
private static Arguments argsJson(

impl/test/src/test/resources/workflows-samples/for-sum.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,8 @@ do:
1212
- accumulate:
1313
set:
1414
counter: ${.counter+$number}
15+
export:
16+
as: if .incr==null then {incr:[$number+1]} else .incr+=[$number+1] end
1517
output:
1618
as: .counter
19+

0 commit comments

Comments
 (0)