blob: b9ae03ae2b6ae183bc533ba4f02994425fd9dbff [file] [log] [blame]
/**
* 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.shares;
import com.google.gson.Gson;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.builder.ResponseSpecBuilder;
import io.restassured.http.ContentType;
import io.restassured.specification.RequestSpecification;
import io.restassured.specification.ResponseSpecification;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.fineract.integrationtests.common.ClientHelper;
import org.apache.fineract.integrationtests.common.Utils;
import org.apache.fineract.integrationtests.common.charges.ChargesHelper;
import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ShareAccountIntegrationTests {
private static final Logger LOG = LoggerFactory.getLogger(ShareAccountIntegrationTests.class);
private RequestSpecification requestSpec;
private ResponseSpecification responseSpec;
private ShareProductHelper shareProductHelper;
@BeforeEach
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 testCreateShareProduct() {
// This method will check create share product, get share product,
// update share product.
LOG.info("------------------------------CREATING NEW SHARE PRODUCT ---------------------------------------");
shareProductHelper = new ShareProductHelper();
final Integer shareProductId = createShareProduct();
Assertions.assertNotNull(shareProductId);
LOG.info("------------------------------CREATING SHARE PRODUCT COMPLETE---------------------------------------");
LOG.info("------------------------------RETRIEVING SHARE PRODUCT---------------------------------------");
Map<String, Object> shareProductData = ShareProductTransactionHelper.retrieveShareProduct(shareProductId, requestSpec,
responseSpec);
Assertions.assertNotNull(shareProductData);
shareProductHelper.verifyShareProduct(shareProductData);
LOG.info("------------------------------RETRIEVING SHARE PRODUCT COMPLETE---------------------------------------");
LOG.info("------------------------------UPDATING SHARE PRODUCT---------------------------------------");
Map<String, Object> shareProductDataForUpdate = new HashMap<>();
shareProductDataForUpdate.put("totalShares", "2000");
shareProductDataForUpdate.put("sharesIssued", "2000");
String updateShareProductJsonString = new Gson().toJson(shareProductDataForUpdate);
Integer updatedProductId = ShareProductTransactionHelper.updateShareProduct(shareProductId, updateShareProductJsonString,
requestSpec, responseSpec);
Assertions.assertNotNull(updatedProductId);
Map<String, Object> updatedShareProductData = ShareProductTransactionHelper.retrieveShareProduct(updatedProductId, requestSpec,
responseSpec);
String updatedTotalShares = String.valueOf(updatedShareProductData.get("totalShares"));
String updatedSharesIssued = String.valueOf(updatedShareProductData.get("totalSharesIssued"));
Assertions.assertEquals("2000", updatedTotalShares);
Assertions.assertEquals("2000", updatedSharesIssued);
LOG.info("------------------------------UPDATING SHARE PRODUCT COMPLETE---------------------------------------");
}
@SuppressWarnings("unchecked")
@Test
public void testCreateShareAccount() {
shareProductHelper = new ShareProductHelper();
final Integer productId = createShareProduct();
Assertions.assertNotNull(productId);
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
Assertions.assertNotNull(clientId);
Integer savingsAccountId = SavingsAccountHelper.openSavingsAccount(requestSpec, responseSpec, clientId, "1000");
Assertions.assertNotNull(savingsAccountId);
final Integer shareAccountId = createShareAccount(clientId, productId, savingsAccountId);
Assertions.assertNotNull(shareAccountId);
Map<String, Object> shareProductData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec,
responseSpec);
Assertions.assertNotNull(shareProductData);
Map<String, Object> shareAccountDataForUpdate = new HashMap<>();
shareAccountDataForUpdate.put("requestedShares", 30);
shareAccountDataForUpdate.put("applicationDate", "02 Mar 2016");
shareAccountDataForUpdate.put("dateFormat", "dd MMMM yyyy");
shareAccountDataForUpdate.put("locale", "en_GB");
String updateShareAccountJsonString = new Gson().toJson(shareAccountDataForUpdate);
ShareAccountTransactionHelper.updateShareAccount(shareAccountId, updateShareAccountJsonString, requestSpec, responseSpec);
shareProductData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
List<Map<String, Object>> transactions = (List<Map<String, Object>>) shareProductData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(1, transactions.size());
Map<String, Object> transaction = transactions.get(0);
Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("60.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("60.0", String.valueOf(transaction.get("amountPaid")));
List<Integer> dateList = (List<Integer>) transaction.get("purchasedDate");
Calendar cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
DateFormat simple = new SimpleDateFormat("dd MMM yyyy");
Assertions.assertEquals("02 Mar 2016", simple.format(date));
}
@Test
@SuppressWarnings("unchecked")
public void testShareAccountApproval() {
DateFormat simple = new SimpleDateFormat("dd MMM yyyy");
shareProductHelper = new ShareProductHelper();
final Integer productId = createShareProduct();
Assertions.assertNotNull(productId);
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
Assertions.assertNotNull(clientId);
Integer savingsAccountId = SavingsAccountHelper.openSavingsAccount(requestSpec, responseSpec, clientId, "1000");
Assertions.assertNotNull(savingsAccountId);
String activationCharge = ChargesHelper.getShareAccountActivationChargeJson();
Integer activationChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, activationCharge);
String purchaseCharge = ChargesHelper.getShareAccountPurchaseChargeJson();
Integer purchaseChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, purchaseCharge);
String redeemCharge = ChargesHelper.getShareAccountRedeemChargeJson();
Integer redeemChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, redeemCharge);
List<Map<String, Object>> charges = new ArrayList<>();
charges.add(createCharge(activationChargeId, "2"));
charges.add(createCharge(purchaseChargeId, "2"));
charges.add(createCharge(redeemChargeId, "1"));
final Integer shareAccountId = createShareAccount(clientId, productId, savingsAccountId, charges);
Assertions.assertNotNull(shareAccountId);
Map<String, Object> shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec,
responseSpec);
Assertions.assertNotNull(shareAccountData);
// Approve share Account
Map<String, Object> approveMap = new HashMap<>();
approveMap.put("note", "Share Account Approval Note");
approveMap.put("dateFormat", "dd MMMM yyyy");
approveMap.put("approvedDate", "01 Jan 2016");
approveMap.put("locale", "en");
String approve = new Gson().toJson(approveMap);
ShareAccountTransactionHelper.postCommand("approve", shareAccountId, approve, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
Map<String, Object> statusMap = (Map<String, Object>) shareAccountData.get("status");
Assertions.assertEquals("shareAccountStatusType.approved", String.valueOf(statusMap.get("code")));
Map<String, Object> timelineMap = (Map<String, Object>) shareAccountData.get("timeline");
List<Integer> dateList = (List<Integer>) timelineMap.get("approvedDate");
Calendar cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date approvedDate = cal.getTime();
Assertions.assertEquals("01 Jan 2016", simple.format(approvedDate));
List<Map<String, Object>> transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(2, transactions.size());
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
if (transactionType.equals("purchasedSharesType.purchased")) {
Assertions.assertEquals("25", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("52.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("52.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Assertions.assertEquals("01 Jan 2016", simple.format(date));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals(
simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())),
simple.format(date));
}
}
Map<String, Object> summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("25", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
}
@Test
@SuppressWarnings("unchecked")
public void rejectShareAccount() {
shareProductHelper = new ShareProductHelper();
final Integer productId = createShareProduct();
Assertions.assertNotNull(productId);
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
Assertions.assertNotNull(clientId);
Integer savingsAccountId = SavingsAccountHelper.openSavingsAccount(requestSpec, responseSpec, clientId, "1000");
Assertions.assertNotNull(savingsAccountId);
String activationCharge = ChargesHelper.getShareAccountActivationChargeJson();
Integer activationChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, activationCharge);
String purchaseCharge = ChargesHelper.getShareAccountPurchaseChargeJson();
Integer purchaseChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, purchaseCharge);
String redeemCharge = ChargesHelper.getShareAccountRedeemChargeJson();
Integer redeemChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, redeemCharge);
List<Map<String, Object>> charges = new ArrayList<>();
charges.add(createCharge(activationChargeId, "2"));
charges.add(createCharge(purchaseChargeId, "2"));
charges.add(createCharge(redeemChargeId, "1"));
final Integer shareAccountId = createShareAccount(clientId, productId, savingsAccountId, charges);
Assertions.assertNotNull(shareAccountId);
Map<String, Object> shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec,
responseSpec);
Assertions.assertNotNull(shareAccountData);
// Reject share Account
Map<String, Object> rejectMap = new HashMap<>();
rejectMap.put("note", "Share Account Rejection Note");
String rejectJson = new Gson().toJson(rejectMap);
ShareAccountTransactionHelper.postCommand("reject", shareAccountId, rejectJson, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
DateFormat simple = new SimpleDateFormat("dd MMM yyyy");
Map<String, Object> statusMap = (Map<String, Object>) shareAccountData.get("status");
Assertions.assertEquals("shareAccountStatusType.rejected", String.valueOf(statusMap.get("code")));
Map<String, Object> timelineMap = (Map<String, Object>) shareAccountData.get("timeline");
List<Integer> dateList = (List<Integer>) timelineMap.get("rejectedDate");
Calendar cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date rejectedDate = cal.getTime();
Assertions.assertEquals(simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())),
simple.format(rejectedDate));
List<Map<String, Object>> transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(2, transactions.size());
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
if (transactionType.equals("purchasedSharesType.purchased")) {
Assertions.assertEquals("25", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("50.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("50.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Assertions.assertEquals("01 Jan 2016", simple.format(date));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("0", String.valueOf(transaction.get("amountPaid")));
Date transactionDate = Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant());
Assertions.assertEquals(simple.format(transactionDate), simple.format(date));
}
}
Map<String, Object> summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
}
@Test
@SuppressWarnings("unchecked")
public void testShareAccountUndoApproval() {
DateFormat simple = new SimpleDateFormat("dd MMM yyyy");
shareProductHelper = new ShareProductHelper();
final Integer productId = createShareProduct();
Assertions.assertNotNull(productId);
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
Assertions.assertNotNull(clientId);
Integer savingsAccountId = SavingsAccountHelper.openSavingsAccount(requestSpec, responseSpec, clientId, "1000");
Assertions.assertNotNull(savingsAccountId);
String activationCharge = ChargesHelper.getShareAccountActivationChargeJson();
Integer activationChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, activationCharge);
String purchaseCharge = ChargesHelper.getShareAccountPurchaseChargeJson();
Integer purchaseChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, purchaseCharge);
String redeemCharge = ChargesHelper.getShareAccountRedeemChargeJson();
Integer redeemChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, redeemCharge);
List<Map<String, Object>> charges = new ArrayList<>();
charges.add(createCharge(activationChargeId, "2"));
charges.add(createCharge(purchaseChargeId, "2"));
charges.add(createCharge(redeemChargeId, "1"));
final Integer shareAccountId = createShareAccount(clientId, productId, savingsAccountId, charges);
Assertions.assertNotNull(shareAccountId);
Map<String, Object> shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec,
responseSpec);
Assertions.assertNotNull(shareAccountData);
// Approve share Account
Map<String, Object> approveMap = new HashMap<>();
approveMap.put("note", "Share Account Approval Note");
approveMap.put("dateFormat", "dd MMMM yyyy");
approveMap.put("approvedDate", "01 Jan 2016");
approveMap.put("locale", "en");
String approve = new Gson().toJson(approveMap);
ShareAccountTransactionHelper.postCommand("approve", shareAccountId, approve, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
Map<String, Object> statusMap = (Map<String, Object>) shareAccountData.get("status");
Assertions.assertEquals("shareAccountStatusType.approved", String.valueOf(statusMap.get("code")));
Map<String, Object> timelineMap = (Map<String, Object>) shareAccountData.get("timeline");
List<Integer> dateList = (List<Integer>) timelineMap.get("approvedDate");
Calendar cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date approvedDate = cal.getTime();
Assertions.assertEquals("01 Jan 2016", simple.format(approvedDate));
// Undo Approval share Account
Map<String, Object> undoApprovalMap = new HashMap<>();
String undoApprovalJson = new Gson().toJson(undoApprovalMap);
ShareAccountTransactionHelper.postCommand("undoapproval", shareAccountId, undoApprovalJson, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
statusMap = (Map<String, Object>) shareAccountData.get("status");
Assertions.assertEquals("shareAccountStatusType.submitted.and.pending.approval", String.valueOf(statusMap.get("code")));
List<Map<String, Object>> transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(2, transactions.size());
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
if (transactionType.equals("purchasedSharesType.purchased")) {
Assertions.assertEquals("25", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("52.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Assertions.assertEquals("01 Jan 2016", simple.format(date));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals(
simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())),
simple.format(date));
}
}
Map<String, Object> summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("25", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
}
@SuppressWarnings("unchecked")
@Test
public void testCreateShareAccountWithCharges() {
shareProductHelper = new ShareProductHelper();
final Integer productId = createShareProduct();
Assertions.assertNotNull(productId);
final Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
Assertions.assertNotNull(clientId);
Integer savingsAccountId = SavingsAccountHelper.openSavingsAccount(requestSpec, responseSpec, clientId, "1000");
Assertions.assertNotNull(savingsAccountId);
String activationCharge = ChargesHelper.getShareAccountActivationChargeJson();
Integer activationChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, activationCharge);
String purchaseCharge = ChargesHelper.getShareAccountPurchaseChargeJson();
Integer purchaseChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, purchaseCharge);
String redeemCharge = ChargesHelper.getShareAccountRedeemChargeJson();
Integer redeemChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, redeemCharge);
List<Map<String, Object>> charges = new ArrayList<>();
charges.add(createCharge(activationChargeId, "2"));
charges.add(createCharge(purchaseChargeId, "2"));
charges.add(createCharge(redeemChargeId, "1"));
final Integer shareAccountId = createShareAccount(clientId, productId, savingsAccountId, charges);
Assertions.assertNotNull(shareAccountId);
Map<String, Object> shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec,
responseSpec);
Assertions.assertNotNull(shareAccountData);
Map<String, Object> shareAccountDataForUpdate = new HashMap<>();
shareAccountDataForUpdate.put("requestedShares", 30);
shareAccountDataForUpdate.put("applicationDate", "02 Mar 2016");
shareAccountDataForUpdate.put("dateFormat", "dd MMMM yyyy");
shareAccountDataForUpdate.put("locale", "en_GB");
shareAccountDataForUpdate.put("charges", charges);
String updateShareAccountJsonString = new Gson().toJson(shareAccountDataForUpdate);
ShareAccountTransactionHelper.updateShareAccount(shareAccountId, updateShareAccountJsonString, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
List<Map<String, Object>> transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(2, transactions.size());
DateFormat simple = new SimpleDateFormat("dd MMM yyyy");
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
List<Integer> dateList = (List<Integer>) transaction.get("purchasedDate");
Calendar cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
if (transactionType.equals("purchasedSharesType.purchased")) {
Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("60.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Assertions.assertEquals("02 Mar 2016", simple.format(date));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount")));
}
}
// charges verification
List<Map<String, Object>> chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
// Approve share Account
Map<String, Object> approveMap = new HashMap<>();
approveMap.put("note", "Share Account Approval Note");
approveMap.put("dateFormat", "dd MMMM yyyy");
approveMap.put("approvedDate", "01 Jan 2016");
approveMap.put("locale", "en");
String approve = new Gson().toJson(approveMap);
ShareAccountTransactionHelper.postCommand("approve", shareAccountId, approve, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
Map<String, Object> statusMap = (Map<String, Object>) shareAccountData.get("status");
Assertions.assertEquals("shareAccountStatusType.approved", String.valueOf(statusMap.get("code")));
Map<String, Object> timelineMap = (Map<String, Object>) shareAccountData.get("timeline");
List<Integer> dateList = (List<Integer>) timelineMap.get("approvedDate");
Calendar cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date approvedDate = cal.getTime();
Assertions.assertEquals("01 Jan 2016", simple.format(approvedDate));
// charges verification
chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
Map<String, Object> activateMap = new HashMap<>();
activateMap.put("dateFormat", "dd MMMM yyyy");
activateMap.put("activatedDate", "01 Jan 2016");
activateMap.put("locale", "en");
String activateJson = new Gson().toJson(activateMap);
ShareAccountTransactionHelper.postCommand("activate", shareAccountId, activateJson, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
statusMap = (Map<String, Object>) shareAccountData.get("status");
Assertions.assertEquals("shareAccountStatusType.active", String.valueOf(statusMap.get("code")));
timelineMap = (Map<String, Object>) shareAccountData.get("timeline");
dateList = (List<Integer>) timelineMap.get("activatedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date activatedDate = cal.getTime();
Assertions.assertEquals("01 Jan 2016", simple.format(activatedDate));
transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(2, transactions.size());
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
if (transactionType.equals("purchasedSharesType.purchased")) {
Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Assertions.assertEquals("02 Mar 2016", simple.format(date));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("01 Jan 2016", simple.format(date));
}
}
// charges verification
chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
Map<String, Object> summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("30", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
// apply additional shares
Map<String, Object> additionalSharesRequestMap = new HashMap<>();
additionalSharesRequestMap.put("requestedDate", "01 Apr 2016");
additionalSharesRequestMap.put("dateFormat", "dd MMMM yyyy");
additionalSharesRequestMap.put("locale", "en");
additionalSharesRequestMap.put("requestedShares", "15");
String additionalSharesRequestJson = new Gson().toJson(additionalSharesRequestMap);
ShareAccountTransactionHelper.postCommand("applyadditionalshares", shareAccountId, additionalSharesRequestJson, requestSpec,
responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(3, transactions.size());
String addtionalSharesRequestId = null;
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
String transactionDate = simple.format(date);
if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 Mar 2016")) {
Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
} else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 Apr 2016")) {
addtionalSharesRequestId = String.valueOf(transaction.get("id"));
Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("32.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("30.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.applied", String.valueOf(transactionstatusMap.get("code")));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("01 Jan 2016", transactionDate);
}
}
// charges verification
chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("4.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("30", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("15", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
// Approve additional Shares request
Map<String, List<Map<String, Object>>> approveadditionalsharesMap = new HashMap<>();
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> idsMap = new HashMap<>();
idsMap.put("id", addtionalSharesRequestId);
list.add(idsMap);
approveadditionalsharesMap.put("requestedShares", list);
String approveadditionalsharesJson = new Gson().toJson(approveadditionalsharesMap);
ShareAccountTransactionHelper.postCommand("approveadditionalshares", shareAccountId, approveadditionalsharesJson, requestSpec,
responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(3, transactions.size());
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
String transactionDate = simple.format(date);
if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 Mar 2016")) {
Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
} else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 Apr 2016")) {
Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("32.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("32.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.approved", String.valueOf(transactionstatusMap.get("code")));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("01 Jan 2016", transactionDate);
}
}
// charges verification
chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("4.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("4.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("45", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
// apply aditional shres and reject it
additionalSharesRequestMap = new HashMap<>();
additionalSharesRequestMap.put("requestedDate", "01 May 2016");
additionalSharesRequestMap.put("dateFormat", "dd MMMM yyyy");
additionalSharesRequestMap.put("locale", "en");
additionalSharesRequestMap.put("requestedShares", "20");
additionalSharesRequestJson = new Gson().toJson(additionalSharesRequestMap);
ShareAccountTransactionHelper.postCommand("applyadditionalshares", shareAccountId, additionalSharesRequestJson, requestSpec,
responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(4, transactions.size());
addtionalSharesRequestId = null;
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
String transactionDate = simple.format(date);
if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 May 2016")) {
addtionalSharesRequestId = String.valueOf(transaction.get("id"));
Assertions.assertEquals("20", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("42.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("40.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.applied", String.valueOf(transactionstatusMap.get("code")));
}
}
// charges verification
chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("6.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("4.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("45", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("20", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
// rejectadditionalshares
Map<String, List<Map<String, Object>>> rejectadditionalsharesMap = new HashMap<>();
list = new ArrayList<>();
idsMap = new HashMap<>();
idsMap.put("id", addtionalSharesRequestId);
list.add(idsMap);
rejectadditionalsharesMap.put("requestedShares", list);
String rejectadditionalsharesJson = new Gson().toJson(rejectadditionalsharesMap);
ShareAccountTransactionHelper.postCommand("rejectadditionalshares", shareAccountId, rejectadditionalsharesJson, requestSpec,
responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(4, transactions.size());
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
String transactionDate = simple.format(date);
if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 May 2016")) {
addtionalSharesRequestId = String.valueOf(transaction.get("id"));
Assertions.assertEquals("20", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("40.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("40.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.rejected", String.valueOf(transactionstatusMap.get("code")));
}
}
// charges verification
chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("6.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("6.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("45", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
// redeem shares
Map<String, Object> redeemRequestMap = new HashMap<>();
redeemRequestMap.put("requestedDate", "05 May 2016");
redeemRequestMap.put("dateFormat", "dd MMMM yyyy");
redeemRequestMap.put("locale", "en");
redeemRequestMap.put("requestedShares", "15");
String redeemRequestJson = new Gson().toJson(redeemRequestMap);
ShareAccountTransactionHelper.postCommand("redeemshares", shareAccountId, redeemRequestJson, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(5, transactions.size());
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
String transactionDate = simple.format(date);
if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 Mar 2016")) {
Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
} else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 Apr 2016")) {
Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("32.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("32.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.approved", String.valueOf(transactionstatusMap.get("code")));
} else if (transactionType.equals("purchasedSharesType.redeemed") && transactionDate.equals("05 May 2016")) {
Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("29.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("29.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("1.0", String.valueOf(transaction.get("chargeAmount")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.approved", String.valueOf(transactionstatusMap.get("code")));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("01 Jan 2016", transactionDate);
}
}
// charges verification
chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("6.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("6.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("30", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
// Close Share Account
Map<String, Object> closeAccountMap = new HashMap<>();
closeAccountMap.put("note", "Share Account Close Note");
closeAccountMap.put("dateFormat", "dd MMMM yyyy");
closeAccountMap.put("closedDate", "10 May 2016");
closeAccountMap.put("locale", "en");
String closeJson = new Gson().toJson(closeAccountMap);
ShareAccountTransactionHelper.postCommand("close", shareAccountId, closeJson, requestSpec, responseSpec);
shareAccountData = ShareAccountTransactionHelper.retrieveShareAccount(shareAccountId, requestSpec, responseSpec);
statusMap = (Map<String, Object>) shareAccountData.get("status");
Assertions.assertEquals("shareAccountStatusType.closed", String.valueOf(statusMap.get("code")));
transactions = (List<Map<String, Object>>) shareAccountData.get("purchasedShares");
Assertions.assertNotNull(transactions);
Assertions.assertEquals(6, transactions.size());
for (int i = 0; i < transactions.size(); i++) {
Map<String, Object> transaction = transactions.get(i);
Map<String, Object> transactionTypeMap = (Map<String, Object>) transaction.get("type");
dateList = (List<Integer>) transaction.get("purchasedDate");
cal = Calendar.getInstance();
cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2));
Date date = cal.getTime();
String transactionType = (String) transactionTypeMap.get("code");
String transactionDate = simple.format(date);
if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("02 Mar 2016")) {
Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("62.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
} else if (transactionType.equals("purchasedSharesType.purchased") && transactionDate.equals("01 Apr 2016")) {
Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("32.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("32.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("purchasedPrice")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.approved", String.valueOf(transactionstatusMap.get("code")));
} else if (transactionType.equals("purchasedSharesType.redeemed") && transactionDate.equals("05 May 2016")) {
Assertions.assertEquals("15", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("29.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("29.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("1.0", String.valueOf(transaction.get("chargeAmount")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.approved", String.valueOf(transactionstatusMap.get("code")));
} else if (transactionType.equals("purchasedSharesType.redeemed") && transactionDate.equals("10 May 2016")) {
Assertions.assertEquals("30", String.valueOf(transaction.get("numberOfShares")));
Assertions.assertEquals("59.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("59.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("1.0", String.valueOf(transaction.get("chargeAmount")));
Map<String, Object> transactionstatusMap = (Map<String, Object>) transaction.get("status");
Assertions.assertEquals("purchasedSharesStatusType.approved", String.valueOf(transactionstatusMap.get("code")));
} else if (transactionType.equals("charge.payment")) {
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount")));
Assertions.assertEquals("2.0", String.valueOf(transaction.get("amountPaid")));
Assertions.assertEquals("0", String.valueOf(transaction.get("chargeAmount")));
Assertions.assertEquals("01 Jan 2016", transactionDate);
}
}
// charges verification
chargesList = (List<Map<String, Object>>) shareAccountData.get("charges");
for (Map<String, Object> chargeDef : chargesList) {
Map<String, Object> chargeTimeTypeMap = (Map<String, Object>) chargeDef.get("chargeTimeType");
String chargeTimeType = String.valueOf(chargeTimeTypeMap.get("code"));
if (chargeTimeType.equals("chargeTimeType.activation")) {
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharespurchase")) {
Assertions.assertEquals("6.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("6.0", String.valueOf(chargeDef.get("amountPaid")));
} else if (chargeTimeType.equals("chargeTimeType.sharesredeem")) {
Assertions.assertEquals("1.0", String.valueOf(chargeDef.get("amountOrPercentage")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amount")));
Assertions.assertEquals("0.0", String.valueOf(chargeDef.get("amountOutstanding")));
Assertions.assertEquals("2.0", String.valueOf(chargeDef.get("amountPaid")));
} else {
Assertions.fail("Other Charge defintion found");
}
}
summaryMap = (Map<String, Object>) shareAccountData.get("summary");
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalApprovedShares")));
Assertions.assertEquals("0", String.valueOf(summaryMap.get("totalPendingForApprovalShares")));
}
private Integer createShareProduct() {
String shareProductJson = shareProductHelper.build();
return ShareProductTransactionHelper.createShareProduct(shareProductJson, requestSpec, responseSpec);
}
private Integer createShareAccount(final Integer clientId, final Integer productId, final Integer savingsAccountId) {
String josn = new ShareAccountHelper().withClientId(String.valueOf(clientId)).withProductId(String.valueOf(productId))
.withExternalId("External1").withSavingsAccountId(String.valueOf(savingsAccountId)).withSubmittedDate("01 Jan 2016")
.withApplicationDate("01 Jan 2016").withRequestedShares("25").build();
return ShareAccountTransactionHelper.createShareAccount(josn, requestSpec, responseSpec);
}
private Integer createShareAccount(final Integer clientId, final Integer productId, final Integer savingsAccountId,
List<Map<String, Object>> charges) {
String josn = new ShareAccountHelper().withClientId(String.valueOf(clientId)).withProductId(String.valueOf(productId))
.withExternalId("External1").withSavingsAccountId(String.valueOf(savingsAccountId)).withSubmittedDate("01 Jan 2016")
.withApplicationDate("01 Jan 2016").withRequestedShares("25").withCharges(charges).build();
return ShareAccountTransactionHelper.createShareAccount(josn, requestSpec, responseSpec);
}
private Map<String, Object> createCharge(final Integer chargeId, String amount) {
Map<String, Object> map = new HashMap<>();
map.put("chargeId", chargeId);
map.put("amount", amount);
return map;
}
}