[FINERACT-1992] Delinquency calculation with pause
This commit is contained in:
+533
@@ -18,6 +18,8 @@
|
||||
*/
|
||||
package org.apache.fineract.integrationtests;
|
||||
|
||||
import static org.apache.fineract.portfolio.delinquency.domain.DelinquencyAction.PAUSE;
|
||||
import static org.apache.fineract.portfolio.delinquency.domain.DelinquencyAction.RESUME;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
@@ -30,6 +32,7 @@ import io.restassured.builder.ResponseSpecBuilder;
|
||||
import io.restassured.http.ContentType;
|
||||
import io.restassured.specification.RequestSpecification;
|
||||
import io.restassured.specification.ResponseSpecification;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -42,11 +45,13 @@ import org.apache.fineract.client.models.GetDelinquencyRangesResponse;
|
||||
import org.apache.fineract.client.models.GetDelinquencyTagHistoryResponse;
|
||||
import org.apache.fineract.client.models.GetLoanProductsProductIdResponse;
|
||||
import org.apache.fineract.client.models.GetLoansLoanIdDelinquencySummary;
|
||||
import org.apache.fineract.client.models.GetLoansLoanIdLoanInstallmentLevelDelinquency;
|
||||
import org.apache.fineract.client.models.GetLoansLoanIdRepaymentPeriod;
|
||||
import org.apache.fineract.client.models.GetLoansLoanIdRepaymentSchedule;
|
||||
import org.apache.fineract.client.models.GetLoansLoanIdResponse;
|
||||
import org.apache.fineract.client.models.PostDelinquencyBucketResponse;
|
||||
import org.apache.fineract.client.models.PostDelinquencyRangeResponse;
|
||||
import org.apache.fineract.client.models.PostLoansDelinquencyActionResponse;
|
||||
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsResponse;
|
||||
import org.apache.fineract.client.models.PutDelinquencyBucketResponse;
|
||||
import org.apache.fineract.client.models.PutDelinquencyRangeResponse;
|
||||
@@ -1002,6 +1007,525 @@ public class DelinquencyBucketsIntegrationTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDelinquencyWithPauseLettingPauseExpire() {
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 January 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
|
||||
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);
|
||||
|
||||
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());
|
||||
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
Math.toIntExact(delinquencyBucket.getId()), "3");
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Arrears: {}", getLoanProductsProductResponse.getInArrearsTolerance());
|
||||
assertEquals(3, getLoanProductsProductResponse.getInArrearsTolerance());
|
||||
|
||||
final LocalDate transactionDate = bussinesLocalDate;
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "3");
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
final GetDelinquencyRangesResponse firstTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
log.info("Loan Delinquency Range is null {}", (firstTestCase == null));
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
log.info("Loan Account Arrears {}", getLoansLoanIdResponse.getInArrearsTolerance());
|
||||
assertEquals(3, getLoansLoanIdResponse.getInArrearsTolerance());
|
||||
|
||||
final String jobName = "Loan COB";
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("06 February 2012");
|
||||
LocalDate lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
GetLoansLoanIdDelinquencySummary delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(5, delinquent.getDelinquentDays());
|
||||
|
||||
PostLoansDelinquencyActionResponse pauseDelinquencyResponse = loanTransactionHelper
|
||||
.createLoanDelinquencyAction(loanId.longValue(), PAUSE, "06 February 2012", "10 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("09 February 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(5, delinquent.getDelinquentDays());
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("12 March 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(2049.99, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(36, delinquent.getDelinquentDays());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDelinquencyWithPauseResumeBeforePauseExpires() {
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 January 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
|
||||
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);
|
||||
|
||||
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());
|
||||
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
Math.toIntExact(delinquencyBucket.getId()), "3");
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Arrears: {}", getLoanProductsProductResponse.getInArrearsTolerance());
|
||||
assertEquals(3, getLoanProductsProductResponse.getInArrearsTolerance());
|
||||
|
||||
final LocalDate transactionDate = bussinesLocalDate;
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "3");
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
final GetDelinquencyRangesResponse firstTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
log.info("Loan Delinquency Range is null {}", (firstTestCase == null));
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
log.info("Loan Account Arrears {}", getLoansLoanIdResponse.getInArrearsTolerance());
|
||||
assertEquals(3, getLoansLoanIdResponse.getInArrearsTolerance());
|
||||
|
||||
final String jobName = "Loan COB";
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("06 February 2012");
|
||||
LocalDate lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
GetLoansLoanIdDelinquencySummary delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(5, delinquent.getDelinquentDays());
|
||||
|
||||
PostLoansDelinquencyActionResponse pauseDelinquencyResponse = loanTransactionHelper
|
||||
.createLoanDelinquencyAction(loanId.longValue(), PAUSE, "06 February 2012", "10 March 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("09 February 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(5, delinquent.getDelinquentDays());
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("10 February 2012");
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), RESUME, "10 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("12 March 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(2049.99, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(36, delinquent.getDelinquentDays());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDelinquencyWithMultiplePausePeriods() {
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 January 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
|
||||
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);
|
||||
|
||||
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());
|
||||
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProduct(loanTransactionHelper,
|
||||
Math.toIntExact(delinquencyBucket.getId()), "3");
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Arrears: {}", getLoanProductsProductResponse.getInArrearsTolerance());
|
||||
assertEquals(3, getLoanProductsProductResponse.getInArrearsTolerance());
|
||||
|
||||
final LocalDate transactionDate = bussinesLocalDate;
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "3");
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
final GetDelinquencyRangesResponse firstTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
log.info("Loan Delinquency Range is null {}", (firstTestCase == null));
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
log.info("Loan Account Arrears {}", getLoansLoanIdResponse.getInArrearsTolerance());
|
||||
assertEquals(3, getLoansLoanIdResponse.getInArrearsTolerance());
|
||||
|
||||
final String jobName = "Loan COB";
|
||||
|
||||
// delinqut days: 5
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("06 February 2012");
|
||||
LocalDate lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
GetLoansLoanIdDelinquencySummary delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(5, delinquent.getDelinquentDays());
|
||||
|
||||
PostLoansDelinquencyActionResponse pauseDelinquencyResponse = loanTransactionHelper
|
||||
.createLoanDelinquencyAction(loanId.longValue(), PAUSE, "06 February 2012", "10 March 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("09 February 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(5, delinquent.getDelinquentDays());
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("10 February 2012");
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), RESUME, "10 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("13 February 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(8, delinquent.getDelinquentDays());
|
||||
|
||||
pauseDelinquencyResponse = loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), PAUSE, "13 February 2012",
|
||||
"18 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("23 February 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(13, delinquent.getDelinquentDays());
|
||||
|
||||
pauseDelinquencyResponse = loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), PAUSE, "23 February 2012",
|
||||
"28 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("25 February 2012");
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), RESUME, "25 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("12 March 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(2049.99, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(29, delinquent.getDelinquentDays());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDelinquencyWithMultiplePausePeriodsWithInstallmentLevelDelinquency() {
|
||||
try {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE);
|
||||
|
||||
LocalDate bussinesLocalDate = Utils.getDateAsLocalDate("01 January 2012");
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
|
||||
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);
|
||||
|
||||
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());
|
||||
|
||||
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012");
|
||||
final GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProductWithInstallmentLevelDelinquency(
|
||||
loanTransactionHelper, Math.toIntExact(delinquencyBucket.getId()), "3");
|
||||
assertNotNull(getLoanProductsProductResponse);
|
||||
log.info("Loan Product Arrears: {}", getLoanProductsProductResponse.getInArrearsTolerance());
|
||||
assertEquals(3, getLoanProductsProductResponse.getInArrearsTolerance());
|
||||
|
||||
final LocalDate transactionDate = bussinesLocalDate;
|
||||
String operationDate = Utils.dateFormatter.format(transactionDate);
|
||||
|
||||
final Integer loanId = createLoanAccount(loanTransactionHelper, clientId.toString(),
|
||||
getLoanProductsProductResponse.getId().toString(), operationDate, "3");
|
||||
|
||||
GetLoansLoanIdResponse getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
final GetDelinquencyRangesResponse firstTestCase = getLoansLoanIdResponse.getDelinquencyRange();
|
||||
log.info("Loan Delinquency Range is null {}", (firstTestCase == null));
|
||||
loanTransactionHelper.printRepaymentSchedule(getLoansLoanIdResponse);
|
||||
log.info("Loan Account Arrears {}", getLoansLoanIdResponse.getInArrearsTolerance());
|
||||
assertEquals(3, getLoansLoanIdResponse.getInArrearsTolerance());
|
||||
|
||||
final String jobName = "Loan COB";
|
||||
|
||||
// delinqut days: 5
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("06 February 2012");
|
||||
LocalDate lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
GetLoansLoanIdDelinquencySummary delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(5, delinquent.getDelinquentDays());
|
||||
|
||||
PostLoansDelinquencyActionResponse pauseDelinquencyResponse = loanTransactionHelper
|
||||
.createLoanDelinquencyAction(loanId.longValue(), PAUSE, "06 February 2012", "10 March 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("09 February 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(5, delinquent.getDelinquentDays());
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("10 February 2012");
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), RESUME, "10 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("13 February 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(8, delinquent.getDelinquentDays());
|
||||
|
||||
pauseDelinquencyResponse = loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), PAUSE, "13 February 2012",
|
||||
"18 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("23 February 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate, jobName, responseSpec);
|
||||
lastLoanCOBBusinessDate = bussinesLocalDate.minusDays(1);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(1033.33, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(13, delinquent.getDelinquentDays());
|
||||
|
||||
pauseDelinquencyResponse = loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), PAUSE, "23 February 2012",
|
||||
"28 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("25 February 2012");
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
loanTransactionHelper.createLoanDelinquencyAction(loanId.longValue(), RESUME, "25 February 2012");
|
||||
|
||||
bussinesLocalDate = Utils.getDateAsLocalDate("14 March 2012");
|
||||
schedulerJobHelper.fastForwardTime(lastLoanCOBBusinessDate, bussinesLocalDate.minusDays(1), jobName, responseSpec);
|
||||
log.info("Current date {}", bussinesLocalDate);
|
||||
BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, bussinesLocalDate);
|
||||
schedulerJobHelper.executeAndAwaitJob(jobName);
|
||||
|
||||
getLoansLoanIdResponse = loanTransactionHelper.getLoan(requestSpec, responseSpec, loanId);
|
||||
loanTransactionHelper.printDelinquencyData(getLoansLoanIdResponse);
|
||||
delinquent = getLoansLoanIdResponse.getDelinquent();
|
||||
|
||||
assertEquals(2049.99, delinquent.getDelinquentAmount());
|
||||
assertEquals(LocalDate.of(2012, 2, 1), delinquent.getDelinquentDate());
|
||||
assertEquals(31, delinquent.getDelinquentDays());
|
||||
assertEquals(2, delinquent.getInstallmentLevelDelinquency().size());
|
||||
GetLoansLoanIdLoanInstallmentLevelDelinquency firstInstallmentDelinquent = delinquent.getInstallmentLevelDelinquency().get(0);
|
||||
assertEquals(BigDecimal.valueOf(1016.66), firstInstallmentDelinquent.getDelinquentAmount().stripTrailingZeros());
|
||||
GetLoansLoanIdLoanInstallmentLevelDelinquency secondInstallmentDelinquent = delinquent.getInstallmentLevelDelinquency().get(1);
|
||||
assertEquals(BigDecimal.valueOf(1033.33), secondInstallmentDelinquent.getDelinquentAmount().stripTrailingZeros());
|
||||
} finally {
|
||||
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
private GetLoanProductsProductIdResponse createLoanProduct(final LoanTransactionHelper loanTransactionHelper,
|
||||
final Integer delinquencyBucketId, final String inArrearsTolerance) {
|
||||
final HashMap<String, Object> loanProductMap = new LoanProductTestBuilder().withInArrearsTolerance(inArrearsTolerance).build(null,
|
||||
@@ -1010,6 +1534,15 @@ public class DelinquencyBucketsIntegrationTest {
|
||||
return loanTransactionHelper.getLoanProduct(loanProductId);
|
||||
}
|
||||
|
||||
private GetLoanProductsProductIdResponse createLoanProductWithInstallmentLevelDelinquency(
|
||||
final LoanTransactionHelper loanTransactionHelper, final Integer delinquencyBucketId, final String inArrearsTolerance) {
|
||||
final HashMap<String, Object> loanProductMap = new LoanProductTestBuilder().withInArrearsTolerance(inArrearsTolerance).build(null,
|
||||
delinquencyBucketId);
|
||||
loanProductMap.put("enableInstallmentLevelDelinquency", true);
|
||||
final Integer loanProductId = loanTransactionHelper.getLoanProductId(Utils.convertToJson(loanProductMap));
|
||||
return loanTransactionHelper.getLoanProduct(loanProductId);
|
||||
}
|
||||
|
||||
private PutLoanProductsProductIdResponse updateLoanProduct(LoanTransactionHelper loanTransactionHelper, Long id,
|
||||
final Integer inArrearsTolerance) {
|
||||
final PutLoanProductsProductIdRequest requestModifyLoan = new PutLoanProductsProductIdRequest()
|
||||
|
||||
Reference in New Issue
Block a user