From d413e2b4af87719a0772999c2bd38a173fa94642 Mon Sep 17 00:00:00 2001 From: Adam Saghy Date: Tue, 13 Jan 2026 16:31:00 +0100 Subject: [PATCH] FINERACT-2421: Make "Business date configuration" reliable --- .../BaseFineractInitializerConfiguration.java | 6 +-- .../initializer/base/FineractInitializer.java | 12 ++--- .../global/BusinessDateInitializerStep.java | 50 +++++++++++++++++++ .../FineractScenarioInitializerStep.java | 2 + ...lConfigurationScenarioInitializerStep.java | 6 +++ .../test/stepdef/hook/InitializingHook.java | 10 +++- 6 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/BusinessDateInitializerStep.java diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/base/BaseFineractInitializerConfiguration.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/base/BaseFineractInitializerConfiguration.java index f1a624e97..269d3c9de 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/base/BaseFineractInitializerConfiguration.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/base/BaseFineractInitializerConfiguration.java @@ -20,7 +20,6 @@ package org.apache.fineract.test.initializer.base; import java.util.List; import org.apache.fineract.test.config.CacheConfiguration; -import org.apache.fineract.test.helper.BusinessDateHelper; import org.apache.fineract.test.initializer.global.FineractGlobalInitializerStep; import org.apache.fineract.test.initializer.scenario.FineractScenarioInitializerStep; import org.apache.fineract.test.initializer.suite.FineractSuiteInitializerStep; @@ -38,8 +37,7 @@ public class BaseFineractInitializerConfiguration { @Bean public FineractInitializer fineractInitializer(List globalInitializerSteps, - List suiteInitializerSteps, List scenarioInitializerSteps, - BusinessDateHelper businessDateHelper) { - return new FineractInitializer(globalInitializerSteps, suiteInitializerSteps, scenarioInitializerSteps, businessDateHelper); + List suiteInitializerSteps, List scenarioInitializerSteps) { + return new FineractInitializer(globalInitializerSteps, suiteInitializerSteps, scenarioInitializerSteps); } } diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/base/FineractInitializer.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/base/FineractInitializer.java index 383f1532d..13d16d912 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/base/FineractInitializer.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/base/FineractInitializer.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.fineract.test.helper.BusinessDateHelper; import org.apache.fineract.test.initializer.global.FineractGlobalInitializerStep; import org.apache.fineract.test.initializer.scenario.FineractScenarioInitializerStep; import org.apache.fineract.test.initializer.suite.FineractSuiteInitializerStep; @@ -37,7 +36,6 @@ public class FineractInitializer implements InitializingBean { private final List globalInitializerSteps; private final List suiteInitializerSteps; private final List scenarioInitializerSteps; - private final BusinessDateHelper businessDateHelper; @Override public void afterPropertiesSet() throws Exception { @@ -71,7 +69,6 @@ public class FineractInitializer implements InitializingBean { for (FineractGlobalInitializerStep initializerStep : globalInitializerSteps) { initializerStep.initialize(); } - businessDateHelper.setBusinessDateToday(); } public void setupDefaultsForSuite() throws Exception { @@ -80,20 +77,23 @@ public class FineractInitializer implements InitializingBean { log.debug("Executing suite initializer: {}", initializerStep.getClass().getName()); initializerStep.initializeForSuite(); } - businessDateHelper.setBusinessDateToday(); } public void setupDefaultsForScenario() throws Exception { for (FineractScenarioInitializerStep scenarioInitializerStep : scenarioInitializerSteps) { scenarioInitializerStep.initializeForScenario(); } - businessDateHelper.setBusinessDateToday(); } public void resetDefaultsAfterSuite() throws Exception { for (FineractSuiteInitializerStep initializerStep : suiteInitializerSteps) { initializerStep.resetAfterSuite(); } - businessDateHelper.setBusinessDateToday(); + } + + public void resetDefaultsAfterScenario() { + for (FineractScenarioInitializerStep initializerStep : scenarioInitializerSteps) { + initializerStep.resetAfterScenario(); + } } } diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/BusinessDateInitializerStep.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/BusinessDateInitializerStep.java new file mode 100644 index 000000000..d65362030 --- /dev/null +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/global/BusinessDateInitializerStep.java @@ -0,0 +1,50 @@ +/** + * 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.apache.fineract.test.initializer.global; + +import static org.apache.fineract.test.initializer.global.GlobalConfigurationGlobalInitializerStep.CONFIG_KEY_ENABLE_BUSINESS_DATE; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.fineract.test.helper.BusinessDateHelper; +import org.apache.fineract.test.helper.GlobalConfigurationHelper; +import org.apache.fineract.test.initializer.scenario.FineractScenarioInitializerStep; +import org.springframework.stereotype.Component; + +@Slf4j +@RequiredArgsConstructor +@Component +public class BusinessDateInitializerStep implements FineractScenarioInitializerStep { + + private final BusinessDateHelper businessDateHelper; + private final GlobalConfigurationHelper configurationHelper; + + @Override + public void initializeForScenario() { + configurationHelper.enableGlobalConfiguration(CONFIG_KEY_ENABLE_BUSINESS_DATE, 0L); + businessDateHelper.setBusinessDateToday(); + } + + @Override + public void resetAfterScenario() { + configurationHelper.enableGlobalConfiguration(CONFIG_KEY_ENABLE_BUSINESS_DATE, 0L); + businessDateHelper.setBusinessDateToday(); + configurationHelper.disableGlobalConfiguration(CONFIG_KEY_ENABLE_BUSINESS_DATE, 0L); + } +} diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/scenario/FineractScenarioInitializerStep.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/scenario/FineractScenarioInitializerStep.java index 0e433c30e..c033b2a03 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/scenario/FineractScenarioInitializerStep.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/scenario/FineractScenarioInitializerStep.java @@ -21,4 +21,6 @@ package org.apache.fineract.test.initializer.scenario; public interface FineractScenarioInitializerStep { void initializeForScenario() throws Exception; + + void resetAfterScenario(); } diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/scenario/GlobalConfigurationScenarioInitializerStep.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/scenario/GlobalConfigurationScenarioInitializerStep.java index dac648df2..3d6bad387 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/scenario/GlobalConfigurationScenarioInitializerStep.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/scenario/GlobalConfigurationScenarioInitializerStep.java @@ -41,4 +41,10 @@ public class GlobalConfigurationScenarioInitializerStep implements FineractScena globalConfigurationHelper.enableGlobalConfiguration(CONFIG_KEY_ENABLE_BUSINESS_DATE, 0L); globalConfigurationHelper.enableGlobalConfiguration(CONFIG_KEY_ENABLE_RECALCULATE_COB_DATE, 0L); } + + @Override + public void resetAfterScenario() { + // Enable business date + globalConfigurationHelper.disableGlobalConfiguration(CONFIG_KEY_ENABLE_BUSINESS_DATE, 0L); + } } diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/hook/InitializingHook.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/hook/InitializingHook.java index 4ea3cbde7..40f875920 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/hook/InitializingHook.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/hook/InitializingHook.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.test.stepdef.hook; +import io.cucumber.java.After; import io.cucumber.java.AfterAll; import io.cucumber.java.Before; import io.cucumber.java.BeforeAll; @@ -38,10 +39,10 @@ public class InitializingHook { environment.getPropertySources().addFirst(new ResourcePropertySource("classpath:fineract-test-application.properties")); InitializerProperties initializerProperties = PropertiesFactory.get(environment, InitializerProperties.class); if (initializerProperties.isEnabled()) { - log.info("Setting up defaults for Fineract"); + log.info("Setting up global defaults for Fineract"); FineractInitializerFactory.get().setupGlobalDefaults(); } else { - log.info("Skipping defaults for Fineract"); + log.info("Skipping global defaults for Fineract"); } FineractInitializerFactory.get().setupDefaultsForSuite(); @@ -52,6 +53,11 @@ public class InitializingHook { FineractInitializerFactory.get().setupDefaultsForScenario(); } + @After + public static void after() throws Exception { + FineractInitializerFactory.get().resetDefaultsAfterScenario(); + } + @AfterAll public static void afterAll() throws Exception { FineractInitializerFactory.get().resetDefaultsAfterSuite();