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

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 1921606ff FINERACT-2181: fixed ConfigurationReadPlatformServiceImpl to 
handle not found cases, added tests
1921606ff is described below

commit 1921606ffca6a5d24b35014d8a2f25cd15608f72
Author: mark.vituska <[email protected]>
AuthorDate: Mon Mar 3 10:56:38 2025 +0100

    FINERACT-2181: fixed ConfigurationReadPlatformServiceImpl to handle not 
found cases, added tests
---
 .../api/GlobalConfigurationApiResource.java          |  2 +-
 .../ConfigurationReadPlatformServiceImpl.java        | 20 ++++++++++----------
 .../integrationtests/GlobalConfigurationTest.java    | 18 ++++++++++++++++++
 .../integrationtests/LoanCatchUpIntegrationTest.java |  2 ++
 .../common/GlobalConfigurationHelper.java            |  5 +++++
 5 files changed, 36 insertions(+), 11 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationApiResource.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationApiResource.java
index b8e3b13e4..3e4cf52a2 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationApiResource.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationApiResource.java
@@ -106,7 +106,7 @@ public class GlobalConfigurationApiResource {
     @Operation(summary = "Retrieve Global Configuration", description = 
"Returns a global enable/disable configurations.\n" + "\n"
             + "Example Requests:\n" + "\n" + "configurations/1")
     @ApiResponses({
-            @ApiResponse(responseCode = "200", description = "OK", content = 
@Content(schema = @Schema(implementation = 
GlobalConfigurationApiResourceSwagger.GetGlobalConfigurationsResponse.class))) 
})
+            @ApiResponse(responseCode = "200", description = "OK", content = 
@Content(schema = @Schema(implementation = 
GlobalConfigurationPropertyData.class))) })
     public String retrieveOne(@PathParam("configId") @Parameter(description = 
"configId") final Long configId,
             @Context final UriInfo uriInfo) {
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/service/ConfigurationReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/service/ConfigurationReadPlatformServiceImpl.java
index df6f0139c..7e11c5c12 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/service/ConfigurationReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/service/ConfigurationReadPlatformServiceImpl.java
@@ -25,6 +25,8 @@ import java.time.LocalDate;
 import java.util.List;
 import 
org.apache.fineract.infrastructure.configuration.data.GlobalConfigurationData;
 import 
org.apache.fineract.infrastructure.configuration.data.GlobalConfigurationPropertyData;
+import 
org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty;
+import 
org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationRepositoryWrapper;
 import org.apache.fineract.infrastructure.dataqueries.api.DataTableApiConstant;
 import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,12 +39,15 @@ public class ConfigurationReadPlatformServiceImpl 
implements ConfigurationReadPl
 
     private final JdbcTemplate jdbcTemplate;
     private final PlatformSecurityContext context;
+    private final GlobalConfigurationRepositoryWrapper 
configurationRepositoryWrapper;
     private final RowMapper<GlobalConfigurationPropertyData> rm;
 
     @Autowired
-    public ConfigurationReadPlatformServiceImpl(final PlatformSecurityContext 
context, final JdbcTemplate jdbcTemplate) {
+    public ConfigurationReadPlatformServiceImpl(final PlatformSecurityContext 
context, final JdbcTemplate jdbcTemplate,
+            final GlobalConfigurationRepositoryWrapper 
configurationRepositoryWrapper) {
         this.context = context;
         this.jdbcTemplate = jdbcTemplate;
+        this.configurationRepositoryWrapper = configurationRepositoryWrapper;
 
         this.rm = new GlobalConfigurationRowMapper();
     }
@@ -72,11 +77,9 @@ public class ConfigurationReadPlatformServiceImpl implements 
ConfigurationReadPl
 
         this.context.authenticatedUser();
 
-        final String sql = "SELECT c.id, c.name, c.enabled, c.value, 
c.date_value, c.string_value, c.description, c.is_trap_door FROM "
-                + "c_configuration c where c.name=? order by c.id";
-        final GlobalConfigurationPropertyData globalConfiguration = 
this.jdbcTemplate.queryForObject(sql, this.rm, new Object[] { name });
+        GlobalConfigurationProperty globalConfigurationProperty = 
configurationRepositoryWrapper.findOneByNameWithNotFoundDetection(name);
 
-        return globalConfiguration;
+        return globalConfigurationProperty.toData();
     }
 
     @Override
@@ -84,12 +87,9 @@ public class ConfigurationReadPlatformServiceImpl implements 
ConfigurationReadPl
 
         this.context.authenticatedUser();
 
-        final String sql = "SELECT c.id, c.name, c.enabled, c.value, 
c.date_value, c.string_value ,c.description, c.is_trap_door FROM "
-                + "c_configuration c where c.id=? order by c.id";
-        final GlobalConfigurationPropertyData globalConfiguration = 
this.jdbcTemplate.queryForObject(sql, this.rm,
-                new Object[] { configId });
+        GlobalConfigurationProperty globalConfigurationProperty = 
configurationRepositoryWrapper.findOneWithNotFoundDetection(configId);
 
-        return globalConfiguration;
+        return globalConfigurationProperty.toData();
     }
 
     private static final class GlobalConfigurationRowMapper implements 
RowMapper<GlobalConfigurationPropertyData> {
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java
index 273c613bd..a4e0f702e 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.integrationtests;
 
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -27,6 +28,7 @@ import io.restassured.builder.ResponseSpecBuilder;
 import io.restassured.http.ContentType;
 import io.restassured.specification.RequestSpecification;
 import io.restassured.specification.ResponseSpecification;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.fineract.client.models.GetGlobalConfigurationsResponse;
 import org.apache.fineract.client.models.GlobalConfigurationPropertyData;
 import org.apache.fineract.client.models.PutGlobalConfigurationsRequest;
@@ -96,6 +98,22 @@ public class GlobalConfigurationTest {
         }
     }
 
+    @Test
+    public void testGetConfigurationPropertyById() {
+        Long configId = 1L;
+        GlobalConfigurationPropertyData configuration = assertDoesNotThrow(
+                () -> 
globalConfigurationHelper.getGlobalConfigurationById(configId));
+        assertTrue(StringUtils.isNotBlank(configuration.getName()));
+    }
+
+    @Test
+    public void testNotExistingConfigurationProperty() {
+        String notExistingConfigName = "not-existing-configuration";
+        CallFailedRuntimeException exception = 
assertThrows(CallFailedRuntimeException.class,
+                () -> 
globalConfigurationHelper.getGlobalConfigurationByName(notExistingConfigName));
+        assertEquals(404, exception.getResponse().code());
+    }
+
     @Test
     public void testPasswordUpdateFailing() {
         String configName = 
GlobalConfigurationConstants.FORCE_PASSWORD_RESET_DAYS;
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCatchUpIntegrationTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCatchUpIntegrationTest.java
index 48e4aa8a3..048586c09 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCatchUpIntegrationTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCatchUpIntegrationTest.java
@@ -52,8 +52,10 @@ import 
org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanSchedul
 import org.apache.http.HttpStatus;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Test;
 
+@Order(1)
 public class LoanCatchUpIntegrationTest extends BaseLoanIntegrationTest {
 
     private static final String REPAYMENT_LOAN_PERMISSION = "REPAYMENT_LOAN";
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java
index 891f9f498..bc0e0f297 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java
@@ -52,6 +52,11 @@ public class GlobalConfigurationHelper {
         return 
Calls.ok(FineractClientHelper.getFineractClient().globalConfigurations.retrieveOneByName(configName));
     }
 
+    public GlobalConfigurationPropertyData getGlobalConfigurationById(final 
Long configId) {
+        log.info("------------------------ RETRIEVING GLOBAL CONFIGURATION BY 
ID -------------------------");
+        return 
Calls.ok(FineractClientHelper.getFineractClient().globalConfigurations.retrieveOne3(configId));
+    }
+
     // TODO: This is quite a bad pattern and adds a lot of time to individual 
test executions
     public void resetAllDefaultGlobalConfigurations() {
 

Reply via email to