From dc2223b688d731871daac340c68acc915f5cb915 Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti Date: Mon, 27 Jan 2025 21:32:25 +0100 Subject: [PATCH] Adding listen to all test Signed-off-by: Francisco Javier Tirado Sarti --- .../impl/executors/ListenExecutor.java | 2 +- .../impl/EventDefinitionTest.java | 54 ++++++++++++------- .../src/test/resources/listen-to-all.yaml | 15 ++++++ 3 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 impl/core/src/test/resources/listen-to-all.yaml diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/executors/ListenExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/ListenExecutor.java index e051dabf..1b53dea3 100644 --- a/impl/core/src/main/java/io/serverlessworkflow/impl/executors/ListenExecutor.java +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/ListenExecutor.java @@ -80,7 +80,7 @@ private EventRegistrationBuilderCollection anyEvents(AnyEventConsumptionStrategy } private EventRegistrationBuilderCollection oneEvent(OneEventConsumptionStrategy oneStrategy) { - return new EventRegistrationBuilderCollection(List.of(from(oneStrategy.getOne())), false); + return new EventRegistrationBuilderCollection(List.of(from(oneStrategy.getOne())), true); } protected ListenExecutorBuilder( diff --git a/impl/core/src/test/java/io/serverlessworkflow/impl/EventDefinitionTest.java b/impl/core/src/test/java/io/serverlessworkflow/impl/EventDefinitionTest.java index 495632d0..20f78b65 100644 --- a/impl/core/src/test/java/io/serverlessworkflow/impl/EventDefinitionTest.java +++ b/impl/core/src/test/java/io/serverlessworkflow/impl/EventDefinitionTest.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import io.serverlessworkflow.api.WorkflowReader; import io.serverlessworkflow.impl.json.JsonUtils; @@ -27,7 +28,6 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -58,15 +58,16 @@ void testEventListened(String listen, String emit, JsonNode expectedResult, Obje assertThat(waitingInstance.outputAsJsonNode()).isEqualTo(expectedResult); } - @Test - void testUntilConsumed() throws IOException { + @ParameterizedTest + @MethodSource("eventsListenerParameters") + void testEventsListened(String listen, String emit1, String emit2, JsonNode expectedResult) + throws IOException { WorkflowDefinition listenDefinition = - appl.workflowDefinition( - WorkflowReader.readWorkflowFromClasspath("listen-to-any-until-consumed.yaml")); + appl.workflowDefinition(WorkflowReader.readWorkflowFromClasspath(listen)); WorkflowDefinition emitDoctorDefinition = - appl.workflowDefinition(WorkflowReader.readWorkflowFromClasspath("emit-doctor.yaml")); + appl.workflowDefinition(WorkflowReader.readWorkflowFromClasspath(emit1)); WorkflowDefinition emitOutDefinition = - appl.workflowDefinition(WorkflowReader.readWorkflowFromClasspath("emit-out.yaml")); + appl.workflowDefinition(WorkflowReader.readWorkflowFromClasspath(emit2)); WorkflowInstance waitingInstance = listenDefinition.instance(Map.of()); CompletableFuture future = waitingInstance.start(); assertThat(waitingInstance.status()).isEqualTo(WorkflowStatus.RUNNING); @@ -77,16 +78,30 @@ void testUntilConsumed() throws IOException { emitOutDefinition.instance(Map.of()).start().join(); assertThat(future).isCompleted(); assertThat(waitingInstance.status()).isEqualTo(WorkflowStatus.COMPLETED); - assertThat(waitingInstance.outputAsJsonNode()).isEqualTo(temperature()); + assertThat(waitingInstance.outputAsJsonNode()).isEqualTo(expectedResult); } private static Stream eventListenerParameters() { return Stream.of( - Arguments.of("listen-to-any.yaml", "emit.yaml", cruellaDeVil(), Map.of()), + Arguments.of("listen-to-any.yaml", "emit.yaml", array(cruellaDeVil()), Map.of()), Arguments.of( "listen-to-any-filter.yaml", "emit-doctor.yaml", doctor(), Map.of("temperature", 39))); } + private static Stream eventsListenerParameters() { + return Stream.of( + Arguments.of( + "listen-to-all.yaml", + "emit-doctor.yaml", + "emit.yaml", + array(temperature(), cruellaDeVil())), + Arguments.of( + "listen-to-any-until-consumed.yaml", + "emit-doctor.yaml", + "emit-out.yaml", + array(temperature()))); + } + private static JsonNode cruellaDeVil() { ObjectMapper mapper = JsonUtils.mapper(); ObjectNode node = mapper.createObjectNode(); @@ -97,21 +112,24 @@ private static JsonNode cruellaDeVil() { mapper .createArrayNode() .add(mapper.createObjectNode().put("breed", "dalmatian").put("quantity", 101))); - return mapper.createArrayNode().add(node); + return node; } private static JsonNode doctor() { - ObjectMapper mapper = JsonUtils.mapper(); - ObjectNode node = mapper.createObjectNode(); - node.put("temperature", 39); + ObjectNode node = temperature(); node.put("isSick", true); - return mapper.createArrayNode().add(node); + return array(node); } - private static JsonNode temperature() { - ObjectMapper mapper = JsonUtils.mapper(); - ObjectNode node = mapper.createObjectNode(); + private static ObjectNode temperature() { + ObjectNode node = JsonUtils.mapper().createObjectNode(); node.put("temperature", 39); - return mapper.createArrayNode().add(node); + return node; + } + + private static JsonNode array(JsonNode... jsonNodes) { + ArrayNode arrayNode = JsonUtils.mapper().createArrayNode(); + for (JsonNode node : jsonNodes) arrayNode.add(node); + return arrayNode; } } diff --git a/impl/core/src/test/resources/listen-to-all.yaml b/impl/core/src/test/resources/listen-to-all.yaml new file mode 100644 index 00000000..0d55f185 --- /dev/null +++ b/impl/core/src/test/resources/listen-to-all.yaml @@ -0,0 +1,15 @@ +document: + dsl: '1.0.0-alpha5' + namespace: test + name: listen-to-all + version: '0.1.0' +do: + - callDoctor: + listen: + to: + all: + - with: + type: com.fake-hospital.vitals.measurements.temperature + data: ${ .temperature > 38 } + - with: + type: com.petstore.order.placed.v1 \ No newline at end of file pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy