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 967dbed021 FINERACT-2380: feign related test fixes
967dbed021 is described below
commit 967dbed021b6171f5f0de0cf139bd1c858229617
Author: Attila Budai <[email protected]>
AuthorDate: Tue Oct 21 09:57:32 2025 +0200
FINERACT-2380: feign related test fixes
---
.../GenerateLoanlossProvisioningTaskletTest.java | 3 +-
.../integrationtests/cob/CobPartitioningTest.java | 98 ++++------------------
2 files changed, 17 insertions(+), 84 deletions(-)
diff --git
a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/jobs/generateloanlossprovisioning/GenerateLoanlossProvisioningTaskletTest.java
b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/jobs/generateloanlossprovisioning/GenerateLoanlossProvisioningTaskletTest.java
index 5d47f7bfcd..4a43d1c068 100644
---
a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/jobs/generateloanlossprovisioning/GenerateLoanlossProvisioningTaskletTest.java
+++
b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/jobs/generateloanlossprovisioning/GenerateLoanlossProvisioningTaskletTest.java
@@ -68,7 +68,8 @@ class GenerateLoanlossProvisioningTaskletTest {
@BeforeEach
public void setUp() {
- ThreadLocalContextUtil.setBusinessDates(new
HashMap<>(Map.of(BusinessDateType.BUSINESS_DATE, BUSINESS_DATE)));
+ ThreadLocalContextUtil.setBusinessDates(
+ new HashMap<>(Map.of(BusinessDateType.BUSINESS_DATE,
BUSINESS_DATE, BusinessDateType.COB_DATE, BUSINESS_DATE)));
}
@Test
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/cob/CobPartitioningTest.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/cob/CobPartitioningTest.java
index 7d054cea69..c511e303b1 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/cob/CobPartitioningTest.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/cob/CobPartitioningTest.java
@@ -59,7 +59,6 @@ import
org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuil
import
org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker;
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
-import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -107,12 +106,6 @@ public class CobPartitioningTest extends
BaseLoanIntegrationTest {
setProperFinancialActivity(TRANSFER_ACCOUNT);
}
- @AfterEach
- public void tearDown() {
- // Restore business date configuration after each test
- cleanUpAndRestoreBusinessDate();
- }
-
private static void setProperFinancialActivity(Account transferAccount) {
List<GetFinancialActivityAccountsResponse> financialMappings =
FINANCIAL_ACTIVITY_ACCOUNT_HELPER.getAllFinancialActivityAccounts();
financialMappings.forEach(mapping ->
FINANCIAL_ACTIVITY_ACCOUNT_HELPER.deleteFinancialActivityAccount(mapping.getId()));
@@ -151,16 +144,13 @@ public class CobPartitioningTest extends
BaseLoanIntegrationTest {
// Force close loans 3, 4, ... , N-3, N-2
Collections.sort(loanIds);
- List<Integer> forelosedLoanIds = new ArrayList<>();
final CountDownLatch closeLatch = new CountDownLatch(N - 5);
// Warm up (EclipseLink sometimes fails if JPQL cache is not warm
up but concurrent queries are executed)
LOAN_TRANSACTION_HELPER.forecloseLoan("02 March 2020",
loanIds.get(2));
- forelosedLoanIds.add(loanIds.get(2));
for (int i = 3; i < N - 2; i++) {
final int idx = i;
futures.add(executorService.submit(() -> {
LOAN_TRANSACTION_HELPER.forecloseLoan("02 March 2020",
loanIds.get(idx));
- forelosedLoanIds.add(loanIds.get(idx));
closeLatch.countDown();
}));
}
@@ -173,45 +163,24 @@ public class CobPartitioningTest extends
BaseLoanIntegrationTest {
});
closeLatch.await();
- // Create list of active (non-foreclosed) loan IDs
- List<Integer> activeLoanIds = new ArrayList<>(loanIds);
- activeLoanIds.removeAll(forelosedLoanIds);
- log.info("Active loan IDs after foreclosure: {}", activeLoanIds);
-
// Let's retrieve the partitions
- List<Map<String, Object>> allPartitions =
CobHelper.getCobPartitions(REQUEST_SPEC, RESPONSE_SPEC, 3, "");
- log.info("\nLoans created by this test: {}\nAll partitions
retrieved: {}", loanIds, allPartitions);
-
- // Filter partitions to only include ACTIVE loans created by THIS
test
- // This ensures test isolation - we don't care about leftover
loans from other tests
- List<Map<String, Object>> testLoanPartitions =
filterPartitionsForTestLoans(allPartitions, activeLoanIds);
- log.info("Filtered partitions containing only our active test
loans: {}", testLoanPartitions);
-
- // Verify partitioning works correctly for our 4 active loans (10
created - 6 foreclosed)
- // Expected: 2 partitions with page size 3
- // Partition 0: loans 0, 1, 8 (3 loans)
- // Partition 1: loan 9 (1 loan)
- Assertions.assertEquals(2, testLoanPartitions.size(), "Expected 2
partitions for our 4 active test loans");
-
- // Verify first partition
- Assertions.assertEquals(0,
testLoanPartitions.get(0).get("pageNo"));
- Assertions.assertEquals(3, testLoanPartitions.get(0).get("count"));
- Assertions.assertTrue(isLoanIdInRange(loanIds.get(0),
testLoanPartitions.get(0)),
- "First active loan should be in first partition");
- Assertions.assertTrue(isLoanIdInRange(loanIds.get(1),
testLoanPartitions.get(0)),
- "Second active loan should be in first partition");
- Assertions.assertTrue(isLoanIdInRange(loanIds.get(8),
testLoanPartitions.get(0)),
- "Ninth active loan should be in first partition");
-
- // Verify second partition
- Assertions.assertEquals(1,
testLoanPartitions.get(1).get("pageNo"));
- Assertions.assertEquals(1, testLoanPartitions.get(1).get("count"));
- Assertions.assertTrue(isLoanIdInRange(loanIds.get(9),
testLoanPartitions.get(1)), "Tenth loan should be in second partition");
+ List<Map<String, Object>> cobPartitions =
CobHelper.getCobPartitions(REQUEST_SPEC, RESPONSE_SPEC, 3, "");
+ log.info("\nLoans created: {},\nRetrieved partitions: {}",
loanIds, cobPartitions);
+ Assertions.assertEquals(2, cobPartitions.size());
+
+ Assertions.assertEquals(0, cobPartitions.get(0).get("pageNo"));
+ Assertions.assertEquals(loanIds.get(0),
cobPartitions.get(0).get("minId"));
+ Assertions.assertEquals(loanIds.get(8),
cobPartitions.get(0).get("maxId"));
+ Assertions.assertEquals(3, cobPartitions.get(0).get("count"));
+
+ Assertions.assertEquals(1, cobPartitions.get(1).get("pageNo"));
+ Assertions.assertEquals(loanIds.get(9),
cobPartitions.get(1).get("minId"));
+ Assertions.assertEquals(loanIds.get(9),
cobPartitions.get(1).get("maxId"));
+ Assertions.assertEquals(1, cobPartitions.get(1).get("count"));
executorService.shutdown();
- } catch (Exception e) {
- log.error("Test failed with exception", e);
- throw e;
+ } finally {
+ cleanUpAndRestoreBusinessDate();
}
}
@@ -322,41 +291,4 @@ public class CobPartitioningTest extends
BaseLoanIntegrationTest {
return collateral;
}
- /**
- * Filters partitions to only include those containing loans from the
test's loan IDs. This ensures test isolation
- * by ignoring any leftover loans from previous test runs.
- */
- private List<Map<String, Object>>
filterPartitionsForTestLoans(List<Map<String, Object>> allPartitions,
List<Integer> testLoanIds) {
- List<Map<String, Object>> filteredPartitions = new ArrayList<>();
-
- for (Map<String, Object> partition : allPartitions) {
- Integer minId = (Integer) partition.get("minId");
- Integer maxId = (Integer) partition.get("maxId");
-
- // Check if this partition contains any of our test loan IDs
- boolean containsTestLoans = testLoanIds.stream().anyMatch(loanId
-> loanId >= minId && loanId <= maxId);
-
- if (containsTestLoans) {
- // Count how many of OUR loans are in this partition's range
- long testLoansInPartition = testLoanIds.stream().filter(loanId
-> loanId >= minId && loanId <= maxId).count();
-
- // Create a new partition entry with corrected count
- Map<String, Object> filteredPartition = new
HashMap<>(partition);
- filteredPartition.put("count", (int) testLoansInPartition);
- filteredPartitions.add(filteredPartition);
- }
- }
-
- return filteredPartitions;
- }
-
- /**
- * Checks if a loan ID falls within the min/max range of a partition.
- */
- private boolean isLoanIdInRange(Integer loanId, Map<String, Object>
partition) {
- Integer minId = (Integer) partition.get("minId");
- Integer maxId = (Integer) partition.get("maxId");
- return loanId >= minId && loanId <= maxId;
- }
-
}