From 10a8295c0594c9dd6b097da7d57aae746a5b2f2e Mon Sep 17 00:00:00 2001 From: Aditya Dwadasi Date: Fri, 5 Sep 2025 14:39:12 +0100 Subject: [PATCH] RWA-4594: Refactor DmnEvaluationService --- .../services/DmnEvaluationService.java | 17 +---- .../services/utils/DmnConfigFieldUtils.java | 34 ++++++++++ .../utils/DmnConfigFieldUtilTest.java | 63 +++++++++++++++++++ 3 files changed, 99 insertions(+), 15 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/wataskmanagementapi/services/utils/DmnConfigFieldUtils.java create mode 100644 src/test/java/uk/gov/hmcts/reform/wataskmanagementapi/services/utils/DmnConfigFieldUtilTest.java diff --git a/src/main/java/uk/gov/hmcts/reform/wataskmanagementapi/services/DmnEvaluationService.java b/src/main/java/uk/gov/hmcts/reform/wataskmanagementapi/services/DmnEvaluationService.java index 3dd170ae0c..90579b0c30 100644 --- a/src/main/java/uk/gov/hmcts/reform/wataskmanagementapi/services/DmnEvaluationService.java +++ b/src/main/java/uk/gov/hmcts/reform/wataskmanagementapi/services/DmnEvaluationService.java @@ -25,6 +25,7 @@ import static uk.gov.hmcts.reform.wataskmanagementapi.domain.DecisionTable.WA_TASK_CONFIGURATION; import static uk.gov.hmcts.reform.wataskmanagementapi.domain.DecisionTable.WA_TASK_PERMISSIONS; import static uk.gov.hmcts.reform.wataskmanagementapi.domain.camunda.CamundaValue.jsonValue; +import static uk.gov.hmcts.reform.wataskmanagementapi.services.utils.DmnConfigFieldUtils.cleanFieldsWithInternalDefaults; @Slf4j @Component @@ -108,21 +109,7 @@ private List performEvaluateConfigurationDmn new DmnRequest<>(new DecisionTableRequest(jsonValue(caseData), jsonValue(taskAttributes))) ); - /** - * Loop through each field in dmnConfigFieldsWithInternalDefaults and check if the field is equal to the - * name from dmnResponse. If the name is present, then get the value of the field. Check if the value is - * null or empty for that field if yes then remove the field from the dmnResponse so that it won't override - * existing value. - */ - - dmnConfigFieldsWithInternalDefaults.forEach( - field -> - dmnResponse.removeIf(response -> { - String nameValue = response.getName().getValue(); - String responseValue = response.getValue() != null ? response.getValue().getValue() : null; - return field.equals(nameValue) && (responseValue == null || responseValue.isEmpty()); - }) - ); + cleanFieldsWithInternalDefaults(dmnConfigFieldsWithInternalDefaults, dmnResponse); return dmnResponse.stream().map(response -> { if (fieldsToExcludeFromTrim.contains(response.getName().getValue())) { diff --git a/src/main/java/uk/gov/hmcts/reform/wataskmanagementapi/services/utils/DmnConfigFieldUtils.java b/src/main/java/uk/gov/hmcts/reform/wataskmanagementapi/services/utils/DmnConfigFieldUtils.java new file mode 100644 index 0000000000..92127569d2 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/wataskmanagementapi/services/utils/DmnConfigFieldUtils.java @@ -0,0 +1,34 @@ +package uk.gov.hmcts.reform.wataskmanagementapi.services.utils; + +import uk.gov.hmcts.reform.wataskmanagementapi.domain.camunda.ConfigurationDmnEvaluationResponse; + +import java.util.List; + +public class DmnConfigFieldUtils { + + private DmnConfigFieldUtils() { + + } + + public static void cleanFieldsWithInternalDefaults( + List dmnConfigFieldsWithInternalDefaults, + List dmnResponse + ) { + + /** + * Loop through each field in dmnConfigFieldsWithInternalDefaults and check if the field is equal to the + * name from dmnResponse. If the name is present, then get the value of the field. Check if the value is + * null or empty for that field if yes then remove the field from the dmnResponse so that it won't override + * existing value. + */ + + dmnConfigFieldsWithInternalDefaults.forEach( + field -> + dmnResponse.removeIf(response -> { + String nameValue = response.getName().getValue(); + String responseValue = response.getValue() != null ? response.getValue().getValue() : null; + return field.equals(nameValue) && (responseValue == null || responseValue.isEmpty()); + }) + ); + } +} diff --git a/src/test/java/uk/gov/hmcts/reform/wataskmanagementapi/services/utils/DmnConfigFieldUtilTest.java b/src/test/java/uk/gov/hmcts/reform/wataskmanagementapi/services/utils/DmnConfigFieldUtilTest.java new file mode 100644 index 0000000000..c21d338b82 --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/wataskmanagementapi/services/utils/DmnConfigFieldUtilTest.java @@ -0,0 +1,63 @@ +package uk.gov.hmcts.reform.wataskmanagementapi.services.utils; + +import org.junit.jupiter.api.Test; +import uk.gov.hmcts.reform.wataskmanagementapi.domain.camunda.CamundaValue; +import uk.gov.hmcts.reform.wataskmanagementapi.domain.camunda.ConfigurationDmnEvaluationResponse; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + + +class DmnConfigFieldUtilTest { + + @Test + void should_remove_field_with_null_value() { + List responses = new ArrayList<>(); + ConfigurationDmnEvaluationResponse configurationDmnEvaluationResponse = + new ConfigurationDmnEvaluationResponse(); + configurationDmnEvaluationResponse.setName(new CamundaValue<>("field1", "String")); + configurationDmnEvaluationResponse.setValue(null); + responses.add(configurationDmnEvaluationResponse); + List fields = List.of("field1"); + + DmnConfigFieldUtils.cleanFieldsWithInternalDefaults(fields, responses); + + assertTrue(responses.isEmpty()); + } + + @Test + void should_remove_field_with_empty_value() { + List responses = new ArrayList<>(); + ConfigurationDmnEvaluationResponse configurationDmnEvaluationResponse = + new ConfigurationDmnEvaluationResponse(); + configurationDmnEvaluationResponse.setName(new CamundaValue<>("field1", "String")); + configurationDmnEvaluationResponse.setValue(new CamundaValue<>("", "String")); + responses.add(configurationDmnEvaluationResponse); + List fields = List.of("field1"); + + DmnConfigFieldUtils.cleanFieldsWithInternalDefaults(fields, responses); + + assertTrue(responses.isEmpty()); + } + + @Test + void should_not_remove_field_with_non_empty_value() { + List responses = new ArrayList<>(); + ConfigurationDmnEvaluationResponse configurationDmnEvaluationResponse = + new ConfigurationDmnEvaluationResponse(); + configurationDmnEvaluationResponse.setName(new CamundaValue<>("field1", "String")); + configurationDmnEvaluationResponse.setValue(new CamundaValue<>("someValue", "String")); + responses.add(configurationDmnEvaluationResponse); + List fields = List.of("field1"); + + DmnConfigFieldUtils.cleanFieldsWithInternalDefaults(fields, responses); + + assertFalse(responses.isEmpty()); + assertEquals("someValue", responses.getFirst().getValue().getValue()); + } + +}