http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/66cee785/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/HookIntegrationTest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/HookIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/HookIntegrationTest.java deleted file mode 100644 index 5013a40..0000000 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/HookIntegrationTest.java +++ /dev/null @@ -1,115 +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 org.junit.Assert; - -import static org.junit.Assert.fail; - -import java.util.concurrent.TimeUnit; - -import org.apache.fineract.integrationtests.common.HookHelper; -import org.apache.fineract.integrationtests.common.OfficeHelper; -import org.apache.fineract.integrationtests.common.Utils; -import org.apache.http.conn.HttpHostConnectException; -import org.junit.Before; -import org.junit.Test; - -import com.jayway.restassured.RestAssured; -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; - -public class HookIntegrationTest { - - private RequestSpecification requestSpec; - private ResponseSpecification responseSpec; - - private HookHelper hookHelper; - private OfficeHelper officeHelper; - - @Before - public void setUp() throws Exception { - 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.hookHelper = new HookHelper(this.requestSpec, this.responseSpec); - this.officeHelper = new OfficeHelper(this.requestSpec, this.responseSpec); - } - - @Test - public void shouldSendOfficeCreationNotification() { - // Subject to https://echo-webhook.herokuapp.com being up - // See - // http://www.jamesward.com/2014/06/11/testing-webhooks-was-a-pain-so-i-fixed-the-glitch - final String payloadURL = "http://echo-webhook.herokuapp.com:80/Z7RXoCBdLSFMDrpn?"; - this.hookHelper.createHook(payloadURL); - final Integer createdOfficeID = this.officeHelper.createOffice("01 January 2012"); - try { - - /** - * sleep for a three seconds after each failure to increase the - * likelihood of the previous request for creating office completing - **/ - - for (int i = 0; i < 6; i++) { - try { - final String json = RestAssured.get(payloadURL.replace("?", "")).asString(); - final Integer notificationOfficeId = JsonPath.with(json).get("officeId"); - Assert.assertEquals("Equality check for created officeId and hook received payload officeId", createdOfficeID, - notificationOfficeId); - System.out.println("Notification Office Id - " + notificationOfficeId); - i = 6; - } catch (Exception e) { - TimeUnit.SECONDS.sleep(3); - i++; - } - } - - } catch (final Exception e) { - if (e instanceof HttpHostConnectException) { - fail("Failed to connect to https://echo-webhook.herokuapp.com platform"); - } - throw new RuntimeException(e); - } - - } - - @Test - public void createUpdateAndDeleteHook(){ - final String payloadURL = "http://echo-webhook.herokuapp.com:80/Z7RXoCBdLSFMDrpn?"; - final String updateURL = "http://localhost"; - - Long hookId = this.hookHelper.createHook(payloadURL).longValue(); - Assert.assertNotNull(hookId); - this.hookHelper.verifyHookCreatedOnServer(hookId); - System.out.println("---------------------SUCCESSFULLY CREATED AND VERIFIED HOOK-------------------------"+hookId); - this.hookHelper.updateHook(updateURL, hookId); - this.hookHelper.verifyUpdateHook(updateURL, hookId); - System.out.println("---------------------SUCCESSFULLY UPDATED AND VERIFIED HOOK-------------------------"+hookId); - this.hookHelper.deleteHook(hookId); - this.hookHelper.verifyDeleteHook(hookId); - System.out.println("---------------------SUCCESSFULLY DELETED AND VERIFIED HOOK-------------------------"+hookId); - - } -}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/66cee785/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java deleted file mode 100644 index 1ef1a20..0000000 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java +++ /dev/null @@ -1,281 +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.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import org.apache.fineract.integrationtests.common.ClientHelper; -import org.apache.fineract.integrationtests.common.CommonConstants; -import org.apache.fineract.integrationtests.common.Utils; -import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; -import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; -import org.junit.Before; -import org.junit.Test; - -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; - -@SuppressWarnings("rawtypes") -public class LoanApplicationApprovalTest { - - private ResponseSpecification responseSpec; - private ResponseSpecification responseSpecForStatusCode403; - private ResponseSpecification responseSpecForStatusCode400; - private RequestSpecification requestSpec; - private LoanTransactionHelper loanTransactionHelper; - - @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.responseSpecForStatusCode403 = new ResponseSpecBuilder().expectStatusCode(403).build(); - this.responseSpecForStatusCode400 = new ResponseSpecBuilder().expectStatusCode(400).build(); - this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec); - } - - /* - * Positive test case: Approved amount non zero is less than proposed amount - */ - @Test - public void loanApplicationApprovedAmountLessThanProposedAmount() { - - final String proposedAmount = "8000"; - final String approvalAmount = "5000"; - final String approveDate = "20 September 2012"; - - final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012"); - final Integer loanProductID = this.loanTransactionHelper.getLoanProductId(new LoanProductTestBuilder().build(null)); - final Integer loanID = applyForLoanApplication(clientID, loanProductID, proposedAmount); - - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - final String expectedDisbursementDate = null; - List<HashMap> approveTranches = null; - loanStatusHashMap = this.loanTransactionHelper.approveLoanWithApproveAmount(approveDate, expectedDisbursementDate, approvalAmount, - loanID, approveTranches); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - - } - - /* - * Negative test case: Approved amount non zero is greater than proposed - * amount - */ - @Test - public void loanApplicationApprovedAmountGreaterThanProposedAmount() { - - final String proposedAmount = "5000"; - final String approvalAmount = "9000"; - final String approveDate = "20 September 2011"; - - final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2012"); - final Integer loanProductID = this.loanTransactionHelper.getLoanProductId(new LoanProductTestBuilder().build(null)); - final Integer loanID = applyForLoanApplication(clientID, loanProductID, proposedAmount); - - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpecForStatusCode403); - - @SuppressWarnings("unchecked") - List<HashMap> error = (List<HashMap>) this.loanTransactionHelper.approveLoan(approveDate, approvalAmount, loanID, - CommonConstants.RESPONSE_ERROR); - - assertEquals("error.msg.loan.approval.amount.can't.be.greater.than.loan.amount.demanded", - error.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - - } - - public HashMap createTrancheDetail(final String date, final String amount) { - HashMap<String, Object> detail = new HashMap<>(); - detail.put("expectedDisbursementDate", date); - detail.put("principal", amount); - - return detail; - } - - @Test - public void loanApplicationApprovalAndValidationForMultiDisburseLoans() { - - List<HashMap> createTranches = new ArrayList<>(); - createTranches.add(createTrancheDetail("1 March 2014", "1000")); - createTranches.add(createTrancheDetail("23 March 2014", "4000")); - - final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2014"); - System.out.println("---------------------------------CLIENT CREATED WITH ID---------------------------------------------------" - + clientID); - - final Integer loanProductID = this.loanTransactionHelper.getLoanProductId(new LoanProductTestBuilder() - .withInterestTypeAsDecliningBalance().withTranches(true).withInterestCalculationPeriodTypeAsRepaymentPeriod(true) - .build(null)); - System.out.println("----------------------------------LOAN PRODUCT CREATED WITH ID-------------------------------------------" - + loanProductID); - - this.trancheLoansApprovedAmountLesserThanProposedAmount(clientID, loanProductID, createTranches); - this.trancheLoansApprovalValidation(clientID, loanProductID, createTranches); - - } - - private void trancheLoansApprovedAmountLesserThanProposedAmount(Integer clientID, Integer loanProductID, List<HashMap> createTranches) { - final String proposedAmount = "5000"; - final String approvalAmount = "2000"; - final String approveDate = "1 March 2014"; - final String expectedDisbursementDate = "1 March 2014"; - - List<HashMap> approveTranches = new ArrayList<>(); - approveTranches.add(createTrancheDetail("1 March 2014", "1000")); - approveTranches.add(createTrancheDetail("23 March 2014", "1000")); - - final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, proposedAmount, createTranches); - System.out.println("-----------------------------------LOAN CREATED WITH LOANID-------------------------------------------------" - + loanID); - - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoanWithApproveAmount(approveDate, expectedDisbursementDate, approvalAmount, - loanID, approveTranches); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - System.out - .println("-----------------------------------MULTI DISBURSAL LOAN APPROVED SUCCESSFULLY---------------------------------------"); - - } - - private void trancheLoansApprovalValidation(Integer clientID, Integer loanProductID, List<HashMap> createTranches) { - final String proposedAmount = "5000"; - final String approvalAmount1 = "10000"; - final String approvalAmount2 = "3000"; - final String approvalAmount3 = "400"; - final String approvalAmount4 = "200"; - - final String approveDate = "1 March 2014"; - final String expectedDisbursementDate = "1 March 2014"; - - List<HashMap> approveTranche1 = new ArrayList<>(); - approveTranche1.add(createTrancheDetail("1 March 2014", "5000")); - approveTranche1.add(createTrancheDetail("23 March 2014", "5000")); - - List<HashMap> approveTranche2 = new ArrayList<>(); - approveTranche2.add(createTrancheDetail("1 March 2014", "1000")); - approveTranche2.add(createTrancheDetail("23 March 2014", "1000")); - approveTranche2.add(createTrancheDetail("23 March 2014", "1000")); - - List<HashMap> approveTranche3 = new ArrayList<>(); - approveTranche3.add(createTrancheDetail("1 March 2014", "100")); - approveTranche3.add(createTrancheDetail("23 March 2014", "100")); - approveTranche3.add(createTrancheDetail("24 March 2014", "100")); - approveTranche3.add(createTrancheDetail("25 March 2014", "100")); - - List<HashMap> approveTranche4 = new ArrayList<>(); - approveTranche4.add(createTrancheDetail("1 March 2014", "100")); - approveTranche4.add(createTrancheDetail("23 March 2014", "100")); - approveTranche4.add(createTrancheDetail("24 March 2014", "100")); - - final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, proposedAmount, createTranches); - System.out.println("-----------------------------------LOAN CREATED WITH LOANID-------------------------------------------------" - + loanID); - - HashMap<String, Object> loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------------------------"); - this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpecForStatusCode400); - - /* Tranches with same expected disbursement date */ - List<HashMap<String, Object>> error = this.loanTransactionHelper.approveLoanForTranches(approveDate, expectedDisbursementDate, - approvalAmount2, loanID, approveTranche2, CommonConstants.RESPONSE_ERROR); - assertEquals("validation.msg.loan.expectedDisbursementDate.disbursement.date.must.be.unique.for.tranches", - error.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - - /* Sum of tranches is greater than approved amount */ - error = this.loanTransactionHelper.approveLoanForTranches(approveDate, expectedDisbursementDate, approvalAmount4, loanID, - approveTranche4, CommonConstants.RESPONSE_ERROR); - assertEquals("validation.msg.loan.principal.sum.of.multi.disburse.amounts.must.be.equal.to.or.lesser.than.approved.principal", - error.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - - this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpecForStatusCode403); - - /* Sum of tranches exceeds the proposed amount */ - error = this.loanTransactionHelper.approveLoanForTranches(approveDate, expectedDisbursementDate, approvalAmount1, loanID, - approveTranche1, CommonConstants.RESPONSE_ERROR); - assertEquals("error.msg.loan.approval.amount.can't.be.greater.than.loan.amount.demanded", - error.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - - /* No. of tranches exceeds the max tranche count at product level */ - error = this.loanTransactionHelper.approveLoanForTranches(approveDate, expectedDisbursementDate, approvalAmount3, loanID, - approveTranche3, CommonConstants.RESPONSE_ERROR); - assertEquals("error.msg.disbursementData.exceeding.max.tranche.count", error.get(0) - .get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - - /* If tranches are not specified for a multi-disburse loan */ - /** - * error = - * this.loanTransactionHelper.approveLoanForTranches(approveDate, - * expectedDisbursementDate, approvalAmount5, loanID, approveTranche5, - * CommonConstants.RESPONSE_ERROR); - * assertEquals("error.msg.disbursementData.required", - * error.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - **/ - } - - private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID, final String proposedAmount) { - final String loanApplication = new LoanApplicationTestBuilder().withPrincipal(proposedAmount).withLoanTermFrequency("5") - .withLoanTermFrequencyAsMonths().withNumberOfRepayments("5").withRepaymentEveryAfter("1") - .withRepaymentFrequencyTypeAsMonths().withInterestRatePerPeriod("2").withExpectedDisbursementDate("04 April 2012") - .withSubmittedOnDate("02 April 2012").build(clientID.toString(), loanProductID.toString(), null); - return this.loanTransactionHelper.getLoanId(loanApplication); - } - - public Integer applyForLoanApplicationWithTranches(final Integer clientID, final Integer loanProductID, String principal, - List<HashMap> tranches) { - System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); - final String loanApplicationJSON = new LoanApplicationTestBuilder() - // - .withPrincipal(principal) - // - .withLoanTermFrequency("5") - // - .withLoanTermFrequencyAsMonths() - // - .withNumberOfRepayments("5").withRepaymentEveryAfter("1").withRepaymentFrequencyTypeAsMonths() // - .withInterestRatePerPeriod("2") // - .withExpectedDisbursementDate("1 March 2014") // - .withTranches(tranches) // - .withInterestTypeAsDecliningBalance() // - .withSubmittedOnDate("1 March 2014") // - .build(clientID.toString(), loanProductID.toString(), null); - - return this.loanTransactionHelper.getLoanId(loanApplicationJSON); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/66cee785/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java deleted file mode 100644 index 672972e..0000000 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java +++ /dev/null @@ -1,157 +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 java.math.BigDecimal; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import org.apache.fineract.integrationtests.LoanApplicationApprovalTest; -import org.apache.fineract.integrationtests.common.ClientHelper; -import org.apache.fineract.integrationtests.common.Utils; -import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; -import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; - -@SuppressWarnings("rawtypes") -public class LoanApplicationUndoLastTrancheTest { - - private ResponseSpecification responseSpec; - private RequestSpecification requestSpec; - private LoanTransactionHelper loanTransactionHelper; - private LoanApplicationApprovalTest loanApplicationApprovalTest; - - @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.loanApplicationApprovalTest = new LoanApplicationApprovalTest(); - } - - @Test - public void LoanApplicationUndoLastTranche() { - - final String proposedAmount = "5000"; - final String approvalAmount = "2000"; - final String approveDate = "1 March 2014"; - final String expectedDisbursementDate = "1 March 2014"; - final String disbursalDate = "1 March 2014"; - - // CREATE CLIENT - final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2014"); - System.out.println("---------------------------------CLIENT CREATED WITH ID---------------------------------------------------" - + clientID); - - // CREATE LOAN MULTIDISBURSAL PRODUCT - final Integer loanProductID = this.loanTransactionHelper.getLoanProductId(new LoanProductTestBuilder() - .withInterestTypeAsDecliningBalance().withTranches(true).withInterestCalculationPeriodTypeAsRepaymentPeriod(true) - .build(null)); - System.out.println("----------------------------------LOAN PRODUCT CREATED WITH ID-------------------------------------------" - + loanProductID); - - // CREATE TRANCHES - List<HashMap> createTranches = new ArrayList<>(); - createTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("1 March 2014", "1000")); - createTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("23 June 2014", "4000")); - - // APPROVE TRANCHES - List<HashMap> approveTranches = new ArrayList<>(); - approveTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("1 March 2014", "1000")); - approveTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("23 June 2014", "1000")); - - // APPLY FOR LOAN WITH TRANCHES - final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, proposedAmount, createTranches); - System.out.println("-----------------------------------LOAN CREATED WITH LOANID-------------------------------------------------" - + loanID); - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - - // VALIDATE THE LOAN STATUS - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoanWithApproveAmount(approveDate, expectedDisbursementDate, approvalAmount, - loanID, approveTranches); - - // VALIDATE THE LOAN IS APPROVED - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - - // DISBURSE A LOAN - this.loanTransactionHelper.disburseLoan(disbursalDate, loanID); - loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - - // VALIDATE THE LOAN IS ACTIVE STATUS - LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); - - System.out.println("-------------Make repayment 1-----------"); - this.loanTransactionHelper.makeRepayment("01 April 2014", Float.valueOf("420"), loanID); - System.out.println("-------------Make repayment 2-----------"); - this.loanTransactionHelper.makeRepayment("01 May 2014", Float.valueOf("412"), loanID); - System.out.println("-------------Make repayment 3-----------"); - this.loanTransactionHelper.makeRepayment("01 June 2014", Float.valueOf("204"), loanID); - // DISBURSE A SECOND TRANCHE - this.loanTransactionHelper.disburseLoan("23 June 2014", loanID); - // UNDO LAST TRANCHE - Float disbursedAmount = this.loanTransactionHelper.undoLastDisbursal(loanID); - validateDisbursedAmount(disbursedAmount); - } - - private void validateDisbursedAmount(Float disbursedAmount) { - Assert.assertEquals(Float.valueOf("1000.0"), disbursedAmount); - - } - - public Integer applyForLoanApplicationWithTranches(final Integer clientID, final Integer loanProductID, String principal, - List<HashMap> tranches) { - System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); - final String loanApplicationJSON = new LoanApplicationTestBuilder() - // - .withPrincipal(principal) - // - .withLoanTermFrequency("5") - // - .withLoanTermFrequencyAsMonths() - // - .withNumberOfRepayments("5").withRepaymentEveryAfter("1").withRepaymentFrequencyTypeAsMonths() // - .withInterestRatePerPeriod("2") // - .withExpectedDisbursementDate("1 March 2014") // - .withTranches(tranches) // - .withInterestTypeAsDecliningBalance() // - .withSubmittedOnDate("1 March 2014") // - .build(clientID.toString(), loanProductID.toString(), null); - - return this.loanTransactionHelper.getLoanId(loanApplicationJSON); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/66cee785/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java deleted file mode 100644 index cecac3d..0000000 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java +++ /dev/null @@ -1,501 +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.math.MathContext; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import org.apache.fineract.integrationtests.common.ClientHelper; -import org.apache.fineract.integrationtests.common.Utils; -import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanDisbursementTestBuilder; -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.junit.Before; -import org.junit.Test; - -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; - -@SuppressWarnings({ "rawtypes", "unchecked" }) -public class LoanDisbursementDetailsIntegrationTest { - - private ResponseSpecification responseSpec; - private RequestSpecification requestSpec; - private LoanTransactionHelper loanTransactionHelper; - private Integer loanID; - private Integer disbursementId; - final String approveDate = "01 March 2014"; - final String expectedDisbursementDate = "01 March 2014"; - final String proposedAmount = "5000"; - final String approvalAmount = "5000"; - - @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); - } - - @Test - public void createAndValidateMultiDisburseLoansBasedOnEmi() { - List<HashMap> createTranches = new ArrayList<>(); - String id = null; - String installmentAmount = "800"; - String withoutInstallmentAmount = ""; - String proposedAmount = "10000"; - createTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "01 June 2015", "5000")); - createTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "01 Sep 2015", "5000")); - - final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2014"); - System.out.println("---------------------------------CLIENT CREATED WITH ID---------------------------------------------------" - + clientID); - - final Integer loanProductID = this.loanTransactionHelper.getLoanProductId(new LoanProductTestBuilder() - .withInterestTypeAsDecliningBalance().withMoratorium("", "").withAmortizationTypeAsEqualInstallments().withTranches(true) - .withInterestCalculationPeriodTypeAsRepaymentPeriod(true).build(null)); - System.out.println("----------------------------------LOAN PRODUCT CREATED WITH ID-------------------------------------------" - + loanProductID); - - final Integer loanIDWithEmi = applyForLoanApplicationWithEmiAmount(clientID, loanProductID, proposedAmount, createTranches, - installmentAmount); - - System.out - .println("-----------------------------------LOAN CREATED WITH EMI LOANID-------------------------------------------------" - + loanIDWithEmi); - - HashMap repaymentScheduleWithEmi = (HashMap) this.loanTransactionHelper.getLoanDetail(this.requestSpec, this.responseSpec, - loanIDWithEmi, "repaymentSchedule"); - - ArrayList<HashMap> periods = (ArrayList<HashMap>) repaymentScheduleWithEmi.get("periods"); - assertEquals(periods.size(), 15); - - this.validateRepaymentScheduleWithEMI(periods); - - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanIDWithEmi); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoanWithApproveAmount("01 June 2015", "01 June 2015", "10000", loanIDWithEmi, - createTranches); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - System.out - .println("-----------------------------------MULTI DISBURSAL LOAN WITH EMI APPROVED SUCCESSFULLY---------------------------------------"); - - final Integer loanIDWithoutEmi = applyForLoanApplicationWithEmiAmount(clientID, loanProductID, proposedAmount, createTranches, - withoutInstallmentAmount); - - HashMap repaymentScheduleWithoutEmi = (HashMap) this.loanTransactionHelper.getLoanDetail(this.requestSpec, this.responseSpec, - loanIDWithoutEmi, "repaymentSchedule"); - - ArrayList<HashMap> periods1 = (ArrayList<HashMap>) repaymentScheduleWithEmi.get("periods"); - assertEquals(periods1.size(), 15); - - System.out - .println("-----------------------------------LOAN CREATED WITHOUT EMI LOANID-------------------------------------------------" - + loanIDWithoutEmi); - - /* To be uncommented once issue MIFOSX-2006 is closed. */ - // this.validateRepaymentScheduleWithoutEMI(periods1); - - HashMap loanStatusMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanIDWithoutEmi); - LoanStatusChecker.verifyLoanIsPending(loanStatusMap); - - System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoanWithApproveAmount("01 June 2015", "01 June 2015", "10000", - loanIDWithoutEmi, createTranches); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - System.out - .println("-----------------------------------MULTI DISBURSAL LOAN WITHOUT EMI APPROVED SUCCESSFULLY---------------------------------------"); - - } - - private void validateRepaymentScheduleWithEMI(ArrayList<HashMap> periods) { - LoanDisbursementTestBuilder expectedRepaymentSchedule0 = new LoanDisbursementTestBuilder("[2015, 6, 1]", 0.0f, 0.0f, null, null, - 5000.0f, null, null, null); - - LoanDisbursementTestBuilder expectedRepaymentSchedule1 = new LoanDisbursementTestBuilder("[2015, 7, 1]", 800f, 800.0f, 50.0f, - 750.0f, 4250.0f, 750.0f, 750.0f, "[2015, 6, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule2 = new LoanDisbursementTestBuilder("[2015, 8, 1]", 800.0f, 800.0f, 42.5f, - 757.5f, 3492.5f, 757.5f, 757.5f, "[2015, 7, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule3 = new LoanDisbursementTestBuilder("[2015, 9, 1]", 0.0f, 0.0f, null, null, - 5000.0f, null, null, null); - - LoanDisbursementTestBuilder expectedRepaymentSchedule4 = new LoanDisbursementTestBuilder("[2015, 9, 1]", 800.0f, 800.0f, 34.92f, - 765.08f, 7727.42f, 765.08f, 765.08f, "[2015, 8, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule5 = new LoanDisbursementTestBuilder("[2015, 10, 1]", 800.0f, 800.0f, 77.27f, - 722.73f, 7004.69f, 722.73f, 722.73f, "[2015, 9, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule6 = new LoanDisbursementTestBuilder("[2015, 11, 1]", 800.0f, 800.0f, 70.05f, - 729.95f, 6274.74f, 729.95f, 729.95f, "[2015, 10, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule7 = new LoanDisbursementTestBuilder("[2015, 12, 1]", 800.0f, 800.0f, 62.75f, - 737.25f, 5537.49f, 737.25f, 737.25f, "[2015, 11, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule8 = new LoanDisbursementTestBuilder("[2016, 1, 1]", 800.0f, 800.0f, 55.37f, - 744.63f, 4792.86f, 744.63f, 744.63f, "[2015, 12, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule9 = new LoanDisbursementTestBuilder("[2016, 2, 1]", 800.0f, 800.0f, 47.93f, - 752.07f, 4040.79f, 752.07f, 752.07f, "[2016, 1, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule10 = new LoanDisbursementTestBuilder("[2016, 3, 1]", 800.0f, 800.0f, 40.41f, - 759.59f, 3281.2f, 759.59f, 759.59f, "[2016, 2, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule11 = new LoanDisbursementTestBuilder("[2016, 4, 1]", 800.0f, 800.0f, 32.81f, - 767.19f, 2514.01f, 767.19f, 767.19f, "[2016, 3, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule12 = new LoanDisbursementTestBuilder("[2016, 5, 1]", 800.0f, 800.0f, 25.14f, - 774.86f, 1739.15f, 774.86f, 774.86f, "[2016, 4, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule13 = new LoanDisbursementTestBuilder("[2016, 6, 1]", 800.0f, 800.0f, 17.39f, - 782.61f, 956.54f, 782.61f, 782.61f, "[2016, 5, 1]"); - - LoanDisbursementTestBuilder expectedRepaymentSchedule14 = new LoanDisbursementTestBuilder("[2016, 7, 1]", 966.11f, 966.11f, 9.57f, - 956.54f, 0.0f, 956.54f, 956.54f, "[2016, 6, 1]"); - - ArrayList<LoanDisbursementTestBuilder> list = new ArrayList<LoanDisbursementTestBuilder>(); - list.add(expectedRepaymentSchedule0); - list.add(expectedRepaymentSchedule1); - list.add(expectedRepaymentSchedule2); - list.add(expectedRepaymentSchedule3); - list.add(expectedRepaymentSchedule4); - list.add(expectedRepaymentSchedule5); - list.add(expectedRepaymentSchedule6); - list.add(expectedRepaymentSchedule7); - list.add(expectedRepaymentSchedule8); - list.add(expectedRepaymentSchedule9); - list.add(expectedRepaymentSchedule10); - list.add(expectedRepaymentSchedule11); - list.add(expectedRepaymentSchedule12); - list.add(expectedRepaymentSchedule13); - list.add(expectedRepaymentSchedule14); - - for (int i = 0; i < list.size(); i++) { - this.assertRepaymentScheduleValuesWithEMI(periods.get(i), list.get(i), i); - } - } - - private void assertRepaymentScheduleValuesWithEMI(HashMap period, LoanDisbursementTestBuilder expectedRepaymentSchedule, int position) { - - assertEquals(period.get("dueDate").toString(), expectedRepaymentSchedule.getDueDate()); - assertEquals(period.get("principalLoanBalanceOutstanding"), expectedRepaymentSchedule.getPrincipalLoanBalanceOutstanding()); - System.out.println(period.get("totalOriginalDueForPeriod").toString()); - assertEquals(new Float(period.get("totalOriginalDueForPeriod").toString()), expectedRepaymentSchedule - .getTotalOriginalDueForPeriod().floatValue(), 0.0f); - - assertEquals(new Float(period.get("totalOutstandingForPeriod").toString()).floatValue(), - expectedRepaymentSchedule.getTotalOutstandingForPeriod(), 0.0f); - - if (position != 0 && position != 3) { - - assertEquals(new Float(period.get("interestOutstanding").toString()).floatValue(), - expectedRepaymentSchedule.getInterestOutstanding(), 0.0f); - assertEquals(new Float(period.get("principalOutstanding").toString()).floatValue(), - expectedRepaymentSchedule.getPrincipalOutstanding(), 0.0f); - assertEquals(new Float(period.get("principalDue").toString()).floatValue(), expectedRepaymentSchedule.getPrincipalDue(), 0.0f); - assertEquals(new Float(period.get("principalOriginalDue").toString()).floatValue(), - expectedRepaymentSchedule.getPrincipalOriginalDue(), 0.0f); - assertEquals(period.get("fromDate").toString(), expectedRepaymentSchedule.getFromDate()); - } - } - - /* Uncomment and modify test builder values once MIFOSX-2006 is closed. */ - /* - * private void validateRepaymentScheduleWithoutEMI(ArrayList<HashMap> - * periods){ LoanDisbursementTestBuilder expectedRepaymentSchedule0 = new - * LoanDisbursementTestBuilder( "[2015, 6, 1]", 0.0f, 0.0f, null, null, - * 5000.0f, null, null, null); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule1 = new - * LoanDisbursementTestBuilder( "[2015, 7, 1]", 800.0f, 800.0f, 50.0f, - * 750.0f, 4250.0f, 750.0f, 750.0f, "[2015, 6, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule2 = new - * LoanDisbursementTestBuilder( "[2015, 8, 1]", 800.0f, 800.0f, 42.5f, - * 757.5f, 3492.5f, 757.5f, 757.5f, "[2015, 7, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule3 = new - * LoanDisbursementTestBuilder( "[2015, 9, 1]", 0.0f, 0.0f, null, null, - * 5000.0f, null, null, null); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule4 = new - * LoanDisbursementTestBuilder( "[2015, 9, 1]", 800.0f, 800.0f, 34.92f, - * 765.08f, 7727.42f, 765.08f, 765.08f, "[2015, 8, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule5 = new - * LoanDisbursementTestBuilder( "[2015, 10, 1]", 800.0f, 800.0f, 77.27f, - * 722.73f, 7004.69f, 722.73f, 722.73f, "[2015, 9, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule6 = new - * LoanDisbursementTestBuilder( "[2015, 11, 1]", 800.0f, 800.0f, 70.05f, - * 729.95f, 6274.74f, 729.95f, 729.95f, "[2015, 10, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule7 = new - * LoanDisbursementTestBuilder( "[2015, 12, 1]", 800.0f, 800.0f, 62.75f, - * 737.25f, 5537.49f, 737.25f, 737.25f, "[2015, 11, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule8 = new - * LoanDisbursementTestBuilder( "[2016, 1, 1]", 800.0f, 800.0f, 55.37f, - * 744.63f, 4792.86f, 744.63f, 744.63f, "[2015, 12, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule9 = new - * LoanDisbursementTestBuilder( "[2016, 2, 1]", 800.0f, 800.0f, 47.93f, - * 752.07f, 4040.79f, 752.07f, 752.07f, "[2016, 1, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule10 = new - * LoanDisbursementTestBuilder( "[2016, 3, 1]", 800.0f, 800.0f, 40.41f, - * 759.59f, 3281.2f, 759.59f, 759.59f, "[2016, 2, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule11 = new - * LoanDisbursementTestBuilder( "[2016, 4, 1]", 800.0f, 800.0f, 32.81f, - * 767.19f, 2514.01f, 767.19f, 767.19f, "[2016, 3, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule12 = new - * LoanDisbursementTestBuilder( "[2016, 5, 1]", 800.0f, 800.0f, 25.14f, - * 774.86f, 1739.15f, 774.86f, 774.86f, "[2016, 4, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule13 = new - * LoanDisbursementTestBuilder( "[2016, 6, 1]", 800.0f, 800.0f, 17.39f, - * 782.61f, 956.54f, 782.61f, 782.61f, "[2016, 5, 1]"); - * - * LoanDisbursementTestBuilder expectedRepaymentSchedule14 = new - * LoanDisbursementTestBuilder( "[2016, 7, 1]", 966.11f, 966.11f, 9.57f, - * 956.54f, 0.0f, 956.54f, 956.54f, "[2016, 6, 1]"); - * - * ArrayList<LoanDisbursementTestBuilder> list = new - * ArrayList<LoanDisbursementTestBuilder>(); - * list.add(expectedRepaymentSchedule0); - * list.add(expectedRepaymentSchedule1); - * list.add(expectedRepaymentSchedule2); - * list.add(expectedRepaymentSchedule3); - * list.add(expectedRepaymentSchedule4); - * list.add(expectedRepaymentSchedule5); - * list.add(expectedRepaymentSchedule6); - * list.add(expectedRepaymentSchedule7); - * list.add(expectedRepaymentSchedule8); - * list.add(expectedRepaymentSchedule9); - * list.add(expectedRepaymentSchedule10); - * list.add(expectedRepaymentSchedule11); - * list.add(expectedRepaymentSchedule12); - * list.add(expectedRepaymentSchedule13); - * list.add(expectedRepaymentSchedule14); - * - * for (int i = 0; i < list.size(); i++) { - * this.assertRepaymentScheduleValuesWithoutEMI(periods.get(i), list.get(i), - * i); } } - * - * private void assertRepaymentScheduleValuesWithoutEMI(HashMap period, - * LoanDisbursementTestBuilder expectedRepaymentSchedule, int position) { - * - * assertEquals(period.get("dueDate").toString(), - * expectedRepaymentSchedule.getDueDate()); - * assertEquals(period.get("principalLoanBalanceOutstanding"), - * expectedRepaymentSchedule.getPrincipalLoanBalanceOutstanding()); - * assertEquals(period.get("totalOriginalDueForPeriod"), - * expectedRepaymentSchedule.getTotalOriginalDueForPeriod()); - * assertEquals(period.get("totalOutstandingForPeriod"), - * expectedRepaymentSchedule.getTotalOutstandingForPeriod()); - * - * if (position != 0 && position != 3) { - * - * assertEquals(period.get("interestOutstanding"), - * expectedRepaymentSchedule.getInterestOutstanding()); - * assertEquals(period.get("principalOutstanding"), - * expectedRepaymentSchedule.getPrincipalOutstanding()); - * assertEquals(period.get("principalDue"), - * expectedRepaymentSchedule.getPrincipalDue()); - * assertEquals(period.get("principalOriginalDue"), - * expectedRepaymentSchedule.getPrincipalOriginalDue()); - * assertEquals(period.get("fromDate").toString(), - * expectedRepaymentSchedule.getFromDate()); } } - */ - private Integer applyForLoanApplicationWithEmiAmount(final Integer clientID, final Integer loanProductID, final String proposedAmount, - List<HashMap> tranches, final String installmentAmount) { - - System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); - final String loanApplicationJSON = new LoanApplicationTestBuilder() - // - .withPrincipal(proposedAmount) - // - .withLoanTermFrequency("12") - // - .withLoanTermFrequencyAsMonths() - // - .withNumberOfRepayments("12").withRepaymentEveryAfter("1").withRepaymentFrequencyTypeAsMonths() // - .withInterestRatePerPeriod("1") // - .withExpectedDisbursementDate("01 June 2015") // - .withTranches(tranches) // - .withFixedEmiAmount(installmentAmount) // - .withInterestTypeAsDecliningBalance() // - .withSubmittedOnDate("01 June 2015") // - .withAmortizationTypeAsEqualInstallments() // - .build(clientID.toString(), loanProductID.toString(), null); - - return this.loanTransactionHelper.getLoanId(loanApplicationJSON); - - } - - @Test - public void createApproveAndValidateMultiDisburseLoan() { - - List<HashMap> createTranches = new ArrayList<>(); - String id = null; - createTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "01 March 2014", "1000")); - - final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2014"); - System.out.println("---------------------------------CLIENT CREATED WITH ID---------------------------------------------------" - + clientID); - - final Integer loanProductID = this.loanTransactionHelper.getLoanProductId(new LoanProductTestBuilder() - .withInterestTypeAsDecliningBalance().withTranches(true).withInterestCalculationPeriodTypeAsRepaymentPeriod(true) - .build(null)); - System.out.println("----------------------------------LOAN PRODUCT CREATED WITH ID-------------------------------------------" - + loanProductID); - - this.loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, proposedAmount, createTranches); - System.out.println("-----------------------------------LOAN CREATED WITH LOANID-------------------------------------------------" - + loanID); - - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoanWithApproveAmount(approveDate, expectedDisbursementDate, approvalAmount, - loanID, createTranches); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - System.out - .println("-----------------------------------MULTI DISBURSAL LOAN APPROVED SUCCESSFULLY---------------------------------------"); - ArrayList<HashMap> disbursementDetails = (ArrayList<HashMap>) this.loanTransactionHelper.getLoanDetail(this.requestSpec, - this.responseSpec, this.loanID, "disbursementDetails"); - this.disbursementId = (Integer) disbursementDetails.get(0).get("id"); - this.editLoanDisbursementDetails(); - } - - private void editLoanDisbursementDetails() { - this.editDateAndPrincipalOfExistingTranche(); - this.addNewDisbursementDetails(); - this.deleteDisbursmentDetails(); - } - - private void addNewDisbursementDetails() { - List<HashMap> addTranches = new ArrayList<>(); - ArrayList<HashMap> disbursementDetails = (ArrayList<HashMap>) this.loanTransactionHelper.getLoanDetail(this.requestSpec, - this.responseSpec, this.loanID, "disbursementDetails"); - ArrayList expectedDisbursementDate = (ArrayList) disbursementDetails.get(0).get("expectedDisbursementDate"); - String date = formatExpectedDisbursementDate(expectedDisbursementDate.toString()); - - String id = null; - addTranches.add(this.loanTransactionHelper.createTrancheDetail(disbursementDetails.get(0).get("id").toString(), date, - disbursementDetails.get(0).get("principal").toString())); - addTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "3 March 2014", "2000")); - addTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "4 March 2014", "500")); - - /* Add disbursement detail */ - this.loanTransactionHelper.addAndDeleteDisbursementDetail(this.loanID, this.approvalAmount, this.expectedDisbursementDate, - addTranches, ""); - } - - private void deleteDisbursmentDetails() { - List<HashMap> deleteTranches = new ArrayList<>(); - ArrayList<HashMap> disbursementDetails = (ArrayList<HashMap>) this.loanTransactionHelper.getLoanDetail(this.requestSpec, - this.responseSpec, this.loanID, "disbursementDetails"); - /* Delete the last tranche */ - for (int i = 0; i < disbursementDetails.size() - 1; i++) { - ArrayList expectedDisbursementDate = (ArrayList) disbursementDetails.get(i).get("expectedDisbursementDate"); - String disbursementDate = formatExpectedDisbursementDate(expectedDisbursementDate.toString()); - deleteTranches.add(this.loanTransactionHelper.createTrancheDetail(disbursementDetails.get(i).get("id").toString(), - disbursementDate, disbursementDetails.get(i).get("principal").toString())); - } - - /* Add disbursement detail */ - this.loanTransactionHelper.addAndDeleteDisbursementDetail(this.loanID, this.approvalAmount, this.expectedDisbursementDate, - deleteTranches, ""); - } - - private void editDateAndPrincipalOfExistingTranche() { - String updatedExpectedDisbursementDate = "01 March 2014"; - String updatedPrincipal = "900"; - /* Update */ - this.loanTransactionHelper.editDisbursementDetail(this.loanID, this.disbursementId, this.approvalAmount, - this.expectedDisbursementDate, updatedExpectedDisbursementDate, updatedPrincipal, ""); - /* Validate Edit */ - ArrayList<HashMap> disbursementDetails = (ArrayList<HashMap>) this.loanTransactionHelper.getLoanDetail(this.requestSpec, - this.responseSpec, this.loanID, "disbursementDetails"); - assertEquals(Float.valueOf(updatedPrincipal), disbursementDetails.get(0).get("principal")); - ArrayList expectedDisbursementDate = (ArrayList) disbursementDetails.get(0).get("expectedDisbursementDate"); - String date = formatExpectedDisbursementDate(expectedDisbursementDate.toString()); - assertEquals(updatedExpectedDisbursementDate, date); - - } - - private String formatExpectedDisbursementDate(String expectedDisbursementDate) { - - SimpleDateFormat source = new SimpleDateFormat("[yyyy, MM, dd]"); - SimpleDateFormat target = new SimpleDateFormat("dd MMMM yyyy"); - String date = null; - try { - date = target.format(source.parse(expectedDisbursementDate)); - } catch (ParseException e) { - e.printStackTrace(); - } - return date; - } - - private Integer applyForLoanApplicationWithTranches(final Integer clientID, final Integer loanProductID, String principal, - List<HashMap> tranches) { - System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); - final String loanApplicationJSON = new LoanApplicationTestBuilder() - // - .withPrincipal(principal) - // - .withLoanTermFrequency("5") - // - .withLoanTermFrequencyAsMonths() - // - .withNumberOfRepayments("5").withRepaymentEveryAfter("1").withRepaymentFrequencyTypeAsMonths() // - .withInterestRatePerPeriod("2") // - .withExpectedDisbursementDate("01 March 2014") // - .withTranches(tranches) // - .withInterestTypeAsDecliningBalance() // - .withSubmittedOnDate("01 March 2014") // - .build(clientID.toString(), loanProductID.toString(), null); - - return this.loanTransactionHelper.getLoanId(loanApplicationJSON); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/66cee785/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRepaymentRescheduleAtDisbursementTest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRepaymentRescheduleAtDisbursementTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRepaymentRescheduleAtDisbursementTest.java deleted file mode 100644 index d0018cd..0000000 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRepaymentRescheduleAtDisbursementTest.java +++ /dev/null @@ -1,241 +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.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.Utils; -import org.apache.fineract.integrationtests.common.accounting.Account; -import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; -import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; -import org.junit.Before; -import org.junit.Test; - -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; - -@SuppressWarnings("rawtypes") -public class LoanRepaymentRescheduleAtDisbursementTest { - - private ResponseSpecification responseSpec; - private RequestSpecification requestSpec; - private LoanTransactionHelper loanTransactionHelper; - private LoanApplicationApprovalTest loanApplicationApprovalTest; - private ResponseSpecification generalResponseSpec; - - @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.loanApplicationApprovalTest = new LoanApplicationApprovalTest(); - this.generalResponseSpec = new ResponseSpecBuilder().build(); - } - - @SuppressWarnings("unchecked") - @Test - public void testLoanRepaymentRescheduleAtDisbursement(){ - - final String approvalAmount = "10000"; - final String approveDate = "01 March 2015"; - final String expectedDisbursementDate = "01 March 2015"; - final String disbursementDate = "01 March 2015"; - final String adjustRepaymentDate = "16 March 2015"; - final String recalculationRestFrequencyDate = "01 January 2012"; - - // CREATE CLIENT - final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2014"); - System.out.println("---------------------------------CLIENT CREATED WITH ID---------------------------------------------------" - + clientID); - - // CREATE LOAN MULTIDISBURSAL PRODUCT WITH INTEREST RECALCULATION - final Integer loanProductID = createLoanProductWithInterestRecalculation(LoanProductTestBuilder.RBI_INDIA_STRATEGY, - LoanProductTestBuilder.RECALCULATION_COMPOUNDING_METHOD_NONE, - LoanProductTestBuilder.RECALCULATION_STRATEGY_REDUCE_NUMBER_OF_INSTALLMENTS, - LoanProductTestBuilder.RECALCULATION_FREQUENCY_TYPE_DAILY, "0", recalculationRestFrequencyDate, - LoanProductTestBuilder.INTEREST_APPLICABLE_STRATEGY_ON_PRE_CLOSE_DATE, null); - - // CREATE TRANCHES - List<HashMap> createTranches = new ArrayList<>(); - createTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("01 March 2015", "5000")); - createTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("01 May 2015", "5000")); - - // APPROVE TRANCHES - List<HashMap> approveTranches = new ArrayList<>(); - approveTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("01 March 2015", "5000")); - approveTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("01 May 2015", "5000")); - - // APPLY FOR TRANCHE LOAN WITH INTEREST RECALCULATION - final Integer loanID = applyForLoanApplicationForInterestRecalculation(clientID, loanProductID, disbursementDate, - recalculationRestFrequencyDate, LoanApplicationTestBuilder.RBI_INDIA_STRATEGY, new ArrayList<HashMap>(0), createTranches); - - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - - // VALIDATE THE LOAN STATUS - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoanWithApproveAmount(approveDate, expectedDisbursementDate, approvalAmount, - loanID, approveTranches); - - // VALIDATE THE LOAN IS APPROVED - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - - // DISBURSE A FIRST TRANCHE - this.loanTransactionHelper.disburseLoanWithRepaymentReschedule(disbursementDate, loanID, adjustRepaymentDate); - loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID); - - ArrayList<HashMap> loanRepaymnetSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, generalResponseSpec, loanID); - HashMap firstInstallement = loanRepaymnetSchedule.get(1); - Map<String, Object> expectedvalues = new HashMap<>(3); - Calendar date = Calendar.getInstance(Utils.getTimeZoneOfTenant()); - date.set(2015, Calendar.MARCH, 16); - expectedvalues.put("dueDate", getDateAsArray(date, 0)); - expectedvalues.put("principalDue", "834.71"); - expectedvalues.put("interestDue", "49.32"); - expectedvalues.put("feeChargesDue", "0"); - expectedvalues.put("penaltyChargesDue", "0"); - expectedvalues.put("totalDueForPeriod", "884.03"); - - // VALIDATE REPAYMENT SCHEDULE - verifyLoanRepaymentSchedule(firstInstallement, expectedvalues); - - } - - private void verifyLoanRepaymentSchedule(final HashMap firstInstallement, final Map<String, Object> expectedvalues) { - - assertEquals(expectedvalues.get("dueDate"), firstInstallement.get("dueDate")); - assertEquals(String.valueOf(expectedvalues.get("principalDue")), String.valueOf(firstInstallement.get("principalDue"))); - assertEquals(String.valueOf(expectedvalues.get("interestDue")), String.valueOf(firstInstallement.get("interestDue"))); - assertEquals(String.valueOf(expectedvalues.get("feeChargesDue")), String.valueOf(firstInstallement.get("feeChargesDue"))); - assertEquals(String.valueOf(expectedvalues.get("penaltyChargesDue")), String.valueOf(firstInstallement.get("penaltyChargesDue"))); - assertEquals(String.valueOf(expectedvalues.get("totalDueForPeriod")), String.valueOf(firstInstallement.get("totalDueForPeriod"))); - - } - - private Integer createLoanProductWithInterestRecalculation(final String repaymentStrategy, - final String interestRecalculationCompoundingMethod, final String rescheduleStrategyMethod, - final String recalculationRestFrequencyType, final String recalculationRestFrequencyInterval, - final String recalculationRestFrequencyDate, final String preCloseInterestCalculationStrategy, final Account[] accounts) { - final String recalculationCompoundingFrequencyType = null; - final String recalculationCompoundingFrequencyInterval = null; - final String recalculationCompoundingFrequencyDate = null; - return createLoanProductWithInterestRecalculation(repaymentStrategy, interestRecalculationCompoundingMethod, - rescheduleStrategyMethod, recalculationRestFrequencyType, recalculationRestFrequencyInterval, - recalculationRestFrequencyDate, recalculationCompoundingFrequencyType, recalculationCompoundingFrequencyInterval, - recalculationCompoundingFrequencyDate, preCloseInterestCalculationStrategy, accounts, null, false); - } - - private Integer createLoanProductWithInterestRecalculation(final String repaymentStrategy, - final String interestRecalculationCompoundingMethod, final String rescheduleStrategyMethod, - final String recalculationRestFrequencyType, final String recalculationRestFrequencyInterval, - final String recalculationRestFrequencyDate, final String recalculationCompoundingFrequencyType, - final String recalculationCompoundingFrequencyInterval, final String recalculationCompoundingFrequencyDate, - final String preCloseInterestCalculationStrategy, final Account[] accounts, final String chargeId, - boolean isArrearsBasedOnOriginalSchedule) { - System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------"); - LoanProductTestBuilder builder = new LoanProductTestBuilder() - .withPrincipal("10000.00") - .withNumberOfRepayments("12") - .withRepaymentAfterEvery("2") - .withRepaymentTypeAsWeek() - .withinterestRatePerPeriod("2") - .withInterestRateFrequencyTypeAsMonths() - .withTranches(true) - .withInterestCalculationPeriodTypeAsRepaymentPeriod(true) - .withRepaymentStrategy(repaymentStrategy) - .withInterestTypeAsDecliningBalance() - .withInterestRecalculationDetails(interestRecalculationCompoundingMethod, rescheduleStrategyMethod, - preCloseInterestCalculationStrategy) - .withInterestRecalculationRestFrequencyDetails(recalculationRestFrequencyType, recalculationRestFrequencyInterval, - recalculationRestFrequencyDate) - .withInterestRecalculationCompoundingFrequencyDetails(recalculationCompoundingFrequencyType, - recalculationCompoundingFrequencyInterval, recalculationCompoundingFrequencyDate); - if (accounts != null) { - builder = builder.withAccountingRulePeriodicAccrual(accounts); - } - - if (isArrearsBasedOnOriginalSchedule) builder = builder.withArrearsConfiguration(); - - final String loanProductJSON = builder.build(chargeId); - return this.loanTransactionHelper.getLoanProductId(loanProductJSON); - } - - private Integer applyForLoanApplicationForInterestRecalculation(final Integer clientID, final Integer loanProductID, - final String disbursementDate, final String restStartDate, final String repaymentStrategy, final List<HashMap> charges, List<HashMap> tranches) { - final String graceOnInterestPayment = null; - final String compoundingStartDate = null; - final String graceOnPrincipalPayment = null; - return applyForLoanApplicationForInterestRecalculation(clientID, loanProductID, disbursementDate, restStartDate, - compoundingStartDate, repaymentStrategy, charges, graceOnInterestPayment, graceOnPrincipalPayment,tranches); - } - - private Integer applyForLoanApplicationForInterestRecalculation(final Integer clientID, final Integer loanProductID, - final String disbursementDate, final String restStartDate, final String compoundingStartDate, final String repaymentStrategy, - final List<HashMap> charges, final String graceOnInterestPayment, final String graceOnPrincipalPayment, List<HashMap> tranches) { - System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); - final String loanApplicationJSON = new LoanApplicationTestBuilder() // - .withPrincipal("10000.00") // - .withLoanTermFrequency("24") // - .withLoanTermFrequencyAsWeeks() // - .withNumberOfRepayments("12") // - .withRepaymentEveryAfter("2") // - .withRepaymentFrequencyTypeAsWeeks() // - .withInterestRatePerPeriod("2") // - .withAmortizationTypeAsEqualInstallments() // - .withTranches(tranches) - .withFixedEmiAmount("") // - .withInterestTypeAsDecliningBalance() // - .withInterestCalculationPeriodTypeAsDays() // - .withInterestCalculationPeriodTypeAsDays() // - .withExpectedDisbursementDate(disbursementDate) // - .withSubmittedOnDate(disbursementDate) // - .withRestFrequencyDate(restStartDate)// - .withwithRepaymentStrategy(repaymentStrategy) // - .withCharges(charges)// - .build(clientID.toString(), loanProductID.toString(), null); - return this.loanTransactionHelper.getLoanId(loanApplicationJSON); - } - - private List getDateAsArray(Calendar date, int addPeriod) { - return getDateAsArray(date, addPeriod, Calendar.DAY_OF_MONTH); - } - - private List getDateAsArray(Calendar date, int addvalue, int type) { - date.add(type, addvalue); - return new ArrayList<>(Arrays.asList(date.get(Calendar.YEAR), date.get(Calendar.MONTH) + 1, - date.get(Calendar.DAY_OF_MONTH))); - } -} http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/66cee785/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java deleted file mode 100644 index 2b00a98..0000000 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java +++ /dev/null @@ -1,219 +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 static org.junit.Assert.assertTrue; - -import java.util.HashMap; - -import org.apache.fineract.integrationtests.common.ClientHelper; -import org.apache.fineract.integrationtests.common.LoanRescheduleRequestHelper; -import org.apache.fineract.integrationtests.common.Utils; -import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanRescheduleRequestTestBuilder; -import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; -import org.junit.Before; -import org.junit.Test; - -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; - -/** - * Test the creation, approval and rejection of a loan reschedule request - **/ -@SuppressWarnings({ "rawtypes" }) -public class LoanRescheduleRequestTest { - private ResponseSpecification responseSpec; - private ResponseSpecification generalResponseSpec; - private RequestSpecification requestSpec; - private LoanTransactionHelper loanTransactionHelper; - private LoanRescheduleRequestHelper loanRescheduleRequestHelper; - private Integer clientId; - private Integer loanProductId; - private Integer loanId; - private Integer loanRescheduleRequestId; - private String loanPrincipalAmount = "100000.00"; - private String numberOfRepayments = "12"; - private String interestRatePerPeriod = "18"; - private String dateString = "4 September 2014"; - - @Before - public void initialize() { - 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.loanRescheduleRequestHelper = new LoanRescheduleRequestHelper(this.requestSpec, this.responseSpec); - - this.generalResponseSpec = new ResponseSpecBuilder().build(); - - // create all required entities - this.createRequiredEntities(); - } - - /** - * Creates the client, loan product, and loan entities - **/ - private void createRequiredEntities() { - this.createClientEntity(); - this.createLoanProductEntity(); - this.createLoanEntity(); - } - - /** - * create a new client - **/ - private void createClientEntity() { - this.clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - - ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, this.clientId); - } - - /** - * create a new loan product - **/ - private void createLoanProductEntity() { - System.out.println("---------------------------------CREATING LOAN PRODUCT------------------------------------------"); - - final String loanProductJSON = new LoanProductTestBuilder() - .withPrincipal(loanPrincipalAmount) - .withNumberOfRepayments(numberOfRepayments) - .withinterestRatePerPeriod(interestRatePerPeriod) - .withInterestRateFrequencyTypeAsYear() - .build(null); - - this.loanProductId = this.loanTransactionHelper.getLoanProductId(loanProductJSON); - System.out.println("Successfully created loan product (ID: " + this.loanProductId + ")"); - } - - /** - * submit a new loan application, approve and disburse the loan - **/ - private void createLoanEntity() { - System.out.println("---------------------------------NEW LOAN APPLICATION------------------------------------------"); - - final String loanApplicationJSON = new LoanApplicationTestBuilder() - .withPrincipal(loanPrincipalAmount) - .withLoanTermFrequency(numberOfRepayments) - .withLoanTermFrequencyAsMonths() - .withNumberOfRepayments(numberOfRepayments) - .withRepaymentEveryAfter("1") - .withRepaymentFrequencyTypeAsMonths() - .withAmortizationTypeAsEqualInstallments() - .withInterestCalculationPeriodTypeAsDays() - .withInterestRatePerPeriod(interestRatePerPeriod) - .withLoanTermFrequencyAsMonths() - .withSubmittedOnDate(dateString) - .withExpectedDisbursementDate(dateString) - .withPrincipalGrace("2") - .withInterestGrace("2") - .build(this.clientId.toString(), this.loanProductId.toString(), null); - - this.loanId = this.loanTransactionHelper.getLoanId(loanApplicationJSON); - - System.out.println("Sucessfully created loan (ID: " + this.loanId + ")"); - - this.approveLoanApplication(); - this.disburseLoan(); - } - - /** - * approve the loan application - **/ - private void approveLoanApplication() { - - if(this.loanId != null) { - this.loanTransactionHelper.approveLoan(this.dateString, this.loanId); - System.out.println("Successfully approved loan (ID: " + this.loanId + ")"); - } - } - - /** - * disburse the newly created loan - **/ - private void disburseLoan() { - - if(this.loanId != null) { - this.loanTransactionHelper.disburseLoan(this.dateString, this.loanId); - System.out.println("Successfully disbursed loan (ID: " + this.loanId + ")"); - } - } - - /** - * create new loan reschedule request - **/ - private void createLoanRescheduleRequest() { - System.out.println("---------------------------------CREATING LOAN RESCHEDULE REQUEST------------------------------------------"); - - final String requestJSON = new LoanRescheduleRequestTestBuilder().build(this.loanId.toString()); - - this.loanRescheduleRequestId = this.loanRescheduleRequestHelper.createLoanRescheduleRequest(requestJSON); - this.loanRescheduleRequestHelper.verifyCreationOfLoanRescheduleRequest(this.loanRescheduleRequestId); - - System.out.println("Successfully created loan reschedule request (ID: " + this.loanRescheduleRequestId + ")"); - } - - @Test - public void testCreateLoanRescheduleRequest() { - this.createLoanRescheduleRequest(); - } - - @Test - public void testRejectLoanRescheduleRequest() { - this.createLoanRescheduleRequest(); - - System.out.println("-----------------------------REJECTING LOAN RESCHEDULE REQUEST--------------------------"); - - final String requestJSON = new LoanRescheduleRequestTestBuilder().getRejectLoanRescheduleRequestJSON(); - this.loanRescheduleRequestHelper.rejectLoanRescheduleRequest(this.loanRescheduleRequestId, requestJSON); - - final HashMap response = (HashMap) this.loanRescheduleRequestHelper.getLoanRescheduleRequest(loanRescheduleRequestId, "statusEnum"); - assertTrue((Boolean)response.get("rejected")); - - System.out.println("Successfully rejected loan reschedule request (ID: " + this.loanRescheduleRequestId + ")"); - } - - @Test - public void testApproveLoanRescheduleRequest() { - this.createLoanRescheduleRequest(); - - System.out.println("-----------------------------APPROVING LOAN RESCHEDULE REQUEST--------------------------"); - - final String requestJSON = new LoanRescheduleRequestTestBuilder().getApproveLoanRescheduleRequestJSON(); - this.loanRescheduleRequestHelper.approveLoanRescheduleRequest(this.loanRescheduleRequestId, requestJSON); - - final HashMap response = (HashMap) this.loanRescheduleRequestHelper.getLoanRescheduleRequest(loanRescheduleRequestId, "statusEnum"); - assertTrue((Boolean)response.get("approved")); - - final Integer numberOfRepayments = (Integer) this.loanTransactionHelper.getLoanDetail(requestSpec, generalResponseSpec, loanId, "numberOfRepayments"); - final HashMap loanSummary = this.loanTransactionHelper.getLoanSummary(requestSpec, generalResponseSpec, loanId); - final Float totalExpectedRepayment = (Float) loanSummary.get("totalExpectedRepayment"); - - assertEquals("NUMBER OF REPAYMENTS SHOULD BE 16, NOT 12", "16", numberOfRepayments.toString()); - assertEquals("TOTAL EXPECTED REPAYMENT MUST BE EQUAL TO 118000.0", "118000.0", totalExpectedRepayment.toString()); - - System.out.println("Successfully approved loan reschedule request (ID: " + this.loanRescheduleRequestId + ")"); - } -}
