Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 53C2A200BE3 for ; Thu, 22 Dec 2016 13:53:45 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 528EE160B26; Thu, 22 Dec 2016 12:53:45 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 55A05160B1F for ; Thu, 22 Dec 2016 13:53:43 +0100 (CET) Received: (qmail 42320 invoked by uid 500); 22 Dec 2016 12:53:42 -0000 Mailing-List: contact commits-help@fineract.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@fineract.incubator.apache.org Delivered-To: mailing list commits@fineract.incubator.apache.org Received: (qmail 42311 invoked by uid 99); 22 Dec 2016 12:53:42 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Dec 2016 12:53:42 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 0488AC322E for ; Thu, 22 Dec 2016 12:53:42 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -6.218 X-Spam-Level: X-Spam-Status: No, score=-6.218 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-2.999, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id pF2yROcATDKf for ; Thu, 22 Dec 2016 12:53:37 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with SMTP id 382785F4EE for ; Thu, 22 Dec 2016 12:53:35 +0000 (UTC) Received: (qmail 42197 invoked by uid 99); 22 Dec 2016 12:53:34 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Dec 2016 12:53:34 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 5DD9ADFBE9; Thu, 22 Dec 2016 12:53:34 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: nazeer1100126@apache.org To: commits@fineract.incubator.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: incubator-fineract git commit: Integration test cases for Entity-Datatable Check Date: Thu, 22 Dec 2016 12:53:34 +0000 (UTC) archived-at: Thu, 22 Dec 2016 12:53:45 -0000 Repository: incubator-fineract Updated Branches: refs/heads/develop 9cc60c9b7 -> c8cedfc70 Integration test cases for Entity-Datatable Check Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/c8cedfc7 Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/c8cedfc7 Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/c8cedfc7 Branch: refs/heads/develop Commit: c8cedfc70d3ecc18d1efd24798280ecfcd198233 Parents: 9cc60c9 Author: Satish Authored: Tue Dec 20 16:53:31 2016 +0530 Committer: Satish Committed: Tue Dec 20 16:53:31 2016 +0530 ---------------------------------------------------------------------- .../integrationtests/common/ClientHelper.java | 58 ++- .../integrationtests/common/GroupHelper.java | 54 ++ .../loans/LoanApplicationTestBuilder.java | 9 + .../common/loans/LoanTransactionHelper.java | 22 + .../EntityDatatableChecksHelper.java | 68 +++ .../EntityDatatableChecksIntegrationTest.java | 509 +++++++++++++++++++ .../common/savings/SavingsAccountHelper.java | 38 ++ .../savings/SavingsApplicationTestBuilder.java | 30 +- .../common/system/DatatableHelper.java | 101 ++++ 9 files changed, 870 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ClientHelper.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ClientHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ClientHelper.java index ec6ea52..e79820b 100755 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ClientHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ClientHelper.java @@ -22,8 +22,8 @@ import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; -import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.integrationtests.common.system.CodeHelper; import com.google.gson.Gson; @@ -53,7 +53,7 @@ public class ClientHelper { public static final String TRANSACTION_DATE = "01 March 2013"; public static final String LAST_TRANSACTION_DATE = "01 March 2013"; public static final String DATE_FORMAT = "dd MMMM yyyy"; - + public static final String DATE_TIME_FORMAT = "dd MMMM yyyy HH:mm"; public ClientHelper(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { this.requestSpec = requestSpec; @@ -93,9 +93,20 @@ public class ClientHelper { return Utils.performServerPost(requestSpec, responseSpec, CREATE_CLIENT_URL, getTestClientAsJSONPending(submittedOnDate, officeId), "clientId"); } - - - + + public Object createClientPendingWithError(final String jsonAttributeToGetBack) { + System.out.println("---------------------------------CREATING A CLIENT IN PENDING WITH ERROR---------------------------------------------"); + return Utils.performServerPost(this.requestSpec, this.responseSpec, CREATE_CLIENT_URL, + getTestClientAsJSONPending("04 March 2014", "1"), jsonAttributeToGetBack); + } + + public static Integer createClientPendingWithDatatable(final RequestSpecification requestSpec, + final ResponseSpecification responseSpec, final String registeredTableName) { + System.out.println("-------------------------- CREATING A CLIENT IN PENDING WITH DATATABLES --------------------------------"); + return Utils.performServerPost(requestSpec, responseSpec, CREATE_CLIENT_URL, + getTestPendingClientWithDatatableAsJson(registeredTableName), "clientId"); + } + public static Integer createClientAsPerson(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { return createClientAsPerson(requestSpec, responseSpec, "04 March 2011"); } @@ -184,10 +195,39 @@ public class ClientHelper { System.out.println("map : " + map); return new Gson().toJson(map); } - - - - + + public static String getTestPendingClientWithDatatableAsJson(final String registeredTableName) { + final HashMap map = new HashMap<>(); + map.put("officeId", "1"); + map.put("firstname", Utils.randomNameGenerator("Client_FirstName_", 5)); + map.put("lastname", Utils.randomNameGenerator("Client_LastName_", 4)); + map.put("externalId", randomIDGenerator("ID_", 7)); + map.put("dateFormat", DATE_FORMAT); + map.put("locale", "en"); + map.put("active", "false"); + map.put("submittedOnDate", "04 March 2014"); + String requestJson = getTestDatatableAsJson(map, registeredTableName); + System.out.println("map : " + requestJson); + return requestJson; + } + + public static String getTestDatatableAsJson(HashMap map, final String registeredTableName) { + List> datatablesListMap = new ArrayList<>(); + HashMap datatableMap = new HashMap<>(); + HashMap dataMap = new HashMap<>(); + dataMap.put("locale", "en"); + dataMap.put("Spouse Name", Utils.randomNameGenerator("Spouse_name", 4)); + dataMap.put("Number of Dependents", 5); + dataMap.put("Time of Visit", "01 December 2016 04:03"); + dataMap.put("dateFormat", DATE_TIME_FORMAT); + dataMap.put("Date of Approval", "02 December 2016 00:00"); + datatableMap.put("registeredTableName", registeredTableName); + datatableMap.put("data", dataMap); + datatablesListMap.add(datatableMap); + map.put("datatables", datatablesListMap); + return new Gson().toJson(map); + } + public static String getTestPersonClientAsJSON(final String dateOfJoining, final String officeId) { final HashMap map = new HashMap<>(); map.put("officeId", officeId); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GroupHelper.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GroupHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GroupHelper.java index f8a3af0..ab2a9eb 100755 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GroupHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GroupHelper.java @@ -34,7 +34,17 @@ import com.jayway.restassured.specification.ResponseSpecification; public class GroupHelper { + private final RequestSpecification requestSpec; + private final ResponseSpecification responseSpec; + private static final String CREATE_GROUP_URL = "/fineract-provider/api/v1/groups?" + Utils.TENANT_IDENTIFIER; + public static final String DATE_FORMAT = "dd MMMM yyyy"; + public static final String DATE_TIME_FORMAT = "dd MMMM yyyy HH:mm"; + + public GroupHelper(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { + this.requestSpec = requestSpec; + this.responseSpec = responseSpec; + } public static Integer createGroup(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, @SuppressWarnings("unused") final boolean active) { @@ -53,6 +63,19 @@ public class GroupHelper { return Utils.performServerPost(requestSpec, responseSpec, CREATE_GROUP_URL, getTestGroupAsJSON(false, ""), "groupId"); } + public Object createGroupWithError(final String jsonAttributeToGetBack) { + System.out.println("---------------------------------CREATING A GROUP WITH ERROR---------------------------------------------"); + return Utils.performServerPost(this.requestSpec, this.responseSpec, CREATE_GROUP_URL, getTestGroupAsJSON(false, ""), + jsonAttributeToGetBack); + } + + public static Integer createGroupPendingWithDatatable(final RequestSpecification requestSpec, + final ResponseSpecification responseSpec, final String registeredTableName) { + System.out.println("-------------------------- CREATING A GROUP WITH DATATABLES --------------------------------"); + return Utils.performServerPost(requestSpec, responseSpec, CREATE_GROUP_URL, + getTestGroupWithDatatableAsJson(registeredTableName), "groupId"); + } + public static Integer associateClient(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, final String groupId, final String clientMember) { final String GROUP_ASSOCIATE_URL = "/fineract-provider/api/v1/groups/" + groupId @@ -227,4 +250,35 @@ public class GroupHelper { private static String randomIDGenerator(final String prefix, final int lenOfRandomSuffix) { return Utils.randomStringGenerator(prefix, lenOfRandomSuffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); } + + public static String getTestGroupWithDatatableAsJson(final String registeredTableName) { + final HashMap map = new HashMap<>(); + map.put("officeId", "1"); + map.put("name", randomNameGenerator("Group_Name_", 5)); + map.put("externalId", randomIDGenerator("ID_", 7)); + map.put("dateFormat", "dd MMMM yyyy"); + map.put("locale", "en"); + map.put("active", "false"); + map.put("submittedOnDate", "04 March 2011"); + String requestJson = getTestDatatableAsJson(map, registeredTableName); + System.out.println("map : " + requestJson); + return requestJson; + } + + public static String getTestDatatableAsJson(HashMap map, final String registeredTableName) { + List> datatablesListMap = new ArrayList<>(); + HashMap datatableMap = new HashMap<>(); + HashMap dataMap = new HashMap<>(); + dataMap.put("locale", "en"); + dataMap.put("Spouse Name", Utils.randomNameGenerator("Spouse_name", 4)); + dataMap.put("Number of Dependents", 5); + dataMap.put("Time of Visit", "01 December 2016 04:03"); + dataMap.put("dateFormat", DATE_TIME_FORMAT); + dataMap.put("Date of Approval", "02 December 2016 00:00"); + datatableMap.put("registeredTableName", registeredTableName); + datatableMap.put("data", dataMap); + datatablesListMap.add(datatableMap); + map.put("datatables", datatablesListMap); + return new Gson().toJson(map); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanApplicationTestBuilder.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanApplicationTestBuilder.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanApplicationTestBuilder.java index 50d9cc9..e51b2ca 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanApplicationTestBuilder.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanApplicationTestBuilder.java @@ -65,6 +65,7 @@ public class LoanApplicationTestBuilder { private String calendarId; private boolean syncDisbursementWithMeeting = false; + private List> datatables = null; public String build(final String clientID, final String groupID, final String loanProductId, final String savingsID) { final HashMap map = new HashMap<>(); @@ -134,6 +135,9 @@ public class LoanApplicationTestBuilder { } + if (datatables != null) { + map.put("datatables", this.datatables); + } System.out.println("Loan Application request : " + map); return new Gson().toJson(map); } @@ -311,4 +315,9 @@ public class LoanApplicationTestBuilder { this.fixedEmiAmount = installmentAmount; return this; } + + public LoanApplicationTestBuilder withDatatables(final List> datatables) { + this.datatables = datatables; + return this; + } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java index 65cf2b6..57fc343 100755 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java @@ -55,6 +55,8 @@ public class LoanTransactionHelper { private static final String MAKE_REFUND_BY_CASH_COMMAND = "refundByCash"; private static final String FORECLOSURE_COMMAND = "foreclosure"; + public static final String DATE_TIME_FORMAT = "dd MMMM yyyy HH:mm"; + public LoanTransactionHelper(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { this.requestSpec = requestSpec; this.responseSpec = responseSpec; @@ -68,6 +70,10 @@ public class LoanTransactionHelper { return Utils.performServerPost(this.requestSpec, this.responseSpec, APPLY_LOAN_URL, loanApplicationJSON, "loanId"); } + public Object getLoanError(final String loanApplicationJSON, final String responseAttribute) { + return Utils.performServerPost(this.requestSpec, this.responseSpec, APPLY_LOAN_URL, loanApplicationJSON, responseAttribute); + } + public Integer getLoanOfficerId(final String loanId) { final String GET_LOAN_URL = "/fineract-provider/api/v1/loans/" + loanId + "?" + Utils.TENANT_IDENTIFIER; return Utils.performServerGet(this.requestSpec, this.responseSpec, GET_LOAN_URL, "loanOfficerId"); @@ -672,4 +678,20 @@ public class LoanTransactionHelper { System.out.println(json); return json; } + + public static List> getTestDatatableAsJson(final String registeredTableName) { + List> datatablesListMap = new ArrayList<>(); + HashMap datatableMap = new HashMap<>(); + HashMap dataMap = new HashMap<>(); + dataMap.put("locale", "en"); + dataMap.put("Spouse Name", Utils.randomNameGenerator("Spouse_name", 4)); + dataMap.put("Number of Dependents", 5); + dataMap.put("Time of Visit", "01 December 2016 04:03"); + dataMap.put("dateFormat", DATE_TIME_FORMAT); + dataMap.put("Date of Approval", "02 December 2016 00:00"); + datatableMap.put("registeredTableName", registeredTableName); + datatableMap.put("data", dataMap); + datatablesListMap.add(datatableMap); + return datatablesListMap; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksHelper.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksHelper.java new file mode 100644 index 0000000..80d774a --- /dev/null +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksHelper.java @@ -0,0 +1,68 @@ +/** + * 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.common.organisation; + +import java.util.HashMap; + +import org.apache.fineract.integrationtests.common.Utils; + +import com.google.gson.Gson; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; + +public class EntityDatatableChecksHelper { + + private final RequestSpecification requestSpec; + private final ResponseSpecification responseSpec; + + private static final String DATATABLE_CHECK_URL = "/fineract-provider/api/v1/entityDatatableChecks"; + + public EntityDatatableChecksHelper(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { + this.requestSpec = requestSpec; + this.responseSpec = responseSpec; + } + + public Integer createEntityDatatableCheck(final String apptableName, final String datatableName, final int status, final Integer productId) { + return Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_CHECK_URL + "?" + Utils.TENANT_IDENTIFIER, + getTestEdcAsJSON(apptableName, datatableName, status, productId), "resourceId"); + } + + public Integer deleteEntityDatatableCheck(final Integer entityDatatableCheckId) { + return Utils.performServerDelete(requestSpec, responseSpec, DATATABLE_CHECK_URL + "/" + entityDatatableCheckId + "?" + + Utils.TENANT_IDENTIFIER, "resourceId"); + } + + public String retrieveEntityDatatableCheck() { + return Utils.performServerGet(requestSpec, responseSpec, DATATABLE_CHECK_URL + "?" + Utils.TENANT_IDENTIFIER, null); + } + + public static String getTestEdcAsJSON(final String apptableName, final String datatableName, final int status, final Integer productId) { + final HashMap map = new HashMap<>(); + map.put("entity", apptableName); + map.put("status", status); + map.put("datatableName", datatableName); + if (productId != null) { + map.put("productId", productId); + } + String requestJsonString = new Gson().toJson(map); + System.out.println("map : " + requestJsonString); + return requestJsonString; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java new file mode 100644 index 0000000..cb17289 --- /dev/null +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java @@ -0,0 +1,509 @@ +/** + * 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.common.organisation; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +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.GroupHelper; +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.LoanTransactionHelper; +import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; +import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; +import org.apache.fineract.integrationtests.common.system.DatatableHelper; +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; + +/** + * Entity Datatable Checks Integration Test for checking Creation, Deletion and + * Retrieval of Entity-Datatable Check + */ + +public class EntityDatatableChecksIntegrationTest { + + private RequestSpecification requestSpec; + private ResponseSpecification responseSpec; + private EntityDatatableChecksHelper entityDatatableChecksHelper; + private DatatableHelper datatableHelper; + private SavingsAccountHelper savingsAccountHelper; + private LoanTransactionHelper loanTransactionHelper; + private LoanTransactionHelper validationErrorHelper; + + private static final String CLIENT_APP_TABLE_NAME = "m_client"; + private static final String GROUP_APP_TABLE_NAME = "m_group"; + private static final String SAVINGS_APP_TABLE_NAME = "m_savings_account"; + private static final String LOAN_APP_TABLE_NAME = "m_loan"; + + public static final String MINIMUM_OPENING_BALANCE = "1000.0"; + public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL"; + + public static final String DATE_TIME_FORMAT = "dd MMMM yyyy HH:mm"; + + public EntityDatatableChecksIntegrationTest() { + // TODO Auto-generated constructor stub + } + + @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.entityDatatableChecksHelper = new EntityDatatableChecksHelper(this.requestSpec, this.responseSpec); + this.datatableHelper = new DatatableHelper(this.requestSpec, this.responseSpec); + } + + @Test + public void validateCreateDeleteEntityDatatableCheck() { + // creating datatable + String datatableName = this.datatableHelper.createDatatable(CLIENT_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, datatableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(CLIENT_APP_TABLE_NAME, datatableName, + 100, null); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(datatableName); + assertEquals("ERROR IN DELETING THE DATATABLE", datatableName, deletedDataTableName); + } + + @Test + public void validateRetriveEntityDatatableChecksList() { + // retrieving entity datatable check + String entityDatatableChecksList = this.entityDatatableChecksHelper.retrieveEntityDatatableCheck(); + assertNotNull("ERROR IN RETRIEVING THE ENTITY DATATABLE CHECKS", entityDatatableChecksList); + } + + @Test + public void validateCreateClientWithEntityDatatableCheck() { + + // creating datatable + String registeredTableName = this.datatableHelper.createDatatable(CLIENT_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, registeredTableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(CLIENT_APP_TABLE_NAME, + registeredTableName, 100, null); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // creating client with datatables + final Integer clientID = ClientHelper.createClientPendingWithDatatable(requestSpec, responseSpec, registeredTableName); + ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting datatable entries + Integer appTableId = this.datatableHelper.deleteDatatableEntries(registeredTableName, clientID, "clientId"); + assertEquals("ERROR IN DELETING THE DATATABLE ENTRIES", clientID, appTableId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(registeredTableName); + assertEquals("ERROR IN DELETING THE DATATABLE", registeredTableName, deletedDataTableName); + } + + @SuppressWarnings("unchecked") + @Test + public void validateCreateClientWithEntityDatatableCheckWithFailure() { + // building error response with status code 403 + final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(403).build(); + final ClientHelper validationErrorHelper = new ClientHelper(this.requestSpec, errorResponse); + + // creating datatable + String registeredTableName = this.datatableHelper.createDatatable(CLIENT_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, registeredTableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(CLIENT_APP_TABLE_NAME, + registeredTableName, 100, null); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // creating client with datatables with error + ArrayList> clientErrorData = (ArrayList>) validationErrorHelper + .createClientPendingWithError(CommonConstants.RESPONSE_ERROR); + assertEquals("error.msg.entry.required.in.datatable.[" + registeredTableName + "]", + clientErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(registeredTableName); + assertEquals("ERROR IN DELETING THE DATATABLE", registeredTableName, deletedDataTableName); + } + + @Test + public void validateCreateGroupWithEntityDatatableCheck() { + + // creating datatable + String registeredTableName = this.datatableHelper.createDatatable(GROUP_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, registeredTableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(GROUP_APP_TABLE_NAME, + registeredTableName, 100, null); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // creating group with datatables + final Integer groupId = GroupHelper.createGroupPendingWithDatatable(this.requestSpec, this.responseSpec, registeredTableName); + GroupHelper.verifyGroupCreatedOnServer(this.requestSpec, this.responseSpec, groupId); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting datatable entries + Integer appTableId = this.datatableHelper.deleteDatatableEntries(registeredTableName, groupId, "groupId"); + assertEquals("ERROR IN DELETING THE DATATABLE ENTRIES", groupId, appTableId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(registeredTableName); + assertEquals("ERROR IN DELETING THE DATATABLE", registeredTableName, deletedDataTableName); + } + + @SuppressWarnings("unchecked") + @Test + public void validateCreateGroupWithEntityDatatableCheckWithFailure() { + // building error response with status code 403 + final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(403).build(); + final GroupHelper validationErrorHelper = new GroupHelper(this.requestSpec, errorResponse); + + // creating datatable + String registeredTableName = this.datatableHelper.createDatatable(GROUP_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, registeredTableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(GROUP_APP_TABLE_NAME, + registeredTableName, 100, null); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // creating group with datatables with error + ArrayList> groupErrorData = (ArrayList>) validationErrorHelper + .createGroupWithError(CommonConstants.RESPONSE_ERROR); + assertEquals("error.msg.entry.required.in.datatable.[" + registeredTableName + "]", + groupErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(registeredTableName); + assertEquals("ERROR IN DELETING THE DATATABLE", registeredTableName, deletedDataTableName); + } + + @Test + public void validateCreateSavingsWithEntityDatatableCheck() { + + this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); + + final String minBalanceForInterestCalculation = null; + final String minRequiredBalance = null; + final String enforceMinRequiredBalance = "false"; + final boolean allowOverdraft = false; + + // creating datatable + String registeredTableName = this.datatableHelper.createDatatable(SAVINGS_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, registeredTableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(SAVINGS_APP_TABLE_NAME, + registeredTableName, 100, null); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec); + ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID); + + final Integer savingsProductID = createSavingsProduct(this.requestSpec, this.responseSpec, MINIMUM_OPENING_BALANCE, + minBalanceForInterestCalculation, minRequiredBalance, enforceMinRequiredBalance, allowOverdraft); + Assert.assertNotNull(savingsProductID); + + // creating savings with datatables + final Integer savingsId = this.savingsAccountHelper.applyForSavingsApplicationWithDatatables(clientID, savingsProductID, + ACCOUNT_TYPE_INDIVIDUAL, "01 December 2016", registeredTableName); + Assert.assertNotNull(savingsId); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting datatable entries + Integer appTableId = this.datatableHelper.deleteDatatableEntries(registeredTableName, savingsId, "savingsId"); + assertEquals("ERROR IN DELETING THE DATATABLE ENTRIES", savingsId, appTableId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(registeredTableName); + assertEquals("ERROR IN DELETING THE DATATABLE", registeredTableName, deletedDataTableName); + } + + @SuppressWarnings("unchecked") + @Test + public void validateCreateSavingsWithEntityDatatableCheckWithFailure() { + // building error response with status code 403 + final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(403).build(); + final SavingsAccountHelper validationErrorHelper = new SavingsAccountHelper(this.requestSpec, errorResponse); + + final String minBalanceForInterestCalculation = null; + final String minRequiredBalance = null; + final String enforceMinRequiredBalance = "false"; + final boolean allowOverdraft = false; + + // creating datatable + String registeredTableName = this.datatableHelper.createDatatable(SAVINGS_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, registeredTableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(SAVINGS_APP_TABLE_NAME, + registeredTableName, 100, null); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec); + ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID); + + final Integer savingsProductID = createSavingsProduct(this.requestSpec, this.responseSpec, MINIMUM_OPENING_BALANCE, + minBalanceForInterestCalculation, minRequiredBalance, enforceMinRequiredBalance, allowOverdraft); + Assert.assertNotNull(savingsProductID); + + // creating savings with datatables with error + ArrayList> groupErrorData = (ArrayList>) validationErrorHelper + .applyForSavingsApplicationWithFailure(clientID, savingsProductID, ACCOUNT_TYPE_INDIVIDUAL, "01 December 2016", + CommonConstants.RESPONSE_ERROR); + assertEquals("error.msg.entry.required.in.datatable.[" + registeredTableName + "]", + groupErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(registeredTableName); + assertEquals("ERROR IN DELETING THE DATATABLE", registeredTableName, deletedDataTableName); + } + + @Test + public void validateCreateLoanWithEntityDatatableCheck() { + this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec); + + // creating client + final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec); + ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID); + + // creating loan product + final Integer loanProductID = createLoanProduct("100", "0", LoanProductTestBuilder.DEFAULT_STRATEGY); + Assert.assertNotNull(loanProductID); + + // creating datatable + String registeredTableName = this.datatableHelper.createDatatable(LOAN_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, registeredTableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(LOAN_APP_TABLE_NAME, + registeredTableName, 100, loanProductID); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // creating new loan application + final Integer loanID = applyForLoanApplication(clientID, loanProductID, "5", registeredTableName); + Assert.assertNotNull(loanID); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting datatable entries + Integer appTableId = this.datatableHelper.deleteDatatableEntries(registeredTableName, loanID, "loanId"); + assertEquals("ERROR IN DELETING THE DATATABLE ENTRIES", loanID, appTableId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(registeredTableName); + assertEquals("ERROR IN DELETING THE DATATABLE", registeredTableName, deletedDataTableName); + } + + @SuppressWarnings("unchecked") + @Test + public void validateCreateLoanWithEntityDatatableCheckWithFailure() { + this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec); + + // building error response with status code 403 + final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(403).build(); + this.validationErrorHelper = new LoanTransactionHelper(this.requestSpec, errorResponse); + + // creating client + final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec); + ClientHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, clientID); + + // creating loan product + final Integer loanProductID = createLoanProduct("100", "0", LoanProductTestBuilder.DEFAULT_STRATEGY); + Assert.assertNotNull(loanProductID); + + // creating datatable + String registeredTableName = this.datatableHelper.createDatatable(LOAN_APP_TABLE_NAME, false); + DatatableHelper.verifyDatatableCreatedOnServer(this.requestSpec, this.responseSpec, registeredTableName); + + // creating new entity datatable check + Integer entityDatatableCheckId = this.entityDatatableChecksHelper.createEntityDatatableCheck(LOAN_APP_TABLE_NAME, + registeredTableName, 100, loanProductID); + assertNotNull("ERROR IN CREATING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // creating new loan application with error + ArrayList> loanErrorData = (ArrayList>) applyForLoanApplicationWithError(clientID, + loanProductID, "5", CommonConstants.RESPONSE_ERROR); + assertEquals("error.msg.entry.required.in.datatable.[" + registeredTableName + "]", + loanErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); + + // deleting entity datatable check + entityDatatableCheckId = this.entityDatatableChecksHelper.deleteEntityDatatableCheck(entityDatatableCheckId); + assertNotNull("ERROR IN DELETING THE ENTITY DATATABLE CHECK", entityDatatableCheckId); + + // deleting the datatable + String deletedDataTableName = this.datatableHelper.deleteDatatable(registeredTableName); + assertEquals("ERROR IN DELETING THE DATATABLE", registeredTableName, deletedDataTableName); + } + + private Integer createSavingsProduct(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String minOpenningBalance, String minBalanceForInterestCalculation, String minRequiredBalance, + String enforceMinRequiredBalance, final boolean allowOverdraft) { + final String taxGroupId = null; + return createSavingsProduct(requestSpec, responseSpec, minOpenningBalance, minBalanceForInterestCalculation, minRequiredBalance, + enforceMinRequiredBalance, allowOverdraft, taxGroupId, false); + } + + private Integer createSavingsProduct(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String minOpenningBalance, String minBalanceForInterestCalculation, String minRequiredBalance, + String enforceMinRequiredBalance, final boolean allowOverdraft, final String taxGroupId, boolean withDormancy) { + System.out.println("------------------------------CREATING NEW SAVINGS PRODUCT ---------------------------------------"); + SavingsProductHelper savingsProductHelper = new SavingsProductHelper(); + if (allowOverdraft) { + final String overDraftLimit = "2000.0"; + savingsProductHelper = savingsProductHelper.withOverDraft(overDraftLimit); + } + if (withDormancy) { + savingsProductHelper = savingsProductHelper.withDormancy(); + } + + final String savingsProductJSON = savingsProductHelper + // + .withInterestCompoundingPeriodTypeAsDaily() + // + .withInterestPostingPeriodTypeAsMonthly() + // + .withInterestCalculationPeriodTypeAsDailyBalance() + // + .withMinBalanceForInterestCalculation(minBalanceForInterestCalculation) + // + .withMinRequiredBalance(minRequiredBalance).withEnforceMinRequiredBalance(enforceMinRequiredBalance) + .withMinimumOpenningBalance(minOpenningBalance).withWithHoldTax(taxGroupId).build(); + return SavingsProductHelper.createSavingsProduct(savingsProductJSON, requestSpec, responseSpec); + } + + private Integer createLoanProduct(final String inMultiplesOf, final String digitsAfterDecimal, final String repaymentStrategy) { + System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------"); + final String loanProductJSON = new LoanProductTestBuilder() // + .withPrincipal("10000000.00") // + .withNumberOfRepayments("24") // + .withRepaymentAfterEvery("1") // + .withRepaymentTypeAsMonth() // + .withinterestRatePerPeriod("2") // + .withInterestRateFrequencyTypeAsMonths() // + .withRepaymentStrategy(repaymentStrategy) // + .withAmortizationTypeAsEqualPrincipalPayment() // + .withInterestTypeAsDecliningBalance() // + .currencyDetails(digitsAfterDecimal, inMultiplesOf).build(null); + return this.loanTransactionHelper.getLoanProductId(loanProductJSON); + } + + private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID, String graceOnPrincipalPayment, + final String registeredTableName) { + System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); + final String loanApplicationJSON = new LoanApplicationTestBuilder() // + .withPrincipal("10000000.00") // + .withLoanTermFrequency("24") // + .withLoanTermFrequencyAsMonths() // + .withNumberOfRepayments("24") // + .withRepaymentEveryAfter("1") // + .withRepaymentFrequencyTypeAsMonths() // + .withInterestRatePerPeriod("2") // + .withAmortizationTypeAsEqualPrincipalPayments() // + .withInterestTypeAsDecliningBalance() // + .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // + .withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("2 June 2014") // + .withSubmittedOnDate("2 June 2014") // + .withDatatables(getTestDatatableAsJson(registeredTableName)) // + .build(clientID.toString(), loanProductID.toString(), null); + return this.loanTransactionHelper.getLoanId(loanApplicationJSON); + } + + private Object applyForLoanApplicationWithError(final Integer clientID, final Integer loanProductID, String graceOnPrincipalPayment, + final String responseAttribute) { + System.out.println("--------------------------------APPLYING FOR LOAN APPLICATION--------------------------------"); + final String loanApplicationJSON = new LoanApplicationTestBuilder() // + .withPrincipal("10000000.00") // + .withLoanTermFrequency("24") // + .withLoanTermFrequencyAsMonths() // + .withNumberOfRepayments("24") // + .withRepaymentEveryAfter("1") // + .withRepaymentFrequencyTypeAsMonths() // + .withInterestRatePerPeriod("2") // + .withAmortizationTypeAsEqualPrincipalPayments() // + .withInterestTypeAsDecliningBalance() // + .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // + .withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("2 June 2014") // + .withSubmittedOnDate("2 June 2014") // + .build(clientID.toString(), loanProductID.toString(), null); + return this.validationErrorHelper.getLoanError(loanApplicationJSON, responseAttribute); + } + + public static List> getTestDatatableAsJson(final String registeredTableName) { + List> datatablesListMap = new ArrayList<>(); + HashMap datatableMap = new HashMap<>(); + HashMap dataMap = new HashMap<>(); + dataMap.put("locale", "en"); + dataMap.put("Spouse Name", Utils.randomNameGenerator("Spouse_name", 4)); + dataMap.put("Number of Dependents", 5); + dataMap.put("Time of Visit", "01 December 2016 04:03"); + dataMap.put("dateFormat", DATE_TIME_FORMAT); + dataMap.put("Date of Approval", "02 December 2016 00:00"); + datatableMap.put("registeredTableName", registeredTableName); + datatableMap.put("data", dataMap); + datatablesListMap.add(datatableMap); + return datatablesListMap; + } +} http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java index 325d23e..0b24cb8 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java @@ -63,6 +63,8 @@ public class SavingsAccountHelper { public static final String LAST_TRANSACTION_DATE = "01 March 2013"; public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL"; + public static final String DATE_TIME_FORMAT = "dd MMMM yyyy HH:mm"; + public SavingsAccountHelper(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { this.requestSpec = requestSpec; this.responseSpec = responseSpec; @@ -89,6 +91,27 @@ public class SavingsAccountHelper { savingsApplicationJSON, "savingsId"); } + public Integer applyForSavingsApplicationWithDatatables(final Integer ID, final Integer savingsProductID, final String accountType, + final String submittedOnDate, final String datatableName) { + System.out.println("----------------------------APPLYING FOR SAVINGS APPLICATION WITH DATATABLES----------------------------"); + final String savingsApplicationJSON = new SavingsApplicationTestBuilder() // + .withSubmittedOnDate(submittedOnDate) // + .withDatatables(getTestDatatableAsJson(datatableName)) // + .build(ID.toString(), savingsProductID.toString(), accountType); + return Utils.performServerPost(this.requestSpec, this.responseSpec, SAVINGS_ACCOUNT_URL + "?" + Utils.TENANT_IDENTIFIER, + savingsApplicationJSON, "savingsId"); + } + + public Object applyForSavingsApplicationWithFailure(final Integer ID, final Integer savingsProductID, final String accountType, + final String submittedOnDate, final String responseAttribute) { + System.out.println("----------------------------APPLYING FOR SAVINGS APPLICATION WITH ERROR----------------------------"); + final String savingsApplicationJSON = new SavingsApplicationTestBuilder() // + .withSubmittedOnDate(submittedOnDate) // + .build(ID.toString(), savingsProductID.toString(), accountType); + return Utils.performServerPost(this.requestSpec, this.responseSpec, SAVINGS_ACCOUNT_URL + "?" + Utils.TENANT_IDENTIFIER, + savingsApplicationJSON, responseAttribute); + } + public HashMap updateSavingsAccount(final Integer ID, final Integer savingsProductID, final Integer savingsId, final String accountType) { final String savingsApplicationJSON = new SavingsApplicationTestBuilder() // .withSubmittedOnDate(CREATED_DATE_PLUS_ONE) // @@ -536,4 +559,19 @@ public class SavingsAccountHelper { return SavingsProductHelper.createSavingsProduct(savingsProductJSON, requestSpec, responseSpec); } + public static List> getTestDatatableAsJson(final String registeredTableName) { + List> datatablesListMap = new ArrayList<>(); + HashMap datatableMap = new HashMap<>(); + HashMap dataMap = new HashMap<>(); + dataMap.put("locale", "en"); + dataMap.put("Spouse Name", Utils.randomNameGenerator("Spouse_name", 4)); + dataMap.put("Number of Dependents", 5); + dataMap.put("Time of Visit", "01 December 2016 04:03"); + dataMap.put("dateFormat", DATE_TIME_FORMAT); + dataMap.put("Date of Approval", "02 December 2016 00:00"); + datatableMap.put("registeredTableName", registeredTableName); + datatableMap.put("data", dataMap); + datatablesListMap.add(datatableMap); + return datatablesListMap; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java index 7fbceca..1ce4842 100755 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java @@ -19,6 +19,7 @@ package org.apache.fineract.integrationtests.common.savings; import java.util.HashMap; +import java.util.List; import com.google.gson.Gson; @@ -27,23 +28,28 @@ public class SavingsApplicationTestBuilder { private static final String LOCALE = "en_GB"; private String submittedOnDate = ""; - + private HashMap addParams = null; + private List> datatables = null; + public String build(final String ID, final String savingsProductId, final String accountType) { - final HashMap map = new HashMap<>(); + final HashMap map = new HashMap<>(); map.put("dateFormat", "dd MMMM yyyy"); if (accountType == "GROUP") { map.put("groupId", ID); } else { map.put("clientId", ID); - } + } map.put("productId", savingsProductId); map.put("locale", LOCALE); map.put("submittedOnDate", this.submittedOnDate); - if(addParams!=null && addParams.size() > 0){ - map.putAll(addParams); + if (addParams != null && addParams.size() > 0) { + map.putAll(addParams); + } + if (datatables != null) { + map.put("datatables", this.datatables); } String savingsApplicationJSON = new Gson().toJson(map); System.out.println(savingsApplicationJSON); @@ -55,9 +61,13 @@ public class SavingsApplicationTestBuilder { return this; } - public SavingsApplicationTestBuilder withParams( - HashMap params) { - this.addParams = params; - return this; - } + public SavingsApplicationTestBuilder withParams(HashMap params) { + this.addParams = params; + return this; + } + + public SavingsApplicationTestBuilder withDatatables(final List> datatables) { + this.datatables = datatables; + return this; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/c8cedfc7/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java new file mode 100644 index 0000000..b9494e1 --- /dev/null +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java @@ -0,0 +1,101 @@ +/** + * 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.common.system; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.apache.fineract.integrationtests.common.Utils; + +import com.google.gson.Gson; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; + +public class DatatableHelper { + + private final RequestSpecification requestSpec; + private final ResponseSpecification responseSpec; + + private static final String DATATABLE_URL = "/fineract-provider/api/v1/datatables"; + + public DatatableHelper(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { + this.requestSpec = requestSpec; + this.responseSpec = responseSpec; + } + + public String createDatatable(final String apptableName, final boolean multiRow) { + return Utils.performServerPost(this.requestSpec, this.responseSpec, DATATABLE_URL + "?" + Utils.TENANT_IDENTIFIER, + getTestDatatableAsJSON(apptableName, multiRow), "resourceIdentifier"); + } + + public String deleteDatatable(final String datatableName) { + return Utils.performServerDelete(this.requestSpec, this.responseSpec, DATATABLE_URL + "/" + datatableName + "?" + Utils.TENANT_IDENTIFIER, + "resourceIdentifier"); + } + + public Integer deleteDatatableEntries(final String datatableName, final Integer apptableId, String jsonAttributeToGetBack) { + final String deleteEntryUrl = DATATABLE_URL + "/" + datatableName + "/" + apptableId + "?genericResultSet=true" + "&" + + Utils.TENANT_IDENTIFIER; + return Utils.performServerDelete(this.requestSpec, this.responseSpec, deleteEntryUrl, jsonAttributeToGetBack); + } + + public static void verifyDatatableCreatedOnServer(final RequestSpecification requestSpec, final ResponseSpecification responseSpec, + final String generatedDatatableName) { + System.out.println("------------------------------CHECK DATATABLE DETAILS------------------------------------\n"); + final String responseRegisteredTableName = Utils.performServerGet(requestSpec, responseSpec, DATATABLE_URL + "/" + + generatedDatatableName + "?" + Utils.TENANT_IDENTIFIER, "registeredTableName"); + assertEquals("ERROR IN CREATING THE DATATABLE", generatedDatatableName, responseRegisteredTableName); + } + + public static String getTestDatatableAsJSON(final String apptableName, final boolean multiRow) { + final HashMap map = new HashMap<>(); + final List> datatableColumnsList = new ArrayList<>(); + map.put("datatableName", Utils.randomNameGenerator(apptableName + "_", 5)); + map.put("apptableName", apptableName); + map.put("multiRow", multiRow); + addDatatableColumns(datatableColumnsList, "Spouse Name", "String", true, 25); + addDatatableColumns(datatableColumnsList, "Number of Dependents", "Number", true, null); + addDatatableColumns(datatableColumnsList, "Time of Visit", "DateTime", false, null); + addDatatableColumns(datatableColumnsList, "Date of Approval", "Date", false, null); + map.put("columns", datatableColumnsList); + String requestJsonString = new Gson().toJson(map); + System.out.println("map : " + requestJsonString); + return requestJsonString; + } + + public static List> addDatatableColumns(List> datatableColumnsList, String columnName, + String columnType, boolean isMandatory, Integer length) { + + final HashMap datatableColumnMap = new HashMap<>(); + + datatableColumnMap.put("name", columnName); + datatableColumnMap.put("type", columnType); + datatableColumnMap.put("mandatory", isMandatory); + if (length != null) { + datatableColumnMap.put("length", length); + } + + datatableColumnsList.add(datatableColumnMap); + return datatableColumnsList; + } + +}