diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientLoanIntegrationTest.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientLoanIntegrationTest.java index 33042d405..26d4139d5 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientLoanIntegrationTest.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientLoanIntegrationTest.java @@ -1,27 +1,28 @@ package org.mifosplatform.integrationtests; -import static com.jayway.restassured.RestAssured.given; -import static com.jayway.restassured.RestAssured.post; -import static com.jayway.restassured.path.json.JsonPath.from; import static junit.framework.Assert.assertEquals; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; - import org.junit.Before; import org.junit.Test; +import org.mifosplatform.integrationtests.common.ClientHelper; +import org.mifosplatform.integrationtests.common.LoanApplicationTestBuilder; +import org.mifosplatform.integrationtests.common.LoanProductTestBuilder; +import org.mifosplatform.integrationtests.common.LoanTransactionHelper; +import org.mifosplatform.integrationtests.common.Utils; 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; -import org.mifosplatform.integrationtests.common.*; /** - * Client Loan Integration Test for checking Loan Application Repayment Schedule. + * Client Loan Integration Test for checking Loan Application Repayment + * Schedule. */ @SuppressWarnings({ "rawtypes", "unchecked" }) public class ClientLoanIntegrationTest { @@ -32,2437 +33,64 @@ public class ClientLoanIntegrationTest { @Before public void setup() { requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); - requestSpec.header("Authorization","Basic "+ Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); + requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); } @Test - public void checkClientLoanCreateAndDisburseFlow(){ + public void checkClientLoanCreateAndDisburseFlow() { Integer clientID = ClientHelper.createClient(requestSpec, responseSpec); ClientHelper.verifyClientCreatedOnServer(requestSpec, responseSpec, clientID); Integer loanProductID = createLoanProduct(); Integer loanID = applyForLoanApplication(clientID, loanProductID); - ArrayList loanSchedule = LoanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID); + ArrayList loanSchedule = LoanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID); verifyLoanRepaymentSchedule(loanSchedule); } private Integer createLoanProduct() { System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------"); - String loanProductJSON = new LoanProductTestBuilder() - .withPrincipal("12,000.00") - .withNumberOfRepayments("4") - .withRepaymentAfterEvery("1") - .withRepaymentTypeAsMonth() - .withinterestRatePerPeriod("2") - .withInterestRateFrequencyTypeAsMonths() - .withAmortizationTypeAsEqualInstallments() - .withInterestTypeAsDecliningBalance() - .withinterestRatePerPeriod("1") - .build(); + String loanProductJSON = new LoanProductTestBuilder().withPrincipal("12,000.00").withNumberOfRepayments("4") + .withRepaymentAfterEvery("1").withRepaymentTypeAsMonth().withinterestRatePerPeriod("2") + .withInterestRateFrequencyTypeAsMonths().withAmortizationTypeAsEqualInstallments().withInterestTypeAsDecliningBalance() + .withinterestRatePerPeriod("1").build(); return LoanTransactionHelper.getLoanProductId(requestSpec, responseSpec, loanProductJSON); } private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID) { System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); - String loanApplicationJSON = new LoanApplicationTestBuilder() - .withPrincipal("12,000.00") - .withLoanTermFrequency("4") - .withLoanTermFrequencyAsMonths() - .withNumberOfRepayments("4") - .withRepaymentEveryAfter("1") - .withRepaymentFrequencyTypeAsMonths() - .withInterestRatePerPeriod("2") - .withInterestRateFrequencyTypeAsMonths() - .withAmortizationTypeAsEqualInstallments() - .withInterestTypeAsDecliningBalance() - .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() - .withExpectedDisbursementDate("20 September 2011") - .withSubmittedOnDate("20 September 2011") - .build(clientID.toString(), loanProductID.toString()); + String loanApplicationJSON = new LoanApplicationTestBuilder().withPrincipal("12,000.00").withLoanTermFrequency("4") + .withLoanTermFrequencyAsMonths().withNumberOfRepayments("4").withRepaymentEveryAfter("1") + .withRepaymentFrequencyTypeAsMonths().withInterestRatePerPeriod("2").withInterestRateFrequencyTypeAsMonths() + .withAmortizationTypeAsEqualInstallments().withInterestTypeAsDecliningBalance() + .withInterestCalculationPeriodTypeSameAsRepaymentPeriod().withExpectedDisbursementDate("20 September 2011") + .withSubmittedOnDate("20 September 2011").build(clientID.toString(), loanProductID.toString()); return LoanTransactionHelper.getLoanId(requestSpec, responseSpec, loanApplicationJSON); } private void verifyLoanRepaymentSchedule(final ArrayList 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 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 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 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 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 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 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 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")); + assertEquals("Checking for Interest Due for 4th Month", new Float("61.79"), loanSchedule.get(4).get("interestOriginalDue")); } - - - -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +} \ No newline at end of file diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOff.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOff.java deleted file mode 100644 index 975969b4a..000000000 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOff.java +++ /dev/null @@ -1,2502 +0,0 @@ -package org.mifosplatform.integrationtests; - -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; -import org.junit.Before; -import org.junit.Test; -import org.mifosplatform.integrationtests.common.*; - -import java.util.ArrayList; -import java.util.HashMap; - -import static junit.framework.Assert.assertEquals; - -/** - * Client Loan Integration Test for checking Loan Disbursement with Waive Interest and Write-Off. - */ -@SuppressWarnings({ "rawtypes", "unchecked" }) -public class LoanWithWaiveInterestAndWriteOff { - - ResponseSpecification responseSpec; - RequestSpecification requestSpec; - final String - LP_PRINCIPAL = "12,000.00", - LP_REPAYMENTS ="2", - LP_REPAYMENT_PERIOD="6", - LP_INTEREST_RATE="1", - - PRINCIPAL="4,500.00", - LOAN_TERM_FREQUENCY="18", - NUMBER_OF_REPAYMENTS="9", - REPAYMENT_PERIOD="2", - DISBURSEMENT_DATE="30 October 2010", - LOAN_APPLICATION_SUBMISSION_DATE="23 September 2010", - EXPECTED_DISBURSAL_DATE="28 October 2010", - RATE_OF_INTEREST_PER_PERIOD="2", - DATE_OF_JOINING = "04 March 2009", - INTEREST_VALUE_AMOUNT = "40.00"; - - @Before - public void setup() { - requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); - requestSpec.header("Authorization","Basic "+ Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); - responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); - } - - @Test - public void checkClientLoanCreateAndDisburseFlow(){ - //CREATE CLIENT - Integer clientID = ClientHelper.createClient(requestSpec, responseSpec, DATE_OF_JOINING); - ClientHelper.verifyClientCreatedOnServer(requestSpec, responseSpec, clientID); - - //CREATE LOAN PRODUCT - Integer loanProductID = createLoanProduct(); - //APPLY FOR LOAN - Integer loanID = applyForLoanApplication(clientID, loanProductID); - HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec,responseSpec,loanID); - - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = LoanTransactionHelper.approveLoan(requestSpec, responseSpec, "28 September 2010", loanID); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - - //UNDO APPROVAL - loanStatusHashMap = LoanTransactionHelper.undoApproval(requestSpec, responseSpec, loanID); - LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); - - System.out.println("-----------------------------------RE-APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = LoanTransactionHelper.approveLoan(requestSpec, responseSpec, "1 October 2010", loanID); - LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); - LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); - - //DISBURSE - loanStatusHashMap = LoanTransactionHelper.disburseLoan(requestSpec, responseSpec, DISBURSEMENT_DATE, loanID); - System.out.println("DISBURSE "+loanStatusHashMap); - LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); - - //PERFORM REPAYMENTS AND CHECK LOAN STATUS - verifyRepaymentScheduleEntryFor(1, 4000.0F,loanID); - LoanTransactionHelper.makeRepayment(requestSpec,responseSpec, "1 January 2011", 540.0f, loanID); - LoanTransactionHelper.makeRepayment(requestSpec,responseSpec, "1 March 2011", 540.0f, loanID); - LoanTransactionHelper.waiveInterest(requestSpec,responseSpec, "1 May 2011",INTEREST_VALUE_AMOUNT, loanID); - LoanTransactionHelper.makeRepayment(requestSpec,responseSpec, "1 May 2011", 500.0f, loanID); - LoanTransactionHelper.makeRepayment(requestSpec,responseSpec, "1 July 2011", 540.0f, loanID); - LoanTransactionHelper.waiveInterest(requestSpec,responseSpec, "1 September 2011",INTEREST_VALUE_AMOUNT, loanID); - LoanTransactionHelper.makeRepayment(requestSpec,responseSpec, "1 September 2011", 500.0f, loanID); - LoanTransactionHelper.makeRepayment(requestSpec,responseSpec, "1 November 2011", 540.0f, loanID); - LoanTransactionHelper.waiveInterest(requestSpec,responseSpec, "1 January 2012",INTEREST_VALUE_AMOUNT, loanID); - LoanTransactionHelper.makeRepayment(requestSpec,responseSpec, "1 January 2012", 500.0f, loanID); - - verifyRepaymentScheduleEntryFor(7,1000.0f,loanID); - - //WRITE OFF LOAN AND CHECK ACCOUNT IS CLOSED - LoanStatusChecker.verifyLoanAccountIsClosed(LoanTransactionHelper.writeOffLoan(requestSpec, responseSpec, "1 March 2012", loanID)); - - } - - private void verifyRepaymentScheduleEntryFor(int repaymentNumber, float expectedPrincipalOutstanding, Integer loanID) { - System.out.println("---------------------------GETTING LOAN REPAYMENT SCHEDULE--------------------------------"); - ArrayList repaymentPeriods = LoanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID); - assertEquals(expectedPrincipalOutstanding,repaymentPeriods.get(repaymentNumber).get("principalLoanBalanceOutstanding")); - } - - - private Integer createLoanProduct() { - System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------"); - String loanProductJSON = new LoanProductTestBuilder() - .withPrincipal(LP_PRINCIPAL) - .withRepaymentTypeAsMonth() - .withRepaymentAfterEvery(LP_REPAYMENT_PERIOD) - .withNumberOfRepayments(LP_REPAYMENTS) - .withRepaymentTypeAsMonth() - .withinterestRatePerPeriod(LP_INTEREST_RATE) - .withInterestRateFrequencyTypeAsMonths() - .withAmortizationTypeAsEqualPrinciplePayment() - .withInterestTypeAsFlat() - .build(); - return LoanTransactionHelper.getLoanProductId(requestSpec,responseSpec,loanProductJSON); - } - - private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID) { - System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); - String loanApplicationJSON = new LoanApplicationTestBuilder() - .withPrincipal(PRINCIPAL) - .withLoanTermFrequency(LOAN_TERM_FREQUENCY) - .withLoanTermFrequencyAsMonths() - .withNumberOfRepayments(NUMBER_OF_REPAYMENTS) - .withRepaymentEveryAfter(REPAYMENT_PERIOD) - .withRepaymentFrequencyTypeAsMonths() - .withInterestRateFrequencyTypeAsMonths() - .withInterestRatePerPeriod(RATE_OF_INTEREST_PER_PERIOD) - .withInterestTypeAsFlatBalance() - .withAmortizationTypeAsEqualInstallments() - .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() - .withExpectedDisbursementDate(EXPECTED_DISBURSAL_DATE) - .withSubmittedOnDate(LOAN_APPLICATION_SUBMISSION_DATE) - .build(clientID.toString(), loanProductID.toString()); - return LoanTransactionHelper.getLoanId(requestSpec,responseSpec,loanApplicationJSON); - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOffIntegrationTest.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOffIntegrationTest.java new file mode 100644 index 000000000..7a3001663 --- /dev/null +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOffIntegrationTest.java @@ -0,0 +1,126 @@ +package org.mifosplatform.integrationtests; + +import static junit.framework.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.junit.Before; +import org.junit.Test; +import org.mifosplatform.integrationtests.common.ClientHelper; +import org.mifosplatform.integrationtests.common.LoanApplicationTestBuilder; +import org.mifosplatform.integrationtests.common.LoanProductTestBuilder; +import org.mifosplatform.integrationtests.common.LoanStatusChecker; +import org.mifosplatform.integrationtests.common.LoanTransactionHelper; +import org.mifosplatform.integrationtests.common.Utils; + +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; + +/** + * Client Loan Integration Test for checking Loan Disbursement with Waive + * Interest and Write-Off. + */ +@SuppressWarnings({ "rawtypes", "unchecked" }) +public class LoanWithWaiveInterestAndWriteOffIntegrationTest { + + ResponseSpecification responseSpec; + RequestSpecification requestSpec; + + final String LP_PRINCIPAL = "12,000.00", LP_REPAYMENTS = "2", LP_REPAYMENT_PERIOD = "6", LP_INTEREST_RATE = "1", + + PRINCIPAL = "4,500.00", LOAN_TERM_FREQUENCY = "18", NUMBER_OF_REPAYMENTS = "9", REPAYMENT_PERIOD = "2", + DISBURSEMENT_DATE = "30 October 2010", LOAN_APPLICATION_SUBMISSION_DATE = "23 September 2010", + EXPECTED_DISBURSAL_DATE = "28 October 2010", RATE_OF_INTEREST_PER_PERIOD = "2", DATE_OF_JOINING = "04 March 2009", + INTEREST_VALUE_AMOUNT = "40.00"; + + @Before + public void setup() { + requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); + requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); + responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); + } + + @Test + public void checkClientLoanCreateAndDisburseFlow() { + // CREATE CLIENT + Integer clientID = ClientHelper.createClient(requestSpec, responseSpec, DATE_OF_JOINING); + ClientHelper.verifyClientCreatedOnServer(requestSpec, responseSpec, clientID); + + // CREATE LOAN PRODUCT + Integer loanProductID = createLoanProduct(); + // APPLY FOR LOAN + Integer loanID = applyForLoanApplication(clientID, loanProductID); + HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID); + + LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); + + System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------"); + loanStatusHashMap = LoanTransactionHelper.approveLoan(requestSpec, responseSpec, "28 September 2010", loanID); + LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); + LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); + + // UNDO APPROVAL + loanStatusHashMap = LoanTransactionHelper.undoApproval(requestSpec, responseSpec, loanID); + LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); + + System.out.println("-----------------------------------RE-APPROVE LOAN-----------------------------------------"); + loanStatusHashMap = LoanTransactionHelper.approveLoan(requestSpec, responseSpec, "1 October 2010", loanID); + LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); + LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); + + // DISBURSE + loanStatusHashMap = LoanTransactionHelper.disburseLoan(requestSpec, responseSpec, DISBURSEMENT_DATE, loanID); + System.out.println("DISBURSE " + loanStatusHashMap); + LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); + + // PERFORM REPAYMENTS AND CHECK LOAN STATUS + verifyRepaymentScheduleEntryFor(1, 4000.0F, loanID); + LoanTransactionHelper.makeRepayment(requestSpec, responseSpec, "1 January 2011", 540.0f, loanID); + LoanTransactionHelper.makeRepayment(requestSpec, responseSpec, "1 March 2011", 540.0f, loanID); + LoanTransactionHelper.waiveInterest(requestSpec, responseSpec, "1 May 2011", INTEREST_VALUE_AMOUNT, loanID); + LoanTransactionHelper.makeRepayment(requestSpec, responseSpec, "1 May 2011", 500.0f, loanID); + LoanTransactionHelper.makeRepayment(requestSpec, responseSpec, "1 July 2011", 540.0f, loanID); + LoanTransactionHelper.waiveInterest(requestSpec, responseSpec, "1 September 2011", INTEREST_VALUE_AMOUNT, loanID); + LoanTransactionHelper.makeRepayment(requestSpec, responseSpec, "1 September 2011", 500.0f, loanID); + LoanTransactionHelper.makeRepayment(requestSpec, responseSpec, "1 November 2011", 540.0f, loanID); + LoanTransactionHelper.waiveInterest(requestSpec, responseSpec, "1 January 2012", INTEREST_VALUE_AMOUNT, loanID); + LoanTransactionHelper.makeRepayment(requestSpec, responseSpec, "1 January 2012", 500.0f, loanID); + + verifyRepaymentScheduleEntryFor(7, 1000.0f, loanID); + + // WRITE OFF LOAN AND CHECK ACCOUNT IS CLOSED + LoanStatusChecker.verifyLoanAccountIsClosed(LoanTransactionHelper.writeOffLoan(requestSpec, responseSpec, "1 March 2012", loanID)); + + } + + private void verifyRepaymentScheduleEntryFor(final int repaymentNumber, final float expectedPrincipalOutstanding, final Integer loanID) { + System.out.println("---------------------------GETTING LOAN REPAYMENT SCHEDULE--------------------------------"); + ArrayList repaymentPeriods = LoanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID); + assertEquals(expectedPrincipalOutstanding, repaymentPeriods.get(repaymentNumber).get("principalLoanBalanceOutstanding")); + } + + private Integer createLoanProduct() { + System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------"); + String loanProductJSON = new LoanProductTestBuilder().withPrincipal(LP_PRINCIPAL).withRepaymentTypeAsMonth() + .withRepaymentAfterEvery(LP_REPAYMENT_PERIOD).withNumberOfRepayments(LP_REPAYMENTS).withRepaymentTypeAsMonth() + .withinterestRatePerPeriod(LP_INTEREST_RATE).withInterestRateFrequencyTypeAsMonths() + .withAmortizationTypeAsEqualPrinciplePayment().withInterestTypeAsFlat().build(); + return LoanTransactionHelper.getLoanProductId(requestSpec, responseSpec, loanProductJSON); + } + + private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID) { + System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); + String loanApplicationJSON = new LoanApplicationTestBuilder().withPrincipal(PRINCIPAL).withLoanTermFrequency(LOAN_TERM_FREQUENCY) + .withLoanTermFrequencyAsMonths().withNumberOfRepayments(NUMBER_OF_REPAYMENTS).withRepaymentEveryAfter(REPAYMENT_PERIOD) + .withRepaymentFrequencyTypeAsMonths().withInterestRateFrequencyTypeAsMonths() + .withInterestRatePerPeriod(RATE_OF_INTEREST_PER_PERIOD).withInterestTypeAsFlatBalance() + .withAmortizationTypeAsEqualInstallments().withInterestCalculationPeriodTypeSameAsRepaymentPeriod() + .withExpectedDisbursementDate(EXPECTED_DISBURSAL_DATE).withSubmittedOnDate(LOAN_APPLICATION_SUBMISSION_DATE) + .build(clientID.toString(), loanProductID.toString()); + return LoanTransactionHelper.getLoanId(requestSpec, responseSpec, loanApplicationJSON); + } +} diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/ClientHelper.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/ClientHelper.java index 488242e20..52717ff72 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/ClientHelper.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/ClientHelper.java @@ -1,34 +1,29 @@ package org.mifosplatform.integrationtests.common; +import java.util.HashMap; +import java.util.Random; + +import junit.framework.Assert; + import com.google.gson.Gson; import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; -import java.util.HashMap; -import java.util.Random; - -import static com.jayway.restassured.RestAssured.given; -import static com.jayway.restassured.RestAssured.post; -import static com.jayway.restassured.path.json.JsonPath.from; - -import junit.framework.Assert; - - public class ClientHelper { + private static final String CREATE_CLIENT_URL = "/mifosng-provider/api/v1/clients?tenantIdentifier=default"; - - public static Integer createClient(RequestSpecification requestSpec, ResponseSpecification responseSpec) { - return createClient(requestSpec,responseSpec,"04 March 2012"); + public static Integer createClient(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { + return createClient(requestSpec, responseSpec, "04 March 2012"); } - public static Integer createClient(RequestSpecification requestSpec, ResponseSpecification responseSpec,String dateOfJoining) { + public static Integer createClient(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String dateOfJoining) { System.out.println("---------------------------------CREATING A CLIENT---------------------------------------------"); return Utils.performServerPost(requestSpec, responseSpec, CREATE_CLIENT_URL, getTestClientAsJSON(dateOfJoining), "clientId"); } - - public static String getTestClientAsJSON(String dateOfJoining) { + public static String getTestClientAsJSON(final String dateOfJoining) { HashMap map = new HashMap(); map.put("officeId", "1"); map.put("firstname", randomNameGenerator("Client_FirstName_", 5)); @@ -37,15 +32,16 @@ public class ClientHelper { map.put("dateFormat", "dd MMMM yyyy"); map.put("locale", "en"); map.put("joinedDate", dateOfJoining); - System.out.println("map : "+map); + System.out.println("map : " + map); return new Gson().toJson(map); } - public static void verifyClientCreatedOnServer(RequestSpecification requestSpec, ResponseSpecification responseSpec, Integer generatedClientID) { + public static void verifyClientCreatedOnServer(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final Integer generatedClientID) { System.out.println("------------------------------CHECK CLIENT DETAILS------------------------------------\n"); - String CLIENT_URL="/mifosng-provider/api/v1/clients/" + generatedClientID + "?tenantIdentifier=default"; + String CLIENT_URL = "/mifosng-provider/api/v1/clients/" + generatedClientID + "?tenantIdentifier=default"; Integer responseClientID = Utils.performServerGet(requestSpec, responseSpec, CLIENT_URL, "id"); - Assert.assertEquals(generatedClientID,responseClientID); + Assert.assertEquals(generatedClientID, responseClientID); } private static String randomStringGenerator(final String prefix, final int len, final String sourceSetString) { @@ -54,7 +50,7 @@ public class ClientHelper { StringBuilder sb = new StringBuilder(len); for (int i = 0; i < len; i++) sb.append((sourceSetString).charAt(rnd.nextInt(lengthOfSource))); - return (prefix+(sb.toString())); + return (prefix + (sb.toString())); } public static String randomNameGenerator(final String prefix, final int lenOfRandomSuffix) { @@ -64,8 +60,4 @@ public class ClientHelper { private static String randomIDGenerator(final String prefix, final int lenOfRandomSuffix) { return randomStringGenerator(prefix, lenOfRandomSuffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); } - - - - -} +} \ No newline at end of file diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanApplicationTestBuilder.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanApplicationTestBuilder.java index 4d7214a71..7adb9b71e 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanApplicationTestBuilder.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanApplicationTestBuilder.java @@ -1,48 +1,50 @@ package org.mifosplatform.integrationtests.common; -import com.google.gson.Gson; - import java.util.HashMap; +import com.google.gson.Gson; public class LoanApplicationTestBuilder { + private static final String DAYS = "0"; private static final String WEEKS = "1"; private static final String MONTHS = "2"; private static final String YEARS = "3"; private static final String DECLINING_BALANCE = "0"; private static final String FLAT_BALANCE = "1"; - private static final String EQUAL_PRINCIPLE_PAYMENTS="0"; - private static final String EQUAL_INSTALLMENTS="1"; - private static final String CALCULATION_PERIOD_SAME_AS_REPAYMENT_PERIOD="1"; - private static final String MIFOS_STANDARD_STRATEGY ="1"; + private static final String EQUAL_PRINCIPLE_PAYMENTS = "0"; + private static final String EQUAL_INSTALLMENTS = "1"; + private static final String CALCULATION_PERIOD_SAME_AS_REPAYMENT_PERIOD = "1"; + private static final String MIFOS_STANDARD_STRATEGY = "1"; private String principal = "10,000"; private String loanTermFrequency = ""; + // FIXME - unused variable? private String loanTermFrequencyType = ""; private String numberOfRepayment = "0"; private String repaymentPeriod = "0"; private String repaymentFrequencyType = ""; - private String interestRate = "2"; + private String interestRate = "2"; private String interestRateFrequencyType = "0"; private String interestType = ""; private String amortizationType = ""; private String interestCalculationPeriodType = CALCULATION_PERIOD_SAME_AS_REPAYMENT_PERIOD; - private String transactionProcessingID = MIFOS_STANDARD_STRATEGY; + private final String transactionProcessingID = MIFOS_STANDARD_STRATEGY; private String expectedDisbursmentDate = ""; private String submittedOndate = ""; - public String build(String clientID, String loanProductId){ + public String build(final String clientID, final String loanProductId) { HashMap map = new HashMap(); map.put("dateFormat", "dd MMMM yyyy"); map.put("locale", "en_GB"); map.put("clientId", clientID); - map.put("productId",loanProductId); + map.put("productId", loanProductId); map.put("principal", principal); - map.put("loanTermFrequency",loanTermFrequency); - map.put("loanTermFrequencyType", "2"); + map.put("loanTermFrequency", loanTermFrequency); + map.put("loanTermFrequencyType", "2"); // FIXME - Should this be using + // loanTermFrequencyType value? map.put("numberOfRepayments", numberOfRepayment); map.put("repaymentEvery", repaymentPeriod); map.put("repaymentFrequencyType", repaymentFrequencyType); @@ -57,101 +59,113 @@ public class LoanApplicationTestBuilder { return new Gson().toJson(map); } - public LoanApplicationTestBuilder withPrincipal(String principalAmount){ + public LoanApplicationTestBuilder withPrincipal(final String principalAmount) { this.principal = principalAmount; return this; } - public LoanApplicationTestBuilder withLoanTermFrequency(String loanToBePayedDuration){ - this.loanTermFrequency= loanToBePayedDuration; + public LoanApplicationTestBuilder withLoanTermFrequency(final String loanToBePayedDuration) { + this.loanTermFrequency = loanToBePayedDuration; return this; } - public LoanApplicationTestBuilder withLoanTermFrequencyAsDays(){ - this.loanTermFrequencyType=DAYS; + public LoanApplicationTestBuilder withLoanTermFrequencyAsDays() { + this.loanTermFrequencyType = DAYS; return this; } - public LoanApplicationTestBuilder withLoanTermFrequencyAsMonths(){ - this.loanTermFrequencyType=MONTHS; + + public LoanApplicationTestBuilder withLoanTermFrequencyAsMonths() { + this.loanTermFrequencyType = MONTHS; return this; } - public LoanApplicationTestBuilder withLoanTermFrequencyAsWeeks(){ - this.loanTermFrequencyType=WEEKS; + + public LoanApplicationTestBuilder withLoanTermFrequencyAsWeeks() { + this.loanTermFrequencyType = WEEKS; return this; } - public LoanApplicationTestBuilder withLoanTermFrequencyAsYears(){ - this.loanTermFrequencyType=YEARS; + + public LoanApplicationTestBuilder withLoanTermFrequencyAsYears() { + this.loanTermFrequencyType = YEARS; return this; } - public LoanApplicationTestBuilder withNumberOfRepayments(String numberOfRepayments){ - this.numberOfRepayment= numberOfRepayments; + + public LoanApplicationTestBuilder withNumberOfRepayments(final String numberOfRepayments) { + this.numberOfRepayment = numberOfRepayments; return this; } - public LoanApplicationTestBuilder withRepaymentEveryAfter(String repaymentPeriod){ - this.repaymentPeriod=repaymentPeriod; + + public LoanApplicationTestBuilder withRepaymentEveryAfter(final String repaymentPeriod) { + this.repaymentPeriod = repaymentPeriod; return this; } - public LoanApplicationTestBuilder withRepaymentFrequencyTypeAsDays(){ + + public LoanApplicationTestBuilder withRepaymentFrequencyTypeAsDays() { this.repaymentFrequencyType = DAYS; return this; } - public LoanApplicationTestBuilder withRepaymentFrequencyTypeAsMonths(){ + public LoanApplicationTestBuilder withRepaymentFrequencyTypeAsMonths() { this.repaymentFrequencyType = MONTHS; return this; } - public LoanApplicationTestBuilder withRepaymentFrequencyTypeAsWeeks(){ + public LoanApplicationTestBuilder withRepaymentFrequencyTypeAsWeeks() { this.repaymentFrequencyType = WEEKS; return this; } - public LoanApplicationTestBuilder withInterestRatePerPeriod(String interestRate){ - this.interestRate=interestRate; - return this; - } - public LoanApplicationTestBuilder withInterestRateFrequencyTypeAsMonths(){ - this.interestRateFrequencyType=MONTHS; - return this; - } - public LoanApplicationTestBuilder withInterestRateFrequencyTypeAsYears(){ - this.interestRateFrequencyType=YEARS; - return this; - } - public LoanApplicationTestBuilder withInterestTypeAsFlatBalance(){ - this.interestType=FLAT_BALANCE; - return this; - } - public LoanApplicationTestBuilder withInterestTypeAsDecliningBalance(){ - this.interestType=DECLINING_BALANCE; + public LoanApplicationTestBuilder withInterestRatePerPeriod(final String interestRate) { + this.interestRate = interestRate; return this; } - public LoanApplicationTestBuilder withAmortizationTypeAsEqualInstallments(){ - this.amortizationType=EQUAL_INSTALLMENTS; + public LoanApplicationTestBuilder withInterestRateFrequencyTypeAsMonths() { + this.interestRateFrequencyType = MONTHS; return this; } - public LoanApplicationTestBuilder withAmortizationTypeAsEqualPrincipalPayments(){ - this.amortizationType=EQUAL_PRINCIPLE_PAYMENTS; + public LoanApplicationTestBuilder withInterestRateFrequencyTypeAsYears() { + this.interestRateFrequencyType = YEARS; return this; } - public LoanApplicationTestBuilder withInterestCalculationPeriodTypeSameAsRepaymentPeriod(){ - this.interestCalculationPeriodType=CALCULATION_PERIOD_SAME_AS_REPAYMENT_PERIOD; + public LoanApplicationTestBuilder withInterestTypeAsFlatBalance() { + this.interestType = FLAT_BALANCE; return this; } - public LoanApplicationTestBuilder withInterestCalculationPeriodTypeAsDays(){ - this.interestCalculationPeriodType=DAYS; + public LoanApplicationTestBuilder withInterestTypeAsDecliningBalance() { + this.interestType = DECLINING_BALANCE; return this; } - public LoanApplicationTestBuilder withExpectedDisbursementDate(String expectedDisbursementDate){ - this.expectedDisbursmentDate=expectedDisbursementDate; + + public LoanApplicationTestBuilder withAmortizationTypeAsEqualInstallments() { + this.amortizationType = EQUAL_INSTALLMENTS; return this; } - public LoanApplicationTestBuilder withSubmittedOnDate(String loanApplicationSubmittedDate){ - this.submittedOndate=loanApplicationSubmittedDate; + + public LoanApplicationTestBuilder withAmortizationTypeAsEqualPrincipalPayments() { + this.amortizationType = EQUAL_PRINCIPLE_PAYMENTS; + return this; + } + + public LoanApplicationTestBuilder withInterestCalculationPeriodTypeSameAsRepaymentPeriod() { + this.interestCalculationPeriodType = CALCULATION_PERIOD_SAME_AS_REPAYMENT_PERIOD; + return this; + } + + public LoanApplicationTestBuilder withInterestCalculationPeriodTypeAsDays() { + this.interestCalculationPeriodType = DAYS; + return this; + } + + public LoanApplicationTestBuilder withExpectedDisbursementDate(final String expectedDisbursementDate) { + this.expectedDisbursmentDate = expectedDisbursementDate; + return this; + } + + public LoanApplicationTestBuilder withSubmittedOnDate(final String loanApplicationSubmittedDate) { + this.submittedOndate = loanApplicationSubmittedDate; return this; } } diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanProductTestBuilder.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanProductTestBuilder.java index a56134d08..1c81e1617 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanProductTestBuilder.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanProductTestBuilder.java @@ -1,9 +1,9 @@ package org.mifosplatform.integrationtests.common; -import com.google.gson.Gson; - import java.util.HashMap; +import com.google.gson.Gson; + public class LoanProductTestBuilder { private static final String LOCALE = "en_GB"; private static final String DIGITS_AFTER_DECIMAL = "2"; @@ -18,9 +18,9 @@ public class LoanProductTestBuilder { private static final String DECLINING_BALANCE="0"; private static final String FLAT_BALANCE="1"; private static final String MIFOS_STANDARD_STRATEGY ="1"; - private static final String HEAVENS_FAMILY_STRATEGY ="2"; - private static final String CREO_CORE_STRATEGY ="3"; - private static final String RBI_INDIA_STRATEGY ="4"; + // private static final String HEAVENS_FAMILY_STRATEGY ="2"; + // private static final String CREO_CORE_STRATEGY ="3"; + // private static final String RBI_INDIA_STRATEGY ="4"; private static final String NONE ="1"; private static final String CASH_BASED ="2"; private static final String ACCRUAL_BASED ="3"; @@ -36,9 +36,9 @@ public class LoanProductTestBuilder { private String interestType = FLAT_BALANCE; private String interestCalculationPeriodType=CALCULATION_PERIOD_SAME_AS_REPAYMENT_PERIOD; private String inArrearsTolerance="0"; - private String transactionProcessingStrategy=MIFOS_STANDARD_STRATEGY; + private final String transactionProcessingStrategy=MIFOS_STANDARD_STRATEGY; private String accountingRule =NONE; - private String currencyCode = INR; + private final String currencyCode = INR; private String amortizationType= EQUAL_INSTALLMENTS; public String build() { diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanStatusChecker.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanStatusChecker.java index 947f4b287..16db8c482 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanStatusChecker.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanStatusChecker.java @@ -1,52 +1,50 @@ package org.mifosplatform.integrationtests.common; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; -import junit.framework.Assert; - -import java.util.HashMap; - -import static com.jayway.restassured.RestAssured.given; -import static com.jayway.restassured.path.json.JsonPath.from; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.util.HashMap; + +import junit.framework.Assert; + +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; + +@SuppressWarnings("rawtypes") public class LoanStatusChecker { - public static void verifyLoanIsApproved(HashMap loanStatusHashMap) { + public static void verifyLoanIsApproved(final HashMap loanStatusHashMap) { assertFalse(getStatus(loanStatusHashMap, "pendingApproval")); } - public static void verifyLoanIsWaitingForDisbursal(HashMap loanStatusHashMap) { + public static void verifyLoanIsWaitingForDisbursal(final HashMap loanStatusHashMap) { assertTrue(getStatus(loanStatusHashMap, "waitingForDisbursal")); } - public static void verifyLoanIsPending(HashMap loanStatusHashMap) { + public static void verifyLoanIsPending(final HashMap loanStatusHashMap) { assertTrue(getStatus(loanStatusHashMap, "pendingApproval")); } - public static void verifyLoanIsActive(HashMap loanStatusHashMap) { + public static void verifyLoanIsActive(final HashMap loanStatusHashMap) { assertTrue(getStatus(loanStatusHashMap, "active")); } - public static void verifyLoanNeedsApproval(HashMap loanStatusHashMap) { + public static void verifyLoanNeedsApproval(final HashMap loanStatusHashMap) { assertTrue(getStatus(loanStatusHashMap, "pendingApproval")); } - public static void verifyLoanAccountIsClosed(HashMap loanStatusHashMap){ + public static void verifyLoanAccountIsClosed(final HashMap loanStatusHashMap) { Assert.assertTrue(getStatus(loanStatusHashMap, "closed")); } - public static HashMap getStatusOfLoan(RequestSpecification requestSpec, ResponseSpecification responseSpec, Integer loanID){ - String url = "/mifosng-provider/api/v1/loans/" + loanID + "?tenantIdentifier=default"; + public static HashMap getStatusOfLoan(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final Integer loanID) { + String url = "/mifosng-provider/api/v1/loans/" + loanID + "?tenantIdentifier=default"; return Utils.performServerGet(requestSpec, responseSpec, url, "status"); } - - - private static boolean getStatus(HashMap loanStatusMap, String nameOfLoanStatusString){ - return (Boolean)loanStatusMap.get(nameOfLoanStatusString); + private static boolean getStatus(final HashMap loanStatusMap, final String nameOfLoanStatusString) { + return (Boolean) loanStatusMap.get(nameOfLoanStatusString); } - } diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanTransactionHelper.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanTransactionHelper.java index 5c4cf3fe5..39c7de699 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanTransactionHelper.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/LoanTransactionHelper.java @@ -1,12 +1,13 @@ package org.mifosplatform.integrationtests.common; +import java.util.ArrayList; +import java.util.HashMap; + import com.google.gson.Gson; import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; -import java.util.ArrayList; -import java.util.HashMap; - +@SuppressWarnings("rawtypes") public class LoanTransactionHelper { private static final String CREATE_LOAN_PRODUCT_URL = "/mifosng-provider/api/v1/loanproducts?tenantIdentifier=default"; @@ -18,49 +19,60 @@ public class LoanTransactionHelper { private static final String WAIVE_INTEREST_COMMAND = "waiveinterest"; private static final String MAKE_REPAYMENT_COMMAND = "repayment"; - - - - public static Integer getLoanProductId(RequestSpecification requestSpec, ResponseSpecification responseSpec, String loanProductJSON) { + public static Integer getLoanProductId(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String loanProductJSON) { return Utils.performServerPost(requestSpec, responseSpec, CREATE_LOAN_PRODUCT_URL, loanProductJSON, "resourceId"); } - public static Integer getLoanId(RequestSpecification requestSpec, ResponseSpecification responseSpec, String loanApplicationJSON) { + public static Integer getLoanId(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String loanApplicationJSON) { return Utils.performServerPost(requestSpec, responseSpec, APPLY_LOAN_URL, loanApplicationJSON, "loanId"); } - public static ArrayList getLoanRepaymentSchedule(RequestSpecification requestSpec, ResponseSpecification responseSpec,final Integer loanID){ - String URL = "/mifosng-provider/api/v1/loans/" + loanID +"?associations=repaymentSchedule&tenantIdentifier=default"; + public static ArrayList getLoanRepaymentSchedule(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final Integer loanID) { + String URL = "/mifosng-provider/api/v1/loans/" + loanID + "?associations=repaymentSchedule&tenantIdentifier=default"; HashMap response = Utils.performServerGet(requestSpec, responseSpec, URL, "repaymentSchedule"); return (ArrayList) response.get("periods"); } - public static HashMap approveLoan(RequestSpecification requestSpec, ResponseSpecification responseSpec, String approvalDate, Integer loanID) { - return performLoanTransaction(requestSpec, responseSpec, createLoanOperationURL(APPROVE_LOAN_COMMAND, loanID), getApproveLoanAsJSON(approvalDate)); + public static HashMap approveLoan(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String approvalDate, final Integer loanID) { + return performLoanTransaction(requestSpec, responseSpec, createLoanOperationURL(APPROVE_LOAN_COMMAND, loanID), + getApproveLoanAsJSON(approvalDate)); } - public static HashMap undoApproval(RequestSpecification requestSpec, ResponseSpecification responseSpec, Integer loanID) { + public static HashMap undoApproval(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final Integer loanID) { String undoBodyJson = "{'note':'UNDO APPROVAL'}"; return performLoanTransaction(requestSpec, responseSpec, createLoanOperationURL(UNDO_APPROVAL_LOAN_COMMAND, loanID), undoBodyJson); } - public static HashMap disburseLoan(RequestSpecification requestSpec, ResponseSpecification responseSpec, String date, Integer loanID) { - return performLoanTransaction(requestSpec, responseSpec, createLoanOperationURL(DISBURSE_LOAN_COMMAND, loanID), getDisburseLoanAsJSON(date)); + public static HashMap disburseLoan(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, final String date, + final Integer loanID) { + return performLoanTransaction(requestSpec, responseSpec, createLoanOperationURL(DISBURSE_LOAN_COMMAND, loanID), + getDisburseLoanAsJSON(date)); } - public static HashMap writeOffLoan(RequestSpecification requestSpec, ResponseSpecification responseSpec, String date, Integer loanID) { - return performLoanTransaction(requestSpec, responseSpec, createLoanTransactionURL(WRITE_OFF_LOAN_COMMAND, loanID), getWriteOffBodyAsJSON(date)); + public static HashMap writeOffLoan(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, final String date, + final Integer loanID) { + return performLoanTransaction(requestSpec, responseSpec, createLoanTransactionURL(WRITE_OFF_LOAN_COMMAND, loanID), + getWriteOffBodyAsJSON(date)); } - public static HashMap waiveInterest(RequestSpecification requestSpec, ResponseSpecification responseSpec, String date,String amountToBeWaived, Integer loanID) { - return performLoanTransaction(requestSpec, responseSpec, createLoanTransactionURL(WAIVE_INTEREST_COMMAND,loanID), getWaiveBodyAsJSON(date, amountToBeWaived)); + public static HashMap waiveInterest(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String date, final String amountToBeWaived, final Integer loanID) { + return performLoanTransaction(requestSpec, responseSpec, createLoanTransactionURL(WAIVE_INTEREST_COMMAND, loanID), + getWaiveBodyAsJSON(date, amountToBeWaived)); } - public static HashMap makeRepayment(RequestSpecification requestSpec, ResponseSpecification responseSpec, String date,Float amountToBePaid, Integer loanID) { - return performLoanTransaction(requestSpec, responseSpec, createLoanTransactionURL(MAKE_REPAYMENT_COMMAND,loanID), getRepaymentBodyAsJSON(date,amountToBePaid)); + public static HashMap makeRepayment(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String date, final Float amountToBePaid, final Integer loanID) { + return performLoanTransaction(requestSpec, responseSpec, createLoanTransactionURL(MAKE_REPAYMENT_COMMAND, loanID), + getRepaymentBodyAsJSON(date, amountToBePaid)); } - public static String getDisburseLoanAsJSON(String actualDisbursementDate) { + public static String getDisburseLoanAsJSON(final String actualDisbursementDate) { HashMap map = new HashMap(); map.put("locale", "en"); map.put("dateFormat", "dd MMMM yyyy"); @@ -69,7 +81,7 @@ public class LoanTransactionHelper { return new Gson().toJson(map); } - public static String getApproveLoanAsJSON(String approvalDate) { + public static String getApproveLoanAsJSON(final String approvalDate) { HashMap map = new HashMap(); map.put("locale", "en"); map.put("dateFormat", "dd MMMM yyyy"); @@ -78,7 +90,7 @@ public class LoanTransactionHelper { return new Gson().toJson(map); } - public static String getRepaymentBodyAsJSON(String transactionDate, Float transactionAmount) { + public static String getRepaymentBodyAsJSON(final String transactionDate, final Float transactionAmount) { HashMap map = new HashMap(); map.put("locale", "en"); map.put("dateFormat", "dd MMMM yyyy"); @@ -88,7 +100,7 @@ public class LoanTransactionHelper { return new Gson().toJson(map); } - public static String getWriteOffBodyAsJSON(String transactionDate) { + public static String getWriteOffBodyAsJSON(final String transactionDate) { HashMap map = new HashMap(); map.put("dateFormat", "dd MMMM yyyy"); map.put("locale", "en"); @@ -97,7 +109,7 @@ public class LoanTransactionHelper { return new Gson().toJson(map); } - public static String getWaiveBodyAsJSON(String transactionDate, String amountToBeWaived) { + public static String getWaiveBodyAsJSON(final String transactionDate, final String amountToBeWaived) { HashMap map = new HashMap(); map.put("locale", "en"); map.put("dateFormat", "dd MMMM yyyy"); @@ -128,19 +140,18 @@ public class LoanTransactionHelper { return new Gson().toJson(map); } - - private static String createLoanOperationURL(String command, Integer loanID) { + private static String createLoanOperationURL(final String command, final Integer loanID) { return "/mifosng-provider/api/v1/loans/" + loanID + "?command=" + command + "&tenantIdentifier=default"; } - private static String createLoanTransactionURL(String command, Integer loanID) { - return "/mifosng-provider/api/v1/loans/" + loanID + "/transactions?command="+command+"&tenantIdentifier=default"; + private static String createLoanTransactionURL(final String command, final Integer loanID) { + return "/mifosng-provider/api/v1/loans/" + loanID + "/transactions?command=" + command + "&tenantIdentifier=default"; } - private static HashMap performLoanTransaction(RequestSpecification requestSpec, ResponseSpecification responseSpec, String postURLForLoanTransaction, String jsonToBeSent) { + private static HashMap performLoanTransaction(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String postURLForLoanTransaction, final String jsonToBeSent) { HashMap response = Utils.performServerPost(requestSpec, responseSpec, postURLForLoanTransaction, jsonToBeSent, "changes"); return (HashMap) response.get("status"); } - -} +} \ No newline at end of file diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/Utils.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/Utils.java index edfdf82d7..a78a0b336 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/Utils.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/Utils.java @@ -1,16 +1,16 @@ package org.mifosplatform.integrationtests.common; +import static com.jayway.restassured.RestAssured.given; +import static com.jayway.restassured.path.json.JsonPath.from; + import com.jayway.restassured.RestAssured; import com.jayway.restassured.path.json.JsonPath; import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; -import static com.jayway.restassured.RestAssured.given; -import static com.jayway.restassured.RestAssured.post; -import static com.jayway.restassured.path.json.JsonPath.from; - - +@SuppressWarnings("unchecked") public class Utils { + private static final String LOGIN_URL = "/mifosng-provider/api/v1/authentication?username=mifos&password=password&tenantIdentifier=default"; public static String loginIntoServerAndGetBase64EncodedAuthenticationKey() { @@ -19,21 +19,15 @@ public class Utils { return JsonPath.with(json).get("base64EncodedAuthenticationKey"); } - public static T performServerGet(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, - final String getURL, final String jsonAttributeToGetBack){ - String json = given().spec(requestSpec) - .expect().spec(responseSpec).log().ifError() - .when().get(getURL) - .andReturn().asString(); + final String getURL, final String jsonAttributeToGetBack) { + String json = given().spec(requestSpec).expect().spec(responseSpec).log().ifError().when().get(getURL).andReturn().asString(); return (T) from(json).get(jsonAttributeToGetBack); } public static T performServerPost(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, - final String postURL, final String jsonBodyToSend, final String jsonAttributeToGetBack){ - String json = given().spec(requestSpec).body(jsonBodyToSend) - .expect().spec(responseSpec).log().ifError() - .when().post(postURL) + final String postURL, final String jsonBodyToSend, final String jsonAttributeToGetBack) { + String json = given().spec(requestSpec).body(jsonBodyToSend).expect().spec(responseSpec).log().ifError().when().post(postURL) .andReturn().asString(); return (T) from(json).get(jsonAttributeToGetBack); }