diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/BusinessDateHelper.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/BusinessDateHelper.java index 937bbf3fb..12f35475e 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/BusinessDateHelper.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/BusinessDateHelper.java @@ -36,7 +36,8 @@ public class BusinessDateHelper { public static final String DATE_FORMAT = "dd MMMM yyyy"; public static final String DEFAULT_LOCALE = "en"; public static final String BUSINESS_DATE = "BUSINESS_DATE"; - public static final String BUSINESS_DATE_REQUEST_TYPE = "BUSINESS_DATE"; + public static final String DEFAULT = "BUSINESS_DATE"; + public static final String COB = "COB_DATE"; private final BusinessDateManagementApi businessDateManagementApi; @@ -56,10 +57,10 @@ public class BusinessDateHelper { } public BusinessDateRequest defaultBusinessDateRequest() { - return new BusinessDateRequest().type(BUSINESS_DATE_REQUEST_TYPE).dateFormat(DATE_FORMAT).locale(DEFAULT_LOCALE); + return new BusinessDateRequest().type(DEFAULT).dateFormat(DATE_FORMAT).locale(DEFAULT_LOCALE); } public String getBusinessDate() throws IOException { - return businessDateManagementApi.getBusinessDate(DATE_FORMAT).toString(); + return businessDateManagementApi.getBusinessDate(DEFAULT).toString(); } } diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java index 36ecef7c7..4f3054d4c 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/LoanStepDef.java @@ -61,6 +61,7 @@ import org.apache.fineract.avro.loan.v1.LoanChargePaidByDataV1; import org.apache.fineract.avro.loan.v1.LoanStatusEnumDataV1; import org.apache.fineract.avro.loan.v1.LoanTransactionDataV1; import org.apache.fineract.client.models.AdvancedPaymentData; +import org.apache.fineract.client.models.BusinessDateData; import org.apache.fineract.client.models.DeleteLoansLoanIdResponse; import org.apache.fineract.client.models.DisbursementDetail; import org.apache.fineract.client.models.GetLoanProductsChargeOffReasonOptions; @@ -81,6 +82,7 @@ import org.apache.fineract.client.models.GetLoansLoanIdTransactions; import org.apache.fineract.client.models.GetLoansLoanIdTransactionsResponse; import org.apache.fineract.client.models.GetLoansLoanIdTransactionsTransactionIdResponse; import org.apache.fineract.client.models.IsCatchUpRunningDTO; +import org.apache.fineract.client.models.OldestCOBProcessedLoanDTO; import org.apache.fineract.client.models.PaymentAllocationOrder; import org.apache.fineract.client.models.PostAddAndDeleteDisbursementDetailRequest; import org.apache.fineract.client.models.PostClientsResponse; @@ -97,6 +99,7 @@ import org.apache.fineract.client.models.PutLoanProductsProductIdRequest; import org.apache.fineract.client.models.PutLoanProductsProductIdResponse; import org.apache.fineract.client.models.PutLoansLoanIdRequest; import org.apache.fineract.client.models.PutLoansLoanIdResponse; +import org.apache.fineract.client.services.BusinessDateManagementApi; import org.apache.fineract.client.services.LoanCobCatchUpApi; import org.apache.fineract.client.services.LoanDisbursementDetailsApi; import org.apache.fineract.client.services.LoanInterestPauseApi; @@ -224,6 +227,9 @@ public class LoanStepDef extends AbstractStepDef { @Autowired private JobPollingProperties jobPollingProperties; + @Autowired + private BusinessDateManagementApi businessDateApi; + @When("Admin creates a new Loan") public void createLoan() throws IOException { Response clientResponse = testContext().get(TestContextKey.CLIENT_CREATE_RESPONSE); @@ -2563,14 +2569,29 @@ public class LoanStepDef extends AbstractStepDef { IsCatchUpRunningDTO isCatchUpRunning = isCatchUpRunningResponse.body(); return isCatchUpRunning.getCatchUpRunning(); }); - await().atMost(Duration.ofMillis(jobPollingProperties.getTimeoutInMillis())) // - .pollInterval(Duration.ofMillis(jobPollingProperties.getIntervalInMillis())) // - .until(() -> { - Response isCatchUpRunningResponse = loanCobCatchUpApi.isCatchUpRunning().execute(); - ErrorHelper.checkSuccessfulApiCall(isCatchUpRunningResponse); - IsCatchUpRunningDTO isCatchUpRunning = isCatchUpRunningResponse.body(); - return !isCatchUpRunning.getCatchUpRunning(); - }); + // Then wait for catch-up to complete + await().atMost(Duration.ofMinutes(4)).pollInterval(Duration.ofSeconds(5)).pollDelay(Duration.ofSeconds(5)).until(() -> { + // Check if catch-up is still running + Response statusResponse = loanCobCatchUpApi.isCatchUpRunning().execute(); + ErrorHelper.checkSuccessfulApiCall(statusResponse); + + // Only proceed with date check if catch-up is not running + if (!statusResponse.body().getCatchUpRunning()) { + // Get the current business date + Response businessDateResponse = businessDateApi.getBusinessDate(BusinessDateHelper.COB).execute(); + ErrorHelper.checkSuccessfulApiCall(businessDateResponse); + LocalDate currentBusinessDate = businessDateResponse.body().getDate(); + + // Get the last closed business date + Response catchUpResponse = loanCobCatchUpApi.getOldestCOBProcessedLoan().execute(); + ErrorHelper.checkSuccessfulApiCall(catchUpResponse); + LocalDate lastClosedDate = catchUpResponse.body().getCobBusinessDate(); + + // Verify that the last closed date is not before the current business date + return !lastClosedDate.isBefore(currentBusinessDate); + } + return false; + }); } @Then("Loan's actualMaturityDate is {string}")