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 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 { 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() {