This is an automated email from the ASF dual-hosted git repository.
gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git
The following commit(s) were added to refs/heads/main by this push:
new d11ff2fde [incubator-kie-issues#1853] Add test to verify nested
conditionals evaluation hit ids (#2201)
d11ff2fde is described below
commit d11ff2fde564370e30ee460fd233ec1085283f06
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Wed Mar 5 15:46:54 2025 +0100
[incubator-kie-issues#1853] Add test to verify nested conditionals
evaluation hit ids (#2201)
* [incubator-kie-issues#1853] Add test to verify nested conditionals
evaluation hit ids
* [incubator-kie-issues#1853] Fix renaming
* [incubator-kie-issues#1853] Fix as per PR suggestion
---------
Co-authored-by: Gabriele-Cardosi <[email protected]>
---
.../kie/kogito/jitexecutor/dmn/JITDMNListener.java | 3 +-
.../jitexecutor/dmn/JITDMNServiceImplTest.java | 29 +++++++++++++++++
.../jitexecutor/dmn/api/JITDMNResourceTest.java | 38 ++++++++++++++++++++++
3 files changed, 68 insertions(+), 2 deletions(-)
diff --git
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNListener.java
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNListener.java
index 46ca40651..bdc5bf5ca 100644
---
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNListener.java
+++
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNListener.java
@@ -39,7 +39,6 @@ import org.slf4j.LoggerFactory;
public class JITDMNListener implements DMNRuntimeEventListener {
private final Map<String, Map<String, Integer>>
decisionEvaluationHitIdsMap = new HashMap<>();
-
private static final Logger LOGGER =
LoggerFactory.getLogger(JITDMNListener.class);
@Override
@@ -81,7 +80,7 @@ public class JITDMNListener implements
DMNRuntimeEventListener {
@Override
public void afterConditionalEvaluation(AfterConditionalEvaluationEvent
event) {
logEvent(event);
- populateDecisionAndEvaluationHitIdMaps(event.getNodeName(),
Collections.singleton(event.getExecutedId()));
+ populateDecisionAndEvaluationHitIdMaps(event.getDecisionName(),
Collections.singleton(event.getExecutedId()));
}
public Map<String, Map<String, Integer>> getDecisionEvaluationHitIdsMap() {
diff --git
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImplTest.java
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImplTest.java
index de53596d6..70a2fa2fe 100644
---
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImplTest.java
+++
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImplTest.java
@@ -248,6 +248,35 @@ public class JITDMNServiceImplTest {
.containsExactlyInAnyOrderEntriesOf(Map.of(rule0, 3, rule1, 2,
rule2, 1));
}
+ @Test
+ void nestedConditionalEvaluationHitIdsCheck() throws IOException {
+ final String thenElementId = "_C69417CB-474E-4742-9D26-8D1ADB75CAEC";
+ final String elseElementId = "_0C94AE89-A771-4CD8-A62F-B7BA7F8F2359";
+ String nestedConditionalModel =
getModelFromIoUtils("valid_models/DMNv1_5/NestedConditional.dmn");
+
+ final Map<String, Object> context = new HashMap<>();
+ context.put("A", 1);
+
+ JITDMNResult retrieved =
jitdmnService.evaluateModel(nestedConditionalModel, context);
+ assertThat(retrieved.getMessages()).isEmpty();
+ JITDMNDecisionResult retrievedDecisionResult = (JITDMNDecisionResult)
retrieved.getDecisionResultByName("New Decision");
+
assertThat(retrievedDecisionResult.getResult()).isEqualTo(BigDecimal.valueOf(10));
+ Map<String, Integer> evaluationHitIds =
retrievedDecisionResult.getEvaluationHitIds();
+ assertThat(evaluationHitIds).isNotNull()
+ .containsExactlyInAnyOrderEntriesOf(Map.of(thenElementId, 1));
+
+ //
+ context.clear();
+ context.put("A", 0);
+ retrieved = jitdmnService.evaluateModel(nestedConditionalModel,
context);
+ assertThat(retrieved.getMessages()).isEmpty();
+ retrievedDecisionResult = (JITDMNDecisionResult)
retrieved.getDecisionResultByName("New Decision");
+
assertThat(retrievedDecisionResult.getResult()).isEqualTo(BigDecimal.valueOf(-10));
+ evaluationHitIds = retrievedDecisionResult.getEvaluationHitIds();
+ assertThat(evaluationHitIds).isNotNull()
+ .containsExactlyInAnyOrderEntriesOf(Map.of(elseElementId, 1));
+ }
+
@Test
void testExplainability() throws IOException {
String allTypesModel =
getModelFromIoUtils("valid_models/DMNv1_x/allTypes.dmn");
diff --git
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResourceTest.java
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResourceTest.java
index b14a775c3..9a2df4933 100644
---
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResourceTest.java
+++
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResourceTest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
@@ -56,6 +57,7 @@ public class JITDMNResourceTest {
private static String validModel15;
private static String modelWithExtensionElements;
private static String modelWithMultipleEvaluationHitIds;
+ private static String modelWithNestedConditionalEvaluationHitIds;
private static final ObjectMapper MAPPER = new ObjectMapper();
@@ -72,6 +74,7 @@ public class JITDMNResourceTest {
validModel15 =
getModelFromIoUtils("valid_models/DMNv1_5/RiskScore_Simple.dmn");
modelWithExtensionElements =
getModelFromIoUtils("valid_models/DMNv1_x/testWithExtensionElements.dmn");
modelWithMultipleEvaluationHitIds =
getModelFromIoUtils("valid_models/DMNv1_5/MultipleHitRules.dmn");
+ modelWithNestedConditionalEvaluationHitIds =
getModelFromIoUtils("valid_models/DMNv1_5/NestedConditional.dmn");
}
@Test
@@ -182,6 +185,41 @@ public class JITDMNResourceTest {
evaluationHitIdsNode.fields().forEachRemaining(entry ->
Assertions.assertThat(expectedEvaluationHitIds).containsEntry(entry.getKey(),
entry.getValue().asInt()));
}
+ @Test
+ void testjitdmnResultEndpointWithNestedConditionalEvaluationHitIds()
throws JsonProcessingException {
+ final Map<String, Object> context = new HashMap<>();
+ context.put("A", 1);
+ JITDMNPayload jitdmnpayload = new
JITDMNPayload(modelWithNestedConditionalEvaluationHitIds, context);
+ final String thenElementId = "_C69417CB-474E-4742-9D26-8D1ADB75CAEC";
+ final String elseElementId = "_0C94AE89-A771-4CD8-A62F-B7BA7F8F2359";
+ final String decisionId = "_E0D45F9F-76E3-4F85-8A0D-6127965F717A";
+ String response = given().contentType(ContentType.JSON)
+ .body(jitdmnpayload)
+ .when().post("/jitdmn/dmnresult")
+ .then()
+ .statusCode(200)
+ .body(containsString("New Decision"),
+ containsString(EVALUATION_HIT_IDS_FIELD_NAME),
+ containsString(decisionId))
+ .extract()
+ .asString();
+ JsonNode retrieved = MAPPER.readTree(response);
+ ArrayNode decisionResultsNode = (ArrayNode)
retrieved.get("decisionResults");
+ Iterator<JsonNode> decisionResultsIterator =
decisionResultsNode.elements();
+ Iterable<JsonNode> decisionResultsIterable = () ->
decisionResultsIterator;
+ ObjectNode decisionNode =
StreamSupport.stream(decisionResultsIterable.spliterator(), false)
+ .filter(jsonNode -> jsonNode instanceof ObjectNode &&
+ jsonNode.has("decisionId") &&
+ jsonNode.get("decisionId").asText().equals(decisionId))
+ .findFirst()
+ .map(ObjectNode.class::cast)
+ .orElseThrow(() -> new AssertionError(String.format("Expected
decisionId %s not found", decisionId)));
+ ObjectNode evaluationHitIdsNode = (ObjectNode)
decisionNode.get(EVALUATION_HIT_IDS_FIELD_NAME);
+ Assertions.assertThat(evaluationHitIdsNode).hasSize(1);
+ final Map<String, Integer> expectedEvaluationHitIds =
Map.of(thenElementId, 1);
+ evaluationHitIdsNode.fields().forEachRemaining(entry ->
Assertions.assertThat(expectedEvaluationHitIds).containsEntry(entry.getKey(),
entry.getValue().asInt()));
+ }
+
@Test
void testjitExplainabilityEndpoint() {
Map<String, Object> context = new HashMap<>();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]