FINERACT-1724: Improve reliability of integration tests
This commit is contained in:
+21
-3
@@ -24,6 +24,7 @@ import static org.apache.fineract.infrastructure.core.domain.AuditableFieldsCons
|
||||
import static org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.LAST_MODIFIED_DATE;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
@@ -55,7 +56,8 @@ public class InternalLoanInformationApiResource implements InitializingBean {
|
||||
|
||||
private final LoanRepositoryWrapper loanRepositoryWrapper;
|
||||
private final LoanTransactionRepository loanTransactionRepository;
|
||||
private final ToApiJsonSerializer<Map> toApiJsonSerializer;
|
||||
private final ToApiJsonSerializer<Map> toApiJsonSerializerForMap;
|
||||
private final ToApiJsonSerializer<List> toApiJsonSerializerForList;
|
||||
private final ApiRequestParameterHelper apiRequestParameterHelper;
|
||||
|
||||
@Override
|
||||
@@ -86,7 +88,7 @@ public class InternalLoanInformationApiResource implements InitializingBean {
|
||||
Map.of(CREATED_BY, loan.getCreatedBy().orElse(null), CREATED_DATE, loan.getCreatedDate().orElse(null), LAST_MODIFIED_BY,
|
||||
loan.getLastModifiedBy().orElse(null), LAST_MODIFIED_DATE, loan.getLastModifiedDate().orElse(null)));
|
||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||
return this.toApiJsonSerializer.serialize(settings, auditFields);
|
||||
return this.toApiJsonSerializerForMap.serialize(settings, auditFields);
|
||||
}
|
||||
|
||||
@GET
|
||||
@@ -106,6 +108,22 @@ public class InternalLoanInformationApiResource implements InitializingBean {
|
||||
transaction.getCreatedDate().orElse(null), LAST_MODIFIED_BY, transaction.getLastModifiedBy().orElse(null),
|
||||
LAST_MODIFIED_DATE, transaction.getLastModifiedDate().orElse(null)));
|
||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||
return this.toApiJsonSerializer.serialize(settings, auditFields);
|
||||
return this.toApiJsonSerializerForMap.serialize(settings, auditFields);
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("status/{statusId}")
|
||||
@Consumes({ MediaType.APPLICATION_JSON })
|
||||
@Produces({ MediaType.APPLICATION_JSON })
|
||||
public String getLoansByStatus(@Context final UriInfo uriInfo, @PathParam("statusId") Integer statusId) {
|
||||
log.warn("------------------------------------------------------------");
|
||||
log.warn(" ");
|
||||
log.warn("Fetching loans by status {}", statusId);
|
||||
log.warn(" ");
|
||||
log.warn("------------------------------------------------------------");
|
||||
|
||||
final List<Long> loanIds = loanRepositoryWrapper.findLoanIdsByStatusId(statusId);
|
||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||
return this.toApiJsonSerializerForList.serialize(settings, loanIds);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -421,7 +421,7 @@ final class LoansApiResourceSwagger {
|
||||
@Schema(example = "1")
|
||||
public Integer id;
|
||||
@Schema(example = "000000001")
|
||||
public Long accountNo;
|
||||
public String accountNo;
|
||||
}
|
||||
|
||||
static final class GetLoansLoanIdOverdueCharges {
|
||||
@@ -993,7 +993,7 @@ final class LoansApiResourceSwagger {
|
||||
@Schema(example = "95174ff9-1a75-4d72-a413-6f9b1cb988b7")
|
||||
public String externalId;
|
||||
@Schema(example = "000000001")
|
||||
public Long accountNo;
|
||||
public String accountNo;
|
||||
public GetLoansLoanIdStatus status;
|
||||
@Schema(example = "false")
|
||||
public boolean disallowExpectedDisbursements;
|
||||
|
||||
+4
@@ -98,6 +98,8 @@ public interface LoanRepository extends JpaRepository<Loan, Long>, JpaSpecificat
|
||||
|
||||
String FIND_ALL_STAYED_LOCKED_BY_COB_BUSINESS_DATE = "select loan.id, loan.externalId, loan.accountNumber from LoanAccountLock lock left join Loan loan on lock.loanId = loan.id where lock.lockPlacedOnCobBusinessDate = :cobBusinessDate";
|
||||
|
||||
String FIND_ALL_LOAN_IDS_BY_STATUS_ID = "SELECT loan.id FROM Loan loan WHERE loan.loanStatus = :statusId";
|
||||
|
||||
@Query(FIND_GROUP_LOANS_DISBURSED_AFTER)
|
||||
List<Loan> getGroupLoansDisbursedAfter(@Param("disbursementDate") LocalDate disbursementDate, @Param("groupId") Long groupId,
|
||||
@Param("loanType") Integer loanType);
|
||||
@@ -215,4 +217,6 @@ public interface LoanRepository extends JpaRepository<Loan, Long>, JpaSpecificat
|
||||
@Query(FIND_ALL_STAYED_LOCKED_BY_COB_BUSINESS_DATE)
|
||||
List<LoanIdAndExternalIdAndAccountNo> findAllStayedLockedByCobBusinessDate(@Param("cobBusinessDate") LocalDate cobBusinessDate);
|
||||
|
||||
@Query(FIND_ALL_LOAN_IDS_BY_STATUS_ID)
|
||||
List<Long> findLoanIdByStatusId(@Param("statusId") Integer statusId);
|
||||
}
|
||||
|
||||
+4
@@ -258,4 +258,8 @@ public class LoanRepositoryWrapper {
|
||||
public Long findIdByExternalId(ExternalId externalId) {
|
||||
return this.repository.findIdByExternalId(externalId);
|
||||
}
|
||||
|
||||
public List<Long> findLoanIdsByStatusId(Integer statusId) {
|
||||
return repository.findLoanIdByStatusId(statusId);
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -38,6 +38,7 @@ import org.apache.fineract.integrationtests.common.OfficeHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
|
||||
@@ -46,9 +47,11 @@ import org.apache.fineract.integrationtests.common.system.CodeHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class AccountNumberPreferencesTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AccountNumberPreferencesTest.class);
|
||||
|
||||
+3
@@ -44,6 +44,7 @@ import org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.savings.AccountTransferHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
|
||||
@@ -53,6 +54,7 @@ import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -60,6 +62,7 @@ import org.slf4j.LoggerFactory;
|
||||
* JUnit Test Cases for Account Transfer for.
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes", "unused" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class AccountTransferTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AccountTransferTest.class);
|
||||
|
||||
+3
@@ -60,6 +60,7 @@ import org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProd
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.recurringdeposit.RecurringDepositAccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositAccountStatusChecker;
|
||||
@@ -70,10 +71,12 @@ import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class AccountingScenarioIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AccountingScenarioIntegrationTest.class);
|
||||
|
||||
@@ -52,6 +52,7 @@ import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
|
||||
@@ -63,6 +64,7 @@ import org.apache.http.HttpStatus;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -75,6 +77,7 @@ import org.slf4j.LoggerFactory;
|
||||
* @see org.apache.fineract.integrationtests.common.BatchHelper
|
||||
* @see org.apache.fineract.batch.domain.BatchRequest
|
||||
*/
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class BatchApiTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(BatchApiTest.class);
|
||||
|
||||
+3
@@ -34,14 +34,17 @@ import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ClientLoanChargeExternalIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ClientLoanChargeExternalIntegrationTest.class);
|
||||
|
||||
+3
@@ -45,14 +45,17 @@ import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ClientLoanChargeRefundIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ClientLoanChargeRefundIntegrationTest.class);
|
||||
|
||||
+3
@@ -39,14 +39,17 @@ import org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ClientLoanCreditBalanceRefundandRepaymentTypeIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ClientLoanCreditBalanceRefundandRepaymentTypeIntegrationTest.class);
|
||||
|
||||
+343
-337
@@ -91,6 +91,7 @@ import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.savings.AccountTransferHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
|
||||
@@ -103,6 +104,7 @@ import org.apache.fineract.portfolio.charge.domain.ChargeTimeType;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -111,6 +113,7 @@ import org.slf4j.LoggerFactory;
|
||||
* repayments and verifying accounting transactions
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ClientLoanIntegrationTest {
|
||||
|
||||
public static final String MINIMUM_OPENING_BALANCE = "1000.0";
|
||||
@@ -6282,392 +6285,395 @@ public class ClientLoanIntegrationTest {
|
||||
|
||||
@Test
|
||||
public void chargeAdjustmentAccountingValidation() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName()).date("2022.11.01")
|
||||
.dateFormat("yyyy.MM.dd").locale("en"));
|
||||
final Account assetAccount = this.accountHelper.createAssetAccount();
|
||||
final Account assetFeeAndPenaltyAccount = this.accountHelper.createAssetAccount();
|
||||
final Account incomeAccount = this.accountHelper.createIncomeAccount();
|
||||
final Account expenseAccount = this.accountHelper.createExpenseAccount();
|
||||
final Account overpaymentAccount = this.accountHelper.createLiabilityAccount();
|
||||
final PostGLAccountsResponse uniqueIncomeAccountForFee = this.accountHelper.createGLAccount(new PostGLAccountsRequest()
|
||||
.type(GLAccountType.INCOME.getValue())
|
||||
.glCode(Utils.uniqueRandomStringGenerator("UNIQUE_FEE_INCOME" + Calendar.getInstance().getTimeInMillis(), 5))
|
||||
.manualEntriesAllowed(true)
|
||||
.name(Utils.uniqueRandomStringGenerator("UNIQUE_FEE_INCOME" + Calendar.getInstance().getTimeInMillis(), 5)).usage(1));
|
||||
final PostGLAccountsResponse uniqueIncomeAccountForPenalty = this.accountHelper.createGLAccount(new PostGLAccountsRequest()
|
||||
.type(GLAccountType.INCOME.getValue())
|
||||
.glCode(Utils.uniqueRandomStringGenerator("UNIQUE_PENALTY_INCOME" + Calendar.getInstance().getTimeInMillis(), 5))
|
||||
.manualEntriesAllowed(true)
|
||||
.name(Utils.uniqueRandomStringGenerator("UNIQUE_PENALTY_INCOME" + Calendar.getInstance().getTimeInMillis(), 5)).usage(1));
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
businessDateHelper.updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||
.date("2022.11.01").dateFormat("yyyy.MM.dd").locale("en"));
|
||||
final Account assetAccount = this.accountHelper.createAssetAccount();
|
||||
final Account assetFeeAndPenaltyAccount = this.accountHelper.createAssetAccount();
|
||||
final Account incomeAccount = this.accountHelper.createIncomeAccount();
|
||||
final Account expenseAccount = this.accountHelper.createExpenseAccount();
|
||||
final Account overpaymentAccount = this.accountHelper.createLiabilityAccount();
|
||||
final PostGLAccountsResponse uniqueIncomeAccountForFee = this.accountHelper.createGLAccount(new PostGLAccountsRequest()
|
||||
.type(GLAccountType.INCOME.getValue())
|
||||
.glCode(Utils.uniqueRandomStringGenerator("UNIQUE_FEE_INCOME" + Calendar.getInstance().getTimeInMillis(), 5))
|
||||
.manualEntriesAllowed(true)
|
||||
.name(Utils.uniqueRandomStringGenerator("UNIQUE_FEE_INCOME" + Calendar.getInstance().getTimeInMillis(), 5)).usage(1));
|
||||
final PostGLAccountsResponse uniqueIncomeAccountForPenalty = this.accountHelper.createGLAccount(new PostGLAccountsRequest()
|
||||
.type(GLAccountType.INCOME.getValue())
|
||||
.glCode(Utils.uniqueRandomStringGenerator("UNIQUE_PENALTY_INCOME" + Calendar.getInstance().getTimeInMillis(), 5))
|
||||
.manualEntriesAllowed(true)
|
||||
.name(Utils.uniqueRandomStringGenerator("UNIQUE_PENALTY_INCOME" + Calendar.getInstance().getTimeInMillis(), 5))
|
||||
.usage(1));
|
||||
|
||||
PostChargesResponse penaltyCharge = chargesHelper.createCharges(new PostChargesRequest().penalty(true).amount(10.0)
|
||||
.chargeCalculationType(ChargeCalculationType.FLAT.getValue()).chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE.getValue())
|
||||
.chargePaymentMode(ChargePaymentMode.REGULAR.getValue()).currencyCode("USD")
|
||||
.name(Utils.randomStringGenerator("PENALTY_" + Calendar.getInstance().getTimeInMillis(), 5)).chargeAppliesTo(1).locale("en")
|
||||
.active(true));
|
||||
PostChargesResponse penaltyCharge = chargesHelper.createCharges(new PostChargesRequest().penalty(true).amount(10.0)
|
||||
.chargeCalculationType(ChargeCalculationType.FLAT.getValue())
|
||||
.chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE.getValue()).chargePaymentMode(ChargePaymentMode.REGULAR.getValue())
|
||||
.currencyCode("USD").name(Utils.randomStringGenerator("PENALTY_" + Calendar.getInstance().getTimeInMillis(), 5))
|
||||
.chargeAppliesTo(1).locale("en").active(true));
|
||||
|
||||
PostChargesResponse feeCharge = chargesHelper.createCharges(new PostChargesRequest().penalty(false).amount(9.0)
|
||||
.chargeCalculationType(ChargeCalculationType.FLAT.getValue()).chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE.getValue())
|
||||
.chargePaymentMode(ChargePaymentMode.REGULAR.getValue()).currencyCode("USD")
|
||||
.name(Utils.randomStringGenerator("FEE_" + Calendar.getInstance().getTimeInMillis(), 5)).chargeAppliesTo(1).locale("en")
|
||||
.active(true));
|
||||
PostChargesResponse feeCharge = chargesHelper.createCharges(new PostChargesRequest().penalty(false).amount(9.0)
|
||||
.chargeCalculationType(ChargeCalculationType.FLAT.getValue())
|
||||
.chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE.getValue()).chargePaymentMode(ChargePaymentMode.REGULAR.getValue())
|
||||
.currencyCode("USD").name(Utils.randomStringGenerator("FEE_" + Calendar.getInstance().getTimeInMillis(), 5))
|
||||
.chargeAppliesTo(1).locale("en").active(true));
|
||||
|
||||
final String loanProductJSON = new LoanProductTestBuilder().withPrincipal("1000").withRepaymentTypeAsMonth()
|
||||
.withRepaymentAfterEvery("1").withNumberOfRepayments("1").withRepaymentTypeAsMonth().withinterestRatePerPeriod("0")
|
||||
.withInterestRateFrequencyTypeAsMonths().withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsFlat()
|
||||
.withAccountingRulePeriodicAccrual(new Account[] { assetAccount, incomeAccount, expenseAccount, overpaymentAccount })
|
||||
.withDaysInMonth("30").withDaysInYear("365").withMoratorium("0", "0")
|
||||
.withFeeToIncomeAccountMapping(feeCharge.getResourceId(), uniqueIncomeAccountForFee.getResourceId())
|
||||
.withPenaltyToIncomeAccountMapping(penaltyCharge.getResourceId(), uniqueIncomeAccountForPenalty.getResourceId())
|
||||
.withFeeAndPenaltyAssetAccount(assetFeeAndPenaltyAccount).build(null);
|
||||
final Integer loanProductID = this.loanTransactionHelper.getLoanProductId(loanProductJSON);
|
||||
final String loanProductJSON = new LoanProductTestBuilder().withPrincipal("1000").withRepaymentTypeAsMonth()
|
||||
.withRepaymentAfterEvery("1").withNumberOfRepayments("1").withRepaymentTypeAsMonth().withinterestRatePerPeriod("0")
|
||||
.withInterestRateFrequencyTypeAsMonths().withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsFlat()
|
||||
.withAccountingRulePeriodicAccrual(new Account[] { assetAccount, incomeAccount, expenseAccount, overpaymentAccount })
|
||||
.withDaysInMonth("30").withDaysInYear("365").withMoratorium("0", "0")
|
||||
.withFeeToIncomeAccountMapping(feeCharge.getResourceId(), uniqueIncomeAccountForFee.getResourceId())
|
||||
.withPenaltyToIncomeAccountMapping(penaltyCharge.getResourceId(), uniqueIncomeAccountForPenalty.getResourceId())
|
||||
.withFeeAndPenaltyAssetAccount(assetFeeAndPenaltyAccount).build(null);
|
||||
final Integer loanProductID = this.loanTransactionHelper.getLoanProductId(loanProductJSON);
|
||||
|
||||
final PostClientsResponse client = clientHelper.createClient(ClientHelper.defaultClientCreationRequest());
|
||||
final PostClientsResponse client = clientHelper.createClient(ClientHelper.defaultClientCreationRequest());
|
||||
|
||||
final Integer loanID = applyForLoanApplication(client.getClientId().intValue(), loanProductID);
|
||||
final Integer loanID = applyForLoanApplication(client.getClientId().intValue(), loanProductID);
|
||||
|
||||
HashMap<String, Object> loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
HashMap<String, Object> loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
loanStatusHashMap = this.loanTransactionHelper.approveLoan("02 September 2022", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
|
||||
loanStatusHashMap = this.loanTransactionHelper.approveLoan("02 September 2022", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
|
||||
|
||||
loanStatusHashMap = this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount("03 September 2022", loanID, "1000");
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
loanStatusHashMap = this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount("03 September 2022", loanID, "1000");
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
|
||||
GetLoansLoanIdResponse loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
List<GetLoansLoanIdRepaymentPeriod> loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
GetLoansLoanIdResponse loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
List<GetLoansLoanIdRepaymentPeriod> loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
|
||||
LocalDate targetDate = LocalDate.of(2022, 9, 7);
|
||||
final String penaltyCharge1AddedDate = dateFormatter.format(targetDate);
|
||||
Integer penaltyLoanChargeId = this.loanTransactionHelper.addChargesForLoan(loanID, LoanTransactionHelper
|
||||
.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(penaltyCharge.getResourceId()), penaltyCharge1AddedDate, "10"));
|
||||
LocalDate targetDate = LocalDate.of(2022, 9, 7);
|
||||
final String penaltyCharge1AddedDate = dateFormatter.format(targetDate);
|
||||
Integer penaltyLoanChargeId = this.loanTransactionHelper.addChargesForLoan(loanID, LoanTransactionHelper
|
||||
.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(penaltyCharge.getResourceId()), penaltyCharge1AddedDate, "10"));
|
||||
|
||||
final String penalty1LoanChargeDate = dateFormatter.format(targetDate);
|
||||
this.periodicAccrualAccountingHelper.runPeriodicAccrualAccounting(penalty1LoanChargeDate);
|
||||
final String penalty1LoanChargeDate = dateFormatter.format(targetDate);
|
||||
this.periodicAccrualAccountingHelper.runPeriodicAccrualAccounting(penalty1LoanChargeDate);
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
List<GetLoansLoanIdTransactions> transactions = loanDetails.getTransactions();
|
||||
assertEquals(10.0, transactions.get(1).getAmount());
|
||||
assertTrue(transactions.get(1).getType().getAccrual());
|
||||
assertEquals(10.0, transactions.get(1).getPenaltyChargesPortion());
|
||||
Long accrualTransactionId = transactions.get(1).getId();
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
List<GetLoansLoanIdTransactions> transactions = loanDetails.getTransactions();
|
||||
assertEquals(10.0, transactions.get(1).getAmount());
|
||||
assertTrue(transactions.get(1).getType().getAccrual());
|
||||
assertEquals(10.0, transactions.get(1).getPenaltyChargesPortion());
|
||||
Long accrualTransactionId = transactions.get(1).getId();
|
||||
|
||||
List<HashMap> journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + accrualTransactionId);
|
||||
assertEquals(10.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
List<HashMap> journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + accrualTransactionId);
|
||||
assertEquals(10.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(1010.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1010.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(1010.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1010.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
|
||||
GetLoansLoanIdSummary loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(1010.0, loanSummary.getTotalOutstanding());
|
||||
GetLoansLoanIdSummary loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(1010.0, loanSummary.getTotalOutstanding());
|
||||
|
||||
String externalId = UUID.randomUUID().toString();
|
||||
PostLoansLoanIdChargesChargeIdResponse chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID,
|
||||
(long) penaltyLoanChargeId, new PostLoansLoanIdChargesChargeIdRequest().amount(10.0).externalId(externalId));
|
||||
String externalId = UUID.randomUUID().toString();
|
||||
PostLoansLoanIdChargesChargeIdResponse chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID,
|
||||
(long) penaltyLoanChargeId, new PostLoansLoanIdChargesChargeIdRequest().amount(10.0).externalId(externalId));
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(1010.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getTotalPaidForPeriod());
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(1010.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getTotalPaidForPeriod());
|
||||
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesPaid());
|
||||
assertEquals(1000.0, loanSummary.getTotalOutstanding());
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesPaid());
|
||||
assertEquals(1000.0, loanSummary.getTotalOutstanding());
|
||||
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(10.0, transactions.get(2).getAmount());
|
||||
assertTrue(transactions.get(2).getType().getChargeAdjustment());
|
||||
assertEquals(10.0, transactions.get(2).getPenaltyChargesPortion());
|
||||
Long chargeAdjustmentTransactionId = transactions.get(2).getId();
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(10.0, transactions.get(2).getAmount());
|
||||
assertTrue(transactions.get(2).getType().getChargeAdjustment());
|
||||
assertEquals(10.0, transactions.get(2).getPenaltyChargesPortion());
|
||||
Long chargeAdjustmentTransactionId = transactions.get(2).getId();
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(10.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(10.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
this.loanTransactionHelper.reverseLoanTransaction((long) loanID, chargeAdjustmentTransactionId,
|
||||
new PostLoansLoanIdTransactionsTransactionIdRequest().dateFormat("dd MMMM yyyy").transactionDate("08 September 2022")
|
||||
.transactionAmount(0.0).locale("en").reversalExternalId(uuid));
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
this.loanTransactionHelper.reverseLoanTransaction((long) loanID, chargeAdjustmentTransactionId,
|
||||
new PostLoansLoanIdTransactionsTransactionIdRequest().dateFormat("dd MMMM yyyy").transactionDate("08 September 2022")
|
||||
.transactionAmount(0.0).locale("en").reversalExternalId(uuid));
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(10.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(2).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(2).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(2).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(3).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(3).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(3).get("entryType")).get("value"));
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(10.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(2).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(2).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(2).get("entryType")).get("value"));
|
||||
assertEquals(10.0f, (float) journalEntries.get(3).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(3).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(3).get("entryType")).get("value"));
|
||||
|
||||
targetDate = LocalDate.of(2022, 9, 10);
|
||||
final String feeCharge1AddedDate = dateFormatter.format(targetDate);
|
||||
Integer feeLoanChargeId = this.loanTransactionHelper.addChargesForLoan(loanID, LoanTransactionHelper
|
||||
.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(feeCharge.getResourceId()), feeCharge1AddedDate, "3"));
|
||||
targetDate = LocalDate.of(2022, 9, 10);
|
||||
final String feeCharge1AddedDate = dateFormatter.format(targetDate);
|
||||
Integer feeLoanChargeId = this.loanTransactionHelper.addChargesForLoan(loanID, LoanTransactionHelper
|
||||
.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(feeCharge.getResourceId()), feeCharge1AddedDate, "3"));
|
||||
|
||||
final String feeLoanChargeDate = dateFormatter.format(targetDate);
|
||||
this.periodicAccrualAccountingHelper.runPeriodicAccrualAccounting(feeLoanChargeDate);
|
||||
final String feeLoanChargeDate = dateFormatter.format(targetDate);
|
||||
this.periodicAccrualAccountingHelper.runPeriodicAccrualAccounting(feeLoanChargeDate);
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(3.0, transactions.get(2).getAmount());
|
||||
assertTrue(transactions.get(2).getType().getAccrual());
|
||||
assertEquals(3.0, transactions.get(2).getFeeChargesPortion());
|
||||
accrualTransactionId = transactions.get(2).getId();
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(3.0, transactions.get(2).getAmount());
|
||||
assertTrue(transactions.get(2).getType().getAccrual());
|
||||
assertEquals(3.0, transactions.get(2).getFeeChargesPortion());
|
||||
accrualTransactionId = transactions.get(2).getId();
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + accrualTransactionId);
|
||||
assertEquals(3.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForFee.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(3.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + accrualTransactionId);
|
||||
assertEquals(3.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForFee.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(3.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesDue());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesOutstanding());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesDue());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesOutstanding());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesCharged());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesOutstanding());
|
||||
assertEquals(1013.0, loanSummary.getTotalOutstanding());
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesCharged());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesOutstanding());
|
||||
assertEquals(1013.0, loanSummary.getTotalOutstanding());
|
||||
|
||||
loanTransactionHelper.makeLoanRepayment((long) loanID, new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy")
|
||||
.transactionDate("11 September 2022").locale("en").transactionAmount(5.0));
|
||||
loanTransactionHelper.makeLoanRepayment((long) loanID, new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy")
|
||||
.transactionDate("11 September 2022").locale("en").transactionAmount(5.0));
|
||||
|
||||
externalId = UUID.randomUUID().toString();
|
||||
chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID, (long) feeLoanChargeId,
|
||||
new PostLoansLoanIdChargesChargeIdRequest().amount(2.0).externalId(externalId));
|
||||
externalId = UUID.randomUUID().toString();
|
||||
chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID, (long) feeLoanChargeId,
|
||||
new PostLoansLoanIdChargesChargeIdRequest().amount(2.0).externalId(externalId));
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(7.0, loanSchedulePeriods.get(1).getPenaltyChargesPaid());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesDue());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getFeeChargesPaid());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesOutstanding());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalDue());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPrincipalPaid());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalOutstanding());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1006.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
assertEquals(7.0, loanSchedulePeriods.get(1).getTotalPaidForPeriod());
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(7.0, loanSchedulePeriods.get(1).getPenaltyChargesPaid());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesDue());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getFeeChargesPaid());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesOutstanding());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalDue());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPrincipalPaid());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalOutstanding());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(1006.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
assertEquals(7.0, loanSchedulePeriods.get(1).getTotalPaidForPeriod());
|
||||
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(3.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(7.0, loanSummary.getPenaltyChargesPaid());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesCharged());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesOutstanding());
|
||||
assertEquals(0.0, loanSummary.getFeeChargesPaid());
|
||||
assertEquals(1000.0, loanSummary.getPrincipalOutstanding());
|
||||
assertEquals(0.0, loanSummary.getPrincipalPaid());
|
||||
assertEquals(7.0, loanSummary.getTotalRepayment());
|
||||
assertEquals(1006.0, loanSummary.getTotalOutstanding());
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(3.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(7.0, loanSummary.getPenaltyChargesPaid());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesCharged());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesOutstanding());
|
||||
assertEquals(0.0, loanSummary.getFeeChargesPaid());
|
||||
assertEquals(1000.0, loanSummary.getPrincipalOutstanding());
|
||||
assertEquals(0.0, loanSummary.getPrincipalPaid());
|
||||
assertEquals(7.0, loanSummary.getTotalRepayment());
|
||||
assertEquals(1006.0, loanSummary.getTotalOutstanding());
|
||||
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(2.0, transactions.get(5).getAmount());
|
||||
assertTrue(transactions.get(4).getType().getChargeAdjustment());
|
||||
assertEquals(2.0, transactions.get(5).getPenaltyChargesPortion());
|
||||
assertEquals(0.0, transactions.get(5).getFeeChargesPortion());
|
||||
assertEquals(0.0, transactions.get(5).getPrincipalPortion());
|
||||
chargeAdjustmentTransactionId = transactions.get(5).getId();
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(2.0, transactions.get(5).getAmount());
|
||||
assertTrue(transactions.get(4).getType().getChargeAdjustment());
|
||||
assertEquals(2.0, transactions.get(5).getPenaltyChargesPortion());
|
||||
assertEquals(0.0, transactions.get(5).getFeeChargesPortion());
|
||||
assertEquals(0.0, transactions.get(5).getPrincipalPortion());
|
||||
chargeAdjustmentTransactionId = transactions.get(5).getId();
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(2.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForFee.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(2.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(2.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForFee.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(2.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
externalId = UUID.randomUUID().toString();
|
||||
chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID, (long) penaltyLoanChargeId,
|
||||
new PostLoansLoanIdChargesChargeIdRequest().amount(7.0).externalId(externalId));
|
||||
externalId = UUID.randomUUID().toString();
|
||||
chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID, (long) penaltyLoanChargeId,
|
||||
new PostLoansLoanIdChargesChargeIdRequest().amount(7.0).externalId(externalId));
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesDue());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getFeeChargesOutstanding());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalDue());
|
||||
assertEquals(1.0, loanSchedulePeriods.get(1).getPrincipalPaid());
|
||||
assertEquals(999.0, loanSchedulePeriods.get(1).getPrincipalOutstanding());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(999.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
assertEquals(14.0, loanSchedulePeriods.get(1).getTotalPaidForPeriod());
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesDue());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getFeeChargesOutstanding());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalDue());
|
||||
assertEquals(1.0, loanSchedulePeriods.get(1).getPrincipalPaid());
|
||||
assertEquals(999.0, loanSchedulePeriods.get(1).getPrincipalOutstanding());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(999.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
assertEquals(14.0, loanSchedulePeriods.get(1).getTotalPaidForPeriod());
|
||||
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesPaid());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getFeeChargesOutstanding());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesPaid());
|
||||
assertEquals(999.0, loanSummary.getPrincipalOutstanding());
|
||||
assertEquals(1.0, loanSummary.getPrincipalPaid());
|
||||
assertEquals(14.0, loanSummary.getTotalRepayment());
|
||||
assertEquals(999.0, loanSummary.getTotalOutstanding());
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesPaid());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getFeeChargesOutstanding());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesPaid());
|
||||
assertEquals(999.0, loanSummary.getPrincipalOutstanding());
|
||||
assertEquals(1.0, loanSummary.getPrincipalPaid());
|
||||
assertEquals(14.0, loanSummary.getTotalRepayment());
|
||||
assertEquals(999.0, loanSummary.getTotalOutstanding());
|
||||
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(7.0, transactions.get(6).getAmount());
|
||||
assertTrue(transactions.get(6).getType().getChargeAdjustment());
|
||||
assertEquals(3.0, transactions.get(6).getPenaltyChargesPortion());
|
||||
assertEquals(3.0, transactions.get(6).getFeeChargesPortion());
|
||||
assertEquals(1.0, transactions.get(6).getPrincipalPortion());
|
||||
chargeAdjustmentTransactionId = transactions.get(6).getId();
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(7.0, transactions.get(6).getAmount());
|
||||
assertTrue(transactions.get(6).getType().getChargeAdjustment());
|
||||
assertEquals(3.0, transactions.get(6).getPenaltyChargesPortion());
|
||||
assertEquals(3.0, transactions.get(6).getFeeChargesPortion());
|
||||
assertEquals(1.0, transactions.get(6).getPrincipalPortion());
|
||||
chargeAdjustmentTransactionId = transactions.get(6).getId();
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(7.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
if (assetAccount.getAccountID() == (int) journalEntries.get(1).get("glAccountId")) {
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(7.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
if (assetAccount.getAccountID() == (int) journalEntries.get(1).get("glAccountId")) {
|
||||
assertEquals(1.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
assertEquals(6.0f, (float) journalEntries.get(2).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(2).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(2).get("entryType")).get("value"));
|
||||
} else {
|
||||
assertEquals(1.0f, (float) journalEntries.get(2).get("amount"));
|
||||
assertEquals(assetAccount.getAccountID(), (int) journalEntries.get(2).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(2).get("entryType")).get("value"));
|
||||
|
||||
assertEquals(6.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
}
|
||||
|
||||
loanTransactionHelper.makeLoanRepayment((long) loanID, new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy")
|
||||
.transactionDate("13 September 2022").locale("en").transactionAmount(998.0));
|
||||
|
||||
externalId = UUID.randomUUID().toString();
|
||||
chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID, (long) feeLoanChargeId,
|
||||
new PostLoansLoanIdChargesChargeIdRequest().amount(1.0).externalId(externalId));
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesDue());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getFeeChargesOutstanding());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalDue());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPrincipalOutstanding());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalPaidForPeriod());
|
||||
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesPaid());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getFeeChargesOutstanding());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesPaid());
|
||||
assertEquals(0.0, loanSummary.getPrincipalOutstanding());
|
||||
assertEquals(1000.0, loanSummary.getPrincipalPaid());
|
||||
assertEquals(1013.0, loanSummary.getTotalRepayment());
|
||||
assertEquals(0.0, loanSummary.getTotalOutstanding());
|
||||
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(1.0, transactions.get(8).getAmount());
|
||||
assertTrue(transactions.get(8).getType().getChargeAdjustment());
|
||||
assertEquals(0.0, transactions.get(8).getPenaltyChargesPortion());
|
||||
assertEquals(0.0, transactions.get(8).getFeeChargesPortion());
|
||||
assertEquals(1.0, transactions.get(8).getPrincipalPortion());
|
||||
chargeAdjustmentTransactionId = transactions.get(8).getId();
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(1.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForFee.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(1.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
assertEquals(6.0f, (float) journalEntries.get(2).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(2).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(2).get("entryType")).get("value"));
|
||||
} else {
|
||||
assertEquals(1.0f, (float) journalEntries.get(2).get("amount"));
|
||||
assertEquals(assetAccount.getAccountID(), (int) journalEntries.get(2).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(2).get("entryType")).get("value"));
|
||||
assertTrue(loanDetails.getStatus().getClosedObligationsMet());
|
||||
|
||||
assertEquals(6.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetFeeAndPenaltyAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
externalId = UUID.randomUUID().toString();
|
||||
chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID, (long) penaltyLoanChargeId,
|
||||
new PostLoansLoanIdChargesChargeIdRequest().amount(1.0).externalId(externalId));
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(1.0, transactions.get(9).getAmount());
|
||||
assertTrue(transactions.get(9).getType().getChargeAdjustment());
|
||||
assertEquals(0.0, transactions.get(9).getPenaltyChargesPortion());
|
||||
assertEquals(0.0, transactions.get(9).getFeeChargesPortion());
|
||||
assertEquals(0.0, transactions.get(9).getPrincipalPortion());
|
||||
assertEquals(1.0, transactions.get(9).getOverpaymentPortion());
|
||||
chargeAdjustmentTransactionId = transactions.get(9).getId();
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(1.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(1.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(overpaymentAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
assertTrue(loanDetails.getStatus().getOverpaid());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
loanTransactionHelper.makeLoanRepayment((long) loanID, new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy")
|
||||
.transactionDate("13 September 2022").locale("en").transactionAmount(998.0));
|
||||
|
||||
externalId = UUID.randomUUID().toString();
|
||||
chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID, (long) feeLoanChargeId,
|
||||
new PostLoansLoanIdChargesChargeIdRequest().amount(1.0).externalId(externalId));
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
|
||||
loanSchedulePeriods = loanDetails.getRepaymentSchedule().getPeriods();
|
||||
assertEquals(2, loanSchedulePeriods.size());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesDue());
|
||||
assertEquals(10.0, loanSchedulePeriods.get(1).getPenaltyChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPenaltyChargesOutstanding());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesDue());
|
||||
assertEquals(3.0, loanSchedulePeriods.get(1).getFeeChargesPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getFeeChargesOutstanding());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalDue());
|
||||
assertEquals(1000.0, loanSchedulePeriods.get(1).getPrincipalPaid());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getPrincipalOutstanding());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalDueForPeriod());
|
||||
assertEquals(0.0, loanSchedulePeriods.get(1).getTotalOutstandingForPeriod());
|
||||
assertEquals(1013.0, loanSchedulePeriods.get(1).getTotalPaidForPeriod());
|
||||
|
||||
loanSummary = loanDetails.getSummary();
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getPenaltyChargesOutstanding());
|
||||
assertEquals(10.0, loanSummary.getPenaltyChargesPaid());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesCharged());
|
||||
assertEquals(0.0, loanSummary.getFeeChargesOutstanding());
|
||||
assertEquals(3.0, loanSummary.getFeeChargesPaid());
|
||||
assertEquals(0.0, loanSummary.getPrincipalOutstanding());
|
||||
assertEquals(1000.0, loanSummary.getPrincipalPaid());
|
||||
assertEquals(1013.0, loanSummary.getTotalRepayment());
|
||||
assertEquals(0.0, loanSummary.getTotalOutstanding());
|
||||
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(1.0, transactions.get(8).getAmount());
|
||||
assertTrue(transactions.get(8).getType().getChargeAdjustment());
|
||||
assertEquals(0.0, transactions.get(8).getPenaltyChargesPortion());
|
||||
assertEquals(0.0, transactions.get(8).getFeeChargesPortion());
|
||||
assertEquals(1.0, transactions.get(8).getPrincipalPortion());
|
||||
chargeAdjustmentTransactionId = transactions.get(8).getId();
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(1.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForFee.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(1.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(assetAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
assertTrue(loanDetails.getStatus().getClosedObligationsMet());
|
||||
|
||||
externalId = UUID.randomUUID().toString();
|
||||
chargeAdjustmentResponse = this.loanTransactionHelper.chargeAdjustment((long) loanID, (long) penaltyLoanChargeId,
|
||||
new PostLoansLoanIdChargesChargeIdRequest().amount(1.0).externalId(externalId));
|
||||
|
||||
loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanID);
|
||||
|
||||
transactions = loanDetails.getTransactions();
|
||||
assertEquals(1.0, transactions.get(9).getAmount());
|
||||
assertTrue(transactions.get(9).getType().getChargeAdjustment());
|
||||
assertEquals(0.0, transactions.get(9).getPenaltyChargesPortion());
|
||||
assertEquals(0.0, transactions.get(9).getFeeChargesPortion());
|
||||
assertEquals(0.0, transactions.get(9).getPrincipalPortion());
|
||||
assertEquals(1.0, transactions.get(9).getOverpaymentPortion());
|
||||
chargeAdjustmentTransactionId = transactions.get(9).getId();
|
||||
|
||||
journalEntries = this.journalEntryHelper.getJournalEntriesByTransactionId("L" + chargeAdjustmentTransactionId);
|
||||
assertEquals(1.0f, (float) journalEntries.get(0).get("amount"));
|
||||
assertEquals(uniqueIncomeAccountForPenalty.getResourceId().intValue(), (int) journalEntries.get(0).get("glAccountId"));
|
||||
assertEquals("DEBIT", ((HashMap) journalEntries.get(0).get("entryType")).get("value"));
|
||||
assertEquals(1.0f, (float) journalEntries.get(1).get("amount"));
|
||||
assertEquals(overpaymentAccount.getAccountID(), (int) journalEntries.get(1).get("glAccountId"));
|
||||
assertEquals("CREDIT", ((HashMap) journalEntries.get(1).get("entryType")).get("value"));
|
||||
|
||||
assertTrue(loanDetails.getStatus().getOverpaid());
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+3
@@ -34,10 +34,12 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -46,6 +48,7 @@ import org.slf4j.LoggerFactory;
|
||||
* repayments and verifying accounting transactions
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ClientLoanMultipleDisbursementsIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ClientLoanMultipleDisbursementsIntegrationTest.class);
|
||||
|
||||
+3
@@ -31,10 +31,12 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -43,6 +45,7 @@ import org.slf4j.LoggerFactory;
|
||||
* repayments and verifying accounting transactions
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ClientLoanNonTrancheMultipleDisbursementsIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ClientLoanNonTrancheMultipleDisbursementsIntegrationTest.class);
|
||||
|
||||
+2
@@ -55,6 +55,7 @@ import org.apache.fineract.portfolio.charge.domain.ChargeTimeType;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -63,6 +64,7 @@ import org.slf4j.LoggerFactory;
|
||||
* Client Savings Integration Test for checking Savings Application.
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
@Order(2)
|
||||
public class ClientSavingsIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ClientSavingsIntegrationTest.class);
|
||||
|
||||
+3
@@ -40,13 +40,16 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.accounting.Account;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ConcurrencyIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ConcurrencyIntegrationTest.class);
|
||||
|
||||
+199
-191
@@ -48,13 +48,16 @@ import org.apache.fineract.integrationtests.common.SchedulerJobHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@Slf4j
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class DelinquencyAndChargebackIntegrationTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
@@ -76,244 +79,249 @@ public class DelinquencyAndChargebackIntegrationTest {
|
||||
|
||||
@Test
|
||||
public void testLoanClassificationStepAsPartOfCOB() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final LocalDate todaysDate = Utils.getDateAsLocalDate("01 April 2012");
|
||||
LocalDate businessDate = todaysDate.minusMonths(3);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
final LocalDate todaysDate = Utils.getDateAsLocalDate("01 April 2012");
|
||||
LocalDate businessDate = todaysDate.minusMonths(3);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
// Delinquency Bucket
|
||||
final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketId);
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
// Delinquency Bucket
|
||||
final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketId);
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
|
||||
// Older date to have more than one overdue installment
|
||||
String operationDate = Utils.dateFormatter.format(businessDate);
|
||||
log.info("Operation date {}", businessDate);
|
||||
// Older date to have more than one overdue installment
|
||||
String operationDate = Utils.dateFormatter.format(businessDate);
|
||||
log.info("Operation date {}", businessDate);
|
||||
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "12");
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "12");
|
||||
|
||||
// Move the Business date 1 month to apply the first repayment
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
// Move the Business date 1 month to apply the first repayment
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
String amountVal = "100.00";
|
||||
Float transactionAmount = Float.valueOf(amountVal);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate,
|
||||
transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
Long transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
String amountVal = "100.00";
|
||||
Float transactionAmount = Float.valueOf(amountVal);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate,
|
||||
transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
Long transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
|
||||
// Move the Business date 1 month more to apply the second repayment
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
// Move the Business date 1 month more to apply the second repayment
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
|
||||
// Get loan details expecting to have not a delinquency classification and 1,000 as Outstanding
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, "0.00", "1000.00", 0, doubleZERO);
|
||||
// Get loan details expecting to have not a delinquency classification and 1,000 as Outstanding
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, "0.00", "1000.00", 0, doubleZERO);
|
||||
|
||||
// Move the Business date n days to apply the chargeback for the previous repayment
|
||||
businessDate = businessDate.plusDays(21);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
// Move the Business date n days to apply the chargeback for the previous repayment
|
||||
businessDate = businessDate.plusDays(21);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
// Apply the Chargeback transaction
|
||||
final Long chargebackTransactionId = loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, amountVal, 0,
|
||||
responseSpec);
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 1);
|
||||
// Apply the Chargeback transaction
|
||||
final Long chargebackTransactionId = loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, amountVal, 0,
|
||||
responseSpec);
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 1);
|
||||
|
||||
// Validate the account expecting to have an adjustment for 100.00 and Outstanding 1,100
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// Past Due Days in Zero because the Charge back transaction exists and It was done with the current date
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "1100.00", 0, Double.valueOf("0.00"));
|
||||
// Validate the account expecting to have an adjustment for 100.00 and Outstanding 1,100
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// Past Due Days in Zero because the Charge back transaction exists and It was done with the current date
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "1100.00", 0, Double.valueOf("0.00"));
|
||||
|
||||
// Move the Business date n days to run the COB
|
||||
businessDate = businessDate.plusDays(14);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
// Move the Business date n days to run the COB
|
||||
businessDate = businessDate.plusDays(14);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
// Run the Loan COB Job
|
||||
final String jobName = "Loan COB";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
// Run the Loan COB Job
|
||||
final String jobName = "Loan COB";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "1100.00", 14, Double.valueOf("200.00"));
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "1100.00", 14, Double.valueOf("200.00"));
|
||||
|
||||
// Move the Business date few days to apply the repayment for Chargeback
|
||||
businessDate = todaysDate.plusDays(4);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
// Move the Business date few days to apply the repayment for Chargeback
|
||||
businessDate = todaysDate.plusDays(4);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "1000.00", 4, Double.valueOf("100.00"));
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "1000.00", 4, Double.valueOf("100.00"));
|
||||
|
||||
// Apply a partial repayment
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
transactionAmount = Float.valueOf("50.00");
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "950.00", 4, Double.valueOf("50.00"));
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
// Apply a partial repayment
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
transactionAmount = Float.valueOf("50.00");
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "950.00", 4, Double.valueOf("50.00"));
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoanClassificationStepAsPartOfCOBRepeated() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
List<LocalDate> expectedDates = new ArrayList();
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
LocalDate businessDate = LocalDate.parse("2022-01-01", DateUtils.DEFAULT_DATE_FORMATTER);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
List<LocalDate> expectedDates = new ArrayList();
|
||||
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
// Delinquency Bucket
|
||||
final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketId);
|
||||
LocalDate businessDate = LocalDate.parse("2022-01-01", DateUtils.DEFAULT_DATE_FORMATTER);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
// Delinquency Bucket
|
||||
final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketId);
|
||||
|
||||
// Older date to have more than one overdue installment
|
||||
String operationDate = Utils.dateFormatter.format(businessDate);
|
||||
log.info("Operation date {}", businessDate);
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "3");
|
||||
// Older date to have more than one overdue installment
|
||||
String operationDate = Utils.dateFormatter.format(businessDate);
|
||||
log.info("Operation date {}", businessDate);
|
||||
|
||||
// Move the Business date 1 month to apply the first repayment
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
expectedDates.add(businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "3");
|
||||
|
||||
String amountVal = "400.00";
|
||||
Float transactionAmount = Float.valueOf(amountVal);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate,
|
||||
transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
Long transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
// Move the Business date 1 month to apply the first repayment
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
expectedDates.add(businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
// Move the Business date 1 month more to apply the second repayment
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
String amountVal = "400.00";
|
||||
Float transactionAmount = Float.valueOf(amountVal);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate,
|
||||
transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
Long transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
expectedDates.add(businessDate);
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
// Move the Business date 1 month more to apply the second repayment
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
// Get loan details expecting to have not a delinquency classification and 1,000 as Outstanding
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, "0.00", "400.00", 0, doubleZERO);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
expectedDates.add(businessDate);
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
|
||||
// Move the Business date n days to apply the chargeback for the previous repayment
|
||||
businessDate = businessDate.plusDays(15);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
// Get loan details expecting to have not a delinquency classification and 1,000 as Outstanding
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, "0.00", "400.00", 0, doubleZERO);
|
||||
|
||||
// Apply the Chargeback transaction
|
||||
final Long chargebackTransactionId = loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, amountVal, 0,
|
||||
responseSpec);
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 1);
|
||||
// Move the Business date n days to apply the chargeback for the previous repayment
|
||||
businessDate = businessDate.plusDays(15);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
// Validate the account expecting to have an adjustment for 100.00 and Outstanding 1,100
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// Past Due Days in Zero because the Charge back transaction exists and It was done with the current date
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "800.00", 0, Double.valueOf("0.00"));
|
||||
// Apply the Chargeback transaction
|
||||
final Long chargebackTransactionId = loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, amountVal, 0,
|
||||
responseSpec);
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 1);
|
||||
|
||||
// Move the Business date n days to run the COB
|
||||
businessDate = businessDate.plusDays(23);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
// Validate the account expecting to have an adjustment for 100.00 and Outstanding 1,100
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// Past Due Days in Zero because the Charge back transaction exists and It was done with the current date
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "800.00", 0, Double.valueOf("0.00"));
|
||||
|
||||
// Run the Loan COB Job
|
||||
final String jobName = "Loan COB";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
// Move the Business date n days to run the COB
|
||||
businessDate = businessDate.plusDays(23);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "800.00", 23, Double.valueOf("800.00"));
|
||||
// Run the Loan COB Job
|
||||
final String jobName = "Loan COB";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
// Move the Business date few days to apply the repayment for Chargeback
|
||||
businessDate = LocalDate.parse("2022-03-20", DateUtils.DEFAULT_DATE_FORMATTER);
|
||||
expectedDates.add(businessDate);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "800.00", 23, Double.valueOf("800.00"));
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "400.00", 7, Double.valueOf("400.00"));
|
||||
// Move the Business date few days to apply the repayment for Chargeback
|
||||
businessDate = LocalDate.parse("2022-03-20", DateUtils.DEFAULT_DATE_FORMATTER);
|
||||
expectedDates.add(businessDate);
|
||||
operationDate = Utils.dateFormatter.format(businessDate);
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
loanTransactionHelper.reviewLoanTransactionRelations(loanId, transactionId, 0);
|
||||
|
||||
// Pay the Loan to get this as Closed
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertEquals(LoanStatus.CLOSED_OBLIGATIONS_MET.getValue(), getLoansLoanIdResponse.getStatus().getId());
|
||||
log.info("Loan id {} with status {}", loanId, getLoansLoanIdResponse.getStatus().getCode());
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, amountVal, "400.00", 7, Double.valueOf("400.00"));
|
||||
|
||||
// Evaluate Installments
|
||||
GetLoansLoanIdRepaymentSchedule getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
assertNotNull(getLoanRepaymentSchedule);
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
// Pay the Loan to get this as Closed
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, transactionAmount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertEquals(LoanStatus.CLOSED_OBLIGATIONS_MET.getValue(), getLoansLoanIdResponse.getStatus().getId());
|
||||
log.info("Loan id {} with status {}", loanId, getLoansLoanIdResponse.getStatus().getCode());
|
||||
|
||||
for (GetLoansLoanIdRepaymentPeriod period : getLoanRepaymentSchedule.getPeriods()) {
|
||||
if (period.getPeriod() != null) {
|
||||
log.info("Period number {} completed on date {}", period.getPeriod(), period.getObligationsMetOnDate());
|
||||
assertNotNull(period.getObligationsMetOnDate());
|
||||
assertEquals(expectedDates.get(period.getPeriod() - 1), period.getObligationsMetOnDate());
|
||||
assertTrue(period.getComplete());
|
||||
// Evaluate Installments
|
||||
GetLoansLoanIdRepaymentSchedule getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
assertNotNull(getLoanRepaymentSchedule);
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
|
||||
for (GetLoansLoanIdRepaymentPeriod period : getLoanRepaymentSchedule.getPeriods()) {
|
||||
if (period.getPeriod() != null) {
|
||||
log.info("Period number {} completed on date {}", period.getPeriod(), period.getObligationsMetOnDate());
|
||||
assertNotNull(period.getObligationsMetOnDate());
|
||||
assertEquals(expectedDates.get(period.getPeriod() - 1), period.getObligationsMetOnDate());
|
||||
assertTrue(period.getComplete());
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
private GetLoanProductsProductIdResponse createLoanProduct(final LoanTransactionHelper loanTransactionHelper,
|
||||
|
||||
+312
-299
@@ -61,13 +61,16 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyRangesHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@Slf4j
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class DelinquencyBucketsIntegrationTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
@@ -239,193 +242,198 @@ public class DelinquencyBucketsIntegrationTest {
|
||||
|
||||
@Test
|
||||
public void testLoanClassificationRealtime() {
|
||||
// Given
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
try {
|
||||
// Given
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 March 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
final BusinessDateResponse businessDateResponse = this.businessDateHelper.getBusinessDateByType(requestSpec, responseSpec,
|
||||
BusinessDateType.BUSINESS_DATE);
|
||||
final LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 March 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
final BusinessDateResponse businessDateResponse = this.businessDateHelper.getBusinessDateByType(requestSpec, responseSpec,
|
||||
BusinessDateType.BUSINESS_DATE);
|
||||
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
// First Range
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec,
|
||||
jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
// First Range
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec,
|
||||
responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
|
||||
GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
|
||||
// Second Range
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
// Second Range
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
|
||||
range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec, delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification after Disbursement {}", classificationExpected);
|
||||
range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec, delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification after Disbursement {}", classificationExpected);
|
||||
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Bucket Name: {}", getLoanProductsProductResponse.getDelinquencyBucket().getName());
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Bucket Name: {}", getLoanProductsProductResponse.getDelinquencyBucket().getName());
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
|
||||
// Older date to have more than one overdue installment
|
||||
final LocalDate transactionDate = bussinesLocalDate.minusDays(50);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
// Older date to have more than one overdue installment
|
||||
final LocalDate transactionDate = bussinesLocalDate.minusDays(50);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate);
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate);
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
assertNotNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
log.info("Loan Delinquency Range after Disbursement {}", getLoansLoanIdResponse.getDelinquencyRange().getClassification());
|
||||
// First Loan Delinquency Classification after Disbursement command
|
||||
assertEquals(getLoansLoanIdResponse.getDelinquencyRange().getClassification(), classificationExpected);
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
assertNotNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
log.info("Loan Delinquency Range after Disbursement {}", getLoansLoanIdResponse.getDelinquencyRange().getClassification());
|
||||
// First Loan Delinquency Classification after Disbursement command
|
||||
assertEquals(getLoansLoanIdResponse.getDelinquencyRange().getClassification(), classificationExpected);
|
||||
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
|
||||
// Apply a partial repayment
|
||||
operationDate = Utils.dateFormatter.format(bussinesLocalDate);
|
||||
loanTransactionHelper.makeLoanRepayment(operationDate, 100.0f, loanId);
|
||||
// Apply a partial repayment
|
||||
operationDate = Utils.dateFormatter.format(bussinesLocalDate);
|
||||
loanTransactionHelper.makeLoanRepayment(operationDate, 100.0f, loanId);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
log.info("Loan Delinquency Range after Repayment {}", getLoansLoanIdResponse.getDelinquencyRange());
|
||||
assertNotNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
// First Loan Delinquency Classification remains after Repayment because the installment is not fully paid
|
||||
assertEquals(getLoansLoanIdResponse.getDelinquencyRange().getClassification(), classificationExpected);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
log.info("Loan Delinquency Range after Repayment {}", getLoansLoanIdResponse.getDelinquencyRange());
|
||||
assertNotNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
// First Loan Delinquency Classification remains after Repayment because the installment is not fully paid
|
||||
assertEquals(getLoansLoanIdResponse.getDelinquencyRange().getClassification(), classificationExpected);
|
||||
|
||||
// Apply a repayment to get a full paid installment
|
||||
loanTransactionHelper.makeLoanRepayment(operationDate, 1000.0f, loanId);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
log.info("Loan Delinquency Range after Repayment {}", getLoansLoanIdResponse.getDelinquencyRange());
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// The Loan Delinquency Classification after Repayment command must be null
|
||||
assertNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
// Get the Delinquency Tags
|
||||
ArrayList<GetDelinquencyTagHistoryResponse> getDelinquencyTagsHistory = loanTransactionHelper.getLoanDelinquencyTags(requestSpec,
|
||||
responseSpec, loanId);
|
||||
assertNotNull(getDelinquencyTagsHistory);
|
||||
log.info("Delinquency Tag History items {}", getDelinquencyTagsHistory.size());
|
||||
assertEquals(1, getDelinquencyTagsHistory.size());
|
||||
assertNotNull(getDelinquencyTagsHistory.get(0).getLiftedOnDate());
|
||||
assertEquals(getDelinquencyTagsHistory.get(0).getAddedOnDate(), businessDateResponse.getDate());
|
||||
assertEquals(getDelinquencyTagsHistory.get(0).getLiftedOnDate(), businessDateResponse.getDate());
|
||||
assertEquals(getDelinquencyTagsHistory.get(0).getDelinquencyRange().getClassification(), classificationExpected);
|
||||
log.info("Delinquency Tag Item with Lifted On {}", getDelinquencyTagsHistory.get(0).getLiftedOnDate());
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
// Apply a repayment to get a full paid installment
|
||||
loanTransactionHelper.makeLoanRepayment(operationDate, 1000.0f, loanId);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
log.info("Loan Delinquency Range after Repayment {}", getLoansLoanIdResponse.getDelinquencyRange());
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// The Loan Delinquency Classification after Repayment command must be null
|
||||
assertNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
// Get the Delinquency Tags
|
||||
ArrayList<GetDelinquencyTagHistoryResponse> getDelinquencyTagsHistory = loanTransactionHelper
|
||||
.getLoanDelinquencyTags(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getDelinquencyTagsHistory);
|
||||
log.info("Delinquency Tag History items {}", getDelinquencyTagsHistory.size());
|
||||
assertEquals(1, getDelinquencyTagsHistory.size());
|
||||
assertNotNull(getDelinquencyTagsHistory.get(0).getLiftedOnDate());
|
||||
assertEquals(getDelinquencyTagsHistory.get(0).getAddedOnDate(), businessDateResponse.getDate());
|
||||
assertEquals(getDelinquencyTagsHistory.get(0).getLiftedOnDate(), businessDateResponse.getDate());
|
||||
assertEquals(getDelinquencyTagsHistory.get(0).getDelinquencyRange().getClassification(), classificationExpected);
|
||||
log.info("Delinquency Tag Item with Lifted On {}", getDelinquencyTagsHistory.get(0).getLiftedOnDate());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoanClassificationRealtimeWithCharges() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 April 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
final LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 April 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
|
||||
// Given
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
// Given
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
// First Range
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec,
|
||||
jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
// First Range
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec,
|
||||
responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
|
||||
GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
|
||||
// Second Range
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
// Second Range
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
|
||||
range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec, delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification after Disbursement {}", classificationExpected);
|
||||
range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec, delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification after Disbursement {}", classificationExpected);
|
||||
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Bucket Name: {}", getLoanProductsProductResponse.getDelinquencyBucket().getName());
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Bucket Name: {}", getLoanProductsProductResponse.getDelinquencyBucket().getName());
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
|
||||
// Older date to have more than one overdue installment
|
||||
LocalDate transactionDate = bussinesLocalDate.minusMonths(2).minusDays(5);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
// Older date to have more than one overdue installment
|
||||
LocalDate transactionDate = bussinesLocalDate.minusMonths(2).minusDays(5);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate);
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate);
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
log.info("Loan Delinquency Range after Disbursement {}", getLoansLoanIdResponse.getDelinquencyRange().getClassification());
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// First Loan Delinquency Classification after Disbursement command
|
||||
assertEquals(getLoansLoanIdResponse.getDelinquencyRange().getClassification(), classificationExpected);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
log.info("Loan Delinquency Range after Disbursement {}", getLoansLoanIdResponse.getDelinquencyRange().getClassification());
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// First Loan Delinquency Classification after Disbursement command
|
||||
assertEquals(getLoansLoanIdResponse.getDelinquencyRange().getClassification(), classificationExpected);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
|
||||
// Apply a repayment to get a full paid installment
|
||||
operationDate = Utils.dateFormatter.format(bussinesLocalDate);
|
||||
loanTransactionHelper.makeLoanRepayment(operationDate, 2049.99f, loanId);
|
||||
// Apply a repayment to get a full paid installment
|
||||
operationDate = Utils.dateFormatter.format(bussinesLocalDate);
|
||||
loanTransactionHelper.makeLoanRepayment(operationDate, 2049.99f, loanId);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// The Loan Delinquency Classification after Repayment command must be null
|
||||
log.info("Loan Delinquency Range after Repayment {}", getLoansLoanIdResponse.getDelinquencyRange());
|
||||
assertNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// The Loan Delinquency Classification after Repayment command must be null
|
||||
log.info("Loan Delinquency Range after Repayment {}", getLoansLoanIdResponse.getDelinquencyRange());
|
||||
assertNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
|
||||
transactionDate = bussinesLocalDate.minusDays(18);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
transactionDate = bussinesLocalDate.minusDays(18);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
// Create and apply Charge for Specific Due Date
|
||||
final Integer chargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanSpecifiedDueDateJSON(1, "30", false));
|
||||
assertNotNull(chargeId);
|
||||
final Integer loanChargeId = loanTransactionHelper.addChargesForLoan(loanId, getChargeApplyJSON(chargeId, operationDate),
|
||||
responseSpec);
|
||||
assertNotNull(loanChargeId);
|
||||
// Create and apply Charge for Specific Due Date
|
||||
final Integer chargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanSpecifiedDueDateJSON(1, "30", false));
|
||||
assertNotNull(chargeId);
|
||||
final Integer loanChargeId = loanTransactionHelper.addChargesForLoan(loanId, getChargeApplyJSON(chargeId, operationDate),
|
||||
responseSpec);
|
||||
assertNotNull(loanChargeId);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
|
||||
log.info("Loan Delinquency Range after add Loan Charge {}", getLoansLoanIdResponse.getDelinquencyRange());
|
||||
assertNotNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
// Evaluate a Delinquency Tag set after add charge to the Loan
|
||||
assertEquals(getLoansLoanIdResponse.getDelinquencyRange().getClassification(), classificationExpected);
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
log.info("Loan Delinquency Range after add Loan Charge {}", getLoansLoanIdResponse.getDelinquencyRange());
|
||||
assertNotNull(getLoansLoanIdResponse.getDelinquencyRange());
|
||||
// Evaluate a Delinquency Tag set after add charge to the Loan
|
||||
assertEquals(getLoansLoanIdResponse.getDelinquencyRange().getClassification(), classificationExpected);
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoanClassificationRealtimeOlderLoan() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
|
||||
// Given
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
@@ -633,189 +641,194 @@ public class DelinquencyBucketsIntegrationTest {
|
||||
|
||||
@Test
|
||||
public void testLoanClassificationJob() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
LocalDate businessDate = Utils.getLocalDateOfTenant();
|
||||
businessDate = businessDate.minusDays(37);
|
||||
log.info("Current date {}", businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
LocalDate businessDate = Utils.getLocalDateOfTenant();
|
||||
businessDate = businessDate.minusDays(37);
|
||||
log.info("Current date {}", businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec,
|
||||
jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
// Create
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec,
|
||||
responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
// Create
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
|
||||
final GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification {}", classificationExpected);
|
||||
final GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification {}", classificationExpected);
|
||||
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Bucket Name: {}", getLoanProductsProductResponse.getDelinquencyBucket().getName());
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Bucket Name: {}", getLoanProductsProductResponse.getDelinquencyBucket().getName());
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
// Older date to have more than one overdue installment
|
||||
final LocalDate transactionDate = todaysDate.minusDays(57);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
// Older date to have more than one overdue installment
|
||||
final LocalDate transactionDate = todaysDate.minusDays(57);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate);
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate);
|
||||
|
||||
// Run first time the Job
|
||||
final String jobName = "Loan Delinquency Classification";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
// Run first time the Job
|
||||
final String jobName = "Loan Delinquency Classification";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
// Get loan details expecting to have not a delinquency classification
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
final GetDelinquencyRangesResponse firstTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
log.info("Loan Delinquency Range is null {}", (firstTestCase == null));
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
// Get loan details expecting to have not a delinquency classification
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
final GetDelinquencyRangesResponse firstTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
log.info("Loan Delinquency Range is null {}", (firstTestCase == null));
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
|
||||
// Move the Business date to get older the loan and to have an overdue loan
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
log.info("Current date {}", businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
// Run Second time the Job
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
// Move the Business date to get older the loan and to have an overdue loan
|
||||
businessDate = businessDate.plusMonths(1);
|
||||
log.info("Current date {}", businessDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
// Run Second time the Job
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
|
||||
final GetDelinquencyRangesResponse secondTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
assertNotNull(secondTestCase);
|
||||
log.info("Loan Delinquency Range is {}", secondTestCase.getClassification());
|
||||
final GetDelinquencyRangesResponse secondTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
assertNotNull(secondTestCase);
|
||||
log.info("Loan Delinquency Range is {}", secondTestCase.getClassification());
|
||||
|
||||
// Then
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
assertNull(firstTestCase);
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
assertEquals(secondTestCase.getClassification(), classificationExpected);
|
||||
// Then
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
assertNull(firstTestCase);
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
assertEquals(secondTestCase.getClassification(), classificationExpected);
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoanClassificationStepAsPartOfCOB() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 April 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 April 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
|
||||
// Given
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
// Given
|
||||
final LoanTransactionHelper loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec,
|
||||
jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
final GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification {}", classificationExpected);
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec,
|
||||
responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
final GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification {}", classificationExpected);
|
||||
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Bucket Name: {}", getLoanProductsProductResponse.getDelinquencyBucket().getName());
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucket.getId());
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Bucket Name: {}", getLoanProductsProductResponse.getDelinquencyBucket().getName());
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
|
||||
// Older date to have more than one overdue installment
|
||||
final LocalDate transactionDate = bussinesLocalDate.minusDays(31);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
// Older date to have more than one overdue installment
|
||||
final LocalDate transactionDate = bussinesLocalDate.minusDays(31);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate);
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate);
|
||||
|
||||
// COB Step Validation
|
||||
final JobBusinessStepConfigData jobBusinessStepConfigData = BusinessStepConfigurationHelper
|
||||
.getConfiguredBusinessStepsByJobName(requestSpec, responseSpec, BusinessConfigurationApiTest.LOAN_JOB_NAME);
|
||||
assertNotNull(jobBusinessStepConfigData);
|
||||
assertEquals(BusinessConfigurationApiTest.LOAN_JOB_NAME, jobBusinessStepConfigData.getJobName());
|
||||
assertTrue(jobBusinessStepConfigData.getBusinessSteps().size() > 0);
|
||||
assertTrue(jobBusinessStepConfigData.getBusinessSteps().stream()
|
||||
.anyMatch(businessStep -> BusinessConfigurationApiTest.LOAN_DELINQUENCY_CLASSIFICATION.equals(businessStep.getStepName())));
|
||||
// COB Step Validation
|
||||
final JobBusinessStepConfigData jobBusinessStepConfigData = BusinessStepConfigurationHelper
|
||||
.getConfiguredBusinessStepsByJobName(requestSpec, responseSpec, BusinessConfigurationApiTest.LOAN_JOB_NAME);
|
||||
assertNotNull(jobBusinessStepConfigData);
|
||||
assertEquals(BusinessConfigurationApiTest.LOAN_JOB_NAME, jobBusinessStepConfigData.getJobName());
|
||||
assertTrue(jobBusinessStepConfigData.getBusinessSteps().size() > 0);
|
||||
assertTrue(jobBusinessStepConfigData.getBusinessSteps().stream().anyMatch(
|
||||
businessStep -> BusinessConfigurationApiTest.LOAN_DELINQUENCY_CLASSIFICATION.equals(businessStep.getStepName())));
|
||||
|
||||
// Run first time the Loan COB Job
|
||||
final String jobName = "Loan COB";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
// Run first time the Loan COB Job
|
||||
final String jobName = "Loan COB";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
// Get loan details expecting to have not a delinquency classification
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
final GetDelinquencyRangesResponse firstTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
log.info("Loan Delinquency Range is null {}", (firstTestCase == null));
|
||||
GetLoansLoanIdRepaymentSchedule getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
if (getLoanRepaymentSchedule != null) {
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
for (GetLoansLoanIdRepaymentPeriod period : getLoanRepaymentSchedule.getPeriods()) {
|
||||
log.info("Period number {} for due date {} and outstanding {}", period.getPeriod(), period.getDueDate(),
|
||||
period.getTotalOutstandingForPeriod());
|
||||
// Get loan details expecting to have not a delinquency classification
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
final GetDelinquencyRangesResponse firstTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
log.info("Loan Delinquency Range is null {}", (firstTestCase == null));
|
||||
GetLoansLoanIdRepaymentSchedule getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
if (getLoanRepaymentSchedule != null) {
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
for (GetLoansLoanIdRepaymentPeriod period : getLoanRepaymentSchedule.getPeriods()) {
|
||||
log.info("Period number {} for due date {} and outstanding {}", period.getPeriod(), period.getDueDate(),
|
||||
period.getTotalOutstandingForPeriod());
|
||||
}
|
||||
}
|
||||
|
||||
// Move the Business date to get older the loan and to have an overdue loan
|
||||
LocalDate lastLoanCOBBusinessDate = bussinesLocalDate;
|
||||
bussinesLocalDate = bussinesLocalDate.plusDays(3);
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
// Run Second time the Job
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
final GetDelinquencyRangesResponse secondTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
assertNotNull(secondTestCase);
|
||||
log.info("Loan Delinquency Range is {}", secondTestCase.getClassification());
|
||||
|
||||
// Then
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
assertNull(firstTestCase);
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
assertEquals(secondTestCase.getClassification(), classificationExpected);
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
// Move the Business date to get older the loan and to have an overdue loan
|
||||
LocalDate lastLoanCOBBusinessDate = bussinesLocalDate;
|
||||
bussinesLocalDate = bussinesLocalDate.plusDays(3);
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
// Run Second time the Job
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
final GetDelinquencyRangesResponse secondTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
assertNotNull(secondTestCase);
|
||||
log.info("Loan Delinquency Range is {}", secondTestCase.getClassification());
|
||||
|
||||
// Then
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
assertNull(firstTestCase);
|
||||
assertEquals(getLoanProductsProductResponse.getDelinquencyBucket().getName(), delinquencyBucket.getName());
|
||||
assertEquals(secondTestCase.getClassification(), classificationExpected);
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
private GetLoanProductsProductIdResponse createLoanProduct(final LoanTransactionHelper loanTransactionHelper,
|
||||
|
||||
+3
@@ -41,17 +41,20 @@ import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuil
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanRescheduleRequestTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
/**
|
||||
* Tests loan schedule change based on group meeting changes and loan rescheduling
|
||||
**/
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
@Disabled
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class DisbursalAndRepaymentScheduleTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -41,12 +41,15 @@ import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class DueDateRespectiveLoanRepaymentScheduleTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(DueDateRespectiveLoanRepaymentScheduleTest.class);
|
||||
|
||||
+4
@@ -76,6 +76,7 @@ import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.organisation.StaffHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
@@ -83,7 +84,9 @@ import org.apache.fineract.integrationtests.common.products.DelinquencyRangesHel
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ExternalIdSupportIntegrationTest extends IntegrationTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
@@ -849,6 +852,7 @@ public class ExternalIdSupportIntegrationTest extends IntegrationTest {
|
||||
|
||||
@Test
|
||||
public void loan() {
|
||||
|
||||
GlobalConfigurationHelper.updateEnabledFlagForGlobalConfiguration(requestSpec, responseSpec, 50, true);
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
new BusinessDateHelper().updateBusinessDate(new BusinessDateRequest().type(BusinessDateType.BUSINESS_DATE.getName())
|
||||
|
||||
+3
@@ -39,10 +39,12 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -50,6 +52,7 @@ import org.slf4j.LoggerFactory;
|
||||
* Group Loan Integration Test for checking Loan Application Repayment Schedule.
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class GroupLoanIntegrationTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
@@ -37,17 +37,20 @@ import org.apache.fineract.integrationtests.common.GroupHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.organisation.StaffHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Group Test for checking Group: Creation, Activation, Client Association, Updating & Deletion
|
||||
*/
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class GroupTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GroupTest.class);
|
||||
|
||||
+59
-52
@@ -46,11 +46,14 @@ import org.apache.fineract.integrationtests.common.SchedulerJobHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanAccountArrearsAgeingCOBBusinessStepTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
@@ -77,72 +80,76 @@ public class LoanAccountArrearsAgeingCOBBusinessStepTest {
|
||||
@Test
|
||||
public void loanArrearsAgeingCOBBusinessStepTest() {
|
||||
// Set Business Date
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
LocalDate businessDate = Utils.getLocalDateOfTenant();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
LocalDate operationDate = businessDate.minusDays(40);
|
||||
String loanOperationDate = Utils.dateFormatter.format(operationDate);
|
||||
LocalDate businessDate = Utils.getLocalDateOfTenant();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
|
||||
// create Client
|
||||
final Integer clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
|
||||
LocalDate operationDate = businessDate.minusDays(40);
|
||||
String loanOperationDate = Utils.dateFormatter.format(operationDate);
|
||||
|
||||
// create Loan Product
|
||||
// create Client
|
||||
final Integer clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
|
||||
|
||||
// Delinquency Bucket
|
||||
final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketId);
|
||||
// create Loan Product
|
||||
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucketId);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
// Delinquency Bucket
|
||||
final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketId);
|
||||
|
||||
// Loan1 ExternalId
|
||||
String loan1ExternalIdStr = UUID.randomUUID().toString();
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucketId);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
|
||||
// create Loan Account for Client with Loan Product type 1
|
||||
Long loanProductId = getLoanProductsProductResponse.getId();
|
||||
final Integer loanId_1 = createLoanAccount(loanOperationDate, clientId, loanProductId, loan1ExternalIdStr);
|
||||
// Loan1 ExternalId
|
||||
String loan1ExternalIdStr = UUID.randomUUID().toString();
|
||||
|
||||
String loan2ExternalIdStr = UUID.randomUUID().toString();
|
||||
final Integer loanId_2 = createLoanAccount(loanOperationDate, clientId, loanProductId, loan2ExternalIdStr);
|
||||
// create Loan Account for Client with Loan Product type 1
|
||||
Long loanProductId = getLoanProductsProductResponse.getId();
|
||||
final Integer loanId_1 = createLoanAccount(loanOperationDate, clientId, loanProductId, loan1ExternalIdStr);
|
||||
|
||||
// Run Loan cob with verfying business step for Update Arrears ageing details
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
String loan2ExternalIdStr = UUID.randomUUID().toString();
|
||||
final Integer loanId_2 = createLoanAccount(loanOperationDate, clientId, loanProductId, loan2ExternalIdStr);
|
||||
|
||||
// COB Step Validation
|
||||
final JobBusinessStepConfigData jobBusinessStepConfigData = BusinessStepConfigurationHelper
|
||||
.getConfiguredBusinessStepsByJobName(requestSpec, responseSpec, BusinessConfigurationApiTest.LOAN_JOB_NAME);
|
||||
assertNotNull(jobBusinessStepConfigData);
|
||||
assertEquals(BusinessConfigurationApiTest.LOAN_JOB_NAME, jobBusinessStepConfigData.getJobName());
|
||||
assertTrue(jobBusinessStepConfigData.getBusinessSteps().size() > 0);
|
||||
assertTrue(jobBusinessStepConfigData.getBusinessSteps().stream()
|
||||
.anyMatch(businessStep -> UPDATE_LOAN_ARREARS_AGING.equals(businessStep.getStepName())));
|
||||
// Run Loan cob with verfying business step for Update Arrears ageing details
|
||||
final SchedulerJobHelper schedulerJobHelper = new SchedulerJobHelper(requestSpec);
|
||||
|
||||
// Run the Loan COB Job
|
||||
final String jobName = "Loan COB";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
// COB Step Validation
|
||||
final JobBusinessStepConfigData jobBusinessStepConfigData = BusinessStepConfigurationHelper
|
||||
.getConfiguredBusinessStepsByJobName(requestSpec, responseSpec, BusinessConfigurationApiTest.LOAN_JOB_NAME);
|
||||
assertNotNull(jobBusinessStepConfigData);
|
||||
assertEquals(BusinessConfigurationApiTest.LOAN_JOB_NAME, jobBusinessStepConfigData.getJobName());
|
||||
assertTrue(jobBusinessStepConfigData.getBusinessSteps().size() > 0);
|
||||
assertTrue(jobBusinessStepConfigData.getBusinessSteps().stream()
|
||||
.anyMatch(businessStep -> UPDATE_LOAN_ARREARS_AGING.equals(businessStep.getStepName())));
|
||||
|
||||
// verify Arrears details are updated for both the loans, by verifying loan summary fields for
|
||||
// principalOverdue,totalOverdue,overdueSinceddate
|
||||
// Run the Loan COB Job
|
||||
final String jobName = "Loan COB";
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
// Retrieve Loan 1 with loanId
|
||||
GetLoansLoanIdResponse loan1Details = loanTransactionHelper.getLoanDetails((long) loanId_1);
|
||||
GetLoansLoanIdSummary loan1Summary = loan1Details.getSummary();
|
||||
assertNotNull(loan1Summary);
|
||||
assertNotNull(loan1Summary.getOverdueSinceDate());
|
||||
assertEquals(loan1Summary.getPrincipalOverdue(), 1000.00);
|
||||
assertEquals(loan1Summary.getTotalOverdue(), 1000.00);
|
||||
// verify Arrears details are updated for both the loans, by verifying loan summary fields for
|
||||
// principalOverdue,totalOverdue,overdueSinceddate
|
||||
|
||||
// Retrieve Loan 2 with loanId
|
||||
GetLoansLoanIdResponse loan2Details = loanTransactionHelper.getLoanDetails((long) loanId_2);
|
||||
GetLoansLoanIdSummary loan2Summary = loan2Details.getSummary();
|
||||
assertNotNull(loan2Summary);
|
||||
assertNotNull(loan2Summary.getOverdueSinceDate());
|
||||
assertEquals(loan2Summary.getPrincipalOverdue(), 1000.00);
|
||||
assertEquals(loan2Summary.getTotalOverdue(), 1000.00);
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
// Retrieve Loan 1 with loanId
|
||||
GetLoansLoanIdResponse loan1Details = loanTransactionHelper.getLoanDetails((long) loanId_1);
|
||||
GetLoansLoanIdSummary loan1Summary = loan1Details.getSummary();
|
||||
assertNotNull(loan1Summary);
|
||||
assertNotNull(loan1Summary.getOverdueSinceDate());
|
||||
assertEquals(loan1Summary.getPrincipalOverdue(), 1000.00);
|
||||
assertEquals(loan1Summary.getTotalOverdue(), 1000.00);
|
||||
|
||||
// Retrieve Loan 2 with loanId
|
||||
GetLoansLoanIdResponse loan2Details = loanTransactionHelper.getLoanDetails((long) loanId_2);
|
||||
GetLoansLoanIdSummary loan2Summary = loan2Details.getSummary();
|
||||
assertNotNull(loan2Summary);
|
||||
assertNotNull(loan2Summary.getOverdueSinceDate());
|
||||
assertEquals(loan2Summary.getPrincipalOverdue(), 1000.00);
|
||||
assertEquals(loan2Summary.getTotalOverdue(), 1000.00);
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
private GetLoanProductsProductIdResponse createLoanProduct(final LoanTransactionHelper loanTransactionHelper,
|
||||
|
||||
+3
@@ -40,11 +40,14 @@ import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanAccountCreditRefundPayoutWithChargebackTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -36,11 +36,14 @@ import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@Slf4j
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanAccountFraudTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+74
-68
@@ -46,11 +46,14 @@ import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanAccountOverpaidDateStatusTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
@@ -76,92 +79,95 @@ public class LoanAccountOverpaidDateStatusTest {
|
||||
@Test
|
||||
public void loanOverpaidDateStatusTest() {
|
||||
// Set business date
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
|
||||
try {
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
|
||||
// Loan ExternalId
|
||||
String loanExternalIdStr = UUID.randomUUID().toString();
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
|
||||
|
||||
// Delinquency Bucket
|
||||
final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketId);
|
||||
// Loan ExternalId
|
||||
String loanExternalIdStr = UUID.randomUUID().toString();
|
||||
|
||||
// Client and Loan account creation
|
||||
// Delinquency Bucket
|
||||
final Integer delinquencyBucketId = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec, responseSpec);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketId);
|
||||
|
||||
final Integer clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucketId);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
// Client and Loan account creation
|
||||
|
||||
final Integer loanId = createLoanAccount(clientId, getLoanProductsProductResponse.getId(), loanExternalIdStr);
|
||||
final Integer clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
delinquencyBucketId);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
|
||||
// make Repayments
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("5 September 2022").locale("en")
|
||||
.transactionAmount(200.0));
|
||||
final Integer loanId = createLoanAccount(clientId, getLoanProductsProductResponse.getId(), loanExternalIdStr);
|
||||
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_2 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("6 September 2022").locale("en")
|
||||
.transactionAmount(200.0));
|
||||
// make Repayments
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("5 September 2022").locale("en")
|
||||
.transactionAmount(200.0));
|
||||
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_3 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("7 September 2022").locale("en")
|
||||
.transactionAmount(500.0));
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_2 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("6 September 2022").locale("en")
|
||||
.transactionAmount(200.0));
|
||||
|
||||
// make repayment to make loan overpaid
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_4 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("9 September 2022").locale("en")
|
||||
.transactionAmount(200.0));
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_3 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("7 September 2022").locale("en")
|
||||
.transactionAmount(500.0));
|
||||
|
||||
// check loan overpaid date is not null and is set as Business date and loan status
|
||||
GetLoansLoanIdResponse loanDetailsOverpaid = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertTrue(loanDetailsOverpaid.getStatus().getOverpaid());
|
||||
assertNotNull(loanDetailsOverpaid.getOverpaidOnDate());
|
||||
assertEquals(loanDetailsOverpaid.getOverpaidOnDate(), todaysDate);
|
||||
// make repayment to make loan overpaid
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_4 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("9 September 2022").locale("en")
|
||||
.transactionAmount(200.0));
|
||||
|
||||
// reverse repayment to make loan not overpaid and overpaid date is reset
|
||||
loanTransactionHelper.reverseRepayment(loanId, repaymentTransaction_4.getResourceId().intValue(), "10 September 2022");
|
||||
GetLoansLoanIdResponse loanDetailsNotOverpaidAfterReversal = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertFalse(loanDetailsNotOverpaidAfterReversal.getStatus().getOverpaid());
|
||||
assertNull(loanDetailsNotOverpaidAfterReversal.getOverpaidOnDate());
|
||||
// check loan overpaid date is not null and is set as Business date and loan status
|
||||
GetLoansLoanIdResponse loanDetailsOverpaid = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertTrue(loanDetailsOverpaid.getStatus().getOverpaid());
|
||||
assertNotNull(loanDetailsOverpaid.getOverpaidOnDate());
|
||||
assertEquals(loanDetailsOverpaid.getOverpaidOnDate(), todaysDate);
|
||||
|
||||
// make repayment to make loan overpaid again
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_5 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("11 September 2022").locale("en")
|
||||
.transactionAmount(200.0));
|
||||
// reverse repayment to make loan not overpaid and overpaid date is reset
|
||||
loanTransactionHelper.reverseRepayment(loanId, repaymentTransaction_4.getResourceId().intValue(), "10 September 2022");
|
||||
GetLoansLoanIdResponse loanDetailsNotOverpaidAfterReversal = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertFalse(loanDetailsNotOverpaidAfterReversal.getStatus().getOverpaid());
|
||||
assertNull(loanDetailsNotOverpaidAfterReversal.getOverpaidOnDate());
|
||||
|
||||
// check loan overpaid date is not null and is set as Business date and loan status
|
||||
GetLoansLoanIdResponse loanDetailsOverpaid_1 = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertTrue(loanDetailsOverpaid_1.getStatus().getOverpaid());
|
||||
assertNotNull(loanDetailsOverpaid_1.getOverpaidOnDate());
|
||||
assertEquals(loanDetailsOverpaid_1.getOverpaidOnDate(), todaysDate);
|
||||
// make repayment to make loan overpaid again
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_5 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("11 September 2022").locale("en")
|
||||
.transactionAmount(200.0));
|
||||
|
||||
// Credit balance refund to reset overpaid status
|
||||
loanTransactionHelper.creditBalanceRefund("12 September 2022", Float.valueOf(100), null, loanId, "");
|
||||
GetLoansLoanIdResponse loanDetailsNotOverpaidAfterCBR = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertFalse(loanDetailsNotOverpaidAfterCBR.getStatus().getOverpaid());
|
||||
assertNull(loanDetailsNotOverpaidAfterCBR.getOverpaidOnDate());
|
||||
// check loan overpaid date is not null and is set as Business date and loan status
|
||||
GetLoansLoanIdResponse loanDetailsOverpaid_1 = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertTrue(loanDetailsOverpaid_1.getStatus().getOverpaid());
|
||||
assertNotNull(loanDetailsOverpaid_1.getOverpaidOnDate());
|
||||
assertEquals(loanDetailsOverpaid_1.getOverpaidOnDate(), todaysDate);
|
||||
|
||||
// reverse repayment to make loan active again
|
||||
loanTransactionHelper.reverseRepayment(loanId, repaymentTransaction_2.getResourceId().intValue(), "13 September 2022");
|
||||
GetLoansLoanIdResponse loanDetailsNotOverpaidAfterReversal_1 = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertFalse(loanDetailsNotOverpaidAfterReversal_1.getStatus().getOverpaid());
|
||||
assertNull(loanDetailsNotOverpaidAfterReversal_1.getOverpaidOnDate());
|
||||
// Credit balance refund to reset overpaid status
|
||||
loanTransactionHelper.creditBalanceRefund("12 September 2022", Float.valueOf(100), null, loanId, "");
|
||||
GetLoansLoanIdResponse loanDetailsNotOverpaidAfterCBR = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertFalse(loanDetailsNotOverpaidAfterCBR.getStatus().getOverpaid());
|
||||
assertNull(loanDetailsNotOverpaidAfterCBR.getOverpaidOnDate());
|
||||
|
||||
// make repayment to make loan overpaid again
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_6 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("14 September 2022").locale("en")
|
||||
.transactionAmount(300.0));
|
||||
// reverse repayment to make loan active again
|
||||
loanTransactionHelper.reverseRepayment(loanId, repaymentTransaction_2.getResourceId().intValue(), "13 September 2022");
|
||||
GetLoansLoanIdResponse loanDetailsNotOverpaidAfterReversal_1 = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertFalse(loanDetailsNotOverpaidAfterReversal_1.getStatus().getOverpaid());
|
||||
assertNull(loanDetailsNotOverpaidAfterReversal_1.getOverpaidOnDate());
|
||||
|
||||
// check loan overpaid date is not null and is set as Business date and loan status
|
||||
GetLoansLoanIdResponse loanDetailsOverpaid_3 = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertTrue(loanDetailsOverpaid_3.getStatus().getOverpaid());
|
||||
assertNotNull(loanDetailsOverpaid_3.getOverpaidOnDate());
|
||||
assertEquals(loanDetailsOverpaid_3.getOverpaidOnDate(), todaysDate);
|
||||
// make repayment to make loan overpaid again
|
||||
final PostLoansLoanIdTransactionsResponse repaymentTransaction_6 = loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("14 September 2022").locale("en")
|
||||
.transactionAmount(300.0));
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
// check loan overpaid date is not null and is set as Business date and loan status
|
||||
GetLoansLoanIdResponse loanDetailsOverpaid_3 = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertTrue(loanDetailsOverpaid_3.getStatus().getOverpaid());
|
||||
assertNotNull(loanDetailsOverpaid_3.getOverpaidOnDate());
|
||||
assertEquals(loanDetailsOverpaid_3.getOverpaidOnDate(), todaysDate);
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -36,14 +36,17 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanApplicationApprovalTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanApplicationApprovalTest.class);
|
||||
|
||||
+3
@@ -35,10 +35,13 @@ import org.apache.fineract.integrationtests.common.accounting.Account;
|
||||
import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanApplicationRejectionForLoanProductWithPeriodicAccrualAccountingTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -39,14 +39,17 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanApplicationUndoLastTrancheTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanApplicationUndoLastTrancheTest.class);
|
||||
|
||||
+3
@@ -43,15 +43,18 @@ import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.organisation.StaffHelper;
|
||||
import org.apache.fineract.integrationtests.useradministration.users.UserHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanAuditingIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanAuditingIntegrationTest.class);
|
||||
|
||||
+3
@@ -44,11 +44,14 @@ import org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper
|
||||
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.system.CodeHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanChargeOffAccountingTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+114
-104
@@ -50,11 +50,14 @@ import org.apache.fineract.integrationtests.common.accounting.PeriodicAccrualAcc
|
||||
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@Slf4j
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanChargeSpecificDueDateTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
@@ -293,128 +296,135 @@ public class LoanChargeSpecificDueDateTest {
|
||||
|
||||
@Test
|
||||
public void testApplyFeeAccrualOnClosedDate() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProductWithPeriodicAccrual(loanTransactionHelper,
|
||||
null);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
|
||||
|
||||
LocalDate transactionDate = LocalDate.of(Utils.getLocalDateOfTenant().getYear(), 1, 1);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Disbursement date {}", transactionDate);
|
||||
// Client and Loan account creation
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProductWithPeriodicAccrual(
|
||||
loanTransactionHelper, null);
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "1", "0");
|
||||
LocalDate transactionDate = LocalDate.of(Utils.getLocalDateOfTenant().getYear(), 1, 1);
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Disbursement date {}", transactionDate);
|
||||
|
||||
// Get loan details
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, Double.valueOf(principalAmount), Double.valueOf("0.00"), true);
|
||||
// Create Loan Account
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "1", "0");
|
||||
|
||||
// Apply Loan Charge with specific due date
|
||||
String feeAmount = "10.00";
|
||||
String payloadJSON = ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, feeAmount, true);
|
||||
final PostChargesResponse postChargesResponse = ChargesHelper.createLoanCharge(requestSpec, responseSpec, payloadJSON);
|
||||
assertNotNull(postChargesResponse);
|
||||
final Long chargeId = postChargesResponse.getResourceId();
|
||||
assertNotNull(chargeId);
|
||||
// Get loan details
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, Double.valueOf(principalAmount), Double.valueOf("0.00"), true);
|
||||
|
||||
// First Loan Charge
|
||||
transactionDate = transactionDate.plusDays(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, transactionDate);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Operation date {}", transactionDate);
|
||||
payloadJSON = LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(chargeId.toString(), operationDate, feeAmount);
|
||||
PostLoansLoanIdChargesResponse postLoansLoanIdChargesResponse = loanTransactionHelper.addChargeForLoan(loanId, payloadJSON,
|
||||
responseSpec);
|
||||
assertNotNull(postLoansLoanIdChargesResponse);
|
||||
final Long loanChargeId01 = postLoansLoanIdChargesResponse.getResourceId();
|
||||
assertNotNull(loanChargeId01);
|
||||
// Apply Loan Charge with specific due date
|
||||
String feeAmount = "10.00";
|
||||
String payloadJSON = ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, feeAmount, true);
|
||||
final PostChargesResponse postChargesResponse = ChargesHelper.createLoanCharge(requestSpec, responseSpec, payloadJSON);
|
||||
assertNotNull(postChargesResponse);
|
||||
final Long chargeId = postChargesResponse.getResourceId();
|
||||
assertNotNull(chargeId);
|
||||
|
||||
// Run Accruals
|
||||
log.info("Running Periodic Accrual for date {}", transactionDate);
|
||||
periodicAccrualAccountingHelper.runPeriodicAccrualAccounting(operationDate);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.evaluateLoanTransactionData(getLoansLoanIdResponse, "loanTransactionType.accrual", Double.valueOf("10.00"));
|
||||
// First Loan Charge
|
||||
transactionDate = transactionDate.plusDays(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, transactionDate);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Operation date {}", transactionDate);
|
||||
payloadJSON = LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(chargeId.toString(), operationDate, feeAmount);
|
||||
PostLoansLoanIdChargesResponse postLoansLoanIdChargesResponse = loanTransactionHelper.addChargeForLoan(loanId, payloadJSON,
|
||||
responseSpec);
|
||||
assertNotNull(postLoansLoanIdChargesResponse);
|
||||
final Long loanChargeId01 = postLoansLoanIdChargesResponse.getResourceId();
|
||||
assertNotNull(loanChargeId01);
|
||||
|
||||
// Repay the first charge fully, 10
|
||||
Float amount = Float.valueOf("10.00");
|
||||
transactionDate = transactionDate.plusDays(40);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, transactionDate);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Operation date {}", transactionDate);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, amount,
|
||||
loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
log.info("Loan Transaction Id: {} {}", loanId, loanIdTransactionsResponse.getResourceId());
|
||||
// Run Accruals
|
||||
log.info("Running Periodic Accrual for date {}", transactionDate);
|
||||
periodicAccrualAccountingHelper.runPeriodicAccrualAccounting(operationDate);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.evaluateLoanTransactionData(getLoansLoanIdResponse, "loanTransactionType.accrual",
|
||||
Double.valueOf("10.00"));
|
||||
|
||||
// Second Loan Charge
|
||||
feeAmount = "15.00";
|
||||
transactionDate = transactionDate.plusDays(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, transactionDate);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Operation date {}", transactionDate);
|
||||
payloadJSON = LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(chargeId.toString(), operationDate, feeAmount);
|
||||
postLoansLoanIdChargesResponse = loanTransactionHelper.addChargeForLoan(loanId, payloadJSON, responseSpec);
|
||||
assertNotNull(postLoansLoanIdChargesResponse);
|
||||
final Long loanChargeId02 = postLoansLoanIdChargesResponse.getResourceId();
|
||||
assertNotNull(loanChargeId02);
|
||||
// Repay the first charge fully, 10
|
||||
Float amount = Float.valueOf("10.00");
|
||||
transactionDate = transactionDate.plusDays(40);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, transactionDate);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Operation date {}", transactionDate);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, amount,
|
||||
loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
log.info("Loan Transaction Id: {} {}", loanId, loanIdTransactionsResponse.getResourceId());
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, Double.valueOf(principalAmount), Double.valueOf("15.00"), true);
|
||||
// Second Loan Charge
|
||||
feeAmount = "15.00";
|
||||
transactionDate = transactionDate.plusDays(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, transactionDate);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Operation date {}", transactionDate);
|
||||
payloadJSON = LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(chargeId.toString(), operationDate, feeAmount);
|
||||
postLoansLoanIdChargesResponse = loanTransactionHelper.addChargeForLoan(loanId, payloadJSON, responseSpec);
|
||||
assertNotNull(postLoansLoanIdChargesResponse);
|
||||
final Long loanChargeId02 = postLoansLoanIdChargesResponse.getResourceId();
|
||||
assertNotNull(loanChargeId02);
|
||||
|
||||
// Run Accruals
|
||||
log.info("Running Periodic Accrual for date {}", transactionDate);
|
||||
periodicAccrualAccountingHelper.runPeriodicAccrualAccounting(operationDate);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.evaluateLoanTransactionData(getLoansLoanIdResponse, "loanTransactionType.accrual", Double.valueOf("25.00"));
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, Double.valueOf(principalAmount), Double.valueOf("15.00"), true);
|
||||
|
||||
// Third Loan Charge
|
||||
feeAmount = "25.00";
|
||||
transactionDate = transactionDate.plusDays(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, transactionDate);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Operation date {}", transactionDate);
|
||||
payloadJSON = LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(chargeId.toString(), operationDate, feeAmount);
|
||||
postLoansLoanIdChargesResponse = loanTransactionHelper.addChargeForLoan(loanId, payloadJSON, responseSpec);
|
||||
assertNotNull(postLoansLoanIdChargesResponse);
|
||||
final Long loanChargeId03 = postLoansLoanIdChargesResponse.getResourceId();
|
||||
assertNotNull(loanChargeId03);
|
||||
// Run Accruals
|
||||
log.info("Running Periodic Accrual for date {}", transactionDate);
|
||||
periodicAccrualAccountingHelper.runPeriodicAccrualAccounting(operationDate);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.evaluateLoanTransactionData(getLoansLoanIdResponse, "loanTransactionType.accrual",
|
||||
Double.valueOf("25.00"));
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, Double.valueOf(principalAmount), Double.valueOf("40.00"), true);
|
||||
loanTransactionHelper.evaluateLoanTransactionData(getLoansLoanIdResponse, "loanTransactionType.accrual", Double.valueOf("25.00"));
|
||||
// Third Loan Charge
|
||||
feeAmount = "25.00";
|
||||
transactionDate = transactionDate.plusDays(1);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, transactionDate);
|
||||
operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
log.info("Operation date {}", transactionDate);
|
||||
payloadJSON = LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(chargeId.toString(), operationDate, feeAmount);
|
||||
postLoansLoanIdChargesResponse = loanTransactionHelper.addChargeForLoan(loanId, payloadJSON, responseSpec);
|
||||
assertNotNull(postLoansLoanIdChargesResponse);
|
||||
final Long loanChargeId03 = postLoansLoanIdChargesResponse.getResourceId();
|
||||
assertNotNull(loanChargeId03);
|
||||
|
||||
amount = Float.valueOf("1040.00");
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, amount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
log.info("Loan Transaction Id: {} {}", loanId, loanIdTransactionsResponse.getResourceId());
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
validateLoanAccount(getLoansLoanIdResponse, Double.valueOf(principalAmount), Double.valueOf("40.00"), true);
|
||||
loanTransactionHelper.evaluateLoanTransactionData(getLoansLoanIdResponse, "loanTransactionType.accrual",
|
||||
Double.valueOf("25.00"));
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.closed.obligations.met");
|
||||
loanTransactionHelper.evaluateLoanTransactionData(getLoansLoanIdResponse, "loanTransactionType.accrual", Double.valueOf("50.00"));
|
||||
amount = Float.valueOf("1040.00");
|
||||
loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, amount, loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
log.info("Loan Transaction Id: {} {}", loanId, loanIdTransactionsResponse.getResourceId());
|
||||
|
||||
final Long transactionId = loanTransactionHelper.evaluateLastLoanTransactionData(getLoansLoanIdResponse,
|
||||
"loanTransactionType.accrual", operationDate, Double.valueOf("25.00"));
|
||||
assertNotNull(transactionId);
|
||||
log.info("transactionId {}", transactionId);
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.closed.obligations.met");
|
||||
loanTransactionHelper.evaluateLoanTransactionData(getLoansLoanIdResponse, "loanTransactionType.accrual",
|
||||
Double.valueOf("50.00"));
|
||||
|
||||
final GetJournalEntriesTransactionIdResponse journalEntriesResponse = journalEntryHelper
|
||||
.getJournalEntries("L" + transactionId.toString());
|
||||
assertNotNull(journalEntriesResponse);
|
||||
final List<JournalEntryTransactionItem> journalEntries = journalEntriesResponse.getPageItems();
|
||||
assertEquals(2, journalEntries.size());
|
||||
assertEquals(25, journalEntries.get(0).getAmount());
|
||||
assertEquals(25, journalEntries.get(1).getAmount());
|
||||
assertEquals(transactionDate, journalEntries.get(0).getTransactionDate());
|
||||
assertEquals(transactionDate, journalEntries.get(1).getTransactionDate());
|
||||
final Long transactionId = loanTransactionHelper.evaluateLastLoanTransactionData(getLoansLoanIdResponse,
|
||||
"loanTransactionType.accrual", operationDate, Double.valueOf("25.00"));
|
||||
assertNotNull(transactionId);
|
||||
log.info("transactionId {}", transactionId);
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
final GetJournalEntriesTransactionIdResponse journalEntriesResponse = journalEntryHelper
|
||||
.getJournalEntries("L" + transactionId.toString());
|
||||
assertNotNull(journalEntriesResponse);
|
||||
final List<JournalEntryTransactionItem> journalEntries = journalEntriesResponse.getPageItems();
|
||||
assertEquals(2, journalEntries.size());
|
||||
assertEquals(25, journalEntries.get(0).getAmount());
|
||||
assertEquals(25, journalEntries.get(1).getAmount());
|
||||
assertEquals(transactionDate, journalEntries.get(0).getTransactionDate());
|
||||
assertEquals(transactionDate, journalEntries.get(1).getTransactionDate());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
private GetLoanProductsProductIdResponse createLoanProduct(final LoanTransactionHelper loanTransactionHelper,
|
||||
|
||||
+3
@@ -35,14 +35,17 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanDisbursalDateValidationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanDisbursalDateValidationTest.class);
|
||||
|
||||
+3
@@ -48,13 +48,16 @@ import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuil
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanDisbursementTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@Slf4j
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanDisbursementDetailsIntegrationTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -36,14 +36,17 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.accounting.Account;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanFixedPrincipalPercentageAmortizationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanFixedPrincipalPercentageAmortizationTest.class);
|
||||
|
||||
+3
@@ -42,11 +42,14 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanPayOffAddChargeWithRefundTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -39,14 +39,17 @@ import org.apache.fineract.integrationtests.common.accounting.Account;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanRepaymentRescheduleAtDisbursementTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanRepaymentRescheduleAtDisbursementTest.class);
|
||||
|
||||
+3
@@ -41,14 +41,17 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanRescheduleRequestTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
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.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanRescheduleOnDecliningBalanceLoanTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanRescheduleOnDecliningBalanceLoanTest.class);
|
||||
|
||||
+3
@@ -38,10 +38,12 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanRescheduleRequestTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -49,6 +51,7 @@ import org.slf4j.LoggerFactory;
|
||||
* Test the creation, approval and rejection of a loan reschedule request
|
||||
**/
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanRescheduleRequestTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanRescheduleRequestTest.class);
|
||||
|
||||
+3
@@ -39,13 +39,16 @@ import org.apache.fineract.integrationtests.common.WorkingDaysHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanRescheduleRequestTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanRescheduleWithAdvancePaymentTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanRescheduleWithAdvancePaymentTest.class);
|
||||
|
||||
+11
-8
@@ -51,14 +51,17 @@ import org.apache.fineract.integrationtests.common.accounting.Account;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.organisation.StaffHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanReschedulingWithinCenterTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanReschedulingWithinCenterTest.class);
|
||||
@@ -259,9 +262,9 @@ public class LoanReschedulingWithinCenterTest {
|
||||
LoanProductTestBuilder.RECALCULATION_FREQUENCY_TYPE_DAILY, "0", recalculationRestFrequencyDate,
|
||||
LoanProductTestBuilder.INTEREST_APPLICABLE_STRATEGY_ON_PRE_CLOSE_DATE, null, isMultiTrancheLoan, null, null);
|
||||
|
||||
Calendar seondTrancheDate = Calendar.getInstance(Utils.getTimeZoneOfTenant());
|
||||
seondTrancheDate.add(Calendar.MONTH, 1);
|
||||
String secondDisbursement = dateFormat.format(seondTrancheDate.getTime());
|
||||
Calendar secondTrancheDate = Calendar.getInstance(Utils.getTimeZoneOfTenant());
|
||||
secondTrancheDate.add(Calendar.DAY_OF_MONTH, -7);
|
||||
String secondDisbursement = dateFormat.format(secondTrancheDate.getTime());
|
||||
|
||||
// CREATE TRANCHES
|
||||
List<HashMap> createTranches = new ArrayList<>();
|
||||
@@ -299,11 +302,8 @@ public class LoanReschedulingWithinCenterTest {
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
|
||||
|
||||
// DISBURSE A FIRST TRANCHE
|
||||
String loanDetails = this.loanTransactionHelper.getLoanDetails(this.requestSpec, this.responseSpec, loanID);
|
||||
this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount(disbursementDate, loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
|
||||
// DISBURSE THE FIRST TRANCHE
|
||||
this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount(disbursementDate, loanID, "5000");
|
||||
|
||||
LOG.info("---------------------------------CHANGING GROUP MEETING DATE ------------------------------------------");
|
||||
Calendar todaysdate = Calendar.getInstance(Utils.getTimeZoneOfTenant());
|
||||
@@ -322,6 +322,9 @@ public class LoanReschedulingWithinCenterTest {
|
||||
// VERIFY THE INTEREST
|
||||
Float interestDue = (Float) ((HashMap) loanRepaymnetSchedule.get(2)).get("interestDue");
|
||||
assertEquals("41.05", String.valueOf(interestDue));
|
||||
|
||||
// DISBURSE THE SECOND TRANCHE (for let the loan test lifecycle callback to close the loan
|
||||
this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount(secondDisbursement, loanID, "5000");
|
||||
}
|
||||
|
||||
private Integer createLoanProductWithInterestRecalculation(final String repaymentStrategy,
|
||||
|
||||
+3
@@ -41,14 +41,17 @@ import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.savings.SavingsProductHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanSpecificDueDateChargeAfterMaturityTest {
|
||||
|
||||
public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL";
|
||||
|
||||
+3
@@ -42,15 +42,18 @@ import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.organisation.StaffHelper;
|
||||
import org.apache.fineract.integrationtests.useradministration.users.UserHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanTransactionAuditingIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanTransactionAuditingIntegrationTest.class);
|
||||
|
||||
+129
-120
@@ -51,13 +51,16 @@ import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@Slf4j
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanTransactionChargebackTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
@@ -250,103 +253,107 @@ public class LoanTransactionChargebackTest {
|
||||
|
||||
@Test
|
||||
public void applyLoanTransactionChargebackAfterMature() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
|
||||
log.info("Current Business date {}", todaysDate);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer loanId = createAccounts(45, 1, false);
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
|
||||
log.info("Current Business date {}", todaysDate);
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
// Client and Loan account creation
|
||||
final Integer loanId = createAccounts(45, 1, false);
|
||||
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
|
||||
GetDelinquencyRangesResponse delinquencyRange = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
assertNotNull(delinquencyRange);
|
||||
log.info("Loan Delinquency Range is {}", delinquencyRange.getClassification());
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
|
||||
GetLoansLoanIdRepaymentSchedule getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
assertEquals(2, getLoanRepaymentSchedule.getPeriods().size());
|
||||
GetDelinquencyRangesResponse delinquencyRange = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
assertNotNull(delinquencyRange);
|
||||
log.info("Loan Delinquency Range is {}", delinquencyRange.getClassification());
|
||||
|
||||
Float amount = Float.valueOf(amountVal);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, amount,
|
||||
loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
final Long transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
GetLoansLoanIdRepaymentSchedule getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
assertEquals(2, getLoanRepaymentSchedule.getPeriods().size());
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.closed.obligations.met");
|
||||
Float amount = Float.valueOf(amountVal);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, amount,
|
||||
loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
final Long transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 0, Double.valueOf("0.00"));
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.closed.obligations.met");
|
||||
|
||||
Long chargebackTransactionId = loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "500.00", 0, responseSpec);
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 0, Double.valueOf("0.00"));
|
||||
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 1, Double.valueOf("0.00"));
|
||||
reviewLoanTransactionRelations(loanId, chargebackTransactionId, 0, Double.valueOf("500.00"));
|
||||
Long chargebackTransactionId = loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "500.00", 0,
|
||||
responseSpec);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.active");
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 1, Double.valueOf("0.00"));
|
||||
reviewLoanTransactionRelations(loanId, chargebackTransactionId, 0, Double.valueOf("500.00"));
|
||||
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, Double.valueOf("500.00"));
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.active");
|
||||
|
||||
// N+1 Scenario
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
assertEquals(3, getLoanRepaymentSchedule.getPeriods().size());
|
||||
getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
for (GetLoansLoanIdRepaymentPeriod period : getLoanRepaymentSchedule.getPeriods()) {
|
||||
if (period.getPeriod() != null && period.getPeriod() == 2) {
|
||||
log.info("Period number {} for due date {} and totalDueForPeriod {}", period.getPeriod(), period.getDueDate(),
|
||||
period.getTotalDueForPeriod());
|
||||
assertEquals(Double.valueOf("500.00"), period.getPrincipalDue());
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, Double.valueOf("500.00"));
|
||||
|
||||
// N+1 Scenario
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
assertEquals(3, getLoanRepaymentSchedule.getPeriods().size());
|
||||
getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
for (GetLoansLoanIdRepaymentPeriod period : getLoanRepaymentSchedule.getPeriods()) {
|
||||
if (period.getPeriod() != null && period.getPeriod() == 2) {
|
||||
log.info("Period number {} for due date {} and totalDueForPeriod {}", period.getPeriod(), period.getDueDate(),
|
||||
period.getTotalDueForPeriod());
|
||||
assertEquals(Double.valueOf("500.00"), period.getPrincipalDue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
chargebackTransactionId = loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "300.00", 0, responseSpec);
|
||||
chargebackTransactionId = loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "300.00", 0, responseSpec);
|
||||
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 2, Double.valueOf("0.00"));
|
||||
reviewLoanTransactionRelations(loanId, chargebackTransactionId, 0, Double.valueOf("800.00"));
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 2, Double.valueOf("0.00"));
|
||||
reviewLoanTransactionRelations(loanId, chargebackTransactionId, 0, Double.valueOf("800.00"));
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.active");
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.active");
|
||||
|
||||
delinquencyRange = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
assertNull(delinquencyRange);
|
||||
log.info("Loan Delinquency Range is null {}", (delinquencyRange == null));
|
||||
delinquencyRange = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
assertNull(delinquencyRange);
|
||||
log.info("Loan Delinquency Range is null {}", (delinquencyRange == null));
|
||||
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, Double.valueOf("800.00"));
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, Double.valueOf("800.00"));
|
||||
|
||||
// N+1 Scenario -- Remains the same periods number
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
assertEquals(3, getLoanRepaymentSchedule.getPeriods().size());
|
||||
getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
for (GetLoansLoanIdRepaymentPeriod period : getLoanRepaymentSchedule.getPeriods()) {
|
||||
if (period.getPeriod() != null && period.getPeriod() == 2) {
|
||||
log.info("Period number {} for due date {} and totalDueForPeriod {}", period.getPeriod(), period.getDueDate(),
|
||||
period.getTotalDueForPeriod());
|
||||
assertEquals(Double.valueOf("800.00"), period.getPrincipalDue());
|
||||
// N+1 Scenario -- Remains the same periods number
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
log.info("Loan with {} periods", getLoanRepaymentSchedule.getPeriods().size());
|
||||
assertEquals(3, getLoanRepaymentSchedule.getPeriods().size());
|
||||
getLoanRepaymentSchedule = getLoansLoanIdResponse.getRepaymentSchedule();
|
||||
for (GetLoansLoanIdRepaymentPeriod period : getLoanRepaymentSchedule.getPeriods()) {
|
||||
if (period.getPeriod() != null && period.getPeriod() == 2) {
|
||||
log.info("Period number {} for due date {} and totalDueForPeriod {}", period.getPeriod(), period.getDueDate(),
|
||||
period.getTotalDueForPeriod());
|
||||
assertEquals(Double.valueOf("800.00"), period.getPrincipalDue());
|
||||
}
|
||||
}
|
||||
|
||||
// Move the Business date few days to get Collection data
|
||||
LocalDate businessDate = todaysDate.plusDays(4);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
DelinquencyBucketsHelper.evaluateLoanCollectionData(getLoansLoanIdResponse, 4, Double.valueOf("800.00"));
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
// Move the Business date few days to get Collection data
|
||||
LocalDate businessDate = todaysDate.plusDays(4);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, businessDate);
|
||||
log.info("Current Business date {}", businessDate);
|
||||
|
||||
// Get loan details expecting to have a delinquency classification
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
DelinquencyBucketsHelper.evaluateLoanCollectionData(getLoansLoanIdResponse, 4, Double.valueOf("800.00"));
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -486,69 +493,71 @@ public class LoanTransactionChargebackTest {
|
||||
|
||||
@Test
|
||||
public void applyMultipleLoanTransactionChargeback() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
|
||||
log.info("Current Business date {}", todaysDate);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
final LocalDate todaysDate = Utils.getLocalDateOfTenant();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
|
||||
log.info("Current Business date {}", todaysDate);
|
||||
|
||||
// Client and Loan account creation
|
||||
final Integer loanId = createAccounts(15, 1, false);
|
||||
// Client and Loan account creation
|
||||
final Integer loanId = createAccounts(15, 1, false);
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
|
||||
Float amount = Float.valueOf(amountVal);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, amount,
|
||||
loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
final Long transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
Float amount = Float.valueOf(amountVal);
|
||||
PostLoansLoanIdTransactionsResponse loanIdTransactionsResponse = loanTransactionHelper.makeLoanRepayment(operationDate, amount,
|
||||
loanId);
|
||||
assertNotNull(loanIdTransactionsResponse);
|
||||
final Long transactionId = loanIdTransactionsResponse.getResourceId();
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.closed.obligations.met");
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
assertNotNull(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.validateLoanStatus(getLoansLoanIdResponse, "loanStatusType.closed.obligations.met");
|
||||
|
||||
// First round, empty array
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 0, Double.valueOf("0.00"));
|
||||
// First round, empty array
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 0, Double.valueOf("0.00"));
|
||||
|
||||
loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "200.00", 0, responseSpec);
|
||||
loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "200.00", 0, responseSpec);
|
||||
|
||||
Double expectedAmount = Double.valueOf("200.00");
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, expectedAmount);
|
||||
Double expectedAmount = Double.valueOf("200.00");
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, expectedAmount);
|
||||
|
||||
loanTransactionHelper.evaluateLoanSummaryAdjustments(getLoansLoanIdResponse, expectedAmount);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
DelinquencyBucketsHelper.evaluateLoanCollectionData(getLoansLoanIdResponse, 0, Double.valueOf("0.00"));
|
||||
loanTransactionHelper.evaluateLoanSummaryAdjustments(getLoansLoanIdResponse, expectedAmount);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
DelinquencyBucketsHelper.evaluateLoanCollectionData(getLoansLoanIdResponse, 0, Double.valueOf("0.00"));
|
||||
|
||||
// Second round, array size equal to 1
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 1, Double.valueOf("0.00"));
|
||||
// Second round, array size equal to 1
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 1, Double.valueOf("0.00"));
|
||||
|
||||
loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "300.00", 1, responseSpec);
|
||||
loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "300.00", 1, responseSpec);
|
||||
|
||||
expectedAmount = Double.valueOf("500.00");
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, expectedAmount);
|
||||
expectedAmount = Double.valueOf("500.00");
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, expectedAmount);
|
||||
|
||||
loanTransactionHelper.evaluateLoanSummaryAdjustments(getLoansLoanIdResponse, expectedAmount);
|
||||
DelinquencyBucketsHelper.evaluateLoanCollectionData(getLoansLoanIdResponse, 0, Double.valueOf("0.00"));
|
||||
loanTransactionHelper.evaluateLoanSummaryAdjustments(getLoansLoanIdResponse, expectedAmount);
|
||||
DelinquencyBucketsHelper.evaluateLoanCollectionData(getLoansLoanIdResponse, 0, Double.valueOf("0.00"));
|
||||
|
||||
// Third round, array size equal to 2
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 2, Double.valueOf("0.00"));
|
||||
// Third round, array size equal to 2
|
||||
reviewLoanTransactionRelations(loanId, transactionId, 2, Double.valueOf("0.00"));
|
||||
|
||||
loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "500.00", 0, responseSpec);
|
||||
loanTransactionHelper.applyChargebackTransaction(loanId, transactionId, "500.00", 0, responseSpec);
|
||||
|
||||
expectedAmount = Double.valueOf("1000.00");
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, expectedAmount);
|
||||
expectedAmount = Double.valueOf("1000.00");
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.validateLoanPrincipalOustandingBalance(getLoansLoanIdResponse, expectedAmount);
|
||||
|
||||
loanTransactionHelper.evaluateLoanSummaryAdjustments(getLoansLoanIdResponse, expectedAmount);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
loanTransactionHelper.evaluateLoanSummaryAdjustments(getLoansLoanIdResponse, expectedAmount);
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
|
||||
DelinquencyBucketsHelper.evaluateLoanCollectionData(getLoansLoanIdResponse, 0, Double.valueOf("0.00"));
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
DelinquencyBucketsHelper.evaluateLoanCollectionData(getLoansLoanIdResponse, 0, Double.valueOf("0.00"));
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
private Integer createAccounts(final Integer daysToSubtract, final Integer numberOfRepayments, final boolean withJournalEntries) {
|
||||
|
||||
+3
@@ -40,11 +40,14 @@ import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanTransactionFullAmountChargebackForOverpaidLoanTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -42,11 +42,14 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanTransactionReverseReplayRelationTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -45,11 +45,14 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanTransactionSummaryTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -34,10 +34,12 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -45,6 +47,7 @@ import org.slf4j.LoggerFactory;
|
||||
* Client Loan Integration Test for checking Loan Disbursement with Waive Interest and Write-Off.
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanWithWaiveInterestAndWriteOffIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoanWithWaiveInterestAndWriteOffIntegrationTest.class);
|
||||
|
||||
+3
@@ -33,12 +33,15 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class LoanWithdrawnByApplicantIntegrationTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -39,15 +39,18 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
/**
|
||||
* Test the creation, approval and rejection of a loan reschedule request
|
||||
**/
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class MinimumDaysBetweenDisbursalAndFirstRepaymentTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
@@ -37,14 +37,17 @@ import org.apache.fineract.integrationtests.common.NotesHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@SuppressWarnings({ "rawtypes" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class NotesTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+3
@@ -42,11 +42,14 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class RepaymentWithPostDatedChecksTest {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
|
||||
+2
@@ -42,10 +42,12 @@ import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@Order(2)
|
||||
public class SavingsInterestPostingJobIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(SavingsInterestPostingJobIntegrationTest.class);
|
||||
|
||||
+169
-150
@@ -56,6 +56,7 @@ import org.apache.fineract.client.models.JournalEntryTransactionItem;
|
||||
import org.apache.fineract.client.models.PostClientsResponse;
|
||||
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
|
||||
import org.apache.fineract.client.models.PutJobsJobIDRequest;
|
||||
import org.apache.fineract.client.util.CallFailedRuntimeException;
|
||||
import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
|
||||
import org.apache.fineract.integrationtests.common.BusinessDateHelper;
|
||||
import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||
@@ -76,6 +77,7 @@ import org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProd
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.savings.SavingsAccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
|
||||
@@ -89,9 +91,11 @@ import org.junit.jupiter.api.MethodOrderer.MethodName;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestMethodOrder;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@Order(1)
|
||||
@TestMethodOrder(MethodName.class)
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public class SchedulerJobsTestResults {
|
||||
|
||||
@@ -648,9 +652,6 @@ public class SchedulerJobsTestResults {
|
||||
Assertions.assertEquals(0, (Integer) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
|
||||
this.loanTransactionHelper.undoChargeOffLoan((long) loanID, new PostLoansLoanIdTransactionsRequest());
|
||||
this.loanTransactionHelper.closeRescheduledLoan((long) loanID,
|
||||
new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy").transactionDate("03 March 2020").locale("en"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -716,210 +717,221 @@ public class SchedulerJobsTestResults {
|
||||
|
||||
@Test
|
||||
public void testLoanCOBJobOutcomeWhileAddingFeeOnDisbursementDate() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
this.savingsAccountHelper = new SavingsAccountHelper(requestSpec, responseSpec);
|
||||
this.loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
this.savingsAccountHelper = new SavingsAccountHelper(requestSpec, responseSpec);
|
||||
this.loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
|
||||
Integer fee = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, "10", false));
|
||||
Assertions.assertNotNull(fee);
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
|
||||
final Integer loanProductID = createLoanProductWithPeriodicAccrual(null);
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
Integer fee = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, "10", false));
|
||||
Assertions.assertNotNull(fee);
|
||||
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
final Integer loanProductID = createLoanProductWithPeriodicAccrual(null);
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
|
||||
Assertions.assertNotNull(loanID);
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
Assertions.assertNotNull(loanID);
|
||||
|
||||
loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
String loanDetails = this.loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
this.loanTransactionHelper.addChargesForLoan(loanID,
|
||||
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(fee), "02 March 2020", "10", null));
|
||||
String loanDetails = this.loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
|
||||
String jobName = "Loan COB";
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
this.loanTransactionHelper.addChargesForLoan(loanID,
|
||||
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(fee), "02 March 2020", "10", null));
|
||||
|
||||
List<HashMap> repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID);
|
||||
String jobName = "Loan COB";
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
Assertions.assertEquals(10.00f, (Float) repaymentScheduleDataAfter.get(1).get("feeChargesDue"),
|
||||
"Verifying From Fee Charges due for first Repayment after Successful completion of Scheduler Job");
|
||||
List<HashMap> repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec,
|
||||
loanID);
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
// First accrual transaction
|
||||
assertTrue(getLoansLoanIdResponse.getTransactions().get(1).getType().getAccrual());
|
||||
assertEquals(10.0f, getLoansLoanIdResponse.getTransactions().get(1).getFeeChargesPortion());
|
||||
assertEquals(LocalDate.of(2020, 3, 2), getLoansLoanIdResponse.getTransactions().get(1).getDate());
|
||||
Long transactionId = getLoansLoanIdResponse.getTransactions().get(1).getId();
|
||||
Assertions.assertEquals(10.00f, (Float) repaymentScheduleDataAfter.get(1).get("feeChargesDue"),
|
||||
"Verifying From Fee Charges due for first Repayment after Successful completion of Scheduler Job");
|
||||
|
||||
final GetJournalEntriesTransactionIdResponse journalEntriesResponse = journalEntryHelper.getJournalEntries("L" + transactionId);
|
||||
assertNotNull(journalEntriesResponse);
|
||||
final List<JournalEntryTransactionItem> journalEntries = journalEntriesResponse.getPageItems();
|
||||
assertEquals(2, journalEntries.size());
|
||||
assertEquals(10, journalEntries.get(0).getAmount());
|
||||
assertEquals(10, journalEntries.get(1).getAmount());
|
||||
assertEquals(LocalDate.of(2020, 3, 2), journalEntries.get(1).getTransactionDate());
|
||||
assertEquals(LocalDate.of(2020, 3, 2), journalEntries.get(0).getTransactionDate());
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
// First accrual transaction
|
||||
assertTrue(getLoansLoanIdResponse.getTransactions().get(1).getType().getAccrual());
|
||||
assertEquals(10.0f, getLoansLoanIdResponse.getTransactions().get(1).getFeeChargesPortion());
|
||||
assertEquals(LocalDate.of(2020, 3, 2), getLoansLoanIdResponse.getTransactions().get(1).getDate());
|
||||
Long transactionId = getLoansLoanIdResponse.getTransactions().get(1).getId();
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
final GetJournalEntriesTransactionIdResponse journalEntriesResponse = journalEntryHelper.getJournalEntries("L" + transactionId);
|
||||
assertNotNull(journalEntriesResponse);
|
||||
final List<JournalEntryTransactionItem> journalEntries = journalEntriesResponse.getPageItems();
|
||||
assertEquals(2, journalEntries.size());
|
||||
assertEquals(10, journalEntries.get(0).getAmount());
|
||||
assertEquals(10, journalEntries.get(1).getAmount());
|
||||
assertEquals(LocalDate.of(2020, 3, 2), journalEntries.get(1).getTransactionDate());
|
||||
assertEquals(LocalDate.of(2020, 3, 2), journalEntries.get(0).getTransactionDate());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoanCOBRunsOnlyOnLoansOneDayBehind() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
|
||||
Assertions.assertNotNull(loanID);
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
Assertions.assertNotNull(loanID);
|
||||
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
String jobName = "Loan COB";
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
String jobName = "Loan COB";
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 3));
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 3), loan.getLastClosedBusinessDate());
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 3));
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 5));
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 3), loan.getLastClosedBusinessDate());
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 3), loan.getLastClosedBusinessDate());
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 5));
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 3), loan.getLastClosedBusinessDate());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoanCOBApplyPenaltyOnDue() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
// set penalty wait period to 0
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
this.loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
// set penalty wait period to 0
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
this.loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
|
||||
Assertions.assertNotNull(loanID);
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
Assertions.assertNotNull(loanID);
|
||||
|
||||
loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
String loanDetails = this.loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 4, 1));
|
||||
String jobName = "Loan COB";
|
||||
loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
List<HashMap> repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(0, (Integer) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
String loanDetails = this.loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 4, 1));
|
||||
String jobName = "Loan COB";
|
||||
|
||||
LocalDate lastBusinessDateBeforeFastForward = LocalDate.of(2020, 4, 2);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, lastBusinessDateBeforeFastForward);
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(39.39f, (Float) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
List<HashMap> repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec,
|
||||
loanID);
|
||||
Assertions.assertEquals(0, (Integer) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
|
||||
List<Map> transactions = this.loanTransactionHelper.getLoanTransactions(this.requestSpec, this.responseSpec, loanID);
|
||||
Assertions.assertEquals(39.39f, (Float) transactions.get(2).get("amount"));
|
||||
Assertions.assertEquals(2020, ((List) transactions.get(2).get("date")).get(0));
|
||||
Assertions.assertEquals(4, ((List) transactions.get(2).get("date")).get(1));
|
||||
Assertions.assertEquals(2, ((List) transactions.get(2).get("date")).get(2));
|
||||
LocalDate lastBusinessDateBeforeFastForward = LocalDate.of(2020, 4, 2);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, lastBusinessDateBeforeFastForward);
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(39.39f, (Float) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
|
||||
// Test penalty where there is 1 day grace period
|
||||
final Integer loanID2 = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
List<Map> transactions = this.loanTransactionHelper.getLoanTransactions(this.requestSpec, this.responseSpec, loanID);
|
||||
Assertions.assertEquals(39.39f, (Float) transactions.get(2).get("amount"));
|
||||
Assertions.assertEquals(2020, ((List) transactions.get(2).get("date")).get(0));
|
||||
Assertions.assertEquals(4, ((List) transactions.get(2).get("date")).get(1));
|
||||
Assertions.assertEquals(2, ((List) transactions.get(2).get("date")).get(2));
|
||||
|
||||
Assertions.assertNotNull(loanID2);
|
||||
// Test penalty where there is 1 day grace period
|
||||
final Integer loanID2 = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID2);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
Assertions.assertNotNull(loanID2);
|
||||
|
||||
loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 April 2020", loanID2);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID2);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
String loanDetails2 = this.loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID2);
|
||||
loanStatusHashMap = this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 April 2020", loanID2,
|
||||
JsonPath.from(loanDetails2).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 April 2020", loanID2);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "1");
|
||||
LocalDate dateToFastForward = LocalDate.of(2020, 5, 2);
|
||||
String loanDetails2 = this.loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID2);
|
||||
loanStatusHashMap = this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 April 2020", loanID2,
|
||||
JsonPath.from(loanDetails2).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, dateToFastForward);
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID2);
|
||||
Assertions.assertEquals(0, (Integer) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "1");
|
||||
LocalDate dateToFastForward = LocalDate.of(2020, 5, 2);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 5, 3));
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID2);
|
||||
Assertions.assertEquals(39.39f, (Float) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, dateToFastForward);
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID2);
|
||||
Assertions.assertEquals(0, (Integer) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
|
||||
transactions = this.loanTransactionHelper.getLoanTransactions(this.requestSpec, this.responseSpec, loanID2);
|
||||
Assertions.assertEquals(39.39f, (Float) transactions.get(2).get("amount"));
|
||||
Assertions.assertEquals(2020, ((List) transactions.get(2).get("date")).get(0));
|
||||
Assertions.assertEquals(5, ((List) transactions.get(2).get("date")).get(1));
|
||||
Assertions.assertEquals(2, ((List) transactions.get(2).get("date")).get(2));
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 5, 3));
|
||||
this.schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
repaymentScheduleDataAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID2);
|
||||
Assertions.assertEquals(39.39f, (Float) repaymentScheduleDataAfter.get(1).get("penaltyChargesDue"),
|
||||
"Verifying From Penalty Charges due fot first Repayment after Successful completion of Scheduler Job");
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "2");
|
||||
transactions = this.loanTransactionHelper.getLoanTransactions(this.requestSpec, this.responseSpec, loanID2);
|
||||
Assertions.assertEquals(39.39f, (Float) transactions.get(2).get("amount"));
|
||||
Assertions.assertEquals(2020, ((List) transactions.get(2).get("date")).get(0));
|
||||
Assertions.assertEquals(5, ((List) transactions.get(2).get("date")).get(1));
|
||||
Assertions.assertEquals(2, ((List) transactions.get(2).get("date")).get(2));
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "2");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1135,9 +1147,16 @@ public class SchedulerJobsTestResults {
|
||||
GetLoansLoanIdResponse loanDetails = this.loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
assertEquals(LocalDate.of(2022, 9, 5), loanDetails.getTransactions().get(1).getDate());
|
||||
} finally {
|
||||
this.schedulerJobHelper.updateSchedulerJob(16L, new PutJobsJobIDRequest().cronExpression("0 2 0 1/1 * ? *"));
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
|
||||
try {
|
||||
this.schedulerJobHelper.updateSchedulerJob(16L, new PutJobsJobIDRequest().cronExpression("0 2 0 1/1 * ? *"));
|
||||
} catch (CallFailedRuntimeException e) {
|
||||
// Try again (maybe it was executed by scheduler at the same time when it was called... :/
|
||||
Thread.sleep(2000);
|
||||
this.schedulerJobHelper.updateSchedulerJob(16L, new PutJobsJobIDRequest().cronExpression("0 2 0 1/1 * ? *"));
|
||||
}
|
||||
}
|
||||
|
||||
private Integer createSavingsProduct(final RequestSpecification requestSpec, final ResponseSpecification responseSpec,
|
||||
|
||||
+3
@@ -38,16 +38,19 @@ import org.apache.fineract.integrationtests.common.GroupHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
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.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "unchecked" })
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class SkipRepaymentOnMonthFirstTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(SkipRepaymentOnMonthFirstTest.class);
|
||||
|
||||
+2
-2
@@ -520,7 +520,7 @@ public class GlobalConfigurationHelper {
|
||||
HashMap<String, Object> purgeProcessCommandDaysDefault = new HashMap<>();
|
||||
purgeProcessCommandDaysDefault.put("id", 51);
|
||||
purgeProcessCommandDaysDefault.put("name", "purge-processed-commands-older-than-days");
|
||||
purgeProcessCommandDaysDefault.put("value", 0);
|
||||
purgeProcessCommandDaysDefault.put("value", 30);
|
||||
purgeProcessCommandDaysDefault.put("enabled", false);
|
||||
purgeProcessCommandDaysDefault.put("trapDoor", false);
|
||||
defaults.add(purgeProcessCommandDaysDefault);
|
||||
@@ -545,7 +545,7 @@ public class GlobalConfigurationHelper {
|
||||
reportExportS3FolderName.put("id", 54);
|
||||
reportExportS3FolderName.put("name", "report-export-s3-folder-name");
|
||||
reportExportS3FolderName.put("value", 0);
|
||||
reportExportS3FolderName.put("enabled", false);
|
||||
reportExportS3FolderName.put("enabled", true);
|
||||
reportExportS3FolderName.put("trapDoor", false);
|
||||
defaults.add(reportExportS3FolderName);
|
||||
|
||||
|
||||
+3
@@ -37,6 +37,7 @@ import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.provisioning.ProvisioningHelper;
|
||||
import org.apache.fineract.integrationtests.common.provisioning.ProvisioningTransactionHelper;
|
||||
@@ -44,10 +45,12 @@ import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Assumptions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class ProvisioningIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ProvisioningIntegrationTest.class);
|
||||
|
||||
+7
-12
@@ -172,26 +172,21 @@ public class SchedulerJobHelper extends IntegrationTest {
|
||||
|
||||
// Await JobDetailData.lastRunHistory [JobDetailHistoryData]
|
||||
// jobRunStartTime >= beforeExecuteTime (or timeout)
|
||||
await().atMost(timeout).pollInterval(pause).until(jobLastRunHistorySupplier(jobId), lastRunHistory -> {
|
||||
String jobRunStartText = lastRunHistory.get("jobRunStartTime");
|
||||
if (jobRunStartText == null) {
|
||||
return false;
|
||||
}
|
||||
Instant jobRunStartTime = df.parse(jobRunStartText, Instant::from);
|
||||
return jobRunStartTime.equals(beforeExecuteTime) || jobRunStartTime.isAfter(beforeExecuteTime);
|
||||
});
|
||||
|
||||
// Await JobDetailData.lastRunHistory [JobDetailHistoryData]
|
||||
// jobRunEndTime to be both set and >= jobRunStartTime (or timeout)
|
||||
Map<String, String> finalLastRunHistory = await().atMost(timeout).pollInterval(pause).until(jobLastRunHistorySupplier(jobId),
|
||||
lastRunHistory -> {
|
||||
String jobRunStartText = lastRunHistory.get("jobRunStartTime");
|
||||
if (jobRunStartText == null) {
|
||||
return false;
|
||||
}
|
||||
String jobRunEndText = lastRunHistory.get("jobRunEndTime");
|
||||
if (jobRunEndText == null) {
|
||||
return false;
|
||||
}
|
||||
Instant jobRunStartTime = df.parse(jobRunStartText, Instant::from);
|
||||
Instant jobRunEndTime = df.parse(jobRunEndText, Instant::from);
|
||||
Instant jobRunStartTime = df.parse(lastRunHistory.get("jobRunStartTime"), Instant::from);
|
||||
return jobRunEndTime.equals(jobRunStartTime) || jobRunEndTime.isAfter(jobRunStartTime);
|
||||
return (jobRunStartTime.equals(beforeExecuteTime) || jobRunStartTime.isAfter(beforeExecuteTime))
|
||||
&& (jobRunEndTime.equals(jobRunStartTime) || jobRunEndTime.isAfter(jobRunStartTime));
|
||||
});
|
||||
|
||||
// Verify triggerType
|
||||
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
/**
|
||||
* 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.integrationtests.common.loans;
|
||||
|
||||
import io.restassured.builder.RequestSpecBuilder;
|
||||
import io.restassured.builder.ResponseSpecBuilder;
|
||||
import io.restassured.http.ContentType;
|
||||
import io.restassured.specification.RequestSpecification;
|
||||
import io.restassured.specification.ResponseSpecification;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeFormatterBuilder;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import org.apache.fineract.client.models.GetLoansLoanIdResponse;
|
||||
import org.apache.fineract.client.models.PostLoansLoanIdRequest;
|
||||
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.junit.jupiter.api.extension.AfterEachCallback;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
|
||||
public class LoanTestLifecycleExtension implements AfterEachCallback {
|
||||
|
||||
private ResponseSpecification responseSpec;
|
||||
private RequestSpecification requestSpec;
|
||||
private LoanTransactionHelper loanTransactionHelper;
|
||||
private DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder().appendPattern("dd MMMM yyyy").toFormatter();
|
||||
|
||||
@Override
|
||||
public void afterEach(ExtensionContext context) throws Exception {
|
||||
this.requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
|
||||
this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
|
||||
this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
|
||||
this.requestSpec.header("Fineract-Platform-TenantId", "default");
|
||||
this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
|
||||
|
||||
// Fully repay ACTIVE loans, so it will not be picked up by any jobs
|
||||
List<Integer> loanIds = LoanTransactionHelper.getLoanIdsByStatusId(requestSpec, responseSpec, 300);
|
||||
loanIds.forEach(loanId -> {
|
||||
HashMap prepayDetail = this.loanTransactionHelper.getPrepayAmount(this.requestSpec, this.responseSpec, loanId);
|
||||
LocalDate transactionDate = LocalDate.of((Integer) ((List) prepayDetail.get("date")).get(0),
|
||||
(Integer) ((List) prepayDetail.get("date")).get(1), (Integer) ((List) prepayDetail.get("date")).get(2));
|
||||
Double amount = Double.parseDouble(String.valueOf(prepayDetail.get("amount")));
|
||||
Double netDisbursalAmount = Double.parseDouble(String.valueOf(prepayDetail.get("netDisbursalAmount")));
|
||||
Double repayAmount = Double.compare(amount, 0.0) > 0 ? amount : netDisbursalAmount;
|
||||
loanTransactionHelper.makeLoanRepayment((long) loanId, new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM yyyy")
|
||||
.transactionDate(dateFormatter.format(transactionDate)).locale("en").transactionAmount(repayAmount));
|
||||
});
|
||||
// Undo APPROVED loans, so the next step can REJECT them, so it will not be picked up by any jobs
|
||||
loanIds = LoanTransactionHelper.getLoanIdsByStatusId(requestSpec, responseSpec, 200);
|
||||
loanIds.forEach(loanId -> {
|
||||
loanTransactionHelper.undoApproval(loanId);
|
||||
});
|
||||
// Mark SUBMITTED loans, as REJECTED, so it will not be picked up by any jobs
|
||||
loanIds = LoanTransactionHelper.getLoanIdsByStatusId(requestSpec, responseSpec, 100);
|
||||
loanIds.forEach(loanId -> {
|
||||
GetLoansLoanIdResponse details = loanTransactionHelper.getLoanDetails((long) loanId);
|
||||
loanTransactionHelper.rejectLoan((long) loanId,
|
||||
new PostLoansLoanIdRequest().rejectedOnDate(dateFormatter.format(details.getTimeline().getSubmittedOnDate()))
|
||||
.locale("en").dateFormat("dd MMMM yyyy"));
|
||||
});
|
||||
}
|
||||
}
|
||||
+14
-2
@@ -349,9 +349,9 @@ public class LoanTransactionHelper extends IntegrationTest {
|
||||
getDisburseLoanAsJSON(date, null, netDisbursalAmount));
|
||||
}
|
||||
|
||||
public HashMap disburseLoan(final String date, final Integer loanID, final String netDisbursalAmount, final String externalId) {
|
||||
public HashMap disburseLoan(final String date, final Integer loanID, final String transactionAmount, final String externalId) {
|
||||
return (HashMap) performLoanTransaction(createLoanOperationURL(DISBURSE_LOAN_COMMAND, loanID),
|
||||
getDisburseLoanAsJSON(date, null, netDisbursalAmount, externalId), "");
|
||||
getDisburseLoanAsJSON(date, transactionAmount, null, externalId), "");
|
||||
}
|
||||
|
||||
public HashMap disburseLoanWithTransactionAmount(final String date, final Integer loanID, final String transactionAmount) {
|
||||
@@ -1741,6 +1741,10 @@ public class LoanTransactionHelper extends IntegrationTest {
|
||||
return ok(fineract().loans.stateTransitions1(loanExternalId, request, "reject"));
|
||||
}
|
||||
|
||||
public PostLoansLoanIdResponse rejectLoan(Long loanId, PostLoansLoanIdRequest request) {
|
||||
return ok(fineract().loans.stateTransitions(loanId, request, "reject"));
|
||||
}
|
||||
|
||||
public PostLoansLoanIdResponse withdrawnByApplicantLoan(String loanExternalId, PostLoansLoanIdRequest request) {
|
||||
return ok(fineract().loans.stateTransitions1(loanExternalId, request, "withdrawnByApplicant"));
|
||||
}
|
||||
@@ -1832,4 +1836,12 @@ public class LoanTransactionHelper extends IntegrationTest {
|
||||
public PostLoansLoanIdTransactionsResponse undoChargeOffLoan(Long loanId, PostLoansLoanIdTransactionsRequest request) {
|
||||
return ok(fineract().loanTransactions.executeLoanTransaction(loanId, request, "undo-charge-off"));
|
||||
}
|
||||
|
||||
public static List<Integer> getLoanIdsByStatusId(RequestSpecification requestSpec, ResponseSpecification responseSpec,
|
||||
Integer statusId) {
|
||||
final String GET_LOAN_URL = "/fineract-provider/api/v1/internal/loan/status/" + statusId + "?" + Utils.TENANT_IDENTIFIER;
|
||||
log.info("---------------------------------GET LOANS BY STATUS---------------------------------------------");
|
||||
final String get = Utils.performServerGet(requestSpec, responseSpec, GET_LOAN_URL, null);
|
||||
return new Gson().fromJson(get, new TypeToken<ArrayList<Integer>>() {}.getType());
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -40,6 +40,7 @@ import org.apache.fineract.integrationtests.common.GroupHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
|
||||
import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
|
||||
@@ -47,12 +48,14 @@ import org.apache.fineract.integrationtests.common.system.DatatableHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Entity Datatable Checks Integration Test for checking Creation, Deletion and Retrieval of Entity-Datatable Check
|
||||
*/
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class EntityDatatableChecksIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(EntityDatatableChecksIntegrationTest.class);
|
||||
|
||||
+3
@@ -51,14 +51,17 @@ import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
|
||||
import org.apache.fineract.integrationtests.common.system.CodeHelper;
|
||||
import org.apache.fineract.integrationtests.common.system.DatatableHelper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class DatatableIntegrationTest extends IntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(DatatableIntegrationTest.class);
|
||||
|
||||
+3
@@ -43,14 +43,17 @@ import org.apache.fineract.integrationtests.common.Utils;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.savings.SavingsAccountHelper;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class GuarantorTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GuarantorTest.class);
|
||||
|
||||
+248
-206
@@ -58,6 +58,7 @@ import org.apache.fineract.integrationtests.common.loans.LoanAccountLockHelper;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
|
||||
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
|
||||
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.common.products.DelinquencyBucketsHelper;
|
||||
import org.apache.fineract.integrationtests.common.products.DelinquencyRangesHelper;
|
||||
@@ -67,8 +68,10 @@ import org.apache.http.HttpStatus;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
@Slf4j
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class InlineLoanCOBTest {
|
||||
|
||||
private static final String REPAYMENT_LOAN_PERMISSION = "REPAYMENT_LOAN";
|
||||
@@ -92,304 +95,343 @@ public class InlineLoanCOBTest {
|
||||
|
||||
@Test
|
||||
public void testInlineCOB() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2));
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2));
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
|
||||
Assertions.assertNotNull(loanID);
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
Assertions.assertNotNull(loanID);
|
||||
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 3));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 3), loan.getLastClosedBusinessDate());
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 3));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 10));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 3), loan.getLastClosedBusinessDate());
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 10), loan.getLastClosedBusinessDate());
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 10));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 10), loan.getLastClosedBusinessDate());
|
||||
} finally {
|
||||
requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
|
||||
requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
|
||||
requestSpec.header("Fineract-Platform-TenantId", "default");
|
||||
responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInlineCOBCatchUpLoans() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
// First Range
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec,
|
||||
jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
|
||||
GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
ArrayList<Integer> rangeIds = new ArrayList<>();
|
||||
// First Range
|
||||
String jsonRange = DelinquencyRangesHelper.getAsJSON(1, 3);
|
||||
PostDelinquencyRangeResponse delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec,
|
||||
responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
jsonRange = DelinquencyRangesHelper.getAsJSON(4, 60);
|
||||
|
||||
// Second Range
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
GetDelinquencyRangesResponse range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec,
|
||||
delinquencyRangeResponse.getResourceId());
|
||||
|
||||
range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec, delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification after Disbursement {}", classificationExpected);
|
||||
// Second Range
|
||||
delinquencyRangeResponse = DelinquencyRangesHelper.createDelinquencyRange(requestSpec, responseSpec, jsonRange);
|
||||
rangeIds.add(delinquencyRangeResponse.getResourceId());
|
||||
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
range = DelinquencyRangesHelper.getDelinquencyRange(requestSpec, responseSpec, delinquencyRangeResponse.getResourceId());
|
||||
final String classificationExpected = range.getClassification();
|
||||
log.info("Expected Delinquency Range classification after Disbursement {}", classificationExpected);
|
||||
|
||||
final Integer loanProductID = createLoanProduct(loanTransactionHelper, delinquencyBucket.getId());
|
||||
String jsonBucket = DelinquencyBucketsHelper.getAsJSON(rangeIds);
|
||||
PostDelinquencyBucketResponse delinquencyBucketResponse = DelinquencyBucketsHelper.createDelinquencyBucket(requestSpec,
|
||||
responseSpec, jsonBucket);
|
||||
assertNotNull(delinquencyBucketResponse);
|
||||
final GetDelinquencyBucketsResponse delinquencyBucket = DelinquencyBucketsHelper.getDelinquencyBucket(requestSpec, responseSpec,
|
||||
delinquencyBucketResponse.getResourceId());
|
||||
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
final Integer loanProductID = createLoanProduct(loanTransactionHelper, delinquencyBucket.getId());
|
||||
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
|
||||
Assertions.assertNotNull(loanID);
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
Assertions.assertNotNull(loanID);
|
||||
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
ArrayList<GetDelinquencyTagHistoryResponse> loanDelinquencyTags = loanTransactionHelper.getLoanDelinquencyTags(requestSpec,
|
||||
responseSpec, loanID);
|
||||
Assertions.assertTrue(loanDelinquencyTags.isEmpty());
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 4, 4));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
ArrayList<GetDelinquencyTagHistoryResponse> loanDelinquencyTags = loanTransactionHelper.getLoanDelinquencyTags(requestSpec,
|
||||
responseSpec, loanID);
|
||||
Assertions.assertTrue(loanDelinquencyTags.isEmpty());
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
loanDelinquencyTags = loanTransactionHelper.getLoanDelinquencyTags(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 4), loan.getLastClosedBusinessDate());
|
||||
Assertions.assertEquals(1, loanDelinquencyTags.size());
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 3), loanDelinquencyTags.get(0).getAddedOnDate());
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 4, 4));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 4, 10));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
loanDelinquencyTags = loanTransactionHelper.getLoanDelinquencyTags(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 4), loan.getLastClosedBusinessDate());
|
||||
Assertions.assertEquals(1, loanDelinquencyTags.size());
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 3), loanDelinquencyTags.get(0).getAddedOnDate());
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
loanDelinquencyTags = loanTransactionHelper.getLoanDelinquencyTags(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 10), loan.getLastClosedBusinessDate());
|
||||
Assertions.assertEquals(2, loanDelinquencyTags.size());
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 3), loanDelinquencyTags.get(1).getAddedOnDate());
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 6), loanDelinquencyTags.get(0).getAddedOnDate());
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 4, 10));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
loanDelinquencyTags = loanTransactionHelper.getLoanDelinquencyTags(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 10), loan.getLastClosedBusinessDate());
|
||||
Assertions.assertEquals(2, loanDelinquencyTags.size());
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 3), loanDelinquencyTags.get(1).getAddedOnDate());
|
||||
Assertions.assertEquals(LocalDate.of(2020, 4, 6), loanDelinquencyTags.get(0).getAddedOnDate());
|
||||
} finally {
|
||||
requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
|
||||
requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
|
||||
requestSpec.header("Fineract-Platform-TenantId", "default");
|
||||
responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInlineCOBOnRepaymentWithSoftLockedLoan() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2));
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
loanAccountLockHelper = new LoanAccountLockHelper(requestSpec, new ResponseSpecBuilder().expectStatusCode(202).build());
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2));
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
loanAccountLockHelper = new LoanAccountLockHelper(requestSpec, new ResponseSpecBuilder().expectStatusCode(202).build());
|
||||
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
|
||||
Assertions.assertNotNull(loanID);
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
Assertions.assertNotNull(loanID);
|
||||
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 10));
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
|
||||
createNewSimpleUserWithoutBypassPermission();
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 10));
|
||||
|
||||
loanAccountLockHelper.placeSoftLockOnLoanAccount(loanID, "LOAN_COB_PARTITIONING");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
createNewSimpleUserWithoutBypassPermission();
|
||||
|
||||
loanTransactionHelper.makeRepayment("10 March 2020", 10.0f, loanID);
|
||||
loanAccountLockHelper.placeSoftLockOnLoanAccount(loanID, "LOAN_COB_PARTITIONING");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 9), loan.getLastClosedBusinessDate());
|
||||
loanTransactionHelper.makeRepayment("10 March 2020", 10.0f, loanID);
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 9), loan.getLastClosedBusinessDate());
|
||||
} finally {
|
||||
requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
|
||||
requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
|
||||
requestSpec.header("Fineract-Platform-TenantId", "default");
|
||||
responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInlineCOBCatchUpOnRepaymentWithNotLockedLoan() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2));
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
loanAccountLockHelper = new LoanAccountLockHelper(requestSpec, new ResponseSpecBuilder().expectStatusCode(202).build());
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2));
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
loanAccountLockHelper = new LoanAccountLockHelper(requestSpec, new ResponseSpecBuilder().expectStatusCode(202).build());
|
||||
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
Assertions.assertNotNull(loanID);
|
||||
Assertions.assertNotNull(loanID);
|
||||
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 10));
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 10));
|
||||
|
||||
createNewSimpleUserWithoutBypassPermission();
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
createNewSimpleUserWithoutBypassPermission();
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
|
||||
loanTransactionHelper.makeRepayment("10 March 2020", 10.0f, loanID);
|
||||
loanTransactionHelper.makeRepayment("10 March 2020", 10.0f, loanID);
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 9), loan.getLastClosedBusinessDate());
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 9), loan.getLastClosedBusinessDate());
|
||||
} finally {
|
||||
requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
|
||||
requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
|
||||
requestSpec.header("Fineract-Platform-TenantId", "default");
|
||||
responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInlineCOBOnBatchAPI() {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2));
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
loanAccountLockHelper = new LoanAccountLockHelper(requestSpec, new ResponseSpecBuilder().expectStatusCode(202).build());
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2));
|
||||
GlobalConfigurationHelper.updateValueForGlobalConfiguration(this.requestSpec, this.responseSpec, "10", "0");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
loanAccountLockHelper = new LoanAccountLockHelper(requestSpec, new ResponseSpecBuilder().expectStatusCode(202).build());
|
||||
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
|
||||
Assertions.assertNotNull(clientID);
|
||||
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
Integer overdueFeeChargeId = ChargesHelper.createCharges(requestSpec, responseSpec,
|
||||
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
|
||||
Assertions.assertNotNull(overdueFeeChargeId);
|
||||
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
final Integer loanProductID = createLoanProduct(overdueFeeChargeId.toString());
|
||||
Assertions.assertNotNull(loanProductID);
|
||||
HashMap loanStatusHashMap;
|
||||
final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null, "10 January 2020");
|
||||
|
||||
Assertions.assertNotNull(loanID);
|
||||
Assertions.assertNotNull(loanID);
|
||||
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
|
||||
LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
|
||||
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
loanStatusHashMap = loanTransactionHelper.approveLoan("01 March 2020", loanID);
|
||||
LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
|
||||
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
String loanDetails = loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
|
||||
loanStatusHashMap = loanTransactionHelper.disburseLoanWithNetDisbursalAmount("02 March 2020", loanID,
|
||||
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
|
||||
LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.COB_DATE, LocalDate.of(2020, 3, 2));
|
||||
inlineLoanCOBHelper.executeInlineCOB(List.of(loanID.longValue()));
|
||||
GetLoansLoanIdResponse loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 2), loan.getLastClosedBusinessDate());
|
||||
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 10));
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 10));
|
||||
|
||||
createNewSimpleUserWithoutBypassPermission();
|
||||
createNewSimpleUserWithoutBypassPermission();
|
||||
|
||||
loanAccountLockHelper.placeSoftLockOnLoanAccount(loanID, "LOAN_COB_PARTITIONING");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
loanAccountLockHelper.placeSoftLockOnLoanAccount(loanID, "LOAN_COB_PARTITIONING");
|
||||
loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
|
||||
|
||||
final BatchRequest br1 = BatchHelper.repayLoanRequestWithGivenLoanId(4730L, loanID, "10", LocalDate.of(2020, 3, 10));
|
||||
final BatchRequest br1 = BatchHelper.repayLoanRequestWithGivenLoanId(4730L, loanID, "10", LocalDate.of(2020, 3, 10));
|
||||
|
||||
final List<BatchRequest> batchRequests = new ArrayList<>();
|
||||
final List<BatchRequest> batchRequests = new ArrayList<>();
|
||||
|
||||
batchRequests.add(br1);
|
||||
batchRequests.add(br1);
|
||||
|
||||
final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
|
||||
final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
|
||||
|
||||
final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec, this.responseSpec,
|
||||
jsonifiedRequest);
|
||||
Assertions.assertEquals(HttpStatus.SC_OK, (long) response.get(0).getStatusCode(), "Verify Status Code 200 for Repayment");
|
||||
final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec,
|
||||
this.responseSpec, jsonifiedRequest);
|
||||
Assertions.assertEquals(HttpStatus.SC_OK, (long) response.get(0).getStatusCode(), "Verify Status Code 200 for Repayment");
|
||||
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 9), loan.getLastClosedBusinessDate());
|
||||
loan = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanID);
|
||||
Assertions.assertEquals(LocalDate.of(2020, 3, 9), loan.getLastClosedBusinessDate());
|
||||
} finally {
|
||||
requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
|
||||
requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
|
||||
requestSpec.header("Fineract-Platform-TenantId", "default");
|
||||
responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+3
@@ -32,14 +32,17 @@ import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||
import org.apache.fineract.integrationtests.common.CollateralManagementHelper;
|
||||
import org.apache.fineract.integrationtests.common.Utils;
|
||||
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.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@ExtendWith(LoanTestLifecycleExtension.class)
|
||||
public class VariableInstallmentsIntegrationTest {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(VariableInstallmentsIntegrationTest.class);
|
||||
|
||||
Reference in New Issue
Block a user