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]

Reply via email to