You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ma...@apache.org on 2016/02/01 10:24:50 UTC
[14/51] [partial] incubator-fineract git commit: deleted initial code
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/66cee785/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java
deleted file mode 100644
index c27abc3..0000000
--- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java
+++ /dev/null
@@ -1,5051 +0,0 @@
-/**
- * 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;
-
-import static org.junit.Assert.assertEquals;
-
-import java.math.BigDecimal;
-import java.text.DateFormat;
-import java.text.DecimalFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.fineract.integrationtests.common.ClientHelper;
-import org.apache.fineract.integrationtests.common.SchedulerJobHelper;
-import org.apache.fineract.integrationtests.common.Utils;
-import org.apache.fineract.integrationtests.common.accounting.Account;
-import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
-import org.apache.fineract.integrationtests.common.accounting.JournalEntry;
-import org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper;
-import org.apache.fineract.integrationtests.common.accounting.PeriodicAccrualAccountingHelper;
-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.LoanTransactionHelper;
-import org.apache.fineract.integrationtests.common.savings.AccountTransferHelper;
-import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
-import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
-import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker;
-import org.joda.time.LocalDate;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.gson.JsonObject;
-import com.jayway.restassured.builder.RequestSpecBuilder;
-import com.jayway.restassured.builder.ResponseSpecBuilder;
-import com.jayway.restassured.http.ContentType;
-import com.jayway.restassured.path.json.JsonPath;
-import com.jayway.restassured.specification.RequestSpecification;
-import com.jayway.restassured.specification.ResponseSpecification;
-
-/**
- * Client Loan Integration Test for checking Loan Application Repayments
- * Schedule, loan charges, penalties, loan repayments and verifying accounting
- * transactions
- */
-@SuppressWarnings({ "rawtypes", "unchecked" })
-public class ClientLoanIntegrationTest {
-
- public static final String MINIMUM_OPENING_BALANCE = "1000.0";
- public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL";
-
- private static final String NONE = "1";
- private static final String CASH_BASED = "2";
- private static final String ACCRUAL_PERIODIC = "3";
- private static final String ACCRUAL_UPFRONT = "4";
-
- private ResponseSpecification responseSpec;
- private RequestSpecification requestSpec;
- private LoanTransactionHelper loanTransactionHelper;
- private JournalEntryHelper journalEntryHelper;
- private AccountHelper accountHelper;
- private SchedulerJobHelper schedulerJobHelper;
- private PeriodicAccrualAccountingHelper periodicAccrualAccountingHelper;
- private SavingsAccountHelper savingsAccountHelper;
- private AccountTransferHelper accountTransferHelper;
-
- @Before
- public void setup() {
- Utils.initializeRESTAssured();
- this.requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
- this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
- this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
- this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
- this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec);
- }
-
- @Test
- public void checkClientLoanCreateAndDisburseFlow() {
- 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(false, NONE);
- final Integer loanID = applyForLoanApplication(clientID, loanProductID, null, null, "12,000.00");
- final ArrayList<HashMap> loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec,
- loanID);
- verifyLoanRepaymentSchedule(loanSchedule);
-
- }
-
- @Test
- public void testLoanCharges_DISBURSEMENT_FEE() {
- 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(false, NONE);
-
- List<HashMap> charges = new ArrayList<>();
- Integer flatDisbursement = ChargesHelper.createCharges(requestSpec, responseSpec, ChargesHelper.getLoanDisbursementJSON());
-
- Integer amountPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanDisbursementJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1"));
- addCharges(charges, amountPercentage, "1", null);
- Integer amountPlusInterestPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanDisbursementJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT_AND_INTEREST, "1"));
- addCharges(charges, amountPlusInterestPercentage, "1", null);
- Integer interestPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanDisbursementJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_INTEREST, "1"));
- addCharges(charges, interestPercentage, "1", null);
-
- final Integer loanID = applyForLoanApplication(clientID, loanProductID, charges, null, "12,000.00");
- Assert.assertNotNull(loanID);
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- ArrayList<HashMap> loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- HashMap disbursementDetail = loanSchedule.get(0);
-
- List<HashMap> loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
-
- validateCharge(amountPercentage, loanCharges, "1.0", "120.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "1.0", "6.06", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "1.0", "126.06", "0.0", "0.0");
-
- validateNumberForEqual("252.12", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- this.loanTransactionHelper.addChargesForLoan(loanID,
- LoanTransactionHelper.getDisbursementChargesForLoanAsJSON(String.valueOf(flatDisbursement)));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- disbursementDetail = loanSchedule.get(0);
-
- validateCharge(flatDisbursement, loanCharges, "100.0", "100.0", "0.0", "0.0");
- validateNumberForEqual("352.12", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(amountPercentage, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(interestPercentage, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(amountPlusInterestPercentage, loanCharges)
- .get("id"), LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(flatDisbursement, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("150"));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- disbursementDetail = loanSchedule.get(0);
- validateCharge(amountPercentage, loanCharges, "2.0", "240.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "2.0", "12.12", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "2.0", "252.12", "0.0", "0.0");
- validateCharge(flatDisbursement, loanCharges, "150.0", "150.0", "0.0", "0.0");
- validateNumberForEqual("654.24", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- this.loanTransactionHelper.updateLoan(loanID,
- updateLoanJson(clientID, loanProductID, copyChargesForUpdate(loanCharges, null, null), null));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- disbursementDetail = loanSchedule.get(0);
- validateCharge(amountPercentage, loanCharges, "2.0", "200.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "2.0", "10.1", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "2.0", "210.1", "0.0", "0.0");
- validateCharge(flatDisbursement, loanCharges, "150.0", "150.0", "0.0", "0.0");
- validateNumberForEqual("570.2", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- this.loanTransactionHelper.updateLoan(loanID,
- updateLoanJson(clientID, loanProductID, copyChargesForUpdate(loanCharges, flatDisbursement, "1"), null));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- disbursementDetail = loanSchedule.get(0);
- validateCharge(amountPercentage, loanCharges, "1.0", "100.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "1.0", "5.05", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "1.0", "105.05", "0.0", "0.0");
- validateNumberForEqual("210.1", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- charges.clear();
- addCharges(charges, flatDisbursement, "100", null);
- this.loanTransactionHelper.updateLoan(loanID, updateLoanJson(clientID, loanProductID, charges, null));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- disbursementDetail = loanSchedule.get(0);
- validateCharge(flatDisbursement, loanCharges, "100.0", "100.0", "0.0", "0.0");
- validateNumberForEqual("100.0", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- this.loanTransactionHelper.deleteChargesForLoan(loanID, (Integer) getloanCharge(flatDisbursement, loanCharges).get("id"));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- disbursementDetail = loanSchedule.get(0);
- Assert.assertEquals(0, loanCharges.size());
- validateNumberForEqual("0.0", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- }
-
- @Test
- public void testLoanCharges_DISBURSEMENT_FEE_WITH_AMOUNT_CHANGE() {
- 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(false, NONE);
-
- List<HashMap> charges = new ArrayList<>();
- Integer amountPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanDisbursementJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1"));
- addCharges(charges, amountPercentage, "1", null);
- Integer amountPlusInterestPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanDisbursementJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT_AND_INTEREST, "1"));
- addCharges(charges, amountPlusInterestPercentage, "1", null);
- Integer interestPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanDisbursementJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_INTEREST, "1"));
- addCharges(charges, interestPercentage, "1", null);
-
- final Integer loanID = applyForLoanApplication(clientID, loanProductID, charges, null, "12,000.00");
- Assert.assertNotNull(loanID);
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- ArrayList<HashMap> loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- HashMap disbursementDetail = loanSchedule.get(0);
-
- List<HashMap> loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
-
- validateCharge(amountPercentage, loanCharges, "1.0", "120.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "1.0", "6.06", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "1.0", "126.06", "0.0", "0.0");
- validateNumberForEqual("252.12", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------");
- loanStatusHashMap = this.loanTransactionHelper.approveLoan("20 September 2011", loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- // DISBURSE
- loanStatusHashMap = this.loanTransactionHelper.disburseLoan("20 September 2011", loanID, "10000");
- System.out.println("DISBURSE " + loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- disbursementDetail = loanSchedule.get(0);
-
- validateCharge(amountPercentage, loanCharges, "1.0", "0.0", "100.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "1.0", "0.0", "5.05", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "1.0", "0.0", "105.05", "0.0");
- validateNumberForEqual("210.1", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- }
-
- @Test
- public void testLoanCharges_SPECIFIED_DUE_DATE_FEE() {
- 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(false, NONE);
-
- List<HashMap> charges = new ArrayList<>();
- Integer flat = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, "100", false));
- Integer flatAccTransfer = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanSpecifiedDueDateWithAccountTransferJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, "100", false));
-
- Integer amountPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1", false));
- addCharges(charges, amountPercentage, "1", "29 September 2011");
- Integer amountPlusInterestPercentage = ChargesHelper
- .createCharges(requestSpec, responseSpec, ChargesHelper.getLoanSpecifiedDueDateJSON(
- ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT_AND_INTEREST, "1", false));
- addCharges(charges, amountPlusInterestPercentage, "1", "29 September 2011");
- Integer interestPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_INTEREST, "1", false));
- addCharges(charges, interestPercentage, "1", "29 September 2011");
-
- final Integer loanID = applyForLoanApplication(clientID, loanProductID, charges, null, "12,000.00");
- Assert.assertNotNull(loanID);
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- ArrayList<HashMap> loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- HashMap firstInstallment = loanSchedule.get(1);
-
- List<HashMap> loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
-
- validateCharge(amountPercentage, loanCharges, "1.0", "120.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "1.0", "6.06", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "1.0", "126.06", "0.0", "0.0");
-
- validateNumberForEqual("252.12", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- this.loanTransactionHelper.addChargesForLoan(loanID,
- LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(flat), "29 September 2011", "100"));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
-
- validateCharge(flat, loanCharges, "100.0", "100.0", "0.0", "0.0");
- validateNumberForEqual("352.12", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(amountPercentage, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(interestPercentage, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(amountPlusInterestPercentage, loanCharges)
- .get("id"), LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(flat, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("150"));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- validateCharge(amountPercentage, loanCharges, "2.0", "240.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "2.0", "12.12", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "2.0", "252.12", "0.0", "0.0");
- validateCharge(flat, loanCharges, "150.0", "150.0", "0.0", "0.0");
- validateNumberForEqual("654.24", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- final Integer savingsId = SavingsAccountHelper.openSavingsAccount(this.requestSpec, this.responseSpec, clientID,
- MINIMUM_OPENING_BALANCE);
- this.loanTransactionHelper.updateLoan(loanID,
- updateLoanJson(clientID, loanProductID, copyChargesForUpdate(loanCharges, null, null), String.valueOf(savingsId)));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- validateCharge(amountPercentage, loanCharges, "2.0", "200.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "2.0", "10.1", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "2.0", "210.1", "0.0", "0.0");
- validateCharge(flat, loanCharges, "150.0", "150.0", "0.0", "0.0");
- validateNumberForEqual("570.2", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- this.loanTransactionHelper.updateLoan(loanID,
- updateLoanJson(clientID, loanProductID, copyChargesForUpdate(loanCharges, flat, "1"), null));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- validateCharge(amountPercentage, loanCharges, "1.0", "100.0", "0.0", "0.0");
- validateCharge(interestPercentage, loanCharges, "1.0", "5.05", "0.0", "0.0");
- validateCharge(amountPlusInterestPercentage, loanCharges, "1.0", "105.05", "0.0", "0.0");
- validateNumberForEqual("210.1", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- charges.clear();
- addCharges(charges, flat, "100", "29 September 2011");
- this.loanTransactionHelper.updateLoan(loanID, updateLoanJson(clientID, loanProductID, charges, null));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- validateCharge(flat, loanCharges, "100.0", "100.0", "0.0", "0.0");
- validateNumberForEqual("100.0", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- this.loanTransactionHelper.deleteChargesForLoan(loanID, (Integer) getloanCharge(flat, loanCharges).get("id"));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- Assert.assertEquals(0, loanCharges.size());
- validateNumberForEqual("0", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------");
- loanStatusHashMap = this.loanTransactionHelper.approveLoan("20 September 2011", loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- this.loanTransactionHelper.addChargesForLoan(loanID,
- LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(flatAccTransfer), "29 September 2011", "100"));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- validateCharge(flatAccTransfer, loanCharges, "100.0", "100.0", "0.0", "0.0");
- validateNumberForEqual("100.0", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- // DISBURSE
- loanStatusHashMap = this.loanTransactionHelper.disburseLoan("20 September 2011", loanID);
- System.out.println("DISBURSE " + loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- this.loanTransactionHelper.addChargesForLoan(loanID,
- LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(String.valueOf(amountPercentage), "29 September 2011", "1"));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- validateCharge(amountPercentage, loanCharges, "1.0", "100.0", "0.0", "0.0");
- validateCharge(flatAccTransfer, loanCharges, "100.0", "100.0", "0.0", "0.0");
- validateNumberForEqual("200.0", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- this.loanTransactionHelper.waiveChargesForLoan(loanID, (Integer) getloanCharge(amountPercentage, loanCharges).get("id"), "");
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- validateCharge(amountPercentage, loanCharges, "1.0", "0.0", "0.0", "100.0");
- validateCharge(flatAccTransfer, loanCharges, "100.0", "100.0", "0.0", "0.0");
- validateNumberForEqual("200.0", String.valueOf(firstInstallment.get("feeChargesDue")));
- validateNumberForEqual("100.0", String.valueOf(firstInstallment.get("feeChargesOutstanding")));
- validateNumberForEqual("100.0", String.valueOf(firstInstallment.get("feeChargesWaived")));
-
- this.loanTransactionHelper.payChargesForLoan(loanID, (Integer) getloanCharge(flatAccTransfer, loanCharges).get("id"),
- LoanTransactionHelper.getPayChargeJSON(SavingsAccountHelper.TRANSACTION_DATE, null));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- firstInstallment = loanSchedule.get(1);
- validateCharge(amountPercentage, loanCharges, "1.0", "0.0", "0.0", "100.0");
- validateCharge(flatAccTransfer, loanCharges, "100.0", "0.0", "100.0", "0.0");
- validateNumberForEqual("200.0", String.valueOf(firstInstallment.get("feeChargesDue")));
- validateNumberForEqual("100.0", String.valueOf(firstInstallment.get("feeChargesWaived")));
- validateNumberForEqual("100.0", String.valueOf(firstInstallment.get("feeChargesPaid")));
- validateNumberForEqual("0.0", String.valueOf(firstInstallment.get("feeChargesOutstanding")));
- }
-
- @Test
- public void testLoanCharges_INSTALMENT_FEE() {
- 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(false, NONE);
-
- List<HashMap> charges = new ArrayList<>();
- Integer flat = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanInstallmentJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, "50", false));
- Integer flatAccTransfer = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanInstallmentWithAccountTransferJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, "50", false));
-
- Integer amountPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanInstallmentJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT, "1", false));
- addCharges(charges, amountPercentage, "1", "29 September 2011");
- Integer amountPlusInterestPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanInstallmentJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_AMOUNT_AND_INTEREST, "1", false));
- addCharges(charges, amountPlusInterestPercentage, "1", "29 September 2011");
- Integer interestPercentage = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanInstallmentJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_PERCENTAGE_INTEREST, "1", false));
- addCharges(charges, interestPercentage, "1", "29 September 2011");
-
- final Integer loanID = applyForLoanApplication(clientID, loanProductID, charges, null, "12,000.00");
- Assert.assertNotNull(loanID);
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- ArrayList<HashMap> loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- List<HashMap> loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
-
- Float totalPerOfAmout = 0F;
- Float totalPerOfAmoutPlusInt = 0F;
- Float totalPerOfint = 0F;
- for (HashMap installment : loanSchedule) {
- Float principalDue = (Float) installment.get("principalDue");
- Float interestDue = (Float) installment.get("interestDue");
- Float principalFee = principalDue / 100;
- Float interestFee = interestDue / 100;
- Float totalInstallmentFee = (principalFee * 2) + (interestFee * 2);
- validateNumberForEqualExcludePrecission(String.valueOf(totalInstallmentFee), String.valueOf(installment.get("feeChargesDue")));
- totalPerOfAmout = totalPerOfAmout + principalFee;
- totalPerOfAmoutPlusInt = totalPerOfAmoutPlusInt + principalFee + interestFee;
- totalPerOfint = totalPerOfint + interestFee;
- }
-
- validateChargeExcludePrecission(amountPercentage, loanCharges, "1.0", String.valueOf(totalPerOfAmout), "0.0", "0.0");
- validateChargeExcludePrecission(interestPercentage, loanCharges, "1.0", String.valueOf(totalPerOfint), "0.0", "0.0");
- validateChargeExcludePrecission(amountPlusInterestPercentage, loanCharges, "1.0", String.valueOf(totalPerOfAmoutPlusInt), "0.0",
- "0.0");
-
- this.loanTransactionHelper.addChargesForLoan(loanID,
- LoanTransactionHelper.getInstallmentChargesForLoanAsJSON(String.valueOf(flat), "50"));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- totalPerOfAmout = 0F;
- totalPerOfAmoutPlusInt = 0F;
- totalPerOfint = 0F;
- for (HashMap installment : loanSchedule) {
- Float principalDue = (Float) installment.get("principalDue");
- Float interestDue = (Float) installment.get("interestDue");
- Float principalFee = principalDue / 100;
- Float interestFee = interestDue / 100;
- Float totalInstallmentFee = (principalFee * 2) + (interestFee * 2) + 50;
- validateNumberForEqualExcludePrecission(String.valueOf(totalInstallmentFee), String.valueOf(installment.get("feeChargesDue")));
- totalPerOfAmout = totalPerOfAmout + principalFee;
- totalPerOfAmoutPlusInt = totalPerOfAmoutPlusInt + principalFee + interestFee;
- totalPerOfint = totalPerOfint + interestFee;
- }
-
- validateChargeExcludePrecission(amountPercentage, loanCharges, "1.0", String.valueOf(totalPerOfAmout), "0.0", "0.0");
- validateChargeExcludePrecission(interestPercentage, loanCharges, "1.0", String.valueOf(totalPerOfint), "0.0", "0.0");
- validateChargeExcludePrecission(amountPlusInterestPercentage, loanCharges, "1.0", String.valueOf(totalPerOfAmoutPlusInt), "0.0",
- "0.0");
- validateChargeExcludePrecission(flat, loanCharges, "50.0", "200", "0.0", "0.0");
-
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(amountPercentage, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(interestPercentage, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(amountPlusInterestPercentage, loanCharges)
- .get("id"), LoanTransactionHelper.getUpdateChargesForLoanAsJSON("2"));
- this.loanTransactionHelper.updateChargesForLoan(loanID, (Integer) getloanCharge(flat, loanCharges).get("id"),
- LoanTransactionHelper.getUpdateChargesForLoanAsJSON("100"));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- totalPerOfAmout = 0F;
- totalPerOfAmoutPlusInt = 0F;
- totalPerOfint = 0F;
- for (HashMap installment : loanSchedule) {
- Float principalDue = (Float) installment.get("principalDue");
- Float interestDue = (Float) installment.get("interestDue");
- Float principalFee = principalDue * 2 / 100;
- Float interestFee = interestDue * 2 / 100;
- Float totalInstallmentFee = (principalFee * 2) + (interestFee * 2) + 100;
- validateNumberForEqualExcludePrecission(String.valueOf(totalInstallmentFee), String.valueOf(installment.get("feeChargesDue")));
- totalPerOfAmout = totalPerOfAmout + principalFee;
- totalPerOfAmoutPlusInt = totalPerOfAmoutPlusInt + principalFee + interestFee;
- totalPerOfint = totalPerOfint + interestFee;
- }
-
- validateChargeExcludePrecission(amountPercentage, loanCharges, "2.0", String.valueOf(totalPerOfAmout), "0.0", "0.0");
- validateChargeExcludePrecission(interestPercentage, loanCharges, "2.0", String.valueOf(totalPerOfint), "0.0", "0.0");
- validateChargeExcludePrecission(amountPlusInterestPercentage, loanCharges, "2.0", String.valueOf(totalPerOfAmoutPlusInt), "0.0",
- "0.0");
- validateChargeExcludePrecission(flat, loanCharges, "100.0", "400", "0.0", "0.0");
-
- final Integer savingsId = SavingsAccountHelper.openSavingsAccount(this.requestSpec, this.responseSpec, clientID,
- MINIMUM_OPENING_BALANCE);
- this.loanTransactionHelper.updateLoan(loanID,
- updateLoanJson(clientID, loanProductID, copyChargesForUpdate(loanCharges, null, null), String.valueOf(savingsId)));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- totalPerOfAmout = 0F;
- totalPerOfAmoutPlusInt = 0F;
- totalPerOfint = 0F;
- for (HashMap installment : loanSchedule) {
- Float principalDue = (Float) installment.get("principalDue");
- Float interestDue = (Float) installment.get("interestDue");
- Float principalFee = principalDue * 2 / 100;
- Float interestFee = interestDue * 2 / 100;
- Float totalInstallmentFee = (principalFee * 2) + (interestFee * 2) + 100;
- validateNumberForEqualExcludePrecission(String.valueOf(totalInstallmentFee), String.valueOf(installment.get("feeChargesDue")));
- totalPerOfAmout = totalPerOfAmout + principalFee;
- totalPerOfAmoutPlusInt = totalPerOfAmoutPlusInt + principalFee + interestFee;
- totalPerOfint = totalPerOfint + interestFee;
- }
-
- validateChargeExcludePrecission(amountPercentage, loanCharges, "2.0", String.valueOf(totalPerOfAmout), "0.0", "0.0");
- validateChargeExcludePrecission(interestPercentage, loanCharges, "2.0", String.valueOf(totalPerOfint), "0.0", "0.0");
- validateChargeExcludePrecission(amountPlusInterestPercentage, loanCharges, "2.0", String.valueOf(totalPerOfAmoutPlusInt), "0.0",
- "0.0");
- validateChargeExcludePrecission(flat, loanCharges, "100.0", "400", "0.0", "0.0");
-
- this.loanTransactionHelper.updateLoan(loanID,
- updateLoanJson(clientID, loanProductID, copyChargesForUpdate(loanCharges, flat, "1"), null));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- totalPerOfAmout = 0F;
- totalPerOfAmoutPlusInt = 0F;
- totalPerOfint = 0F;
- for (HashMap installment : loanSchedule) {
- Float principalDue = (Float) installment.get("principalDue");
- Float interestDue = (Float) installment.get("interestDue");
- Float principalFee = principalDue / 100;
- Float interestFee = interestDue / 100;
- Float totalInstallmentFee = (principalFee * 2) + (interestFee * 2);
- validateNumberForEqualExcludePrecission(String.valueOf(totalInstallmentFee), String.valueOf(installment.get("feeChargesDue")));
- totalPerOfAmout = totalPerOfAmout + principalFee;
- totalPerOfAmoutPlusInt = totalPerOfAmoutPlusInt + principalFee + interestFee;
- totalPerOfint = totalPerOfint + interestFee;
- }
-
- validateChargeExcludePrecission(amountPercentage, loanCharges, "1.0", String.valueOf(totalPerOfAmout), "0.0", "0.0");
- validateChargeExcludePrecission(interestPercentage, loanCharges, "1.0", String.valueOf(totalPerOfint), "0.0", "0.0");
- validateChargeExcludePrecission(amountPlusInterestPercentage, loanCharges, "1.0", String.valueOf(totalPerOfAmoutPlusInt), "0.0",
- "0.0");
-
- charges.clear();
- addCharges(charges, flat, "50", "29 September 2011");
- this.loanTransactionHelper.updateLoan(loanID, updateLoanJson(clientID, loanProductID, charges, null));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- for (HashMap installment : loanSchedule) {
- validateNumberForEqualExcludePrecission("50", String.valueOf(installment.get("feeChargesDue")));
- }
- validateChargeExcludePrecission(flat, loanCharges, "50.0", "200", "0.0", "0.0");
-
- this.loanTransactionHelper.deleteChargesForLoan(loanID, (Integer) getloanCharge(flat, loanCharges).get("id"));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- for (HashMap installment : loanSchedule) {
- validateNumberForEqualExcludePrecission("0", String.valueOf(installment.get("feeChargesDue")));
- }
-
- System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------");
- loanStatusHashMap = this.loanTransactionHelper.approveLoan("20 September 2011", loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- this.loanTransactionHelper.addChargesForLoan(loanID,
- LoanTransactionHelper.getInstallmentChargesForLoanAsJSON(String.valueOf(flatAccTransfer), "100"));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- for (HashMap installment : loanSchedule) {
- validateNumberForEqualExcludePrecission("100", String.valueOf(installment.get("feeChargesDue")));
- }
- validateChargeExcludePrecission(flatAccTransfer, loanCharges, "100.0", "400", "0.0", "0.0");
-
- // DISBURSE
- loanStatusHashMap = this.loanTransactionHelper.disburseLoan("20 September 2011", loanID);
- System.out.println("DISBURSE " + loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- this.loanTransactionHelper.addChargesForLoan(loanID,
- LoanTransactionHelper.getInstallmentChargesForLoanAsJSON(String.valueOf(flat), "50"));
-
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- for (HashMap installment : loanSchedule) {
- validateNumberForEqualExcludePrecission("150", String.valueOf(installment.get("feeChargesDue")));
- }
- validateChargeExcludePrecission(flatAccTransfer, loanCharges, "100.0", "400", "0.0", "0.0");
- validateChargeExcludePrecission(flat, loanCharges, "50.0", "200", "0.0", "0.0");
-
- Integer waivePeriodnum = 1;
- this.loanTransactionHelper.waiveChargesForLoan(loanID, (Integer) getloanCharge(flat, loanCharges).get("id"),
- LoanTransactionHelper.getWaiveChargeJSON(String.valueOf(waivePeriodnum)));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- for (HashMap installment : loanSchedule) {
- validateNumberForEqualExcludePrecission("150", String.valueOf(installment.get("feeChargesDue")));
- if (waivePeriodnum == installment.get("period")) {
- validateNumberForEqualExcludePrecission("100.0", String.valueOf(installment.get("feeChargesOutstanding")));
- validateNumberForEqualExcludePrecission("50.0", String.valueOf(installment.get("feeChargesWaived")));
- } else {
- validateNumberForEqualExcludePrecission("150.0", String.valueOf(installment.get("feeChargesOutstanding")));
- validateNumberForEqualExcludePrecission("0.0", String.valueOf(installment.get("feeChargesWaived")));
-
- }
- }
- validateChargeExcludePrecission(flatAccTransfer, loanCharges, "100.0", "400", "0.0", "0.0");
- validateChargeExcludePrecission(flat, loanCharges, "50.0", "150", "0.0", "50.0");
-
- Integer payPeriodnum = 2;
- this.loanTransactionHelper.payChargesForLoan(loanID, (Integer) getloanCharge(flatAccTransfer, loanCharges).get("id"),
- LoanTransactionHelper.getPayChargeJSON(SavingsAccountHelper.TRANSACTION_DATE, String.valueOf(payPeriodnum)));
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- loanSchedule.remove(0);
- for (HashMap installment : loanSchedule) {
- validateNumberForEqualExcludePrecission("150", String.valueOf(installment.get("feeChargesDue")));
- if (payPeriodnum == installment.get("period")) {
- validateNumberForEqualExcludePrecission("50.0", String.valueOf(installment.get("feeChargesOutstanding")));
- validateNumberForEqualExcludePrecission("100.0", String.valueOf(installment.get("feeChargesPaid")));
- } else if (waivePeriodnum == installment.get("period")) {
- validateNumberForEqualExcludePrecission("100.0", String.valueOf(installment.get("feeChargesOutstanding")));
- validateNumberForEqualExcludePrecission("50.0", String.valueOf(installment.get("feeChargesWaived")));
- } else {
- validateNumberForEqualExcludePrecission("150.0", String.valueOf(installment.get("feeChargesOutstanding")));
- validateNumberForEqualExcludePrecission("0.0", String.valueOf(installment.get("feeChargesPaid")));
-
- }
- }
- validateChargeExcludePrecission(flatAccTransfer, loanCharges, "100.0", "300", "100.0", "0.0");
- validateChargeExcludePrecission(flat, loanCharges, "50.0", "150", "0.0", "50.0");
-
- }
-
- @Test
- public void testLoanCharges_DISBURSEMENT_TO_SAVINGS() {
- this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
- SavingsAccountHelper savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec);
-
- final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec);
- ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID);
- final Integer loanProductID = createLoanProduct(false, NONE);
-
- final Integer savingsId = SavingsAccountHelper.openSavingsAccount(this.requestSpec, this.responseSpec, clientID,
- MINIMUM_OPENING_BALANCE);
-
- final Integer loanID = applyForLoanApplication(clientID, loanProductID, null, savingsId.toString(), "12,000.00");
- Assert.assertNotNull(loanID);
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------");
- loanStatusHashMap = this.loanTransactionHelper.approveLoan("20 September 2011", loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- HashMap summary = savingsAccountHelper.getSavingsSummary(savingsId);
- Float balance = new Float(MINIMUM_OPENING_BALANCE);
- assertEquals("Verifying opening Balance", balance, summary.get("accountBalance"));
-
- // DISBURSE
- loanStatusHashMap = this.loanTransactionHelper.disburseLoanToSavings(SavingsAccountHelper.TRANSACTION_DATE, loanID);
- System.out.println("DISBURSE " + loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- summary = savingsAccountHelper.getSavingsSummary(savingsId);
- balance = new Float(MINIMUM_OPENING_BALANCE) + new Float("12000");
- assertEquals("Verifying opening Balance", balance, summary.get("accountBalance"));
-
- loanStatusHashMap = this.loanTransactionHelper.undoDisbursal(loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- summary = savingsAccountHelper.getSavingsSummary(savingsId);
- balance = new Float(MINIMUM_OPENING_BALANCE);
- assertEquals("Verifying opening Balance", balance, summary.get("accountBalance"));
-
- }
-
- @Test
- public void testLoanCharges_DISBURSEMENT_WITH_TRANCHES() {
- 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(true, NONE);
-
- List<HashMap> tranches = new ArrayList<>();
- tranches.add(createTrancheDetail("1 March 2014", "25000"));
- tranches.add(createTrancheDetail("23 April 2014", "20000"));
-
- final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, null, null, "45,000.00", tranches);
- Assert.assertNotNull(loanID);
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------");
- loanStatusHashMap = this.loanTransactionHelper.approveLoan("1 March 2014", loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- // DISBURSE first Tranche
- loanStatusHashMap = this.loanTransactionHelper.disburseLoan("1 March 2014", loanID);
- System.out.println("DISBURSE " + loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- // DISBURSE Second Tranche
- loanStatusHashMap = this.loanTransactionHelper.disburseLoan("23 April 2014", loanID);
- System.out.println("DISBURSE " + loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- loanStatusHashMap = this.loanTransactionHelper.undoDisbursal(loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- }
-
- @Test
- public void testLoanCharges_DISBURSEMENT_TO_SAVINGS_WITH_TRANCHES() {
- this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
- SavingsAccountHelper savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec);
-
- final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec);
- ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID);
- final Integer loanProductID = createLoanProduct(true, NONE);
-
- final Integer savingsId = SavingsAccountHelper.openSavingsAccount(this.requestSpec, this.responseSpec, clientID,
- MINIMUM_OPENING_BALANCE);
-
- List<HashMap> tranches = new ArrayList<>();
- tranches.add(createTrancheDetail("1 March 2014", "25000"));
- tranches.add(createTrancheDetail("23 April 2014", "20000"));
-
- final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, null, savingsId.toString(), "45,000.00",
- tranches);
- Assert.assertNotNull(loanID);
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------");
- loanStatusHashMap = this.loanTransactionHelper.approveLoan("1 March 2014", loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- HashMap summary = savingsAccountHelper.getSavingsSummary(savingsId);
- Float balance = new Float(MINIMUM_OPENING_BALANCE);
- assertEquals("Verifying opening Balance", balance, summary.get("accountBalance"));
-
- // DISBURSE first Tranche
- loanStatusHashMap = this.loanTransactionHelper.disburseLoanToSavings("1 March 2014", loanID);
- System.out.println("DISBURSE " + loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- summary = savingsAccountHelper.getSavingsSummary(savingsId);
- balance = new Float(MINIMUM_OPENING_BALANCE) + new Float("25000");
- assertEquals("Verifying opening Balance", balance, summary.get("accountBalance"));
-
- // DISBURSE Second Tranche
- loanStatusHashMap = this.loanTransactionHelper.disburseLoanToSavings("23 April 2014", loanID);
- System.out.println("DISBURSE " + loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- summary = savingsAccountHelper.getSavingsSummary(savingsId);
- balance = new Float(MINIMUM_OPENING_BALANCE) + new Float("25000") + new Float("20000");
- assertEquals("Verifying opening Balance", balance, summary.get("accountBalance"));
-
- loanStatusHashMap = this.loanTransactionHelper.undoDisbursal(loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- summary = savingsAccountHelper.getSavingsSummary(savingsId);
- balance = new Float(MINIMUM_OPENING_BALANCE);
- assertEquals("Verifying opening Balance", balance, summary.get("accountBalance"));
-
- }
-
- private void validateCharge(Integer amountPercentage, final List<HashMap> loanCharges, final String amount, final String outstanding,
- String amountPaid, String amountWaived) {
- HashMap chargeDetail = getloanCharge(amountPercentage, loanCharges);
- Assert.assertTrue(new Float(amount).compareTo(new Float(String.valueOf(chargeDetail.get("amountOrPercentage")))) == 0);
- Assert.assertTrue(new Float(outstanding).compareTo(new Float(String.valueOf(chargeDetail.get("amountOutstanding")))) == 0);
- Assert.assertTrue(new Float(amountPaid).compareTo(new Float(String.valueOf(chargeDetail.get("amountPaid")))) == 0);
- Assert.assertTrue(new Float(amountWaived).compareTo(new Float(String.valueOf(chargeDetail.get("amountWaived")))) == 0);
- }
-
- private void validateChargeExcludePrecission(Integer amountPercentage, final List<HashMap> loanCharges, final String amount,
- final String outstanding, String amountPaid, String amountWaived) {
- DecimalFormat twoDForm = new DecimalFormat("#");
- HashMap chargeDetail = getloanCharge(amountPercentage, loanCharges);
- Assert.assertTrue(new Float(twoDForm.format(new Float(amount))).compareTo(new Float(twoDForm.format(new Float(String
- .valueOf(chargeDetail.get("amountOrPercentage")))))) == 0);
- Assert.assertTrue(new Float(twoDForm.format(new Float(outstanding))).compareTo(new Float(twoDForm.format(new Float(String
- .valueOf(chargeDetail.get("amountOutstanding")))))) == 0);
- Assert.assertTrue(new Float(twoDForm.format(new Float(amountPaid))).compareTo(new Float(twoDForm.format(new Float(String
- .valueOf(chargeDetail.get("amountPaid")))))) == 0);
- Assert.assertTrue(new Float(twoDForm.format(new Float(amountWaived))).compareTo(new Float(twoDForm.format(new Float(String
- .valueOf(chargeDetail.get("amountWaived")))))) == 0);
- }
-
- public void validateNumberForEqual(String val, String val2) {
- Assert.assertTrue(new Float(val).compareTo(new Float(val2)) == 0);
- }
-
- public void validateNumberForEqualWithMsg(String msg, String val, String val2) {
- Assert.assertTrue(msg + "expected " + val + " but was " + val2, 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);
- }
-
- private Integer createLoanProduct(final boolean multiDisburseLoan, final String accountingRule, final Account... accounts) {
- System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
- LoanProductTestBuilder builder = new LoanProductTestBuilder() //
- .withPrincipal("12,000.00") //
- .withNumberOfRepayments("4") //
- .withRepaymentAfterEvery("1") //
- .withRepaymentTypeAsMonth() //
- .withinterestRatePerPeriod("1") //
- .withInterestRateFrequencyTypeAsMonths() //
- .withAmortizationTypeAsEqualInstallments() //
- .withInterestTypeAsDecliningBalance() //
- .withTranches(multiDisburseLoan) //
- .withAccounting(accountingRule, accounts);
- if (multiDisburseLoan) {
- builder = builder.withInterestCalculationPeriodTypeAsRepaymentPeriod(true);
- }
- final String loanProductJSON = builder.build(null);
- return this.loanTransactionHelper.getLoanProductId(loanProductJSON);
- }
-
- private Integer createLoanProduct(final String inMultiplesOf, final String digitsAfterDecimal, final String repaymentStrategy) {
- System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
- final String loanProductJSON = new LoanProductTestBuilder() //
- .withPrincipal("10000000.00") //
- .withNumberOfRepayments("24") //
- .withRepaymentAfterEvery("1") //
- .withRepaymentTypeAsMonth() //
- .withinterestRatePerPeriod("2") //
- .withInterestRateFrequencyTypeAsMonths() //
- .withRepaymentStrategy(repaymentStrategy) //
- .withAmortizationTypeAsEqualPrincipalPayment() //
- .withInterestTypeAsDecliningBalance() //
- .currencyDetails(digitsAfterDecimal, inMultiplesOf).build(null);
- return this.loanTransactionHelper.getLoanProductId(loanProductJSON);
- }
-
- private Integer createLoanProduct(final String inMultiplesOf, final String digitsAfterDecimal, final String repaymentStrategy,
- final String accountingRule, final Account... accounts) {
- System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------");
- final String loanProductJSON = new LoanProductTestBuilder() //
- .withPrincipal("10000000.00") //
- .withNumberOfRepayments("24") //
- .withRepaymentAfterEvery("1") //
- .withRepaymentTypeAsMonth() //
- .withinterestRatePerPeriod("2") //
- .withInterestRateFrequencyTypeAsMonths() //
- .withRepaymentStrategy(repaymentStrategy) //
- .withAmortizationTypeAsEqualPrincipalPayment() //
- .withInterestTypeAsDecliningBalance() //
- .currencyDetails(digitsAfterDecimal, inMultiplesOf).withAccounting(accountingRule, accounts).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--------------------------------");
- final String loanApplicationJSON = new LoanApplicationTestBuilder() //
- .withPrincipal(principal) //
- .withLoanTermFrequency("4") //
- .withLoanTermFrequencyAsMonths() //
- .withNumberOfRepayments("4") //
- .withRepaymentEveryAfter("1") //
- .withRepaymentFrequencyTypeAsMonths() //
- .withInterestRatePerPeriod("2") //
- .withAmortizationTypeAsEqualInstallments() //
- .withInterestTypeAsDecliningBalance() //
- .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() //
- .withExpectedDisbursementDate("20 September 2011") //
- .withSubmittedOnDate("20 September 2011") //
- .withCharges(charges).build(clientID.toString(), loanProductID.toString(), savingsId);
- return this.loanTransactionHelper.getLoanId(loanApplicationJSON);
- }
-
- private Integer applyForLoanApplicationWithTranches(final Integer clientID, final Integer loanProductID, List<HashMap> charges,
- final String savingsId, String principal, List<HashMap> tranches) {
- System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
- final String loanApplicationJSON = new LoanApplicationTestBuilder() //
- .withPrincipal(principal) //
- .withLoanTermFrequency("4") //
- .withLoanTermFrequencyAsMonths() //
- .withNumberOfRepayments("4") //
- .withRepaymentEveryAfter("1") //
- .withRepaymentFrequencyTypeAsMonths() //
- .withInterestRatePerPeriod("2") //
- .withAmortizationTypeAsEqualInstallments() //
- .withInterestTypeAsDecliningBalance() //
- .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() //
- .withExpectedDisbursementDate("1 March 2014") //
- .withTranches(tranches) //
- .withSubmittedOnDate("1 March 2014") //
-
- .withCharges(charges).build(clientID.toString(), loanProductID.toString(), savingsId);
- return this.loanTransactionHelper.getLoanId(loanApplicationJSON);
- }
-
- private String updateLoanJson(final Integer clientID, final Integer loanProductID, List<HashMap> charges, String savingsId) {
- System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
- final String loanApplicationJSON = new LoanApplicationTestBuilder() //
- .withPrincipal("10,000.00") //
- .withLoanTermFrequency("4") //
- .withLoanTermFrequencyAsMonths() //
- .withNumberOfRepayments("4") //
- .withRepaymentEveryAfter("1") //
- .withRepaymentFrequencyTypeAsMonths() //
- .withInterestRatePerPeriod("2") //
- .withAmortizationTypeAsEqualInstallments() //
- .withInterestTypeAsDecliningBalance() //
- .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() //
- .withExpectedDisbursementDate("20 September 2011") //
- .withSubmittedOnDate("20 September 2011") //
- .withCharges(charges).build(clientID.toString(), loanProductID.toString(), savingsId);
- return loanApplicationJSON;
- }
-
- private Integer applyForLoanApplicationWithPaymentStrategy(final Integer clientID, final Integer loanProductID, List<HashMap> charges,
- final String savingsId, String principal, final String repaymentStrategy) {
- System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
- final String loanApplicationJSON = new LoanApplicationTestBuilder() //
- .withPrincipal(principal) //
- .withLoanTermFrequency("4") //
- .withLoanTermFrequencyAsMonths() //
- .withNumberOfRepayments("4") //
- .withRepaymentEveryAfter("1") //
- .withRepaymentFrequencyTypeAsMonths() //
- .withInterestRatePerPeriod("2") //
- .withAmortizationTypeAsEqualInstallments() //
- .withInterestTypeAsDecliningBalance() //
- .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() //
- .withExpectedDisbursementDate("20 September 2011") //
- .withSubmittedOnDate("20 September 2011") //
- .withwithRepaymentStrategy(repaymentStrategy) //
- .withCharges(charges).build(clientID.toString(), loanProductID.toString(), savingsId);
- return this.loanTransactionHelper.getLoanId(loanApplicationJSON);
- }
-
- private Integer applyForLoanApplicationWithPaymentStrategyAndPastMonth(final Integer clientID, final Integer loanProductID,
- List<HashMap> charges, final String savingsId, String principal, final String repaymentStrategy, final int month) {
- System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------");
-
- Calendar fourMonthsfromNowCalendar = Calendar.getInstance(Utils.getTimeZoneOfTenant());
- fourMonthsfromNowCalendar.add(Calendar.MONTH, month);
- DateFormat dateFormat = new SimpleDateFormat("dd MMMMMM yyyy");
- dateFormat.setTimeZone(Utils.getTimeZoneOfTenant());
- String fourMonthsfromNow = dateFormat.format(fourMonthsfromNowCalendar.getTime());
- final String loanApplicationJSON = new LoanApplicationTestBuilder() //
- .withPrincipal(principal) //
- .withLoanTermFrequency("6") //
- .withLoanTermFrequencyAsMonths() //
- .withNumberOfRepayments("6") //
- .withRepaymentEveryAfter("1") //
- .withRepaymentFrequencyTypeAsMonths() //
- .withInterestRatePerPeriod("2") //
- .withAmortizationTypeAsEqualInstallments() //
- .withInterestTypeAsFlatBalance() //
- .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() //
- .withExpectedDisbursementDate(fourMonthsfromNow) //
- .withSubmittedOnDate(fourMonthsfromNow) //
- .withwithRepaymentStrategy(repaymentStrategy) //
- .withCharges(charges).build(clientID.toString(), loanProductID.toString(), savingsId);
- return this.loanTransactionHelper.getLoanId(loanApplicationJSON);
- }
-
- private void verifyLoanRepaymentSchedule(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<>(Arrays.asList(2011, 10, 20)), loanSchedule.get(1)
- .get("dueDate"));
- assertEquals("Checking for Principal Due for 1st Month", new Float("2911.49"), loanSchedule.get(1).get("principalOriginalDue"));
- assertEquals("Checking for Interest Due for 1st Month", new Float("240.00"), loanSchedule.get(1).get("interestOriginalDue"));
-
- assertEquals("Checking for Due Date for 2nd Month", new ArrayList<>(Arrays.asList(2011, 11, 20)), loanSchedule.get(2)
- .get("dueDate"));
- assertEquals("Checking for Principal Due for 2nd Month", new Float("2969.72"), loanSchedule.get(2).get("principalDue"));
- assertEquals("Checking for Interest Due for 2nd Month", new Float("181.77"), loanSchedule.get(2).get("interestOriginalDue"));
-
- assertEquals("Checking for Due Date for 3rd Month", new ArrayList<>(Arrays.asList(2011, 12, 20)), loanSchedule.get(3)
- .get("dueDate"));
- assertEquals("Checking for Principal Due for 3rd Month", new Float("3029.11"), loanSchedule.get(3).get("principalDue"));
- assertEquals("Checking for Interest Due for 3rd Month", new Float("122.38"), loanSchedule.get(3).get("interestOriginalDue"));
-
- assertEquals("Checking for Due Date for 4th Month", new ArrayList<>(Arrays.asList(2012, 1, 20)), loanSchedule.get(4).get("dueDate"));
- assertEquals("Checking for Principal Due for 4th Month", new Float("3089.68"), loanSchedule.get(4).get("principalDue"));
- 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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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<>(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));
- }
-
- private HashMap charges(Integer chargeId, String amount, String duedate) {
- HashMap charge = new HashMap(2);
- charge.put("chargeId", chargeId.toString());
- charge.put("amount", amount);
- if (duedate != null) {
- charge.put("dueDate", duedate);
- }
- return charge;
- }
-
- private HashMap getloanCharge(Integer chargeId, List<HashMap> charges) {
- HashMap charge = null;
- for (HashMap loancharge : charges) {
- if (loancharge.get("chargeId").equals(chargeId)) {
- charge = loancharge;
- }
- }
- return charge;
- }
-
- private List<HashMap> copyChargesForUpdate(List<HashMap> charges, Integer deleteWithChargeId, String amount) {
- List<HashMap> loanCharges = new ArrayList<>();
- for (HashMap charge : charges) {
- if (!charge.get("chargeId").equals(deleteWithChargeId)) {
- loanCharges.add(copyForUpdate(charge, amount));
- }
- }
- return loanCharges;
- }
-
- private HashMap copyForUpdate(HashMap charge, String amount) {
- HashMap map = new HashMap();
- map.put("id", charge.get("id"));
- if (amount == null) {
- map.put("amount", charge.get("amountOrPercentage"));
- } else {
- map.put("amount", amount);
- }
- if (charge.get("dueDate") != null) {
- map.put("dueDate", charge.get("dueDate"));
- }
- map.put("chargeId", charge.get("chargeId"));
- return map;
- }
-
- private HashMap createTrancheDetail(final String date, final String amount) {
- HashMap detail = new HashMap();
- detail.put("expectedDisbursementDate", date);
- detail.put("principal", amount);
-
- return detail;
- }
-
- /***
- * Test case for checking CashBasedAccounting functionality adding charges
- * with calculation type flat
- */
- @Test
- public void loanWithFlatCahargesAndCashBasedAccountingEnabled() {
- this.journalEntryHelper = new JournalEntryHelper(this.requestSpec, this.responseSpec);
-
- final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec);
- ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID);
-
- // Add charges with payment mode regular
- List<HashMap> charges = new ArrayList<>();
- Integer flatDisbursement = ChargesHelper.createCharges(requestSpec, responseSpec, ChargesHelper.getLoanDisbursementJSON());
- addCharges(charges, flatDisbursement, "100", null);
- Integer flatSpecifiedDueDate = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanSpecifiedDueDateJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, "100", false));
- addCharges(charges, flatSpecifiedDueDate, "100", "29 September 2011");
- Integer flatInstallmentFee = ChargesHelper.createCharges(requestSpec, responseSpec,
- ChargesHelper.getLoanInstallmentJSON(ChargesHelper.CHARGE_CALCULATION_TYPE_FLAT, "50", false));
- addCharges(charges, flatInstallmentFee, "50", null);
-
- final Account assetAccount = this.accountHelper.createAssetAccount();
- final Account incomeAccount = this.accountHelper.createIncomeAccount();
- final Account expenseAccount = this.accountHelper.createExpenseAccount();
- final Account overpaymentAccount = this.accountHelper.createLiabilityAccount();
-
- final Integer loanProductID = createLoanProduct(false, CASH_BASED, assetAccount, incomeAccount, expenseAccount, overpaymentAccount);
- final Integer loanID = applyForLoanApplication(clientID, loanProductID, charges, null, "12,000.00");
- Assert.assertNotNull(loanID);
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- ArrayList<HashMap> loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
- verifyLoanRepaymentSchedule(loanSchedule);
-
- List<HashMap> loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- validateCharge(flatDisbursement, loanCharges, "100", "100.00", "0.0", "0.0");
- validateCharge(flatSpecifiedDueDate, loanCharges, "100", "100.00", "0.0", "0.0");
- validateCharge(flatInstallmentFee, loanCharges, "50", "200.00", "0.0", "0.0");
-
- // check for disbursement fee
- HashMap disbursementDetail = loanSchedule.get(0);
- validateNumberForEqual("100.00", String.valueOf(disbursementDetail.get("feeChargesDue")));
-
- // check for charge at specified date and installment fee
- HashMap firstInstallment = loanSchedule.get(1);
- validateNumberForEqual("150.00", String.valueOf(firstInstallment.get("feeChargesDue")));
-
- // check for installment fee
- HashMap secondInstallment = loanSchedule.get(2);
- validateNumberForEqual("50.00", String.valueOf(secondInstallment.get("feeChargesDue")));
-
- System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------");
- loanStatusHashMap = this.loanTransactionHelper.approveLoan("20 September 2011", loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
- LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap);
-
- System.out.println("-------------------------------DISBURSE LOAN-------------------------------------------");
- loanStatusHashMap = this.loanTransactionHelper.disburseLoan("20 September 2011", loanID);
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- final JournalEntry[] assetAccountInitialEntry = { new JournalEntry(Float.valueOf("100.00"), JournalEntry.TransactionType.DEBIT),
- new JournalEntry(Float.valueOf("12000.00"), JournalEntry.TransactionType.CREDIT),
- new JournalEntry(Float.valueOf("12000.00"), JournalEntry.TransactionType.DEBIT) };
- this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 September 2011", assetAccountInitialEntry);
- this.journalEntryHelper.checkJournalEntryForIncomeAccount(incomeAccount, "20 September 2011",
- new JournalEntry(Float.valueOf("100.00"), JournalEntry.TransactionType.CREDIT));
- loanCharges.clear();
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- validateCharge(flatDisbursement, loanCharges, "100", "0.00", "100.0", "0.0");
-
- System.out.println("-------------Make repayment 1-----------");
- this.loanTransactionHelper.makeRepayment("20 October 2011", Float.valueOf("3301.49"), loanID);
- loanCharges.clear();
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- validateCharge(flatDisbursement, loanCharges, "100", "0.00", "100.0", "0.0");
- validateCharge(flatSpecifiedDueDate, loanCharges, "100", "0.00", "100.0", "0.0");
- validateCharge(flatInstallmentFee, loanCharges, "50", "150.00", "50.0", "0.0");
-
- this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 October 2011", new JournalEntry(
- Float.valueOf("3301.49"), JournalEntry.TransactionType.DEBIT), new JournalEntry(Float.valueOf("2911.49"),
- JournalEntry.TransactionType.CREDIT));
- this.journalEntryHelper.checkJournalEntryForIncomeAccount(incomeAccount, "20 October 2011",
- new JournalEntry(Float.valueOf("150.00"), JournalEntry.TransactionType.CREDIT), new JournalEntry(Float.valueOf("240.00"),
- JournalEntry.TransactionType.CREDIT));
- this.loanTransactionHelper.addChargesForLoan(loanID, LoanTransactionHelper.getSpecifiedDueDateChargesForLoanAsJSON(
- String.valueOf(flatSpecifiedDueDate), "29 October 2011", "100"));
- loanSchedule.clear();
- loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(this.requestSpec, this.responseSpec, loanID);
-
- secondInstallment = loanSchedule.get(2);
- validateNumberForEqual("150.00", String.valueOf(secondInstallment.get("feeChargesDue")));
- this.loanTransactionHelper.waiveChargesForLoan(loanID, (Integer) getloanCharge(flatInstallmentFee, loanCharges).get("id"),
- LoanTransactionHelper.getWaiveChargeJSON(String.valueOf(2)));
- loanCharges.clear();
- loanCharges = this.loanTransactionHelper.getLoanCharges(loanID);
- validateCharge(flatInstallmentFee, loanCharges, "50", "100.00", "50.0", "50.0");
-
- System.out.println("----------Make repayment 2------------");
- this.loanTransactionHelper.makeRepayment("20 November 2011", Float.valueOf("3251.49"), loanID);
- this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, "20 November 2011",
- new JournalEntry(Float.valueOf("3251.49"), JournalEntry.TransactionType.DEBIT), new JournalEntry(Float.valueOf("2969.72"),
- JournalEntry.TransactionType.CREDIT));
- this.journalEntryHelper.checkJo
<TRUNCATED>