From 513f6f276467882279f809e6b5cec1cc39a42f87 Mon Sep 17 00:00:00 2001 From: Priti Date: Mon, 1 Apr 2013 19:32:57 +0530 Subject: [PATCH] Refactoring --- .../ClientLoanIntegrationTest.java | 51 +------- .../LoanWithWaiveInterestAndWriteOff.java | 66 +++------- .../integrationtests/common/Utils.java | 121 ++++++++++++++++-- 3 files changed, 129 insertions(+), 109 deletions(-) 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 de77ac372..3ca6302c3 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientLoanIntegrationTest.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/ClientLoanIntegrationTest.java @@ -13,7 +13,6 @@ import java.util.HashMap; import org.junit.Before; import org.junit.Test; -import com.google.gson.Gson; import com.jayway.restassured.builder.RequestSpecBuilder; import com.jayway.restassured.builder.ResponseSpecBuilder; import com.jayway.restassured.http.ContentType; @@ -42,7 +41,7 @@ public class ClientLoanIntegrationTest { @Test public void checkClientLoanCreateAndDisburseFlow(){ Integer clientID = Utils.createClient(requestSpec, responseSpec); - checkClientCreatedOnServer(clientID); + Utils.verifyClientCreatedOnServer(requestSpec, responseSpec, clientID); Integer loanProductID = createLoanProduct(); applyForLoanApplication(clientID, loanProductID); @@ -53,14 +52,6 @@ public class ClientLoanIntegrationTest { } - - private void checkClientCreatedOnServer(final Integer generatedClientID) { - System.out.println("------------------------------CHECK CLIENT DETAILS------------------------------------\n"); - given().spec(requestSpec) - .expect().spec(responseSpec) - .when().get("/mifosng-provider/api/v1/clients/" + generatedClientID + "?tenantIdentifier=default"); - } - private Integer createLoanProduct() { System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------"); String loanProductJSON = new LoanProductTestBuilder() @@ -74,14 +65,10 @@ public class ClientLoanIntegrationTest { .withInterestTypeAsDecliningBalance() .withinterestRatePerPeriod("1") .build(); - String json = given().spec(requestSpec).body(loanProductJSON) - .expect().spec(responseSpec) - .when().post("/mifosng-provider/api/v1/loanproducts?tenantIdentifier=default") - .andReturn().asString(); - return from(json).get("resourceId"); + return Utils.getLoanProductId(requestSpec, responseSpec, loanProductJSON); } - private void applyForLoanApplication(final Integer clientID, final Integer loanProductID) { + private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID) { System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); String loanApplicationJSON = new LoanApplicationTestBuilder() .withPrincipal("12,000.00") @@ -98,18 +85,13 @@ public class ClientLoanIntegrationTest { .withExpectedDisbursementDate("20 September 2011") .withSubmittedOnDate("20 September 2011") .Build(clientID.toString(),loanProductID.toString()); - given().spec(requestSpec).body(loanApplicationJSON) - .expect().spec(responseSpec) - .when().post("/mifosng-provider/api/v1/loans?tenantIdentifier=default"); + return Utils.getLoanId(requestSpec, responseSpec, loanApplicationJSON); } private ArrayList getLoanRepaymentSchedule(final Integer productID) { System.out.println("---------------------------GETTING LOAN REPAYMENT SCHEDULE--------------------------------"); - String json = given().spec(requestSpec).body(getLoanCalculationBodyAsJSON(productID.toString())) - .expect().spec(responseSpec) - .when().post("/mifosng-provider/api/v1/loans?command=calculateLoanSchedule&tenantIdentifier=default").andReturn().asString(); - return from(json).get("periods"); + return Utils.getRepaymentSchedule(requestSpec,responseSpec,productID); } private void verifyLoanRepaymentSchedule(final ArrayList loanSchedule) { @@ -134,29 +116,6 @@ public class ClientLoanIntegrationTest { - - private String getLoanCalculationBodyAsJSON(final String productID){ - HashMap map = new HashMap(); - map.put("dateFormat", "dd MMMM yyyy"); - map.put("locale", "en_GB"); - map.put("productId", productID); - map.put("principal", "12,000.00"); - map.put("loanTermFrequency", "4"); - map.put("loanTermFrequencyType", "2"); - map.put("numberOfRepayments", "4"); - map.put("repaymentEvery", "1"); - map.put("repaymentFrequencyType", "2"); - map.put("interestRateFrequencyType", "2"); - map.put("interestRatePerPeriod", "2"); - map.put("amortizationType", "1"); - map.put("interestType", "0"); - map.put("interestCalculationPeriodType", "1"); - map.put("expectedDisbursementDate", "20 September 2011"); - map.put("transactionProcessingStrategyId", "1"); - return new Gson().toJson(map); - } - - } diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOff.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOff.java index 10a9ae6a6..74ec02342 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOff.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/LoanWithWaiveInterestAndWriteOff.java @@ -59,7 +59,7 @@ public class LoanWithWaiveInterestAndWriteOff { public void checkClientLoanCreateAndDisburseFlow(){ //CREATE CLIENT Integer clientID = Utils.createClient(requestSpec, responseSpec, DATE_OF_JOINING); - verifyClientCreatedOnServer(clientID); + Utils.verifyClientCreatedOnServer(requestSpec, responseSpec, clientID); //CREATE LOAN PRODUCT Integer loanProductID = createLoanProduct(); @@ -113,15 +113,6 @@ public class LoanWithWaiveInterestAndWriteOff { } - private HashMap writeOffLoan(String transactionDate, Integer loanID){ - System.out.println("--------------------LOAN WRITTEN OFF ON "+transactionDate+"-------------------------------\n"); - String json = given().spec(requestSpec).body(Utils.getWriteOffBodyAsJSON(transactionDate)) - .expect().spec(responseSpec).log().ifError() - .when().post("/mifosng-provider/api/v1/loans/" + loanID + "/transactions?command=writeoff&tenantIdentifier=default") - .andReturn().asString(); - HashMap response = from(json).get("changes"); - return (HashMap)response.get("status"); - } private void waiveInterest(String transactionDate, Integer loanID){ System.out.println("--------------------Waive INTEREST On "+transactionDate+"-------------------------------\n"); @@ -155,41 +146,24 @@ public class LoanWithWaiveInterestAndWriteOff { return from(json).get("status"); } - private HashMap undoApproval(Integer loanID){ - System.out.println("-----------------------------------UNDO LOAN APPROVAL-----------------------------------------"); - String json = given().spec(requestSpec).body("{'note':'UNDO APPROVAL'}") - .expect().spec(responseSpec).log().ifError() - .when().post("/mifosng-provider/api/v1/loans/" + loanID + "?command=undoApproval&tenantIdentifier=default") - .andReturn().asString(); - HashMap response = from(json).get("changes"); - return (HashMap)response.get("status"); - } - private HashMap disburseLoan(Integer loanID){ - System.out.println("-----------------------------------DISBURSE LOAN-----------------------------------------"); - String json = given().spec(requestSpec).body(Utils.getDisburseLoanAsJSON(DISBURSEMENT_DATE)) - .expect().spec(responseSpec).log().ifError() - .when().post("/mifosng-provider/api/v1/loans/" + loanID + "?command=disburse&tenantIdentifier=default") - .andReturn().asString(); - HashMap response = from(json).get("changes"); - return (HashMap)response.get("status"); - } - private HashMap approveLoan(String approvalDate, Integer loanID){ System.out.println("-----------------------------------APPROVE LOAN-----------------------------------------"); - String json =given().spec(requestSpec).body(Utils.getApproveLoanAsJSON(approvalDate)) - .expect().spec(responseSpec).log().ifError() - .when().post("/mifosng-provider/api/v1/loans/"+ loanID +"?command=approve&tenantIdentifier=default") - .andReturn().asString(); - HashMap response = from(json).get("changes"); - return (HashMap)response.get("status"); + return Utils.approveLoan(requestSpec,responseSpec,approvalDate,loanID); } - private void verifyClientCreatedOnServer(final Integer generatedClientID) { - System.out.println("------------------------------CHECK CLIENT DETAILS------------------------------------\n"); - given().spec(requestSpec) - .expect().spec(responseSpec).log().ifError() - .when().get("/mifosng-provider/api/v1/clients/" + generatedClientID + "?tenantIdentifier=default"); + private HashMap undoApproval(Integer loanID){ + System.out.println("-----------------------------------UNDO LOAN APPROVAL-----------------------------------------"); + return Utils.undoApproval(requestSpec,responseSpec,loanID); + } + + private HashMap disburseLoan(Integer loanID){ + System.out.println("-----------------------------------DISBURSE LOAN-----------------------------------------"); + return Utils.disburseLoan(requestSpec,responseSpec,loanID,DISBURSEMENT_DATE); + } + private HashMap writeOffLoan(String transactionDate, Integer loanID){ + System.out.println("--------------------LOAN WRITTEN OFF ON "+transactionDate+"-------------------------------\n"); + return Utils.writeOffLoan(requestSpec,responseSpec,transactionDate,loanID); } private Integer createLoanProduct() { @@ -205,11 +179,7 @@ public class LoanWithWaiveInterestAndWriteOff { .withAmortizationTypeAsEqualPrinciplePayment() .withInterestTypeAsFlat() .build(); - String json = given().spec(requestSpec).body(loanProductJSON) - .expect().spec(responseSpec).log().ifError() - .when().post("/mifosng-provider/api/v1/loanproducts?tenantIdentifier=default") - .andReturn().asString(); - return from(json).get("resourceId"); + return Utils.getLoanProductId(requestSpec,responseSpec,loanProductJSON); } private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID) { @@ -229,11 +199,7 @@ public class LoanWithWaiveInterestAndWriteOff { .withExpectedDisbursementDate(EXPECTED_DISBURSAL_DATE) .withSubmittedOnDate(LOAN_APPLICATION_SUBMISSION_DATE) .Build(clientID.toString(), loanProductID.toString()); - String json = given().spec(requestSpec).body(loanApplicationJSON) - .expect().spec(responseSpec).log().ifError() - .when().post("/mifosng-provider/api/v1/loans?tenantIdentifier=default") - .andReturn().asString(); - return from(json).get("loanId"); + return Utils.getLoanId(requestSpec,responseSpec,loanApplicationJSON); } } 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 61eec5f42..5ace0eaf0 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 @@ -5,6 +5,7 @@ import com.jayway.restassured.path.json.JsonPath; import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; +import java.util.ArrayList; import java.util.HashMap; import java.util.Random; @@ -12,7 +13,15 @@ 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 Utils { + private static final String CREATE_LOAN_PRODUCT_URL ="/mifosng-provider/api/v1/loanproducts?tenantIdentifier=default"; + private static final String LOGIN_URL = "/mifosng-provider/api/v1/authentication?username=mifos&password=password&tenantIdentifier=default"; + private static final String CREATE_CLIENT_URL = "/mifosng-provider/api/v1/clients?tenantIdentifier=default"; + private static final String APPLY_LOAN_URL = "/mifosng-provider/api/v1/loans?tenantIdentifier=default"; + private static final String REPAYMENT_SCHEDULE_URL ="/mifosng-provider/api/v1/loans?command=calculateLoanSchedule&tenantIdentifier=default"; public static String randomStringGenerator(final String prefix, final int len, final String sourceSetString) { int lengthOfSource = sourceSetString.length(); @@ -90,24 +99,110 @@ public class Utils { return new Gson().toJson(map); } - - public static Integer createClient(RequestSpecification requestSpec, ResponseSpecification responseSpec) { - return createClient(requestSpec,responseSpec,"04 March 2012"); - + private static String getLoanCalculationBodyAsJSON(final String productID){ + HashMap map = new HashMap(); + map.put("dateFormat", "dd MMMM yyyy"); + map.put("locale", "en_GB"); + map.put("productId", productID); + map.put("principal", "12,000.00"); + map.put("loanTermFrequency", "4"); + map.put("loanTermFrequencyType", "2"); + map.put("numberOfRepayments", "4"); + map.put("repaymentEvery", "1"); + map.put("repaymentFrequencyType", "2"); + map.put("interestRateFrequencyType", "2"); + map.put("interestRatePerPeriod", "2"); + map.put("amortizationType", "1"); + map.put("interestType", "0"); + map.put("interestCalculationPeriodType", "1"); + map.put("expectedDisbursementDate", "20 September 2011"); + map.put("transactionProcessingStrategyId", "1"); + return new Gson().toJson(map); } - public static Integer createClient(RequestSpecification requestSpec, ResponseSpecification responseSpec,String dateOfJoining) { - System.out.println("---------------------------------CREATING A CLIENT---------------------------------------------"); - String json = given().spec(requestSpec).body(getTestClientAsJSON(dateOfJoining)) - .expect().spec(responseSpec) - .when().post("/mifosng-provider/api/v1/clients?tenantIdentifier=default") - .andReturn().asString(); - return from(json).get("clientId"); - } public static String loginIntoServerAndGetBase64EncodedAuthenticationKey() { System.out.println("-----------------------------------LOGIN-----------------------------------------"); - String json = post("/mifosng-provider/api/v1/authentication?username=mifos&password=password&tenantIdentifier=default").asString(); + String json = post(LOGIN_URL).asString(); return JsonPath.with(json).get("base64EncodedAuthenticationKey"); } + + + + public static Integer createClient(RequestSpecification requestSpec, ResponseSpecification responseSpec) { + return createClient(requestSpec,responseSpec,"04 March 2012"); + } + + public static Integer createClient(RequestSpecification requestSpec, ResponseSpecification responseSpec,String dateOfJoining) { + System.out.println("---------------------------------CREATING A CLIENT---------------------------------------------"); + return performServerPost(requestSpec,responseSpec,CREATE_CLIENT_URL,getTestClientAsJSON(dateOfJoining),"clientId"); + } + + + public static void verifyClientCreatedOnServer(RequestSpecification requestSpec, ResponseSpecification responseSpec, Integer generatedClientID) { + System.out.println("------------------------------CHECK CLIENT DETAILS------------------------------------\n"); + String CLIENT_URL="/mifosng-provider/api/v1/clients/" + generatedClientID + "?tenantIdentifier=default"; + Integer responseClientID = performServerGet(requestSpec,responseSpec,CLIENT_URL,"id"); + Assert.assertEquals(generatedClientID,responseClientID); + } + + public static Integer getLoanProductId(RequestSpecification requestSpec, ResponseSpecification responseSpec, String loanProductJSON) { + return performServerPost(requestSpec, responseSpec, CREATE_LOAN_PRODUCT_URL, loanProductJSON, "resourceId"); + } + + public static Integer getLoanId(RequestSpecification requestSpec, ResponseSpecification responseSpec, String loanApplicationJSON) { + return performServerPost(requestSpec, responseSpec, APPLY_LOAN_URL, loanApplicationJSON, "loanId"); + } + + + public static ArrayList getRepaymentSchedule(RequestSpecification requestSpec, ResponseSpecification responseSpec,Integer productID){ + return performServerPost(requestSpec,responseSpec,REPAYMENT_SCHEDULE_URL,getLoanCalculationBodyAsJSON(productID.toString()),"periods"); + } + + public static HashMap approveLoan(RequestSpecification requestSpec, ResponseSpecification responseSpec,String approvalDate,Integer loanID){ + String approveLoanURL ="/mifosng-provider/api/v1/loans/"+ loanID +"?command=approve&tenantIdentifier=default"; + HashMap response = performServerPost(requestSpec,responseSpec,approveLoanURL,getApproveLoanAsJSON(approvalDate),"changes"); + return (HashMap)response.get("status"); + } + + public static HashMap undoApproval(RequestSpecification requestSpec, ResponseSpecification responseSpec,Integer loanID){ + String undoBodyJson = "{'note':'UNDO APPROVAL'}"; + String approveLoanURL ="/mifosng-provider/api/v1/loans/"+ loanID +"?command=undoApproval&tenantIdentifier=default"; + HashMap response = performServerPost(requestSpec,responseSpec,approveLoanURL,undoBodyJson,"changes"); + return (HashMap)response.get("status"); + } + + public static HashMap disburseLoan(RequestSpecification requestSpec, ResponseSpecification responseSpec,Integer loanID,String date){ + String disburseBodyJson =getDisburseLoanAsJSON(date); + String disburseLoanURL ="/mifosng-provider/api/v1/loans/" + loanID + "?command=disburse&tenantIdentifier=default"; + HashMap response=performServerPost(requestSpec,responseSpec,disburseLoanURL,disburseBodyJson,"changes"); + return (HashMap)response.get("status"); + } + + public static HashMap writeOffLoan(RequestSpecification requestSpec, ResponseSpecification responseSpec,String date,Integer loanID){ + String writeOffJsonBody =getWriteOffBodyAsJSON(date); + String writeOffURL = "/mifosng-provider/api/v1/loans/" + loanID + "/transactions?command=writeoff&tenantIdentifier=default"; + HashMap response = performServerPost(requestSpec,responseSpec,writeOffURL,writeOffJsonBody,"changes"); + return (HashMap)response.get("status"); + } + + private 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) + .andReturn().asString(); + return (T) from(json).get(jsonAttributeToGetBack); + } + + private static Integer performServerGet(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String postURL, final String jsonAttributeToGetBack){ + String json = given().spec(requestSpec) + .expect().spec(responseSpec).log().ifError() + .when().get(postURL) + .andReturn().asString(); + return from(json).get(jsonAttributeToGetBack); + } + + }