added junit test cases

This commit is contained in:
Pramod Nuthakki
2014-06-17 23:27:37 +05:30
parent b66e289df8
commit 1f07da18d4
3 changed files with 213 additions and 20 deletions
@@ -781,6 +781,10 @@ public class ClientLoanIntegrationTest {
Assert.assertTrue(new Float(val).compareTo(new Float(val2)) == 0);
}
public void validateNumberForEqualWithMsg(String msg, String val, String val2) {
Assert.assertTrue(msg, new Float(val).compareTo(new Float(val2)) == 0);
}
public void validateNumberForEqualExcludePrecission(String val, String val2) {
DecimalFormat twoDForm = new DecimalFormat("#");
Assert.assertTrue(new Float(twoDForm.format(new Float(val))).compareTo(new Float(twoDForm.format(new Float(val2)))) == 0);
@@ -802,6 +806,40 @@ public class ClientLoanIntegrationTest {
return this.loanTransactionHelper.getLoanProductId(loanProductJSON);
}
private Integer createLoanProduct(final String inMultiplesOf, final String digitsAfterDecimal) {
System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
final String loanProductJSON = new LoanProductTestBuilder() //
.withPrincipal("10000000.00") //
.withNumberOfRepayments("24") //
.withRepaymentAfterEvery("1") //
.withRepaymentTypeAsMonth() //
.withinterestRatePerPeriod("2") //
.withInterestRateFrequencyTypeAsMonths() //
.withAmortizationTypeAsEqualPrincipalPayment() //
.withInterestTypeAsDecliningBalance() //
.currencyDetails(digitsAfterDecimal, inMultiplesOf).build(null);
return this.loanTransactionHelper.getLoanProductId(loanProductJSON);
}
private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID, String graceOnPrincipalPayment) {
System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
final String loanApplicationJSON = new LoanApplicationTestBuilder() //
.withPrincipal("10000000.00") //
.withLoanTermFrequency("24") //
.withLoanTermFrequencyAsMonths() //
.withNumberOfRepayments("24") //
.withRepaymentEveryAfter("1") //
.withRepaymentFrequencyTypeAsMonths() //
.withInterestRatePerPeriod("2") //
.withAmortizationTypeAsEqualPrincipalPayments() //
.withInterestTypeAsDecliningBalance() //
.withInterestCalculationPeriodTypeSameAsRepaymentPeriod() //
.withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("2 June 2014") //
.withSubmittedOnDate("2 June 2014") //
.build(clientID.toString(), loanProductID.toString(), null);
return this.loanTransactionHelper.getLoanId(loanApplicationJSON);
}
private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID, List<HashMap> charges,
final String savingsId, String principal) {
System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
@@ -887,6 +925,113 @@ public class ClientLoanIntegrationTest {
assertEquals("Checking for Interest Due for 4th Month", new Float("61.79"), loanSchedule.get(4).get("interestOriginalDue"));
}
private void verifyLoanRepaymentScheduleForEqualPrincipal(final ArrayList<HashMap> loanSchedule) {
System.out.println("--------------------VERIFYING THE PRINCIPAL DUES,INTEREST DUE AND DUE DATE--------------------------");
assertEquals("Checking for Due Date for 1st Month", new ArrayList<Integer>(Arrays.asList(2014, 7, 2)),
loanSchedule.get(1).get("dueDate"));
assertEquals("Checking for Principal Due for 1st Month", new Float("416700"), loanSchedule.get(1).get("principalOriginalDue"));
assertEquals("Checking for Interest Due for 1st Month", new Float("200000"), loanSchedule.get(1).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 2nd Month", new ArrayList<Integer>(Arrays.asList(2014, 8, 2)),
loanSchedule.get(2).get("dueDate"));
assertEquals("Checking for Principal Due for 2nd Month", new Float("416700"), loanSchedule.get(2).get("principalDue"));
assertEquals("Checking for Interest Due for 2nd Month", new Float("191700"), loanSchedule.get(2).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 3rd Month", new ArrayList<Integer>(Arrays.asList(2014, 9, 2)),
loanSchedule.get(3).get("dueDate"));
assertEquals("Checking for Principal Due for 3rd Month", new Float("416700"), loanSchedule.get(3).get("principalDue"));
assertEquals("Checking for Interest Due for 3rd Month", new Float("183300"), loanSchedule.get(3).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 4th Month", new ArrayList<Integer>(Arrays.asList(2014, 10, 2)),
loanSchedule.get(4).get("dueDate"));
assertEquals("Checking for Principal Due for 4th Month", new Float("416700"), loanSchedule.get(4).get("principalDue"));
assertEquals("Checking for Interest Due for 4th Month", new Float("175000"), loanSchedule.get(4).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 5th Month", new ArrayList<Integer>(Arrays.asList(2014, 11, 2)),
loanSchedule.get(5).get("dueDate"));
assertEquals("Checking for Principal Due for 5th Month", new Float("416700"), loanSchedule.get(5).get("principalDue"));
assertEquals("Checking for Interest Due for 5th Month", new Float("166700"), loanSchedule.get(5).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 6th Month", new ArrayList<Integer>(Arrays.asList(2014, 12, 2)),
loanSchedule.get(6).get("dueDate"));
assertEquals("Checking for Principal Due for 6th Month", new Float("416700"), loanSchedule.get(6).get("principalDue"));
assertEquals("Checking for Interest Due for 6th Month", new Float("158300"), loanSchedule.get(6).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 10th Month", new ArrayList<Integer>(Arrays.asList(2015, 4, 2)),
loanSchedule.get(10).get("dueDate"));
assertEquals("Checking for Principal Due for 10th Month", new Float("416700"), loanSchedule.get(10).get("principalDue"));
assertEquals("Checking for Interest Due for 10th Month", new Float("125000"), loanSchedule.get(10).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 20th Month", new ArrayList<Integer>(Arrays.asList(2016, 2, 2)),
loanSchedule.get(20).get("dueDate"));
assertEquals("Checking for Principal Due for 20th Month", new Float("416700"), loanSchedule.get(20).get("principalDue"));
assertEquals("Checking for Interest Due for 20th Month", new Float("41700"), loanSchedule.get(20).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 24th Month", new ArrayList<Integer>(Arrays.asList(2016, 6, 2)),
loanSchedule.get(24).get("dueDate"));
assertEquals("Checking for Principal Due for 24th Month", new Float("415900"), loanSchedule.get(24).get("principalDue"));
assertEquals("Checking for Interest Due for 24th Month", new Float("8300"), loanSchedule.get(24).get("interestOriginalDue"));
}
private void verifyLoanRepaymentScheduleForEqualPrincipalWithGrace(final ArrayList<HashMap> loanSchedule) {
System.out.println("--------------------VERIFYING THE PRINCIPAL DUES,INTEREST DUE AND DUE DATE--------------------------");
assertEquals("Checking for Due Date for 1st Month", new ArrayList<Integer>(Arrays.asList(2014, 7, 2)),
loanSchedule.get(1).get("dueDate"));
validateNumberForEqualWithMsg("Checking for Principal Due for 1st Month", "0.0",
String.valueOf(loanSchedule.get(1).get("principalOriginalDue")));
assertEquals("Checking for Interest Due for 1st Month", new Float("200000"), loanSchedule.get(1).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 2nd Month", new ArrayList<Integer>(Arrays.asList(2014, 8, 2)),
loanSchedule.get(2).get("dueDate"));
validateNumberForEqualWithMsg("Checking for Principal Due for 2nd Month", "0.0",
String.valueOf(loanSchedule.get(2).get("principalOriginalDue")));
assertEquals("Checking for Interest Due for 2nd Month", new Float("200000"), loanSchedule.get(2).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 3rd Month", new ArrayList<Integer>(Arrays.asList(2014, 9, 2)),
loanSchedule.get(3).get("dueDate"));
validateNumberForEqualWithMsg("Checking for Principal Due for 3rd Month", "0.0", String.valueOf(loanSchedule.get(3).get("principalDue")));
assertEquals("Checking for Interest Due for 3rd Month", new Float("200000"), loanSchedule.get(3).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 4th Month", new ArrayList<Integer>(Arrays.asList(2014, 10, 2)),
loanSchedule.get(4).get("dueDate"));
validateNumberForEqualWithMsg("Checking for Principal Due for 4th Month", "0", String.valueOf(loanSchedule.get(4).get("principalDue")));
assertEquals("Checking for Interest Due for 4th Month", new Float("200000"), loanSchedule.get(4).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 5th Month", new ArrayList<Integer>(Arrays.asList(2014, 11, 2)),
loanSchedule.get(5).get("dueDate"));
validateNumberForEqualWithMsg("Checking for Principal Due for 5th Month", "0", String.valueOf(loanSchedule.get(5).get("principalDue")));
assertEquals("Checking for Interest Due for 5th Month", new Float("200000"), loanSchedule.get(5).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 6th Month", new ArrayList<Integer>(Arrays.asList(2014, 12, 2)),
loanSchedule.get(6).get("dueDate"));
assertEquals("Checking for Principal Due for 6th Month", new Float("526300"), loanSchedule.get(6).get("principalDue"));
assertEquals("Checking for Interest Due for 6th Month", new Float("200000"), loanSchedule.get(6).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 7th Month", new ArrayList<Integer>(Arrays.asList(2015, 1, 2)),
loanSchedule.get(7).get("dueDate"));
assertEquals("Checking for Principal Due for 7th Month", new Float("526300"), loanSchedule.get(7).get("principalDue"));
assertEquals("Checking for Interest Due for 7th Month", new Float("189500"), loanSchedule.get(7).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 10th Month", new ArrayList<Integer>(Arrays.asList(2015, 4, 2)),
loanSchedule.get(10).get("dueDate"));
assertEquals("Checking for Principal Due for 10th Month", new Float("526300"), loanSchedule.get(10).get("principalDue"));
assertEquals("Checking for Interest Due for 10th Month", new Float("157900"), loanSchedule.get(10).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 20th Month", new ArrayList<Integer>(Arrays.asList(2016, 2, 2)),
loanSchedule.get(20).get("dueDate"));
assertEquals("Checking for Principal Due for 20th Month", new Float("526300"), loanSchedule.get(20).get("principalDue"));
assertEquals("Checking for Interest Due for 20th Month", new Float("52600"), loanSchedule.get(20).get("interestOriginalDue"));
assertEquals("Checking for Due Date for 24th Month", new ArrayList<Integer>(Arrays.asList(2016, 6, 2)),
loanSchedule.get(24).get("dueDate"));
assertEquals("Checking for Principal Due for 24th Month", new Float("526600"), loanSchedule.get(24).get("principalDue"));
assertEquals("Checking for Interest Due for 24th Month", new Float("10500"), loanSchedule.get(24).get("interestOriginalDue"));
}
private void addCharges(List<HashMap> charges, Integer chargeId, String amount, String duedate) {
charges.add(charges(chargeId, amount, duedate));
}
@@ -1151,7 +1296,7 @@ public class ClientLoanIntegrationTest {
this.journalEntryHelper.checkJournalEntryForIncomeAccount(incomeAccount, "20 January 2012", new JournalEntry(
Float.valueOf("50.00"), JournalEntry.TransactionType.CREDIT));
}
/***
* Test case for checking CashBasedAccounting functionality adding charges
* with calculation type percentage of amount
@@ -1910,7 +2055,6 @@ public class ClientLoanIntegrationTest {
LoanStatusChecker.verifyLoanAccountIsOverPaid(loanStatusHashMap);
}
/***
* Test case for checking AccuralUpfrontAccounting functionality adding
* charges with calculation type percentage of amount plus interest
@@ -1984,19 +2128,19 @@ public class ClientLoanIntegrationTest {
this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", assetAccountInitialEntry);
this.journalEntryHelper.checkJournalEntryForIncomeAccount(incomeAccount, "20 September 2011",
new JournalEntry(Float.valueOf("605.94"), JournalEntry.TransactionType.CREDIT), new JournalEntry(Float.valueOf("126.06"),
JournalEntry.TransactionType.CREDIT), new JournalEntry(Float.valueOf("126.04"),
JournalEntry.TransactionType.CREDIT));
JournalEntry.TransactionType.CREDIT),
new JournalEntry(Float.valueOf("126.04"), JournalEntry.TransactionType.CREDIT));
this.loanTransactionHelper.addChargesForLoan(
loanID,
LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(
String.valueOf(amountPlusInterestPercentageSpecifiedDueDateCharge), "29 September 2011", "1"));
loanCharges.clear();
loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
validateCharge(amountPlusInterestPercentageDisbursementCharge, loanCharges, "1", "0.0", "126.06", "0.0");
validateCharge(amountPlusInterestPercentageSpecifiedDueDateCharge, loanCharges, "1", "126.06", "0.0", "0.0");
this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "29 September 2011",
new JournalEntry(Float.valueOf("126.06"), JournalEntry.TransactionType.DEBIT));
this.journalEntryHelper.checkJournalEntryForIncomeAccount(incomeAccount, "29 September 2011",
@@ -2025,14 +2169,15 @@ public class ClientLoanIntegrationTest {
secondInstallment = loanSchedule.get(2);
validateNumberForEqual("157.57", String.valueOf(secondInstallment.get("feeChargesDue")));
System.out.println("----------- Waive installment charge for 2nd installment ---------");
this.loanTransactionHelper.waiveChargesForLoan(loanID, (Integer) getloanCharge(amountPlusInterestPercentageInstallmentFee, loanCharges).get("id"),
this.loanTransactionHelper.waiveChargesForLoan(loanID,
(Integer) getloanCharge(amountPlusInterestPercentageInstallmentFee, loanCharges).get("id"),
LoanTransactionHelper.getWaiveChargeJSON(String.valueOf(2)));
loanCharges.clear();
loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
validateCharge(amountPlusInterestPercentageInstallmentFee, loanCharges, "1", "63.02", "31.51", "31.51");
this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", new JournalEntry(Float.valueOf("31.51"),
JournalEntry.TransactionType.CREDIT));
this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", new JournalEntry(
Float.valueOf("31.51"), JournalEntry.TransactionType.CREDIT));
this.journalEntryHelper.checkJournalEntryForExpenseAccount(expenseAccount, "20 September 2011",
new JournalEntry(Float.valueOf("31.51"), JournalEntry.TransactionType.DEBIT));
@@ -2119,6 +2264,7 @@ public class ClientLoanIntegrationTest {
loanStatusHashMap = (HashMap) this.loanTransactionHelper.getLoanDetail(this.requestSpec, this.responseSpec, loanID, "status");
LoanStatusChecker.verifyLoanAccountIsOverPaid(loanStatusHashMap);
}
/***
* Test case for checking AccuralPeriodicAccounting functionality adding
* charges with calculation type flat
@@ -2220,8 +2366,8 @@ public class ClientLoanIntegrationTest {
loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
validateCharge(flatInstallmentFee, loanCharges, "50", "100.00", "50.0", "50.0");
this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", new JournalEntry(
Float.valueOf("50.0"), JournalEntry.TransactionType.CREDIT));
this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", new JournalEntry(Float.valueOf("50.0"),
JournalEntry.TransactionType.CREDIT));
this.journalEntryHelper.checkJournalEntryForExpenseAccount(expenseAccount, "20 September 2011",
new JournalEntry(Float.valueOf("50.0"), JournalEntry.TransactionType.DEBIT));
@@ -2316,7 +2462,7 @@ public class ClientLoanIntegrationTest {
loanStatusHashMap = (HashMap) this.loanTransactionHelper.getLoanDetail(this.requestSpec, this.responseSpec, loanID, "status");
LoanStatusChecker.verifyLoanAccountIsClosed(loanStatusHashMap);
}
/**
* Test case for checking AccuralPeriodicAccounting functionality adding
* charges with calculation type percentage of amount
@@ -2415,15 +2561,14 @@ public class ClientLoanIntegrationTest {
secondInstallment = loanSchedule.get(2);
validateNumberForEqual("149.70", String.valueOf(secondInstallment.get("feeChargesDue")));
System.out.println("----------- Waive installment charge for 2nd installment ---------");
this.loanTransactionHelper.waiveChargesForLoan(loanID,
(Integer) getloanCharge(percentageInstallmentFee, loanCharges).get("id"),
this.loanTransactionHelper.waiveChargesForLoan(loanID, (Integer) getloanCharge(percentageInstallmentFee, loanCharges).get("id"),
LoanTransactionHelper.getWaiveChargeJSON(String.valueOf(2)));
loanCharges.clear();
loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
validateCharge(percentageInstallmentFee, loanCharges, "1", "61.19", "29.11", "29.70");
this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", new JournalEntry(
Float.valueOf("29.7"), JournalEntry.TransactionType.CREDIT));
this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", new JournalEntry(Float.valueOf("29.7"),
JournalEntry.TransactionType.CREDIT));
this.journalEntryHelper.checkJournalEntryForExpenseAccount(expenseAccount, "20 September 2011",
new JournalEntry(Float.valueOf("29.7"), JournalEntry.TransactionType.DEBIT));
@@ -2518,6 +2663,7 @@ public class ClientLoanIntegrationTest {
loanStatusHashMap = (HashMap) this.loanTransactionHelper.getLoanDetail(this.requestSpec, this.responseSpec, loanID, "status");
LoanStatusChecker.verifyLoanAccountIsClosed(loanStatusHashMap);
}
/***
* Test case for checking AccuralPeriodicAccounting functionality adding
* charges with calculation type percentage of amount and interest
@@ -2727,6 +2873,34 @@ public class ClientLoanIntegrationTest {
LoanStatusChecker.verifyLoanAccountIsClosed(loanStatusHashMap);
}
@Test
public void testClientLoanScheduleWithCurrencyDetails() {
this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec);
ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID);
final Integer loanProductID = createLoanProduct("100", "0");
final Integer loanID = applyForLoanApplication(clientID, loanProductID, null);
final ArrayList<HashMap> loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec,
loanID);
verifyLoanRepaymentScheduleForEqualPrincipal(loanSchedule);
}
@Test
public void testClientLoanScheduleWithCurrencyDetails_with_grace() {
this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec);
ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID);
final Integer loanProductID = createLoanProduct("100", "0");
final Integer loanID = applyForLoanApplication(clientID, loanProductID, "5");
final ArrayList<HashMap> loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec,
loanID);
verifyLoanRepaymentScheduleForEqualPrincipalWithGrace(loanSchedule);
}
private void checkAccrualTransactions(final ArrayList<HashMap> loanSchedule, final Integer loanID) {
for (int i = 1; i < loanSchedule.size(); i++) {
@@ -36,6 +36,7 @@ public class LoanApplicationTestBuilder {
private String loanType = "individual";
private String fixedEmiAmount = "10000";
private String maxOutstandingLoanBalance = "36000";
private String graceOnPrincipalPayment = null;
private List<HashMap> disbursementData = null;
private List<HashMap> charges = new ArrayList<HashMap>();
@@ -71,6 +72,10 @@ public class LoanApplicationTestBuilder {
map.put("linkAccountId", savingsID);
}
if (graceOnPrincipalPayment != null) {
map.put("graceOnPrincipalPayment", graceOnPrincipalPayment);
}
if (disbursementData != null) {
map.put("disbursementData", disbursementData);
map.put("fixedEmiAmount", fixedEmiAmount);
@@ -191,6 +196,11 @@ public class LoanApplicationTestBuilder {
return this;
}
public LoanApplicationTestBuilder withPrincipalGrace(final String graceOnPrincipalPayment) {
this.graceOnPrincipalPayment = graceOnPrincipalPayment;
return this;
}
public LoanApplicationTestBuilder withTranches(final List<HashMap> disbursementData) {
this.disbursementData = disbursementData;
return this;
@@ -13,7 +13,6 @@ import com.google.gson.Gson;
public class LoanProductTestBuilder {
private static final String LOCALE = "en_GB";
private static final String DIGITS_AFTER_DECIMAL = "2";
private static final String USD = "USD";
private static final String DAYS = "0";
private static final String WEEK = "1";
@@ -33,6 +32,9 @@ public class LoanProductTestBuilder {
private static final String ACCRUAL_PERIODIC = "3";
private static final String ACCRUAL_UPFRONT = "4";
private String digitsAfterDecimal = "2";
private String inMultiplesOf = "0";
private String nameOfLoanProduct = Utils.randomNameGenerator("LOAN_PRODUCT_", 6);
private String shortName = Utils.randomNameGenerator("", 4);
private String principal = "10000.00";
@@ -50,7 +52,7 @@ public class LoanProductTestBuilder {
private final String currencyCode = USD;
private String amortizationType = EQUAL_INSTALLMENTS;
private String minPrincipal = "1000.00";
private String maxPrincipal = "100000.00";
private String maxPrincipal = "10000000.00";
private Account[] accountList = null;
private Boolean multiDisburseLoan = false;
@@ -71,7 +73,8 @@ public class LoanProductTestBuilder {
map.put("shortName", this.shortName);
map.put("currencyCode", this.currencyCode);
map.put("locale", LOCALE);
map.put("digitsAfterDecimal", DIGITS_AFTER_DECIMAL);
map.put("digitsAfterDecimal", digitsAfterDecimal);
map.put("inMultiplesOf", inMultiplesOf);
map.put("principal", this.principal);
map.put("numberOfRepayments", this.numberOfRepayments);
map.put("repaymentEvery", this.repaymentPeriod);
@@ -296,4 +299,10 @@ public class LoanProductTestBuilder {
return this;
}
public LoanProductTestBuilder currencyDetails(final String digitsAfterDecimal, final String inMultiplesOf) {
this.digitsAfterDecimal = digitsAfterDecimal;
this.inMultiplesOf = inMultiplesOf;
return this;
}
}