diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCOBAccountLockCatchupInlineCOBTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCOBAccountLockCatchupInlineCOBTest.java index 75a4850ba..d4fdbde03 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCOBAccountLockCatchupInlineCOBTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCOBAccountLockCatchupInlineCOBTest.java @@ -25,6 +25,7 @@ import io.restassured.path.json.JsonPath; import io.restassured.specification.RequestSpecification; import io.restassured.specification.ResponseSpecification; import java.math.BigDecimal; +import java.time.Duration; import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; @@ -46,6 +47,7 @@ import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension; import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; import org.apache.fineract.integrationtests.inlinecob.InlineLoanCOBHelper; +import org.awaitility.Awaitility; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -193,6 +195,7 @@ public class LoanCOBAccountLockCatchupInlineCOBTest { loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec); loanAccountLockHelper = new LoanAccountLockHelper(requestSpec, new ResponseSpecBuilder().expectStatusCode(202).build()); + // create client final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec); Assertions.assertNotNull(clientID); @@ -200,6 +203,7 @@ public class LoanCOBAccountLockCatchupInlineCOBTest { ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1")); Assertions.assertNotNull(overdueFeeChargeId); + // create loan product final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString()); Assertions.assertNotNull(loanProductID); HashMap loanStatusHashMap; @@ -210,28 +214,39 @@ public class LoanCOBAccountLockCatchupInlineCOBTest { loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID); LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); + // approve loan loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID); LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID); + + // disburse loan loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID, JsonPath.from(loanDetails).get("netDisbursalAmount").toString()); LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + // update business date 2020-03-02 BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2)); + // execute inline cob for the loan inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue())); GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID); Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate()); + // update business date to 2020-03-05 BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 5)); + // apply lock on the loan loanAccountLockHelper.placeSoftLockOnLoanAccount(loanID, "LOAN_INLINE_COB_PROCESSING", "Sample error"); loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec); + + // execute catchup which sets the last cob date first 2020-03-04 and then 2020-03-05, as this loan is two + // days behind loanCOBCatchUpHelper.executeLoanCOBCatchUp(); - Utils.conditionalSleepWithMaxWait(30, 5, () -> loanCOBCatchUpHelper.isLoanCOBCatchUpRunning()); + Awaitility.await().atMost(Duration.ofSeconds(30)).with().pollInterval(Duration.ofSeconds(5)) // + .until(() -> loanCOBCatchUpHelper.isLoanCOBCatchUpFinishedFor(LocalDate.of(2020, 3, 4))); // loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID); Assertions.assertEquals(LocalDate.of(2020, 3, 4), loan.getLastClosedBusinessDate()); diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanCOBCatchUpHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanCOBCatchUpHelper.java index 606fef58a..f34341c30 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanCOBCatchUpHelper.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanCOBCatchUpHelper.java @@ -18,12 +18,16 @@ */ package org.apache.fineract.integrationtests.common.loans; +import java.time.LocalDate; import java.util.Objects; +import lombok.extern.slf4j.Slf4j; import org.apache.fineract.client.models.GetOldestCOBProcessedLoanResponse; import org.apache.fineract.client.models.IsCatchUpRunningResponse; import org.apache.fineract.integrationtests.client.IntegrationTest; +import org.jetbrains.annotations.NotNull; import retrofit2.Response; +@Slf4j public class LoanCOBCatchUpHelper extends IntegrationTest { public LoanCOBCatchUpHelper() {} @@ -33,6 +37,15 @@ public class LoanCOBCatchUpHelper extends IntegrationTest { return Boolean.TRUE.equals(Objects.requireNonNull(response.body()).getIsCatchUpRunning()); } + public boolean isLoanCOBCatchUpFinishedFor(@NotNull LocalDate cobBusinessDate) { + Response response = executeGetLoanCatchUpStatus(); + IsCatchUpRunningResponse isCatchUpRunningResponse = Objects.requireNonNull(response.body()); + GetOldestCOBProcessedLoanResponse getOldestCOBProcessedLoanResponse = executeRetrieveOldestCOBProcessedLoan(); + + return !Boolean.TRUE.equals(isCatchUpRunningResponse.getIsCatchUpRunning()) + && cobBusinessDate.equals(getOldestCOBProcessedLoanResponse.getCobProcessedDate()); + } + public Response executeLoanCOBCatchUp() { return okR(fineract().loanCobCatchUpApi.executeLoanCOBCatchUp()); }