From 9aea69fdf80e68cf9ab7d37af3fdfaec99c47ca2 Mon Sep 17 00:00:00 2001 From: DeathGun44 Date: Sun, 25 Jan 2026 17:06:07 +0530 Subject: [PATCH] FINERACT-2450: Fix IndexOutOfBoundsException in GlobalConfigurationHelper --- .../common/GlobalConfigurationHelper.java | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) 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 4bbf06ed8..831ae45fc 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 @@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import com.google.gson.Gson; import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.fineract.client.models.GetGlobalConfigurationsResponse; @@ -62,11 +63,23 @@ public class GlobalConfigurationHelper { GetGlobalConfigurationsResponse actualGlobalConfigurations = getAllGlobalConfigurations(); final ArrayList defaults = getAllDefaultGlobalConfigurations(); - int changedNo = 0; - for (int i = 0; i < actualGlobalConfigurations.getGlobalConfiguration().size(); i++) { - HashMap defaultGlobalConfiguration = defaults.get(i); - GlobalConfigurationPropertyData actualGlobalConfiguration = actualGlobalConfigurations.getGlobalConfiguration().get(i); + Map defaultMap = new HashMap<>(); + for (HashMap config : defaults) { + defaultMap.put((String) config.get("name"), config); + } + + int changedNo = 0; + for (GlobalConfigurationPropertyData actualGlobalConfiguration : actualGlobalConfigurations.getGlobalConfiguration()) { + + HashMap defaultGlobalConfiguration = defaultMap.get(actualGlobalConfiguration.getName()); + if (defaultGlobalConfiguration == null) { + String message = "Global configuration '" + actualGlobalConfiguration.getName() + + "' found in database but not in integration test defaults. " + + "You must add it to GlobalConfigurationHelper.getAllDefaultGlobalConfigurations() to ensure test isolation."; + log.error(message); + throw new RuntimeException(message); + } if (!isMatching(defaultGlobalConfiguration, actualGlobalConfiguration)) { @@ -101,19 +114,23 @@ public class GlobalConfigurationHelper { } public void verifyAllDefaultGlobalConfigurations() { - ArrayList expectedGlobalConfigurations = getAllDefaultGlobalConfigurations(); GetGlobalConfigurationsResponse actualGlobalConfigurations = getAllGlobalConfigurations(); - Assertions.assertEquals(59, expectedGlobalConfigurations.size()); - Assertions.assertEquals(59, actualGlobalConfigurations.getGlobalConfiguration().size()); + Assertions.assertEquals(expectedGlobalConfigurations.size(), actualGlobalConfigurations.getGlobalConfiguration().size()); - for (int i = 0; i < expectedGlobalConfigurations.size(); i++) { + Map expectedConfigMap = new HashMap<>(); + for (HashMap config : expectedGlobalConfigurations) { + expectedConfigMap.put((String) config.get("name"), config); + } - HashMap expectedGlobalConfiguration = expectedGlobalConfigurations.get(i); - GlobalConfigurationPropertyData actualGlobalConfiguration = actualGlobalConfigurations.getGlobalConfiguration().get(i); + for (GlobalConfigurationPropertyData actualGlobalConfiguration : actualGlobalConfigurations.getGlobalConfiguration()) { + String configName = actualGlobalConfiguration.getName(); + HashMap expectedGlobalConfiguration = expectedConfigMap.get(configName); - final String assertionFailedMessage = "Assertion failed for configName:<" + expectedGlobalConfiguration.get("name") + ">"; + assertNotNull(expectedGlobalConfiguration, "Configuration found in API but not in expected defaults: " + configName); + + final String assertionFailedMessage = "Assertion failed for configName:<" + configName + ">"; Assertions.assertEquals(expectedGlobalConfiguration.get("name"), actualGlobalConfiguration.getName(), assertionFailedMessage); Assertions.assertEquals(expectedGlobalConfiguration.get("value"), actualGlobalConfiguration.getValue(), assertionFailedMessage); Assertions.assertEquals(expectedGlobalConfiguration.get("enabled"), actualGlobalConfiguration.getEnabled(),