This is an automated email from the ASF dual-hosted git repository.

yamer 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 e16fda5d7 [incubator-kie-issues#2062] DMN: Verify lenient/strict flag 
on jitexecutor (#2253)
e16fda5d7 is described below

commit e16fda5d7f0a07916877229117703174342d6900
Author: AthiraHari77 <[email protected]>
AuthorDate: Wed Aug 20 00:10:20 2025 +0530

    [incubator-kie-issues#2062] DMN: Verify lenient/strict flag on jitexecutor 
(#2253)
    
    * [incubator-kie-issues#2062] Code changes for strict/lenient error handling
    
    * [incubator-kie-issues#2062] Fix review comment
    
    * [incubator-kie-issues#2062] Fix review comments
    
    * [incubator-kie-issues#2062] Update test cases
    
    * [incubator-kie-issues#2062] Update test cases
    
    ---------
    
    Co-authored-by: athira <[email protected]>
---
 .../common/requests/MultipleResourcesPayload.java  | 20 +++++
 .../kie/kogito/jitexecutor/dmn/DMNEvaluator.java   |  4 +-
 .../kie/kogito/jitexecutor/dmn/JITDMNService.java  |  5 +-
 .../kogito/jitexecutor/dmn/JITDMNServiceImpl.java  | 16 ++--
 .../dmn/LocalDMNPredictionProvider.java            |  2 +-
 .../kogito/jitexecutor/dmn/api/JITDMNResource.java |  9 ++-
 .../jitexecutor/dmn/JITDMNServiceImplTest.java     | 22 +++---
 .../dmn/requests/JITDMNPayloadTest.java            | 87 ++++++++++++++++++++++
 .../dmn/requests/MultipleResourcePayloadTest.java  | 85 +++++++++++++++++++++
 9 files changed, 224 insertions(+), 26 deletions(-)

diff --git 
a/jitexecutor/jitexecutor-common/src/main/java/org/kie/kogito/jitexecutor/common/requests/MultipleResourcesPayload.java
 
b/jitexecutor/jitexecutor-common/src/main/java/org/kie/kogito/jitexecutor/common/requests/MultipleResourcesPayload.java
index 0c16e267d..b0e6b7fae 100644
--- 
a/jitexecutor/jitexecutor-common/src/main/java/org/kie/kogito/jitexecutor/common/requests/MultipleResourcesPayload.java
+++ 
b/jitexecutor/jitexecutor-common/src/main/java/org/kie/kogito/jitexecutor/common/requests/MultipleResourcesPayload.java
@@ -20,17 +20,28 @@ package org.kie.kogito.jitexecutor.common.requests;
 
 import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class MultipleResourcesPayload {
 
+    @JsonProperty("mainURI")
     private String mainURI;
+    @JsonProperty("resources")
     private List<ResourceWithURI> resources;
+    @JsonProperty("isStrictMode")
+    private boolean isStrictMode;
 
     public MultipleResourcesPayload() {
     }
 
     public MultipleResourcesPayload(String mainURI, List<ResourceWithURI> 
resources) {
+        this(mainURI, resources, false);
+    }
+
+    public MultipleResourcesPayload(String mainURI, List<ResourceWithURI> 
resources, boolean isStrictMode) {
         this.mainURI = mainURI;
         this.resources = resources;
+        this.isStrictMode = isStrictMode;
     }
 
     public String getMainURI() {
@@ -49,11 +60,20 @@ public class MultipleResourcesPayload {
         this.resources = resources;
     }
 
+    public boolean isStrictMode() {
+        return isStrictMode;
+    }
+
+    public void setStrictMode(boolean strictMode) {
+        isStrictMode = strictMode;
+    }
+
     @Override
     public String toString() {
         return "MultipleResourcesPayload{" +
                 "mainURI='" + mainURI + '\'' +
                 ", resources=" + resources +
+                ", isStrictMode =" + isStrictMode +
                 '}';
     }
 }
diff --git 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/DMNEvaluator.java
 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/DMNEvaluator.java
index c0f43ce6f..09af0fb7a 100644
--- 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/DMNEvaluator.java
+++ 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/DMNEvaluator.java
@@ -36,6 +36,7 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNModel;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.core.compiler.RuntimeModeOption;
 import org.kie.dmn.core.compiler.RuntimeTypeCheckOption;
 import org.kie.dmn.core.impl.DMNRuntimeImpl;
 import org.kie.dmn.core.internal.utils.DMNRuntimeBuilder;
@@ -191,9 +192,10 @@ public class DMNEvaluator {
         return dmnRuntime.getModels();
     }
 
-    public JITDMNResult evaluate(Map<String, Object> context) {
+    public JITDMNResult evaluate(Map<String, Object> context, boolean 
isStrictMode) {
         DMNContext dmnContext =
                 new DynamicDMNContextBuilder(dmnRuntime.newContext(), 
dmnModel).populateContextWith(context);
+        ((DMNRuntimeImpl) this.dmnRuntime).setOption(new 
RuntimeModeOption(isStrictMode ? RuntimeModeOption.MODE.STRICT : 
RuntimeModeOption.MODE.LENIENT));
         DMNResult dmnResult = dmnRuntime.evaluateAll(dmnModel, dmnContext);
         List<List<String>> invalidElementPaths = 
retrieveInvalidElementPaths(dmnResult.getMessages(), dmnModel);
         Optional<Map<String, Map<String, Integer>>> 
decisionEvaluationHitIdsMap = dmnRuntime.getListeners().stream()
diff --git 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNService.java
 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNService.java
index 6db6dbb97..68e258564 100644
--- 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNService.java
+++ 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNService.java
@@ -26,11 +26,12 @@ import 
org.kie.kogito.jitexecutor.dmn.responses.JITDMNResult;
 
 public interface JITDMNService {
 
-    JITDMNResult evaluateModel(String modelXML, Map<String, Object> context);
+    JITDMNResult evaluateModel(String modelXML, Map<String, Object> context, 
boolean isStrictMode);
 
     JITDMNResult evaluateModel(MultipleResourcesPayload payload, Map<String, 
Object> context);
 
-    DMNResultWithExplanation evaluateModelAndExplain(String modelXML, 
Map<String, Object> context);
+    DMNResultWithExplanation evaluateModelAndExplain(String modelXML, 
Map<String, Object> context, boolean isStrictMode);
 
     DMNResultWithExplanation evaluateModelAndExplain(MultipleResourcesPayload 
payload, Map<String, Object> context);
+
 }
diff --git 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImpl.java
 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImpl.java
index ca1a4b631..f63acb792 100644
--- 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImpl.java
+++ 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImpl.java
@@ -74,33 +74,33 @@ public class JITDMNServiceImpl implements JITDMNService {
     }
 
     @Override
-    public JITDMNResult evaluateModel(String modelXML, Map<String, Object> 
context) {
+    public JITDMNResult evaluateModel(String modelXML, Map<String, Object> 
context, boolean isStrictMode) {
         DMNEvaluator dmnEvaluator = DMNEvaluator.fromXML(modelXML);
-        return dmnEvaluator.evaluate(context);
+        return dmnEvaluator.evaluate(context, isStrictMode);
     }
 
     @Override
     public JITDMNResult evaluateModel(MultipleResourcesPayload payload, 
Map<String, Object> context) {
         DMNEvaluator dmnEvaluator = DMNEvaluator.fromMultiple(payload);
-        return dmnEvaluator.evaluate(context);
+        return dmnEvaluator.evaluate(context, payload.isStrictMode());
     }
 
     @Override
-    public DMNResultWithExplanation evaluateModelAndExplain(String modelXML, 
Map<String, Object> context) {
+    public DMNResultWithExplanation evaluateModelAndExplain(String modelXML, 
Map<String, Object> context, boolean isStrictMode) {
         DMNEvaluator dmnEvaluator = DMNEvaluator.fromXML(modelXML);
-        return evaluateModelAndExplain(dmnEvaluator, context);
+        return evaluateModelAndExplain(dmnEvaluator, context, isStrictMode);
     }
 
     @Override
     public DMNResultWithExplanation 
evaluateModelAndExplain(MultipleResourcesPayload payload, Map<String, Object> 
context) {
         DMNEvaluator dmnEvaluator = DMNEvaluator.fromMultiple(payload);
-        return evaluateModelAndExplain(dmnEvaluator, context);
+        return evaluateModelAndExplain(dmnEvaluator, context, 
payload.isStrictMode());
     }
 
-    public DMNResultWithExplanation evaluateModelAndExplain(DMNEvaluator 
dmnEvaluator, Map<String, Object> context) {
+    public DMNResultWithExplanation evaluateModelAndExplain(DMNEvaluator 
dmnEvaluator, Map<String, Object> context, boolean isStrictMode) {
         LocalDMNPredictionProvider localDMNPredictionProvider = new 
LocalDMNPredictionProvider(dmnEvaluator);
 
-        JITDMNResult dmnResult = dmnEvaluator.evaluate(context);
+        JITDMNResult dmnResult = dmnEvaluator.evaluate(context, isStrictMode);
 
         Prediction prediction = new 
SimplePrediction(LocalDMNPredictionProvider.toPredictionInput(context),
                 LocalDMNPredictionProvider.toPredictionOutput(dmnResult));
diff --git 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/LocalDMNPredictionProvider.java
 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/LocalDMNPredictionProvider.java
index 8950c4c6c..bab3ab034 100644
--- 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/LocalDMNPredictionProvider.java
+++ 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/LocalDMNPredictionProvider.java
@@ -52,7 +52,7 @@ public class LocalDMNPredictionProvider implements 
PredictionProvider {
         List<PredictionOutput> predictionOutputs = new ArrayList<>();
         for (PredictionInput input : inputs) {
             Map<String, Object> contextVariables = (Map<String, Object>) 
toMap(input.getFeatures()).get(DUMMY_DMN_CONTEXT_KEY);
-            
predictionOutputs.add(toPredictionOutput(dmnEvaluator.evaluate(contextVariables)));
+            
predictionOutputs.add(toPredictionOutput(dmnEvaluator.evaluate(contextVariables,
 false)));
         }
         return completedFuture(predictionOutputs);
     }
diff --git 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResource.java
 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResource.java
index 19afd5c2e..b80877db0 100644
--- 
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResource.java
+++ 
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResource.java
@@ -58,7 +58,8 @@ public class JITDMNResource {
         LOGGER.debug(payload.toString());
         LOGGER.debug(LINEBREAK);
         Supplier<Response> supplier = () -> {
-            JITDMNResult evaluateAll = payload.getModel() != null ? 
jitdmnService.evaluateModel(payload.getModel(), payload.getContext()) : 
jitdmnService.evaluateModel(payload, payload.getContext());
+            JITDMNResult evaluateAll = payload.getModel() != null ? 
jitdmnService.evaluateModel(payload.getModel(), payload.getContext(), 
payload.isStrictMode())
+                    : jitdmnService.evaluateModel(payload, 
payload.getContext());
             Map<String, Object> restResulk = new HashMap<>();
             for (Entry<String, Object> kv : 
evaluateAll.getContext().getAll().entrySet()) {
                 restResulk.put(kv.getKey(), 
MarshallingStubUtils.stubDMNResult(kv.getValue(), String::valueOf));
@@ -78,7 +79,8 @@ public class JITDMNResource {
         LOGGER.debug(payload.toString());
         LOGGER.debug(LINEBREAK);
         Supplier<Response> supplier = () -> {
-            JITDMNResult dmnResult = payload.getModel() != null ? 
jitdmnService.evaluateModel(payload.getModel(), payload.getContext()) : 
jitdmnService.evaluateModel(payload, payload.getContext());
+            JITDMNResult dmnResult = payload.getModel() != null ? 
jitdmnService.evaluateModel(payload.getModel(), payload.getContext(), 
payload.isStrictMode())
+                    : jitdmnService.evaluateModel(payload, 
payload.getContext());
             return Response.ok(dmnResult).build();
         };
         return DMNResourceHelper.manageResponse(supplier);
@@ -95,7 +97,8 @@ public class JITDMNResource {
         LOGGER.debug(LINEBREAK);
         Supplier<Response> supplier = () -> {
             DMNResultWithExplanation response =
-                    payload.getModel() != null ? 
jitdmnService.evaluateModelAndExplain(payload.getModel(), payload.getContext()) 
: jitdmnService.evaluateModelAndExplain(payload, payload.getContext());
+                    payload.getModel() != null ? 
jitdmnService.evaluateModelAndExplain(payload.getModel(), payload.getContext(), 
payload.isStrictMode())
+                            : jitdmnService.evaluateModelAndExplain(payload, 
payload.getContext());
             return Response.ok(response).build();
         };
         return DMNResourceHelper.manageResponse(supplier);
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 70a2fa2fe..21e242654 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
@@ -77,7 +77,7 @@ public class JITDMNServiceImplTest {
 
         context.put("id", "_0A185BAC-7692-45FA-B722-7C86C626BD51");
 
-        JITDMNResult dmnResult = jitdmnService.evaluateModel(sampleModel, 
context);
+        JITDMNResult dmnResult = jitdmnService.evaluateModel(sampleModel, 
context, true);
         
assertThat(dmnResult.getModelName()).isEqualTo("loan_pre_qualification");
         
assertThat(dmnResult.getNamespace()).isEqualTo("https://kie.apache.org/dmn/_857FE424-BEDA-4772-AB8E-2F4CDDB864AB";);
         assertThat(dmnResult.getMessages()).isEmpty();
@@ -103,7 +103,7 @@ public class JITDMNServiceImplTest {
         context.put("FICO Score", 800);
         context.put("DTI Ratio", .1);
         context.put("PITI Ratio", .1);
-        JITDMNResult dmnResult = jitdmnService.evaluateModel(model, context);
+        JITDMNResult dmnResult = jitdmnService.evaluateModel(model, context, 
false);
         assertThat(dmnResult.getModelName()).isEqualTo("xls2dmn");
         
assertThat(dmnResult.getNamespace()).isEqualTo("xls2dmn_741b355c-685c-4827-b13a-833da8321da4");
         assertThat(dmnResult.getMessages()).isEmpty();
@@ -127,7 +127,7 @@ public class JITDMNServiceImplTest {
         context.put("Loan", loan);
         context.put("SupremeDirector", "No");
         context.put("Bribe", 10);
-        JITDMNResult dmnResult = 
jitdmnService.evaluateModel(decisionTableModel, context);
+        JITDMNResult dmnResult = 
jitdmnService.evaluateModel(decisionTableModel, context, false);
 
         assertThat(dmnResult.getModelName()).isEqualTo("LoanEligibility");
         
assertThat(dmnResult.getNamespace()).isEqualTo("https://github.com/kiegroup/kogito-examples/dmn-quarkus-listener-example";);
@@ -147,7 +147,7 @@ public class JITDMNServiceImplTest {
         Map<String, Object> context = new HashMap<>();
         context.put("Credit Score", "Poor");
         context.put("DTI", 33);
-        JITDMNResult retrieved = 
jitdmnService.evaluateModel(decisionTableModel, context);
+        JITDMNResult retrieved = 
jitdmnService.evaluateModel(decisionTableModel, context, false);
         
assertThat(retrieved.getModelName()).isEqualTo("DMN_A77074C1-21FE-4F7E-9753-F84661569AFC");
         assertThat(retrieved.getMessages()).isEmpty();
 
@@ -168,7 +168,7 @@ public class JITDMNServiceImplTest {
         context = new HashMap<>();
         context.put("Credit Score", "Excellent");
         context.put("DTI", 10);
-        retrieved = jitdmnService.evaluateModel(decisionTableModel, context);
+        retrieved = jitdmnService.evaluateModel(decisionTableModel, context, 
false);
         assertThat(retrieved.getMessages()).isEmpty();
         // Approved decision
         retrievedDecisionResult = (JITDMNDecisionResult) 
retrieved.getDecisionResultByName("Risk Score");
@@ -198,7 +198,7 @@ public class JITDMNServiceImplTest {
         context.put("Credit Score", "Poor");
         context.put("DTI", 33);
         context.put("World Region", "Asia");
-        JITDMNResult retrieved = 
jitdmnService.evaluateModel(decisionTableModel, context);
+        JITDMNResult retrieved = 
jitdmnService.evaluateModel(decisionTableModel, context, false);
         assertThat(retrieved.getMessages()).isEmpty();
         // Approved decision
         JITDMNDecisionResult retrievedDecisionResult = (JITDMNDecisionResult) 
retrieved.getDecisionResultByName("Risk Score");
@@ -211,7 +211,7 @@ public class JITDMNServiceImplTest {
         context.put("Credit Score", "Excellent");
         context.put("DTI", 10);
         context.put("World Region", "Europe");
-        retrieved = jitdmnService.evaluateModel(decisionTableModel, context);
+        retrieved = jitdmnService.evaluateModel(decisionTableModel, context, 
false);
         assertThat(retrieved.getMessages()).isEmpty();
         // Approved decision
         retrievedDecisionResult = (JITDMNDecisionResult) 
retrieved.getDecisionResultByName("Risk Score");
@@ -234,7 +234,7 @@ public class JITDMNServiceImplTest {
         numbers.add(BigDecimal.valueOf(1));
         final Map<String, Object> context = new HashMap<>();
         context.put("Numbers", numbers);
-        final JITDMNResult retrieved = 
jitdmnService.evaluateModel(decisionTableModel, context);
+        final JITDMNResult retrieved = 
jitdmnService.evaluateModel(decisionTableModel, context, false);
 
         final List<BigDecimal> expectedStatistcs = new ArrayList<>();
         expectedStatistcs.add(BigDecimal.valueOf(6));
@@ -257,7 +257,7 @@ public class JITDMNServiceImplTest {
         final Map<String, Object> context = new HashMap<>();
         context.put("A", 1);
 
-        JITDMNResult retrieved = 
jitdmnService.evaluateModel(nestedConditionalModel, context);
+        JITDMNResult retrieved = 
jitdmnService.evaluateModel(nestedConditionalModel, context, false);
         assertThat(retrieved.getMessages()).isEmpty();
         JITDMNDecisionResult retrievedDecisionResult = (JITDMNDecisionResult) 
retrieved.getDecisionResultByName("New Decision");
         
assertThat(retrievedDecisionResult.getResult()).isEqualTo(BigDecimal.valueOf(10));
@@ -268,7 +268,7 @@ public class JITDMNServiceImplTest {
         //
         context.clear();
         context.put("A", 0);
-        retrieved = jitdmnService.evaluateModel(nestedConditionalModel, 
context);
+        retrieved = jitdmnService.evaluateModel(nestedConditionalModel, 
context, false);
         assertThat(retrieved.getMessages()).isEmpty();
         retrievedDecisionResult = (JITDMNDecisionResult) 
retrieved.getDecisionResultByName("New Decision");
         
assertThat(retrievedDecisionResult.getResult()).isEqualTo(BigDecimal.valueOf(-10));
@@ -303,7 +303,7 @@ public class JITDMNServiceImplTest {
         context.put("complexInput", complexInput);
         context.put("listOfComplexInput", 
Collections.singletonList(complexInput));
 
-        DMNResultWithExplanation response = 
jitdmnService.evaluateModelAndExplain(allTypesModel, context);
+        DMNResultWithExplanation response = 
jitdmnService.evaluateModelAndExplain(allTypesModel, context, false);
         assertThat(response.dmnResult).isNotNull();
         assertThat(response.dmnResult.getDecisionResults()).hasSize(1);
 
diff --git 
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/JITDMNPayloadTest.java
 
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/JITDMNPayloadTest.java
new file mode 100644
index 000000000..adb2c304f
--- /dev/null
+++ 
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/JITDMNPayloadTest.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.kogito.jitexecutor.dmn.requests;
+
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class JITDMNPayloadTest {
+
+    private static final ObjectMapper MAPPER = new ObjectMapper();
+
+    static {
+        MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, 
false);
+    }
+
+    @Test
+    void deserialize() throws JsonProcessingException {
+        String json = "{\n" +
+                "  \"model\": \"<dmn>...</dmn>\",\n" +
+                "  \"context\": {\n" +
+                "    \"ApplicantAge\": 35,\n" +
+                "    \"Income\": 75000\n" +
+                "  }\n" +
+                "}";
+
+        JITDMNPayload payload = MAPPER.readValue(json, JITDMNPayload.class);
+        assertThat(payload).isNotNull();
+        assertThat(payload.getModel()).isEqualTo("<dmn>...</dmn>");
+        assertThat(payload.getContext()).containsEntry("ApplicantAge", 
35).containsEntry("Income", 75000);
+        assertThat(payload.isStrictMode()).isFalse();
+    }
+
+    @Test
+    void deserializeWithStrictMode() throws JsonProcessingException {
+        String json = "{\n" +
+                "  \"model\": \"<dmn>...</dmn>\",\n" +
+                "  \"context\": {\n" +
+                "    \"ApplicantAge\": 35,\n" +
+                "    \"Income\": 75000\n" +
+                "  },\n" +
+                "  \"isStrictMode\": true\n" +
+                "}";
+
+        JITDMNPayload payload = MAPPER.readValue(json, JITDMNPayload.class);
+        assertThat(payload).isNotNull();
+        assertThat(payload.getModel()).isEqualTo("<dmn>...</dmn>");
+        assertThat(payload.getContext()).containsEntry("ApplicantAge", 
35).containsEntry("Income", 75000);
+        assertThat(payload.isStrictMode()).isTrue();
+    }
+
+    @Test
+    void roundTripSerialization() throws JsonProcessingException {
+        JITDMNPayload original = new JITDMNPayload(
+                "<dmn>...</dmn>",
+                Map.of("ApplicantAge", 35, "Income", 75000));
+
+        String json = MAPPER.writeValueAsString(original);
+        JITDMNPayload deserialized = MAPPER.readValue(json, 
JITDMNPayload.class);
+
+        assertThat(deserialized).isNotNull();
+        assertThat(deserialized.getModel()).isEqualTo(original.getModel());
+        assertThat(deserialized.getContext()).isEqualTo(original.getContext());
+    }
+}
diff --git 
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/MultipleResourcePayloadTest.java
 
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/MultipleResourcePayloadTest.java
new file mode 100644
index 000000000..0e29fba69
--- /dev/null
+++ 
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/MultipleResourcePayloadTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.kogito.jitexecutor.dmn.requests;
+
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+import org.kie.kogito.jitexecutor.common.requests.MultipleResourcesPayload;
+import org.kie.kogito.jitexecutor.common.requests.ResourceWithURI;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class MultipleResourcePayloadTest {
+
+    private static final ObjectMapper MAPPER = new ObjectMapper();
+
+    static {
+        MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, 
false);
+    }
+
+    @Test
+    void deserialize() throws JsonProcessingException {
+        String json = "{\n" +
+                "  \"mainURI\": \"main.dmn\",\n" +
+                "  \"resources\": [\n" +
+                "    {\n" +
+                "      \"uri\": \"resource1.dmn\",\n" +
+                "      \"content\": \"<dmn>...</dmn>\"\n" +
+                "    },\n" +
+                "    {\n" +
+                "      \"uri\": \"resource2.dmn\",\n" +
+                "      \"content\": \"<dmn>...</dmn>\"\n" +
+                "    }\n" +
+                "  ],\n" +
+                "  \"strictMode\": true\n" +
+                "}";
+
+        MultipleResourcesPayload payload = MAPPER.readValue(json, 
MultipleResourcesPayload.class);
+        assertThat(payload).isNotNull();
+        assertThat(payload.getMainURI()).isEqualTo("main.dmn");
+        assertThat(payload.getResources()).hasSize(2);
+        assertThat(payload.isStrictMode()).isTrue();
+    }
+
+    @Test
+    void roundTripSerialization() throws JsonProcessingException {
+        ResourceWithURI resource1 = new ResourceWithURI("resource1.dmn", 
"<dmn>resource1</dmn>");
+        ResourceWithURI resource2 = new ResourceWithURI("resource2.dmn", 
"<dmn>resource2</dmn>");
+
+        MultipleResourcesPayload original = new MultipleResourcesPayload(
+                "main.dmn",
+                List.of(resource1, resource2),
+                true);
+
+        String json = MAPPER.writeValueAsString(original);
+
+        MultipleResourcesPayload deserialized = MAPPER.readValue(json, 
MultipleResourcesPayload.class);
+
+        assertThat(deserialized).isNotNull();
+        assertThat(deserialized.getMainURI()).isEqualTo(original.getMainURI());
+        assertThat(deserialized.getResources()).hasSize(2);
+        
assertThat(deserialized.getResources().get(0).getURI()).isEqualTo("resource1.dmn");
+        assertThat(deserialized.isStrictMode()).isTrue();
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to