You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ma...@apache.org on 2016/01/28 06:47:00 UTC
[15/51] [partial] incubator-fineract git commit: initial code push
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/4b1ec9ef/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchApiTest.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchApiTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchApiTest.java
new file mode 100644
index 0000000..25a4644
--- /dev/null
+++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchApiTest.java
@@ -0,0 +1,425 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.integrationtests;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.fineract.batch.domain.BatchRequest;
+import org.apache.fineract.batch.domain.BatchResponse;
+import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
+import org.apache.fineract.integrationtests.common.BatchHelper;
+import org.apache.fineract.integrationtests.common.Utils;
+import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
+import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
+import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.jayway.restassured.builder.RequestSpecBuilder;
+import com.jayway.restassured.builder.ResponseSpecBuilder;
+import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.specification.RequestSpecification;
+import com.jayway.restassured.specification.ResponseSpecification;
+
+/**
+ * Test class for
+ * {@link org.apache.fineract.batch.command.CommandStrategyProvider}. This tests
+ * the response provided by commandStrategy by injecting it with a
+ * {@code BatchRequest}.
+ *
+ * @author RishabhShukla
+ *
+ * @see org.apache.fineract.integrationtests.common.BatchHelper
+ * @see org.apache.fineract.batch.domain.BatchRequest
+ */
+public class BatchApiTest {
+
+ private ResponseSpecification responseSpec;
+ private RequestSpecification requestSpec;
+
+ public BatchApiTest() {
+ super();
+ }
+
+ /**
+ * Sets up the essential settings for the TEST like contentType,
+ * expectedStatusCode. It uses the '@Before' annotation provided by jUnit.
+ */
+ @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();
+ }
+
+ /**
+ * Tests for the unimplemented command Strategies by returning 501 status
+ * code. For a unknownRequest a statusCode 501 is returned back with
+ * response.
+ *
+ * @see org.apache.fineract.batch.command.internal.UnknownCommandStrategy
+ */
+ @Test
+ public void shouldReturnStatusNotImplementedUnknownCommand() {
+
+ final BatchRequest br = new BatchRequest();
+ br.setRequestId(4711L);
+ br.setRelativeUrl("/nirvana");
+ br.setMethod("POST");
+
+ final List<BatchResponse> response = BatchHelper.postWithSingleRequest(this.requestSpec, this.responseSpec, br);
+
+ // Verify that only 501 is returned as the status code
+ for (BatchResponse resp : response) {
+ Assert.assertEquals("Verify Status code 501", (long) 501, (long) resp.getStatusCode());
+ }
+ }
+
+ /**
+ * Tests for the successful response for a createClient request from
+ * createClientCommand. A successful response with statusCode '200' is
+ * returned back.
+ *
+ * @see org.apache.fineract.batch.command.internal.CreateClientCommandStrategy
+ */
+ @Test
+ public void shouldReturnOkStatusForCreateClientCommand() {
+
+ final BatchRequest br = BatchHelper.createClientRequest(4712L, "");
+
+ final List<BatchResponse> response = BatchHelper.postWithSingleRequest(this.requestSpec, this.responseSpec, br);
+
+ // Verify that a 200 response is returned as the status code
+ for (BatchResponse resp : response) {
+ Assert.assertEquals("Verify Status code 200", (long) 200, (long) resp.getStatusCode());
+ }
+ }
+
+ /**
+ * Tests for an erroneous response with statusCode '501' if transaction
+ * fails. If Query Parameter 'enclosingTransaction' is set to 'true' and if
+ * one of the request in BatchRequest fails then all transactions are rolled
+ * back.
+ *
+ * @see org.apache.fineract.batch.command.internal.CreateClientCommandStrategy
+ * @see org.apache.fineract.batch.api.BatchApiResource
+ * @see org.apache.fineract.batch.service.BatchApiService
+ */
+ @Test
+ public void shouldRollBackAllTransactionsOnFailure() {
+
+ // Create first client request
+ final BatchRequest br1 = BatchHelper.createClientRequest(4713L, "TestExtId11");
+
+ // Create second client request
+ final BatchRequest br2 = BatchHelper.createClientRequest(4714L, "TestExtId12");
+
+ // Create third client request, having same externalID as second client,
+ // hence cause of error
+ final BatchRequest br3 = BatchHelper.createClientRequest(4715L, "TestExtId11");
+
+ final List<BatchRequest> batchRequests = new ArrayList<>();
+
+ batchRequests.add(br1);
+ batchRequests.add(br2);
+ batchRequests.add(br3);
+
+ final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
+ final List<BatchResponse> response = BatchHelper.postBatchRequestsWithEnclosingTransaction(this.requestSpec, this.responseSpec,
+ jsonifiedRequest);
+
+ // Verifies that none of the client in BatchRequest is created on the
+ // server
+ BatchHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, "TestExtId11");
+ BatchHelper.verifyClientCreatedOnServer(this.requestSpec, this.responseSpec, "TestExtId12");
+
+ // Asserts that all the transactions have been successfully rolled back
+ Assert.assertEquals(response.size(), 1);
+ Assert.assertEquals("Verify Status code 400", (long) 400, (long) response.get(0).getStatusCode());
+ }
+
+ /**
+ * Tests that a client information was successfully updated through
+ * updateClientCommand. A 'changes' parameter is returned in the response
+ * after successful update of client information.
+ *
+ * @see org.apache.fineract.batch.command.internal.UpdateClientCommandStrategy
+ */
+ @Test
+ public void shouldReflectChangesOnClientUpdate() {
+
+ // Create a createClient Request
+ final BatchRequest br1 = BatchHelper.createClientRequest(4716L, "");
+
+ // Create a clientUpdate Request
+ final BatchRequest br2 = BatchHelper.updateClientRequest(4717L, 4716L);
+
+ final List<BatchRequest> batchRequests = new ArrayList<>();
+
+ batchRequests.add(br1);
+ batchRequests.add(br2);
+
+ final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
+
+ final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec, this.responseSpec,
+ jsonifiedRequest);
+
+ // Get the changes parameter from updateClient Response
+ final JsonObject changes = new FromJsonHelper().parse(response.get(1).getBody()).getAsJsonObject().get("changes").getAsJsonObject();
+
+ // Asserts the client information is successfully updated
+ Assert.assertEquals("Verify Firstname", "TestFirstName", changes.get("firstname").getAsString());
+ Assert.assertEquals("Verify Lastname", "TestLastName", changes.get("lastname").getAsString());
+ }
+
+ /**
+ * Tests that a ApplyLoanCommand was successfully executed and returned a
+ * 200(OK) status. It creates a new client and apply a loan to that client.
+ * This also verifies the successful resolution of dependencies among two
+ * requests.
+ *
+ * @see org.apache.fineract.batch.command.internal.ApplyLoanCommandStrategy
+ */
+ @Test
+ public void shouldReturnOkStatusForApplyLoanCommand() {
+
+ final String loanProductJSON = new LoanProductTestBuilder() //
+ .withPrincipal("10000000.00") //
+ .withNumberOfRepayments("24") //
+ .withRepaymentAfterEvery("1") //
+ .withRepaymentTypeAsMonth() //
+ .withinterestRatePerPeriod("2") //
+ .withInterestRateFrequencyTypeAsMonths() //
+ .withAmortizationTypeAsEqualPrincipalPayment() //
+ .withInterestTypeAsDecliningBalance() //
+ .currencyDetails("0", "100").build(null);
+
+ final Integer productId = new LoanTransactionHelper(this.requestSpec, this.responseSpec).getLoanProductId(loanProductJSON);
+
+ // Create a createClient Request
+ final BatchRequest br1 = BatchHelper.createClientRequest(4718L, "");
+
+ // Create a activateClient Request
+ final BatchRequest br2 = BatchHelper.activateClientRequest(4719L, 4718L);
+
+ // Create a ApplyLoan Request
+ final BatchRequest br3 = BatchHelper.applyLoanRequest(4720L, 4719L, productId);
+
+ final List<BatchRequest> batchRequests = new ArrayList<>();
+
+ batchRequests.add(br1);
+ batchRequests.add(br2);
+ batchRequests.add(br3);
+
+ final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
+
+ final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec, this.responseSpec,
+ jsonifiedRequest);
+
+ // Get the clientId parameter from createClient Response
+ final JsonElement clientId = new FromJsonHelper().parse(response.get(0).getBody()).getAsJsonObject().get("clientId");
+
+ Assert.assertEquals("Verify Status Code 200" + clientId.getAsString(), 200L, (long) response.get(1).getStatusCode());
+ }
+
+ /**
+ * Tests that a new savings accounts was applied to an existing client and a
+ * 200(OK) status was returned. It first creates a new client and a savings
+ * product, then uses the cliendId and ProductId to apply a savings account.
+ *
+ * @see org.apache.fineract.batch.command.internal.ApplySavingsCommandStrategy
+ */
+ @Test
+ public void shouldReturnOkStatusForApplySavingsCommand() {
+
+ final SavingsProductHelper savingsProductHelper = new SavingsProductHelper();
+ final String savingsProductJSON = savingsProductHelper //
+ .withInterestCompoundingPeriodTypeAsDaily() //
+ .withInterestPostingPeriodTypeAsMonthly() //
+ .withInterestCalculationPeriodTypeAsDailyBalance() //
+ .withMinimumOpenningBalance("5000").build();
+
+ final Integer productId = SavingsProductHelper.createSavingsProduct(savingsProductJSON, this.requestSpec, this.responseSpec);
+
+ // Create a createClient Request
+ final BatchRequest br1 = BatchHelper.createClientRequest(4720L, "");
+
+ // Create a activateClient Request
+ final BatchRequest br2 = BatchHelper.activateClientRequest(4721L, 4720L);
+
+ // Create a applySavings Request
+ final BatchRequest br3 = BatchHelper.applySavingsRequest(4722L, 4721L, productId);
+
+ final List<BatchRequest> batchRequests = new ArrayList<>();
+
+ batchRequests.add(br1);
+ batchRequests.add(br2);
+ batchRequests.add(br3);
+
+ final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
+
+ final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec, this.responseSpec,
+ jsonifiedRequest);
+
+ Assert.assertEquals("Verify Status Code 200", 200L, (long) response.get(1).getStatusCode());
+ }
+
+ /**
+ * Tests that a new charge was added to a newly created loan and charges are
+ * Collected properly 200(OK) status was returned for successful responses.
+ * It first creates a new client and apply a loan, then creates a new charge
+ * for the create loan and then fetches all the applied charges
+ *
+ * @see org.apache.fineract.batch.command.internal.CollectChargesCommandStrategy
+ * @see org.apache.fineract.batch.command.internal.CreateChargeCommandStrategy
+ */
+ @Test
+ public void shouldReturnOkStatusForCollectChargesCommand() {
+
+ final String loanProductJSON = new LoanProductTestBuilder() //
+ .withPrincipal("10000000.00") //
+ .withNumberOfRepayments("24") //
+ .withRepaymentAfterEvery("1") //
+ .withRepaymentTypeAsMonth() //
+ .withinterestRatePerPeriod("2") //
+ .withInterestRateFrequencyTypeAsMonths() //
+ .withAmortizationTypeAsEqualPrincipalPayment() //
+ .withInterestTypeAsDecliningBalance() //
+ .currencyDetails("0", "100").build(null);
+
+ final Integer productId = new LoanTransactionHelper(this.requestSpec, this.responseSpec).getLoanProductId(loanProductJSON);
+
+ // Create a createClient Request
+ final BatchRequest br1 = BatchHelper.createClientRequest(4722L, "");
+
+ // Create a activateClient Request
+ final BatchRequest br2 = BatchHelper.activateClientRequest(4723L, 4722L);
+
+ // Create a ApplyLoan Request
+ final BatchRequest br3 = BatchHelper.applyLoanRequest(4724L, 4723L, productId);
+
+ // Create a Collect Charges Request
+ final BatchRequest br4 = BatchHelper.collectChargesRequest(4725L, 4724L);
+
+ final List<BatchRequest> batchRequests = new ArrayList<>();
+
+ batchRequests.add(br1);
+ batchRequests.add(br2);
+ batchRequests.add(br3);
+ batchRequests.add(br4);
+
+ final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
+
+ final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec, this.responseSpec,
+ jsonifiedRequest);
+
+ Assert.assertEquals("Verify Status Code 200 for Create Loan Charge", 200L, (long) response.get(3).getStatusCode());
+ }
+
+ /**
+ * Test for the successful activation of a pending client using
+ * 'ActivateClientCommandStrategy'. A '200' status code is expected on
+ * successful activation.
+ *
+ * @see org.apache.fineract.batch.command.internal.ActivateClientCommandStrategy
+ */
+ @Test
+ public void shouldReturnOkStatusOnSuccessfulClientActivation() {
+
+ // Create a createClient Request
+ final BatchRequest br1 = BatchHelper.createClientRequest(4726L, "");
+
+ // Create a activateClient Request
+ final BatchRequest br2 = BatchHelper.activateClientRequest(4727L, 4726L);
+
+ final List<BatchRequest> batchRequests = new ArrayList<>();
+
+ batchRequests.add(br1);
+ batchRequests.add(br2);
+
+ final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
+
+ final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec, this.responseSpec,
+ jsonifiedRequest);
+
+ Assert.assertEquals("Verify Status Code 200 for Create Client", 200L, (long) response.get(0).getStatusCode());
+ Assert.assertEquals("Verify Status Code 200 for Activate Client", 200L, (long) response.get(1).getStatusCode());
+ }
+
+ /**
+ * Test for the successful approval and disbursal of a loan using
+ * 'ApproveLoanCommandStrategy' and 'DisburseLoanCommandStrategy'. A '200'
+ * status code is expected on successful activation.
+ *
+ * @see org.apache.fineract.batch.command.internal.ApproveLoanCommandStrategy
+ * @see org.apache.fineract.batch.command.internal.DisburseLoanCommandStrategy
+ */
+ @Test
+ public void shouldReturnOkStatusOnSuccessfulLoanApprovalAndDisburse() {
+ final String loanProductJSON = new LoanProductTestBuilder() //
+ .withPrincipal("10000000.00") //
+ .withNumberOfRepayments("24") //
+ .withRepaymentAfterEvery("1") //
+ .withRepaymentTypeAsMonth() //
+ .withinterestRatePerPeriod("2") //
+ .withInterestRateFrequencyTypeAsMonths() //
+ .withAmortizationTypeAsEqualPrincipalPayment() //
+ .withInterestTypeAsDecliningBalance() //
+ .currencyDetails("0", "100").build(null);
+
+ final Integer productId = new LoanTransactionHelper(this.requestSpec, this.responseSpec).getLoanProductId(loanProductJSON);
+
+ // Create a createClient Request
+ final BatchRequest br1 = BatchHelper.createClientRequest(4730L, "");
+
+ // Create a activateClient Request
+ final BatchRequest br2 = BatchHelper.activateClientRequest(4731L, 4730L);
+
+ // Create a ApplyLoan Request
+ final BatchRequest br3 = BatchHelper.applyLoanRequest(4732L, 4731L, productId);
+
+ // Create a approveLoan Request
+ final BatchRequest br4 = BatchHelper.approveLoanRequest(4733L, 4732L);
+
+ // Create a disburseLoan Request
+ final BatchRequest br5 = BatchHelper.disburseLoanRequest(4734L, 4733L);
+
+ final List<BatchRequest> batchRequests = new ArrayList<>();
+
+ batchRequests.add(br1);
+ batchRequests.add(br2);
+ batchRequests.add(br3);
+ batchRequests.add(br4);
+ batchRequests.add(br5);
+
+ final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
+
+ final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec, this.responseSpec,
+ jsonifiedRequest);
+
+ Assert.assertEquals("Verify Status Code 200 for Approve Loan", 200L, (long) response.get(3).getStatusCode());
+ Assert.assertEquals("Verify Status Code 200 for Disburse Loan", 200L, (long) response.get(4).getStatusCode());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/4b1ec9ef/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchRequestsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchRequestsIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchRequestsIntegrationTest.java
new file mode 100644
index 0000000..ad1f61b
--- /dev/null
+++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchRequestsIntegrationTest.java
@@ -0,0 +1,140 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.integrationtests;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.fineract.batch.domain.BatchRequest;
+import org.apache.fineract.batch.domain.BatchResponse;
+import org.apache.fineract.integrationtests.common.BatchHelper;
+import org.apache.fineract.integrationtests.common.ClientHelper;
+import org.apache.fineract.integrationtests.common.GroupHelper;
+import org.apache.fineract.integrationtests.common.Utils;
+import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
+import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.jayway.restassured.builder.RequestSpecBuilder;
+import com.jayway.restassured.builder.ResponseSpecBuilder;
+import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.specification.RequestSpecification;
+import com.jayway.restassured.specification.ResponseSpecification;
+
+/**
+ * Test class for testing the integration of Batch API with custom batch
+ * requests and various user defined workflow. Like in the case of mifos
+ * community-app
+ *
+ * @author Rishabh Shukla
+ */
+public class BatchRequestsIntegrationTest {
+
+ private ResponseSpecification responseSpec;
+ private RequestSpecification requestSpec;
+
+ public BatchRequestsIntegrationTest() {
+ super();
+ }
+
+ /**
+ * Sets up the essential settings for the TEST like contentType,
+ * expectedStatusCode. It uses the '@Before' annotation provided by jUnit.
+ */
+ @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();
+ }
+
+ @Test
+ /**
+ * Tests that a loan is successfully applied to client members of a group.
+ * Firstly, it'll create a few new clients and then will add those clients
+ * to the group. Then a few loans will be created and one of those loans
+ * will be chosen at random and similarily a few of the created clients will
+ * be chosen on random. Now, the selected loan will be applied to these
+ * clients through Batch - API ApplyLoanCommandStrategy.
+ */
+ public void shouldReturnOkStatusForLoansAppliedToSelectedClients() {
+
+ // Generate a random count of number of clients to be created
+ final Integer clientsCount = (int) Math.ceil(Math.random() * 7) + 3;
+ final Integer[] clientIDs = new Integer[clientsCount];
+
+ // Create a new group and get its groupId
+ Integer groupID = GroupHelper.createGroup(this.requestSpec, this.responseSpec, true);
+
+ // Create new clients and add those to this group
+ for (Integer i = 0; i < clientsCount; i++) {
+ clientIDs[i] = ClientHelper.createClient(this.requestSpec, this.responseSpec);
+ groupID = GroupHelper.associateClient(this.requestSpec, this.responseSpec, groupID.toString(), clientIDs[i].toString());
+ System.out.println("client " + clientIDs[i] + " has been added to the group " + groupID);
+ }
+
+ // Generate a random count of number of new loan products to be created
+ final Integer loansCount = (int) Math.ceil(Math.random() * 4) + 1;
+ final Integer[] loanProducts = new Integer[loansCount];
+
+ // Create new loan Products
+ for (Integer i = 0; i < loansCount; i++) {
+ final String loanProductJSON = new LoanProductTestBuilder() //
+ .withPrincipal(String.valueOf(10000.00 + Math.ceil(Math.random() * 1000000.00))) //
+ .withNumberOfRepayments(String.valueOf(2 + (int) Math.ceil(Math.random() * 36))) //
+ .withRepaymentAfterEvery(String.valueOf(1 + (int) Math.ceil(Math.random() * 3))) //
+ .withRepaymentTypeAsMonth() //
+ .withinterestRatePerPeriod(String.valueOf(1 + (int) Math.ceil(Math.random() * 4))) //
+ .withInterestRateFrequencyTypeAsMonths() //
+ .withAmortizationTypeAsEqualPrincipalPayment() //
+ .withInterestTypeAsDecliningBalance() //
+ .currencyDetails("0", "100").build(null);
+
+ loanProducts[i] = new LoanTransactionHelper(this.requestSpec, this.responseSpec).getLoanProductId(loanProductJSON);
+ }
+
+ // Select anyone of the loan products at random
+ final Integer loanProductID = loanProducts[(int) Math.floor(Math.random() * (loansCount - 1))];
+
+ final List<BatchRequest> batchRequests = new ArrayList<>();
+
+ // Select a few clients from created group at random
+ Integer selClientsCount = (int) Math.ceil(Math.random() * clientsCount) + 2;
+ for (int i = 0; i < selClientsCount; i++) {
+ BatchRequest br = BatchHelper.applyLoanRequest((long) selClientsCount, null, loanProductID);
+ br.setBody(br.getBody().replace("$.clientId", String.valueOf(clientIDs[(int) Math.floor(Math.random() * (clientsCount - 1))])));
+ batchRequests.add(br);
+ }
+
+ // Send the request to Batch - API
+ final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests);
+
+ final List<BatchResponse> response = BatchHelper.postBatchRequestsWithoutEnclosingTransaction(this.requestSpec, this.responseSpec,
+ jsonifiedRequest);
+
+ // Verify that each loan has been applied successfully
+ for (BatchResponse res : response) {
+ Assert.assertEquals("Verify Status Code 200", 200L, (long) res.getStatusCode());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/4b1ec9ef/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java
new file mode 100644
index 0000000..d923ee5
--- /dev/null
+++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java
@@ -0,0 +1,261 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.integrationtests;
+
+import static org.junit.Assert.assertEquals;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+
+import org.apache.fineract.integrationtests.common.CenterDomain;
+import org.apache.fineract.integrationtests.common.CenterHelper;
+import org.apache.fineract.integrationtests.common.OfficeHelper;
+import org.apache.fineract.integrationtests.common.Utils;
+import org.apache.fineract.integrationtests.common.organisation.StaffHelper;
+import org.junit.Assert;
+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;
+import com.jayway.restassured.specification.RequestSpecification;
+import com.jayway.restassured.specification.ResponseSpecification;
+
+public class CenterIntegrationTest {
+
+ private RequestSpecification requestSpec;
+ private ResponseSpecification responseSpec;
+
+ @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();
+ }
+
+ @Test
+ public void testBasicCenterCreation() {
+ int officeId = new OfficeHelper(requestSpec, responseSpec).createOffice("01 July 2007");
+
+ String name = "TestBasicCreation" + new Timestamp(new java.util.Date().getTime());
+ int resourceId = CenterHelper.createCenter(name, officeId, requestSpec, responseSpec);
+ CenterDomain center = CenterHelper.retrieveByID(resourceId, requestSpec, responseSpec);
+
+ Assert.assertNotNull(center);
+ Assert.assertTrue(center.getName().equals(name));
+ Assert.assertTrue(center.getOfficeId() == officeId);
+ Assert.assertTrue(center.isActive() == false);
+
+ // Test retrieval by listing all centers
+ int id = CenterHelper.listCenters(requestSpec, responseSpec).get(0).getId();
+ Assert.assertTrue(id > 0);
+
+ CenterDomain retrievedCenter = CenterHelper.retrieveByID(id, requestSpec, responseSpec);
+ Assert.assertNotNull(retrievedCenter);
+ Assert.assertNotNull(retrievedCenter.getName());
+ Assert.assertNotNull(retrievedCenter.getHierarchy());
+ Assert.assertNotNull(retrievedCenter.getOfficeName());
+
+ }
+
+ @Test
+ public void testFullCenterCreation() {
+
+ int officeId = new OfficeHelper(requestSpec, responseSpec).createOffice("01 July 2007");
+ String name = "TestFullCreation" + new Timestamp(new java.util.Date().getTime());
+ String externalId = Utils.randomStringGenerator("ID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ int staffId = StaffHelper.createStaff(requestSpec, responseSpec);
+ int[] groupMembers = generateGroupMembers(3, officeId);
+ int resourceId = CenterHelper.createCenter(name, officeId, externalId, staffId, groupMembers, requestSpec, responseSpec);
+ CenterDomain center = CenterHelper.retrieveByID(resourceId, requestSpec, responseSpec);
+
+ Assert.assertNotNull(center);
+ Assert.assertTrue(center.getName().equals(name));
+ Assert.assertTrue(center.getOfficeId() == officeId);
+ Assert.assertTrue(center.getExternalId().equals(externalId));
+ Assert.assertTrue(center.getStaffId() == staffId);
+ Assert.assertTrue(center.isActive() == false);
+ Assert.assertArrayEquals(center.getGroupMembers(), groupMembers);
+ }
+
+ @Test
+ public void testListCenters() {
+ ArrayList<CenterDomain> paginatedList = CenterHelper.paginatedListCenters(requestSpec, responseSpec);
+ ArrayList<CenterDomain> list = CenterHelper.listCenters(requestSpec, responseSpec);
+
+ Assert.assertNotNull(paginatedList);
+ Assert.assertNotNull(list);
+ Assert.assertTrue(Arrays.equals(paginatedList.toArray(new CenterDomain[paginatedList.size()]),
+ list.toArray(new CenterDomain[list.size()])));
+ }
+
+ @Test
+ public void testVoidCenterRetrieval() {
+ ArrayList<CenterDomain> arr = CenterHelper.listCenters(requestSpec, responseSpec);
+ int id = arr.get(arr.size() - 1).getId() + 1;
+ ResponseSpecification responseSpec = new ResponseSpecBuilder().expectStatusCode(404).build();
+ CenterDomain center = CenterHelper.retrieveByID(id, requestSpec, responseSpec);
+ Assert.assertNotNull(center);
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @Test
+ public void testCenterUpdate() {
+ int officeId = new OfficeHelper(requestSpec, responseSpec).createOffice("01 July 2007");
+ String name = "TestFullCreation" + new Timestamp(new java.util.Date().getTime());
+ String externalId = Utils.randomStringGenerator("ID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ int staffId = StaffHelper.createStaff(requestSpec, responseSpec);
+ int[] groupMembers = generateGroupMembers(3, officeId);
+ int resourceId = CenterHelper.createCenter(name, officeId, externalId, staffId, groupMembers, requestSpec, responseSpec);
+
+ String newName = "TestCenterUpdateNew" + new Timestamp(new java.util.Date().getTime());
+ String newExternalId = Utils.randomStringGenerator("newID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ int newStaffId = StaffHelper.createStaff(requestSpec, responseSpec);
+ int[] associateGroupMembers = generateGroupMembers(2, officeId);
+
+ int[] associateResponse = CenterHelper.associateGroups(resourceId, associateGroupMembers, requestSpec, responseSpec);
+ Arrays.sort(associateResponse);
+ Arrays.sort(associateGroupMembers);
+ Assert.assertArrayEquals(associateResponse, associateGroupMembers);
+
+ int[] newGroupMembers = new int[5];
+ for (int i = 0; i < 5; i++) {
+ if (i < 3) {
+ newGroupMembers[i] = groupMembers[i];
+ } else {
+ newGroupMembers[i] = associateGroupMembers[i % 3];
+ }
+ }
+
+ HashMap request = new HashMap();
+ request.put("name", newName);
+ request.put("externalId", newExternalId);
+ request.put("staffId", newStaffId);
+ HashMap response = CenterHelper.updateCenter(resourceId, request, requestSpec, responseSpec);
+ Assert.assertNotNull(response);
+ Assert.assertEquals(newName, response.get("name"));
+ Assert.assertEquals(newExternalId, response.get("externalId"));
+ Assert.assertEquals(newStaffId, response.get("staffId"));
+
+ CenterDomain center = CenterHelper.retrieveByID(resourceId, requestSpec, responseSpec);
+ Assert.assertNotNull(center);
+ Assert.assertEquals(newName, center.getName());
+ Assert.assertEquals(newExternalId, center.getExternalId());
+ Assert.assertEquals((Integer)newStaffId, center.getStaffId());
+ Assert.assertArrayEquals(newGroupMembers, center.getGroupMembers());
+ }
+
+ @Test
+ public void testCenterDeletion() {
+ int officeId = new OfficeHelper(requestSpec, responseSpec).createOffice("01 July 2007");
+ String name = "TestBasicCreation" + new Timestamp(new java.util.Date().getTime());
+ int resourceId = CenterHelper.createCenter(name, officeId, requestSpec, responseSpec);
+
+ CenterHelper.deleteCenter(resourceId, requestSpec, responseSpec);
+ ResponseSpecification responseSpec = new ResponseSpecBuilder().expectStatusCode(404).build();
+ CenterDomain center = CenterHelper.retrieveByID(resourceId, requestSpec, responseSpec);
+ Assert.assertNotNull(center);
+ }
+
+ private int[] generateGroupMembers(int size, int officeId) {
+ int[] groupMembers = new int[size];
+ for (int i = 0; i < groupMembers.length; i++) {
+ final HashMap<String, String> map = new HashMap<>();
+ map.put("officeId", "" + officeId);
+ map.put("name", Utils.randomStringGenerator("Group_Name_", 5));
+ map.put("externalId", Utils.randomStringGenerator("ID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
+ map.put("dateFormat", "dd MMMM yyyy");
+ map.put("locale", "en");
+ map.put("active", "true");
+ map.put("activationDate", "04 March 2011");
+
+ groupMembers[i] = Utils.performServerPost(requestSpec, responseSpec, "/fineract-provider/api/v1/groups?"
+ + Utils.TENANT_IDENTIFIER, new Gson().toJson(map), "groupId");
+ }
+ return groupMembers;
+ }
+
+ @Test
+ public void testStaffAssignmentDuringCenterCreation() {
+
+ Integer staffId = StaffHelper.createStaff(this.requestSpec, this.responseSpec);
+ System.out.println("--------------creating first staff with id-------------" + staffId);
+ Assert.assertNotNull(staffId);
+
+ int centerWithStaffId = CenterHelper.createCenterWithStaffId(this.requestSpec, this.responseSpec, staffId);
+ CenterDomain center = CenterHelper.retrieveByID(centerWithStaffId, requestSpec, responseSpec);
+ Assert.assertNotNull(center);
+ Assert.assertTrue(center.getId() == centerWithStaffId);
+ Assert.assertTrue(center.getStaffId() == staffId);
+ Assert.assertTrue(center.isActive() == true);
+ }
+
+ @Test
+ public void testAssignStaffToCenter() {
+ Integer staffId = StaffHelper.createStaff(this.requestSpec, this.responseSpec);
+ System.out.println("--------------creating first staff with id-------------" + staffId);
+ Assert.assertNotNull(staffId);
+
+ Integer groupID = CenterHelper.createCenter(this.requestSpec, this.responseSpec);
+ CenterHelper.verifyCenterCreatedOnServer(this.requestSpec, this.responseSpec, groupID);
+
+ HashMap assignStaffToCenterResponseMap = (HashMap) CenterHelper.assignStaff(this.requestSpec, this.responseSpec, groupID.toString(),
+ staffId.longValue());
+ assertEquals("Verify assigned staff id is the same as id sent", assignStaffToCenterResponseMap.get("staffId"), staffId);
+
+ CenterDomain center = CenterHelper.retrieveByID(groupID, requestSpec, responseSpec);
+ Assert.assertNotNull(center);
+ Assert.assertTrue(center.getId() == groupID);
+ Assert.assertTrue(center.getStaffId() == staffId);
+
+ }
+
+ @Test
+ public void testUnassignStaffToCenter() {
+ Integer staffId = StaffHelper.createStaff(this.requestSpec, this.responseSpec);
+ System.out.println("--------------creating first staff with id-------------" + staffId);
+ Assert.assertNotNull(staffId);
+
+ Integer groupID = CenterHelper.createCenter(this.requestSpec, this.responseSpec);
+ CenterHelper.verifyCenterCreatedOnServer(this.requestSpec, this.responseSpec, groupID);
+
+ HashMap assignStaffToCenterResponseMap = (HashMap) CenterHelper.assignStaff(this.requestSpec, this.responseSpec, groupID.toString(),
+ staffId.longValue());
+ assertEquals("Verify assigned staff id is the same as id sent", assignStaffToCenterResponseMap.get("staffId"), staffId);
+ CenterDomain centerWithStaffAssigned = CenterHelper.retrieveByID(groupID, requestSpec, responseSpec);
+ Assert.assertNotNull(centerWithStaffAssigned);
+ Assert.assertTrue(centerWithStaffAssigned.getId() == groupID);
+ Assert.assertTrue(centerWithStaffAssigned.getStaffId() == staffId);
+
+ HashMap unassignStaffToCenterResponseMap = (HashMap) CenterHelper.unassignStaff(this.requestSpec, this.responseSpec, groupID.toString(),
+ staffId.longValue());
+ assertEquals("Verify staffId is null after unassigning ", unassignStaffToCenterResponseMap.get("staffId"), null);
+ CenterDomain centerWithStaffUnssigned = CenterHelper.retrieveByID(groupID, requestSpec, responseSpec);
+ Assert.assertNotNull(centerWithStaffUnssigned);
+ Assert.assertTrue(centerWithStaffUnssigned.getId() == groupID);
+ Assert.assertTrue(centerWithStaffUnssigned.getStaffId() == null);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/4b1ec9ef/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ChargesTest.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ChargesTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ChargesTest.java
new file mode 100644
index 0000000..d441401
--- /dev/null
+++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ChargesTest.java
@@ -0,0 +1,326 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.integrationtests;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.apache.fineract.integrationtests.common.Utils;
+import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.jayway.restassured.builder.RequestSpecBuilder;
+import com.jayway.restassured.builder.ResponseSpecBuilder;
+import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.specification.RequestSpecification;
+import com.jayway.restassured.specification.ResponseSpecification;
+
+@SuppressWarnings({ "rawtypes" })
+public class ChargesTest {
+
+ private ResponseSpecification responseSpec;
+ private RequestSpecification requestSpec;
+
+ @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();
+ }
+
+ @Test
+ public void testChargesForLoans() {
+
+ // Retrieving all Charges
+ ArrayList<HashMap> allChargesData = ChargesHelper.getCharges(this.requestSpec, this.responseSpec);
+ Assert.assertNotNull(allChargesData);
+
+ // Testing Creation, Updation and Deletion of Disbursement Charge
+ final Integer disbursementChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getLoanDisbursementJSON());
+ Assert.assertNotNull(disbursementChargeId);
+
+ // Updating Charge Amount
+ HashMap changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, disbursementChargeId,
+ ChargesHelper.getModifyChargeJSON());
+
+ HashMap chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, disbursementChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, disbursementChargeId,
+ ChargesHelper.getModifyChargeAsPecentageAmountJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, disbursementChargeId);
+
+ HashMap chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargePaymentMode");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargePaymentMode"));
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, disbursementChargeId,
+ ChargesHelper.getModifyChargeAsPecentageLoanAmountWithInterestJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, disbursementChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, disbursementChargeId,
+ ChargesHelper.getModifyChargeAsPercentageInterestJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, disbursementChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ Integer chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, disbursementChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", disbursementChargeId, chargeIdAfterDeletion);
+
+ // Testing Creation, Updation and Deletion of Specified due date Charge
+ final Integer specifiedDueDateChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getLoanSpecifiedDueDateJSON());
+ Assert.assertNotNull(specifiedDueDateChargeId);
+
+ // Updating Charge Amount
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, specifiedDueDateChargeId,
+ ChargesHelper.getModifyChargeJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, specifiedDueDateChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, specifiedDueDateChargeId,
+ ChargesHelper.getModifyChargeAsPecentageAmountJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, specifiedDueDateChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargePaymentMode");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargePaymentMode"));
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, specifiedDueDateChargeId,
+ ChargesHelper.getModifyChargeAsPecentageLoanAmountWithInterestJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, specifiedDueDateChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, specifiedDueDateChargeId,
+ ChargesHelper.getModifyChargeAsPercentageInterestJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, specifiedDueDateChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, specifiedDueDateChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", specifiedDueDateChargeId, chargeIdAfterDeletion);
+
+ // Testing Creation, Updation and Deletion of Installment Fee Charge
+ final Integer installmentFeeChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getLoanInstallmentFeeJSON());
+
+ // Updating Charge Amount
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, installmentFeeChargeId,
+ ChargesHelper.getModifyChargeJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, installmentFeeChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, installmentFeeChargeId,
+ ChargesHelper.getModifyChargeAsPecentageAmountJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, installmentFeeChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargePaymentMode");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargePaymentMode"));
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, installmentFeeChargeId,
+ ChargesHelper.getModifyChargeAsPecentageLoanAmountWithInterestJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, installmentFeeChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, installmentFeeChargeId,
+ ChargesHelper.getModifyChargeAsPercentageInterestJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, installmentFeeChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, installmentFeeChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", installmentFeeChargeId, chargeIdAfterDeletion);
+
+ // Testing Creation, Updation and Deletion of Overdue Installment Fee
+ // Charge
+ final Integer overdueFeeChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getLoanOverdueFeeJSON());
+ Assert.assertNotNull(overdueFeeChargeId);
+
+ // Updating Charge Amount
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, overdueFeeChargeId, ChargesHelper.getModifyChargeJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, overdueFeeChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, overdueFeeChargeId,
+ ChargesHelper.getModifyChargeAsPecentageAmountJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, overdueFeeChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargePaymentMode");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargePaymentMode"));
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, overdueFeeChargeId,
+ ChargesHelper.getModifyChargeAsPecentageLoanAmountWithInterestJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, overdueFeeChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, overdueFeeChargeId,
+ ChargesHelper.getModifyChargeAsPercentageInterestJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, overdueFeeChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, overdueFeeChargeId,
+ ChargesHelper.getModifyChargeFeeFrequencyAsYearsJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, overdueFeeChargeId);
+
+ chargeChangedData = (HashMap) chargeDataAfterChanges.get("feeFrequency");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("feeFrequency"));
+
+ chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, overdueFeeChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", overdueFeeChargeId, chargeIdAfterDeletion);
+ }
+
+ @Test
+ public void testChargesForSavings() {
+
+ // Testing Creation, Updation and Deletion of Specified due date Charge
+ final Integer specifiedDueDateChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getSavingsSpecifiedDueDateJSON());
+ Assert.assertNotNull(specifiedDueDateChargeId);
+
+ // Updating Charge Amount
+ HashMap changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, specifiedDueDateChargeId,
+ ChargesHelper.getModifyChargeJSON());
+
+ HashMap chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, specifiedDueDateChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ Integer chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, specifiedDueDateChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", specifiedDueDateChargeId, chargeIdAfterDeletion);
+
+ // Testing Creation, Updation and Deletion of Savings Activation Charge
+ final Integer savingsActivationChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getSavingsActivationFeeJSON());
+ Assert.assertNotNull(savingsActivationChargeId);
+
+ // Updating Charge Amount
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, savingsActivationChargeId,
+ ChargesHelper.getModifyChargeJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, savingsActivationChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, savingsActivationChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", savingsActivationChargeId, chargeIdAfterDeletion);
+
+ // Testing Creation, Updation and Deletion of Charge for Withdrawal Fee
+ final Integer withdrawalFeeChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getSavingsWithdrawalFeeJSON());
+ Assert.assertNotNull(withdrawalFeeChargeId);
+
+ // Updating Charge-Calculation-Type to Withdrawal-Fee
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, withdrawalFeeChargeId,
+ ChargesHelper.getModifyWithdrawalFeeSavingsChargeJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, withdrawalFeeChargeId);
+
+ HashMap chargeChangedData = (HashMap) chargeDataAfterChanges.get("chargeCalculationType");
+ Assert.assertEquals("Verifying Charge after Modification", chargeChangedData.get("id"), changes.get("chargeCalculationType"));
+
+ chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, withdrawalFeeChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", withdrawalFeeChargeId, chargeIdAfterDeletion);
+
+ // Testing Creation, Updation and Deletion of Charge for Annual Fee
+ final Integer annualFeeChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getSavingsAnnualFeeJSON());
+ Assert.assertNotNull(annualFeeChargeId);
+
+ // Updating Charge Amount
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, annualFeeChargeId, ChargesHelper.getModifyChargeJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, annualFeeChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, annualFeeChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", annualFeeChargeId, chargeIdAfterDeletion);
+
+ // Testing Creation, Updation and Deletion of Charge for Monthly Fee
+ final Integer monthlyFeeChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getSavingsMonthlyFeeJSON());
+ Assert.assertNotNull(monthlyFeeChargeId);
+
+ // Updating Charge Amount
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, monthlyFeeChargeId, ChargesHelper.getModifyChargeJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, monthlyFeeChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, monthlyFeeChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", monthlyFeeChargeId, chargeIdAfterDeletion);
+
+ // Testing Creation, Updation and Deletion of Charge for Overdraft Fee
+ final Integer overdraftFeeChargeId = ChargesHelper.createCharges(this.requestSpec, this.responseSpec,
+ ChargesHelper.getSavingsOverdraftFeeJSON());
+ Assert.assertNotNull(overdraftFeeChargeId);
+
+ // Updating Charge Amount
+ changes = ChargesHelper.updateCharges(this.requestSpec, this.responseSpec, overdraftFeeChargeId,
+ ChargesHelper.getModifyChargeJSON());
+
+ chargeDataAfterChanges = ChargesHelper.getChargeById(this.requestSpec, this.responseSpec, overdraftFeeChargeId);
+ Assert.assertEquals("Verifying Charge after Modification", chargeDataAfterChanges.get("amount"), changes.get("amount"));
+
+ chargeIdAfterDeletion = ChargesHelper.deleteCharge(this.responseSpec, this.requestSpec, overdraftFeeChargeId);
+ Assert.assertEquals("Verifying Charge ID after deletion", overdraftFeeChargeId, chargeIdAfterDeletion);
+ }
+}