http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/66cee785/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FixedDepositTest.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FixedDepositTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FixedDepositTest.java deleted file mode 100644 index 3d6a4ef..0000000 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FixedDepositTest.java +++ /dev/null @@ -1,2079 +0,0 @@ -/** - * 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.math.BigDecimal; -import java.text.DateFormat; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.text.NumberFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; - -import org.apache.fineract.accounting.common.AccountingConstants.FINANCIAL_ACTIVITY; -import org.apache.fineract.integrationtests.common.ClientHelper; -import org.apache.fineract.integrationtests.common.CommonConstants; -import org.apache.fineract.integrationtests.common.Utils; -import org.apache.fineract.integrationtests.common.accounting.Account; -import org.apache.fineract.integrationtests.common.accounting.AccountHelper; -import org.apache.fineract.integrationtests.common.accounting.FinancialActivityAccountHelper; -import org.apache.fineract.integrationtests.common.accounting.JournalEntry; -import org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper; -import org.apache.fineract.integrationtests.common.accounting.Account.AccountType; -import org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper; -import org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountStatusChecker; -import org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper; -import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; -import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; -import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; -import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; -import org.joda.time.DateTime; -import org.joda.time.Days; -import org.joda.time.Months; -import org.junit.After; -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({ "unused", "unchecked", "rawtypes", "static-access" }) -public class FixedDepositTest { - - private ResponseSpecification responseSpec; - private RequestSpecification requestSpec; - private FixedDepositProductHelper fixedDepositProductHelper; - private FixedDepositAccountHelper fixedDepositAccountHelper; - private AccountHelper accountHelper; - private SavingsAccountHelper savingsAccountHelper; - private JournalEntryHelper journalEntryHelper; - private FinancialActivityAccountHelper financialActivityAccountHelper; - - public static final String WHOLE_TERM = "1"; - public static final String TILL_PREMATURE_WITHDRAWAL = "2"; - private static final String DAILY = "1"; - private static final String MONTHLY = "4"; - private static final String QUARTERLY = "5"; - private static final String BI_ANNUALLY = "6"; - private static final String ANNUALLY = "7"; - private static final String INTEREST_CALCULATION_USING_DAILY_BALANCE = "1"; - private static final String INTEREST_CALCULATION_USING_AVERAGE_DAILY_BALANCE = "2"; - private static final String DAYS_360 = "360"; - private static final String DAYS_365 = "365"; - - private static final String NONE = "1"; - private static final String CASH_BASED = "2"; - - public static final String MINIMUM_OPENING_BALANCE = "1000.0"; - public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL"; - public static final String CLOSURE_TYPE_WITHDRAW_DEPOSIT = "100"; - public static final String CLOSURE_TYPE_TRANSFER_TO_SAVINGS = "200"; - public static final String CLOSURE_TYPE_REINVEST = "300"; - public static final Integer DAILY_COMPOUNDING_INTERVAL = 0; - public static final Integer MONTHLY_INTERVAL = 1; - public static final Integer QUARTERLY_INTERVAL = 3; - public static final Integer BIANNULLY_INTERVAL = 6; - public static final Integer ANNUL_INTERVAL = 12; - - @Before - public void setup() { - Utils.initializeRESTAssured(); - this.requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); - this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); - this.requestSpec.header("Fineract-Platform-TenantId", "default"); - this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); - this.journalEntryHelper = new JournalEntryHelper(this.requestSpec, this.responseSpec); - this.financialActivityAccountHelper = new FinancialActivityAccountHelper(this.requestSpec); - } - - /*** - * Test case for Fixed Deposit Account premature closure with - * transaction type withdrawal and Cash Based accounting enabled - */ - @Test - public void testFixedDepositAccountWithPrematureClosureTypeWithdrawal() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - /*** - * Create GL Accounts for product account mapping - */ - final Account assetAccount = this.accountHelper.createAssetAccount(); - final Account incomeAccount = this.accountHelper.createIncomeAccount(); - final Account expenseAccount = this.accountHelper.createExpenseAccount(); - final Account liabilityAccount = this.accountHelper.createLiabilityAccount(); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - Integer numberOfDaysLeft = (daysInMonth - currentDate) + 1; - todaysDate.add(Calendar.DATE, numberOfDaysLeft); - final String INTEREST_POSTED_DATE = dateFormat.format(todaysDate.getTime()); - final String CLOSED_ON_DATE = dateFormat.format(Calendar.getInstance().getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - /*** - * Create FD product with CashBased accounting enabled - */ - final String accountingRule = CASH_BASED; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule, assetAccount, liabilityAccount, - incomeAccount, expenseAccount); - Assert.assertNotNull(fixedDepositProductId); - - /*** - * Apply for FD account with created product and verify status - */ - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - /*** - * Approve the FD account and verify whether account is approved - */ - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - /*** - * Activate the FD Account and verify whether account is activated - */ - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.activateFixedDeposit(fixedDepositAccountId, ACTIVATION_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsActive(fixedDepositAccountStatusHashMap); - - HashMap accountSummary = this.fixedDepositAccountHelper.getFixedDepositSummary(fixedDepositAccountId); - - Float depositAmount = (Float) accountSummary.get("totalDeposits"); - - /*** - * Verify journal entries posted for initial deposit transaction which - * happened at activation time - */ - final JournalEntry[] assetAccountInitialEntry = { new JournalEntry(depositAmount, JournalEntry.TransactionType.DEBIT) }; - final JournalEntry[] liablilityAccountInitialEntry = { new JournalEntry(depositAmount, JournalEntry.TransactionType.CREDIT) }; - this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, ACTIVATION_DATE, assetAccountInitialEntry); - this.journalEntryHelper.checkJournalEntryForLiabilityAccount(liabilityAccount, ACTIVATION_DATE, liablilityAccountInitialEntry); - - /*** - * Update interest earned of FD account - */ - fixedDepositAccountId = this.fixedDepositAccountHelper.calculateInterestForFixedDeposit(fixedDepositAccountId); - Assert.assertNotNull(fixedDepositAccountId); - - /*** - * Post interest and verify the account summary - */ - Integer transactionIdForPostInterest = this.fixedDepositAccountHelper.postInterestForFixedDeposit(fixedDepositAccountId); - Assert.assertNotNull(transactionIdForPostInterest); - - accountSummary = this.fixedDepositAccountHelper.getFixedDepositSummary(fixedDepositAccountId); - Float totalInterestPosted = (Float) accountSummary.get("totalInterestPosted"); - - /*** - * Verify journal entries transactions for interest posting transaction - */ - final JournalEntry[] expenseAccountEntry = { new JournalEntry(totalInterestPosted, JournalEntry.TransactionType.DEBIT) }; - final JournalEntry[] liablilityAccountEntry = { new JournalEntry(totalInterestPosted, JournalEntry.TransactionType.CREDIT) }; - this.journalEntryHelper.checkJournalEntryForAssetAccount(expenseAccount, INTEREST_POSTED_DATE, expenseAccountEntry); - this.journalEntryHelper.checkJournalEntryForLiabilityAccount(liabilityAccount, INTEREST_POSTED_DATE, liablilityAccountEntry); - - /*** - * Preclose the FD account verify whether account is preClosed - */ - HashMap fixedDepositPrematureData = this.fixedDepositAccountHelper.calculatePrematureAmountForFixedDeposit(fixedDepositAccountId, - CLOSED_ON_DATE); - - Integer prematureClosureTransactionId = (Integer) this.fixedDepositAccountHelper.prematureCloseForFixedDeposit( - fixedDepositAccountId, CLOSED_ON_DATE, CLOSURE_TYPE_WITHDRAW_DEPOSIT, null, CommonConstants.RESPONSE_RESOURCE_ID); - Assert.assertNotNull(prematureClosureTransactionId); - - fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositAccountIsPrematureClosed(fixedDepositAccountStatusHashMap); - - /*** - * Verify journal entry transactions for preclosure transaction - */ - HashMap accountDetails = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float maturityAmount = Float.valueOf(accountDetails.get("maturityAmount").toString()); - this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, CLOSED_ON_DATE, new JournalEntry(maturityAmount, - JournalEntry.TransactionType.CREDIT)); - this.journalEntryHelper.checkJournalEntryForLiabilityAccount(liabilityAccount, CLOSED_ON_DATE, new JournalEntry(maturityAmount, - JournalEntry.TransactionType.DEBIT)); - - } - - /*** - * Test case for FD Account premature closure with transaction transfers to - * savings account and Cash Based accounting enabled - */ - @Test - public void testFixedDepositAccountWithPrematureClosureTypeTransferToSavings() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - /*** - * Create GL Accounts for product account mapping - */ - final Account assetAccount = this.accountHelper.createAssetAccount(); - final Account incomeAccount = this.accountHelper.createIncomeAccount(); - final Account expenseAccount = this.accountHelper.createExpenseAccount(); - final Account liabilityAccount = this.accountHelper.createLiabilityAccount(); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - Integer numberOfDaysLeft = (daysInMonth - currentDate) + 1; - todaysDate.add(Calendar.DATE, numberOfDaysLeft); - final String INTEREST_POSTED_DATE = dateFormat.format(todaysDate.getTime()); - final String CLOSED_ON_DATE = dateFormat.format(Calendar.getInstance().getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - /*** - * Create Savings product with CashBased accounting enabled - */ - final String accountingRule = CASH_BASED; - final Integer savingsProductID = createSavingsProduct(this.requestSpec, this.responseSpec, MINIMUM_OPENING_BALANCE, accountingRule, - assetAccount, liabilityAccount, incomeAccount, expenseAccount); - Assert.assertNotNull(savingsProductID); - - final Integer savingsId = this.savingsAccountHelper.applyForSavingsApplication(clientId, savingsProductID, ACCOUNT_TYPE_INDIVIDUAL); - Assert.assertNotNull(savingsProductID); - - HashMap savingsStatusHashMap = SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, savingsId); - SavingsStatusChecker.verifySavingsIsPending(savingsStatusHashMap); - - savingsStatusHashMap = this.savingsAccountHelper.approveSavings(savingsId); - SavingsStatusChecker.verifySavingsIsApproved(savingsStatusHashMap); - - savingsStatusHashMap = this.savingsAccountHelper.activateSavings(savingsId); - SavingsStatusChecker.verifySavingsIsActive(savingsStatusHashMap); - - /*** - * Create FD product with CashBased accounting enabled - */ - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule, assetAccount, liabilityAccount, - incomeAccount, expenseAccount); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.activateFixedDeposit(fixedDepositAccountId, ACTIVATION_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsActive(fixedDepositAccountStatusHashMap); - - HashMap accountSummary = this.fixedDepositAccountHelper.getFixedDepositSummary(fixedDepositAccountId); - - Float depositAmount = (Float) accountSummary.get("totalDeposits"); - - /*** - * Verify journal entries posted for initial deposit transaction which - * happened at activation time - */ - final JournalEntry[] assetAccountInitialEntry = { new JournalEntry(depositAmount, JournalEntry.TransactionType.DEBIT) }; - final JournalEntry[] liablilityAccountInitialEntry = { new JournalEntry(depositAmount, JournalEntry.TransactionType.CREDIT) }; - this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, ACTIVATION_DATE, assetAccountInitialEntry); - this.journalEntryHelper.checkJournalEntryForLiabilityAccount(liabilityAccount, ACTIVATION_DATE, liablilityAccountInitialEntry); - - /*** - * Update interest earned of FD account - */ - fixedDepositAccountId = this.fixedDepositAccountHelper.calculateInterestForFixedDeposit(fixedDepositAccountId); - Assert.assertNotNull(fixedDepositAccountId); - - /*** - * Post interest and verify the account summary - */ - Integer transactionIdForPostInterest = this.fixedDepositAccountHelper.postInterestForFixedDeposit(fixedDepositAccountId); - Assert.assertNotNull(transactionIdForPostInterest); - - accountSummary = this.fixedDepositAccountHelper.getFixedDepositSummary(fixedDepositAccountId); - Float totalInterestPosted = (Float) accountSummary.get("totalInterestPosted"); - - /*** - * Verify journal entries transactions for interest posting transaction - */ - final JournalEntry[] expenseAccountEntry = { new JournalEntry(totalInterestPosted, JournalEntry.TransactionType.DEBIT) }; - final JournalEntry[] liablilityAccountEntry = { new JournalEntry(totalInterestPosted, JournalEntry.TransactionType.CREDIT) }; - this.journalEntryHelper.checkJournalEntryForAssetAccount(expenseAccount, INTEREST_POSTED_DATE, expenseAccountEntry); - this.journalEntryHelper.checkJournalEntryForLiabilityAccount(liabilityAccount, INTEREST_POSTED_DATE, liablilityAccountEntry); - - HashMap savingsSummaryBefore = this.savingsAccountHelper.getSavingsSummary(savingsId); - Float balanceBefore = (Float) savingsSummaryBefore.get("accountBalance"); - - /*** - * Retrieve mapped financial account for liability transfer - */ - Account financialAccount = getMappedLiabilityFinancialAccount(); - - HashMap fixedDepositPrematureData = this.fixedDepositAccountHelper.calculatePrematureAmountForFixedDeposit(fixedDepositAccountId, - CLOSED_ON_DATE); - - /*** - * Preclose the account and verify journal entries - */ - Integer prematureClosureTransactionId = (Integer) this.fixedDepositAccountHelper.prematureCloseForFixedDeposit( - fixedDepositAccountId, CLOSED_ON_DATE, CLOSURE_TYPE_TRANSFER_TO_SAVINGS, savingsId, CommonConstants.RESPONSE_RESOURCE_ID); - Assert.assertNotNull(prematureClosureTransactionId); - - fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositAccountIsPrematureClosed(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float prematurityAmount = (Float) fixedDepositData.get("maturityAmount"); - - /*** - * Verify journal entry transactions for preclosure transaction As this - * transaction is an account transfer you should get financial account - * mapping details and verify amounts - */ - this.journalEntryHelper.checkJournalEntryForLiabilityAccount(liabilityAccount, CLOSED_ON_DATE, new JournalEntry(prematurityAmount, - JournalEntry.TransactionType.CREDIT), new JournalEntry(prematurityAmount, JournalEntry.TransactionType.DEBIT)); - - this.journalEntryHelper.checkJournalEntryForAssetAccount(financialAccount, CLOSED_ON_DATE, new JournalEntry(prematurityAmount, - JournalEntry.TransactionType.DEBIT), new JournalEntry(prematurityAmount, JournalEntry.TransactionType.CREDIT)); - - HashMap savingsSummaryAfter = this.savingsAccountHelper.getSavingsSummary(savingsId); - Float balanceAfter = (Float) savingsSummaryAfter.get("accountBalance"); - Float expectedSavingsBalance = balanceBefore + prematurityAmount; - - Assert.assertEquals("Verifying Savings Account Balance after Premature Closure", expectedSavingsBalance, balanceAfter); - - } - - /*** - * Test case for Fixed Deposit Account premature closure with - * transaction type ReInvest and Cash Based accounting enabled - */ - @Test - public void testFixedDepositAccountWithPrematureClosureTypeReinvest() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - FixedDepositAccountHelper fixedDepositAccountHelperValidationError = new FixedDepositAccountHelper(this.requestSpec, - new ResponseSpecBuilder().build()); - - /*** - * Create GL Accounts for product account mapping - */ - final Account assetAccount = this.accountHelper.createAssetAccount(); - final Account incomeAccount = this.accountHelper.createIncomeAccount(); - final Account expenseAccount = this.accountHelper.createExpenseAccount(); - final Account liabilityAccount = this.accountHelper.createLiabilityAccount(); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - Integer numberOfDaysLeft = (daysInMonth - currentDate) + 1; - todaysDate.add(Calendar.DATE, numberOfDaysLeft); - final String INTEREST_POSTED_DATE = dateFormat.format(todaysDate.getTime()); - final String CLOSED_ON_DATE = dateFormat.format(Calendar.getInstance().getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - /*** - * Create FD product with CashBased accounting enabled - */ - final String accountingRule = CASH_BASED; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule, assetAccount, liabilityAccount, - incomeAccount, expenseAccount); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.activateFixedDeposit(fixedDepositAccountId, ACTIVATION_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsActive(fixedDepositAccountStatusHashMap); - - HashMap accountSummary = this.fixedDepositAccountHelper.getFixedDepositSummary(fixedDepositAccountId); - - Float depositAmount = (Float) accountSummary.get("totalDeposits"); - - /*** - * Verify journal entries posted for initial deposit transaction which - * happened at activation time - */ - final JournalEntry[] assetAccountInitialEntry = { new JournalEntry(depositAmount, JournalEntry.TransactionType.DEBIT) }; - final JournalEntry[] liablilityAccountInitialEntry = { new JournalEntry(depositAmount, JournalEntry.TransactionType.CREDIT) }; - this.journalEntryHelper.checkJournalEntryForAssetAccount(assetAccount, ACTIVATION_DATE, assetAccountInitialEntry); - this.journalEntryHelper.checkJournalEntryForLiabilityAccount(liabilityAccount, ACTIVATION_DATE, liablilityAccountInitialEntry); - - fixedDepositAccountId = this.fixedDepositAccountHelper.calculateInterestForFixedDeposit(fixedDepositAccountId); - Assert.assertNotNull(fixedDepositAccountId); - - Integer transactionIdForPostInterest = this.fixedDepositAccountHelper.postInterestForFixedDeposit(fixedDepositAccountId); - Assert.assertNotNull(transactionIdForPostInterest); - - accountSummary = this.fixedDepositAccountHelper.getFixedDepositSummary(fixedDepositAccountId); - Float totalInterestPosted = (Float) accountSummary.get("totalInterestPosted"); - - /*** - * Verify journal entries transactions for interest posting transaction - */ - final JournalEntry[] expenseAccountEntry = { new JournalEntry(totalInterestPosted, JournalEntry.TransactionType.DEBIT) }; - final JournalEntry[] liablilityAccountEntry = { new JournalEntry(totalInterestPosted, JournalEntry.TransactionType.CREDIT) }; - this.journalEntryHelper.checkJournalEntryForAssetAccount(expenseAccount, INTEREST_POSTED_DATE, expenseAccountEntry); - this.journalEntryHelper.checkJournalEntryForLiabilityAccount(liabilityAccount, INTEREST_POSTED_DATE, liablilityAccountEntry); - - HashMap fixedDepositPrematureData = this.fixedDepositAccountHelper.calculatePrematureAmountForFixedDeposit(fixedDepositAccountId, - CLOSED_ON_DATE); - - ArrayList<HashMap> errorResponse = (ArrayList<HashMap>) fixedDepositAccountHelperValidationError.prematureCloseForFixedDeposit( - fixedDepositAccountId, CLOSED_ON_DATE, CLOSURE_TYPE_REINVEST, null, CommonConstants.RESPONSE_ERROR); - - assertEquals("validation.msg.fixeddepositaccount.onAccountClosureId.reinvest.not.allowed", - errorResponse.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - - } - - @Test - public void testFixedDepositAccountUpdation() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - ArrayList<HashMap> allFixedDepositProductsData = this.fixedDepositProductHelper.retrieveAllFixedDepositProducts(this.requestSpec, - this.responseSpec); - HashMap fixedDepositProductData = this.fixedDepositProductHelper.retrieveFixedDepositProductById(this.requestSpec, - this.responseSpec, fixedDepositProductId.toString()); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - todaysDate.add(Calendar.DATE, -1); - SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - HashMap modificationsHashMap = this.fixedDepositAccountHelper.updateFixedDepositAccount(clientId.toString(), - fixedDepositProductId.toString(), fixedDepositAccountId.toString(), VALID_FROM, VALID_TO, WHOLE_TERM, SUBMITTED_ON_DATE); - Assert.assertTrue(modificationsHashMap.containsKey("submittedOnDate")); - - } - - @Test - public void testFixedDepositAccountUndoApproval() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.undoApproval(fixedDepositAccountId); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - } - - @Test - public void testFixedDepositAccountRejectedAndClosed() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String REJECTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.rejectApplication(fixedDepositAccountId, REJECTED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsRejected(fixedDepositAccountStatusHashMap); - FixedDepositAccountStatusChecker.verifyFixedDepositAccountIsClosed(fixedDepositAccountStatusHashMap); - } - - @Test - public void testFixedDepositAccountWithdrawnByClientAndClosed() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String WITHDRAWN_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.withdrawApplication(fixedDepositAccountId, WITHDRAWN_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsWithdrawn(fixedDepositAccountStatusHashMap); - FixedDepositAccountStatusChecker.verifyFixedDepositAccountIsClosed(fixedDepositAccountStatusHashMap); - } - - @Test - public void testFixedDepositAccountIsDeleted() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountId = (Integer) this.fixedDepositAccountHelper.deleteFixedDepositApplication(fixedDepositAccountId, "resourceId"); - Assert.assertNotNull(fixedDepositAccountId); - } - - @Test - public void testMaturityAmountForMonthlyCompoundingAndMonthlyPosting_With_365_Days() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - todaysDate.add(Calendar.DATE, -(currentDate - 1)); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float principal = (Float) fixedDepositAccountData.get("depositAmount"); - Float maturityAmount = (Float) fixedDepositAccountData.get("maturityAmount"); - Integer depositPeriod = (Integer) fixedDepositAccountData.get("depositPeriod"); - HashMap daysInYearMap = (HashMap) fixedDepositAccountData.get("interestCalculationDaysInYearType"); - Integer daysInYear = (Integer) daysInYearMap.get("id"); - ArrayList<ArrayList<HashMap>> interestRateChartData = this.fixedDepositProductHelper.getInterestRateChartSlabsByProductId( - this.requestSpec, this.responseSpec, fixedDepositProductId); - Float interestRate = this.fixedDepositAccountHelper.getInterestRate(interestRateChartData, depositPeriod); - double interestRateInFraction = (interestRate / 100); - double perDay = (double) 1 / (daysInYear); - System.out.println("per day = " + perDay); - double interestPerDay = interestRateInFraction * perDay; - - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - - principal = this.fixedDepositAccountHelper.getPrincipalAfterCompoundingInterest(todaysDate, principal, depositPeriod, - interestPerDay, MONTHLY_INTERVAL, MONTHLY_INTERVAL); - - DecimalFormat decimalFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US)); - decimalFormat.applyPattern("."); - principal = new Float(decimalFormat.format(principal)); - maturityAmount = new Float(decimalFormat.format(maturityAmount)); - System.out.println(principal); - Assert.assertEquals("Verifying Maturity amount for Fixed Deposit Account", principal, maturityAmount); - } - - @Test - public void testMaturityAmountForMonthlyCompoundingAndMonthlyPosting_With_360_Days() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - todaysDate.add(Calendar.DATE, -(currentDate - 1)); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap modificationsHashMap = this.fixedDepositAccountHelper.updateInterestCalculationConfigForFixedDeposit(clientId.toString(), - fixedDepositProductId.toString(), fixedDepositAccountId.toString(), SUBMITTED_ON_DATE, VALID_FROM, VALID_TO, DAYS_360, - WHOLE_TERM, INTEREST_CALCULATION_USING_DAILY_BALANCE, MONTHLY, MONTHLY); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float principal = (Float) fixedDepositAccountData.get("depositAmount"); - Float maturityAmount = (Float) fixedDepositAccountData.get("maturityAmount"); - Integer depositPeriod = (Integer) fixedDepositAccountData.get("depositPeriod"); - HashMap daysInYearMap = (HashMap) fixedDepositAccountData.get("interestCalculationDaysInYearType"); - Integer daysInYear = (Integer) daysInYearMap.get("id"); - ArrayList<ArrayList<HashMap>> interestRateChartData = this.fixedDepositProductHelper.getInterestRateChartSlabsByProductId( - this.requestSpec, this.responseSpec, fixedDepositProductId); - Float interestRate = this.fixedDepositAccountHelper.getInterestRate(interestRateChartData, depositPeriod); - double interestRateInFraction = (interestRate / 100); - double perDay = (double) 1 / (daysInYear); - System.out.println("per day = " + perDay); - double interestPerDay = interestRateInFraction * perDay; - - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - - principal = this.fixedDepositAccountHelper.getPrincipalAfterCompoundingInterest(todaysDate, principal, depositPeriod, - interestPerDay, MONTHLY_INTERVAL, MONTHLY_INTERVAL); - DecimalFormat decimalFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US)); - decimalFormat.applyPattern("."); - principal = new Float(decimalFormat.format(principal)); - maturityAmount = new Float(decimalFormat.format(maturityAmount)); - System.out.println(principal); - Assert.assertEquals("Verifying Maturity amount for Fixed Deposit Account", principal, maturityAmount); - } - - @Test - public void testPrematureClosureAmountWithPenalInterestForWholeTerm_With_365() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - todaysDate.add(Calendar.DAY_OF_MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.MONTH, 1); - todaysDate.add(Calendar.DAY_OF_MONTH, 1); - final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.activateFixedDeposit(fixedDepositAccountId, ACTIVATION_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsActive(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float principal = (Float) fixedDepositAccountData.get("depositAmount"); - Integer depositPeriod = (Integer) fixedDepositAccountData.get("depositPeriod"); - HashMap daysInYearMap = (HashMap) fixedDepositAccountData.get("interestCalculationDaysInYearType"); - Float preClosurePenalInterestRate = (Float) fixedDepositAccountData.get("preClosurePenalInterest"); - Integer daysInYear = (Integer) daysInYearMap.get("id"); - ArrayList<ArrayList<HashMap>> interestRateChartData = this.fixedDepositProductHelper.getInterestRateChartSlabsByProductId( - this.requestSpec, this.responseSpec, fixedDepositProductId); - - Float interestRate = this.fixedDepositAccountHelper.getInterestRate(interestRateChartData, depositPeriod); - interestRate -= preClosurePenalInterestRate; - double interestRateInFraction = (interestRate / 100); - double perDay = (double) 1 / (daysInYear); - System.out.println("per day = " + perDay); - double interestPerDay = interestRateInFraction * perDay; - - todaysDate.add(Calendar.MONTH, -1); - todaysDate.add(Calendar.DAY_OF_MONTH, -1); - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - daysInMonth = (daysInMonth - currentDate) + 1; - Float interestPerMonth = (float) (interestPerDay * principal * daysInMonth); - principal += interestPerMonth; - todaysDate.add(Calendar.DATE, daysInMonth); - System.out.println(monthDayFormat.format(todaysDate.getTime())); - - interestPerMonth = (float) (interestPerDay * principal * currentDate); - System.out.println("IPM = " + interestPerMonth); - principal += interestPerMonth; - System.out.println("principal = " + principal); - - HashMap fixedDepositPrematureData = this.fixedDepositAccountHelper.calculatePrematureAmountForFixedDeposit(fixedDepositAccountId, - CLOSED_ON_DATE); - - Integer prematureClosureTransactionId = (Integer) this.fixedDepositAccountHelper.prematureCloseForFixedDeposit( - fixedDepositAccountId, CLOSED_ON_DATE, CLOSURE_TYPE_WITHDRAW_DEPOSIT, null, CommonConstants.RESPONSE_RESOURCE_ID); - Assert.assertNotNull(prematureClosureTransactionId); - - fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositAccountIsPrematureClosed(fixedDepositAccountStatusHashMap); - - fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - DecimalFormat decimalFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US)); - decimalFormat.applyPattern("."); - - principal = new Float(decimalFormat.format(principal)); - Float maturityAmount = new Float(decimalFormat.format(fixedDepositAccountData.get("maturityAmount"))); - - Assert.assertEquals("Verifying Pre-Closure maturity amount", principal, maturityAmount); - - } - - @Test - public void testPrematureClosureAmountWithPenalInterestForWholeTerm_With_360() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - todaysDate.add(Calendar.DAY_OF_MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.MONTH, 1); - todaysDate.add(Calendar.DAY_OF_MONTH, 1); - final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap modificationsHashMap = this.fixedDepositAccountHelper.updateInterestCalculationConfigForFixedDeposit(clientId.toString(), - fixedDepositProductId.toString(), fixedDepositAccountId.toString(), SUBMITTED_ON_DATE, VALID_FROM, VALID_TO, DAYS_360, - WHOLE_TERM, INTEREST_CALCULATION_USING_DAILY_BALANCE, MONTHLY, MONTHLY); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.activateFixedDeposit(fixedDepositAccountId, ACTIVATION_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsActive(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float principal = (Float) fixedDepositAccountData.get("depositAmount"); - Integer depositPeriod = (Integer) fixedDepositAccountData.get("depositPeriod"); - HashMap daysInYearMap = (HashMap) fixedDepositAccountData.get("interestCalculationDaysInYearType"); - Float preClosurePenalInterestRate = (Float) fixedDepositAccountData.get("preClosurePenalInterest"); - Integer daysInYear = (Integer) daysInYearMap.get("id"); - ArrayList<ArrayList<HashMap>> interestRateChartData = this.fixedDepositProductHelper.getInterestRateChartSlabsByProductId( - this.requestSpec, this.responseSpec, fixedDepositProductId); - - Float interestRate = this.fixedDepositAccountHelper.getInterestRate(interestRateChartData, depositPeriod); - interestRate -= preClosurePenalInterestRate; - double interestRateInFraction = (interestRate / 100); - double perDay = (double) 1 / (daysInYear); - System.out.println("per day = " + perDay); - double interestPerDay = interestRateInFraction * perDay; - - todaysDate.add(Calendar.MONTH, -1); - todaysDate.add(Calendar.DAY_OF_MONTH, -1); - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - daysInMonth = (daysInMonth - currentDate) + 1; - Float interestPerMonth = (float) (interestPerDay * principal * daysInMonth); - principal += interestPerMonth; - todaysDate.add(Calendar.DATE, daysInMonth); - System.out.println(monthDayFormat.format(todaysDate.getTime())); - - interestPerMonth = (float) (interestPerDay * principal * currentDate); - System.out.println("IPM = " + interestPerMonth); - principal += interestPerMonth; - System.out.println("principal = " + principal); - - HashMap fixedDepositPrematureData = this.fixedDepositAccountHelper.calculatePrematureAmountForFixedDeposit(fixedDepositAccountId, - CLOSED_ON_DATE); - - Integer prematureClosureTransactionId = (Integer) this.fixedDepositAccountHelper.prematureCloseForFixedDeposit( - fixedDepositAccountId, CLOSED_ON_DATE, CLOSURE_TYPE_WITHDRAW_DEPOSIT, null, CommonConstants.RESPONSE_RESOURCE_ID); - Assert.assertNotNull(prematureClosureTransactionId); - - fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositAccountIsPrematureClosed(fixedDepositAccountStatusHashMap); - - fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - DecimalFormat decimalFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US)); - decimalFormat.applyPattern("."); - - principal = new Float(decimalFormat.format(principal)); - Float maturityAmount = new Float(decimalFormat.format(fixedDepositAccountData.get("maturityAmount"))); - - Assert.assertEquals("Verifying Pre-Closure maturity amount", principal, maturityAmount); - - } - - @Test - public void testPrematureClosureAmountWithPenalInterestTillPrematureWithdrawal_With_365_Days() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - todaysDate.add(Calendar.DAY_OF_MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.MONTH, 1); - todaysDate.add(Calendar.DAY_OF_MONTH, 1); - final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, TILL_PREMATURE_WITHDRAWAL); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.activateFixedDeposit(fixedDepositAccountId, ACTIVATION_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsActive(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float principal = (Float) fixedDepositAccountData.get("depositAmount"); - HashMap daysInYearMap = (HashMap) fixedDepositAccountData.get("interestCalculationDaysInYearType"); - Float preClosurePenalInterestRate = (Float) fixedDepositAccountData.get("preClosurePenalInterest"); - Integer daysInYear = (Integer) daysInYearMap.get("id"); - ArrayList<ArrayList<HashMap>> interestRateChartData = this.fixedDepositProductHelper.getInterestRateChartSlabsByProductId( - this.requestSpec, this.responseSpec, fixedDepositProductId); - - Calendar activationDate = Calendar.getInstance(); - activationDate.add(Calendar.MONTH, -1); - activationDate.add(Calendar.DAY_OF_MONTH, -1); - DateTime startDate = new DateTime(activationDate.getTime()); - - Calendar prematureClosureDate = Calendar.getInstance(); - DateTime endDate = new DateTime(prematureClosureDate.getTime()); - - Integer depositedPeriod = Months.monthsBetween(startDate, endDate).getMonths(); - - Float interestRate = this.fixedDepositAccountHelper.getInterestRate(interestRateChartData, depositedPeriod); - interestRate -= preClosurePenalInterestRate; - double interestRateInFraction = (interestRate / 100); - double perDay = (double) 1 / (daysInYear); - System.out.println("per day = " + perDay); - double interestPerDay = interestRateInFraction * perDay; - - todaysDate.add(Calendar.MONTH, -1); - todaysDate.add(Calendar.DAY_OF_MONTH, -1); - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - daysInMonth = (daysInMonth - currentDate) + 1; - Float interestPerMonth = (float) (interestPerDay * principal * daysInMonth); - principal += interestPerMonth; - todaysDate.add(Calendar.DATE, daysInMonth); - System.out.println(monthDayFormat.format(todaysDate.getTime())); - - interestPerMonth = (float) (interestPerDay * principal * currentDate); - System.out.println("IPM = " + interestPerMonth); - principal += interestPerMonth; - System.out.println("principal = " + principal); - - HashMap fixedDepositPrematureData = this.fixedDepositAccountHelper.calculatePrematureAmountForFixedDeposit(fixedDepositAccountId, - CLOSED_ON_DATE); - - Integer prematureClosureTransactionId = (Integer) this.fixedDepositAccountHelper.prematureCloseForFixedDeposit( - fixedDepositAccountId, CLOSED_ON_DATE, CLOSURE_TYPE_WITHDRAW_DEPOSIT, null, CommonConstants.RESPONSE_RESOURCE_ID); - Assert.assertNotNull(prematureClosureTransactionId); - - fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositAccountIsPrematureClosed(fixedDepositAccountStatusHashMap); - - fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - DecimalFormat decimalFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US)); - decimalFormat.applyPattern("."); - Float expectedPrematureAmount = new Float(decimalFormat.format(principal)); - Float maturityAmount = new Float(decimalFormat.format(fixedDepositAccountData.get("maturityAmount"))); - - Assert.assertEquals("Verifying Pre-Closure maturity amount", expectedPrematureAmount, maturityAmount); - - } - - @Test - public void testPrematureClosureAmountWithPenalInterestTillPrematureWithdrawal_With_360_Days() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); - this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - todaysDate.add(Calendar.DAY_OF_MONTH, -1); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.MONTH, 1); - todaysDate.add(Calendar.DAY_OF_MONTH, 1); - final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, TILL_PREMATURE_WITHDRAWAL); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap modificationsHashMap = this.fixedDepositAccountHelper.updateInterestCalculationConfigForFixedDeposit(clientId.toString(), - fixedDepositProductId.toString(), fixedDepositAccountId.toString(), SUBMITTED_ON_DATE, VALID_FROM, VALID_TO, DAYS_360, - TILL_PREMATURE_WITHDRAWAL, INTEREST_CALCULATION_USING_DAILY_BALANCE, MONTHLY, MONTHLY); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.activateFixedDeposit(fixedDepositAccountId, ACTIVATION_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsActive(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float principal = (Float) fixedDepositAccountData.get("depositAmount"); - HashMap daysInYearMap = (HashMap) fixedDepositAccountData.get("interestCalculationDaysInYearType"); - Float preClosurePenalInterestRate = (Float) fixedDepositAccountData.get("preClosurePenalInterest"); - Integer daysInYear = (Integer) daysInYearMap.get("id"); - ArrayList<ArrayList<HashMap>> interestRateChartData = this.fixedDepositProductHelper.getInterestRateChartSlabsByProductId( - this.requestSpec, this.responseSpec, fixedDepositProductId); - - Calendar activationDate = Calendar.getInstance(); - activationDate.add(Calendar.MONTH, -1); - activationDate.add(Calendar.DAY_OF_MONTH, -1); - DateTime startDate = new DateTime(activationDate.getTime()); - - Calendar prematureClosureDate = Calendar.getInstance(); - DateTime endDate = new DateTime(prematureClosureDate.getTime()); - - Integer depositedPeriod = Months.monthsBetween(startDate, endDate).getMonths(); - - Float interestRate = this.fixedDepositAccountHelper.getInterestRate(interestRateChartData, depositedPeriod); - interestRate -= preClosurePenalInterestRate; - double interestRateInFraction = (interestRate / 100); - double perDay = (double) 1 / (daysInYear); - System.out.println("per day = " + perDay); - double interestPerDay = interestRateInFraction * perDay; - - todaysDate.add(Calendar.MONTH, -1); - todaysDate.add(Calendar.DAY_OF_MONTH, -1); - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - daysInMonth = (daysInMonth - currentDate) + 1; - Float interestPerMonth = (float) (interestPerDay * principal * daysInMonth); - principal += interestPerMonth; - todaysDate.add(Calendar.DATE, daysInMonth); - System.out.println(monthDayFormat.format(todaysDate.getTime())); - - interestPerMonth = (float) (interestPerDay * principal * currentDate); - System.out.println("IPM = " + interestPerMonth); - principal += interestPerMonth; - System.out.println("principal = " + principal); - - HashMap fixedDepositPrematureData = this.fixedDepositAccountHelper.calculatePrematureAmountForFixedDeposit(fixedDepositAccountId, - CLOSED_ON_DATE); - - Integer prematureClosureTransactionId = (Integer) this.fixedDepositAccountHelper.prematureCloseForFixedDeposit( - fixedDepositAccountId, CLOSED_ON_DATE, CLOSURE_TYPE_WITHDRAW_DEPOSIT, null, CommonConstants.RESPONSE_RESOURCE_ID); - Assert.assertNotNull(prematureClosureTransactionId); - - fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositAccountIsPrematureClosed(fixedDepositAccountStatusHashMap); - - fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - DecimalFormat decimalFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US)); - decimalFormat.applyPattern("."); - Float expectedPrematureAmount = new Float(decimalFormat.format(principal)); - Float maturityAmount = new Float(decimalFormat.format(fixedDepositAccountData.get("maturityAmount"))); - - Assert.assertEquals("Verifying Pre-Closure maturity amount", expectedPrematureAmount, maturityAmount); - - } - - @Test - public void testMaturityAmountForDailyCompoundingAndMonthlyPosting_With_365_Days() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - todaysDate.add(Calendar.DATE, -(currentDate - 1)); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap modificationsHashMap = this.fixedDepositAccountHelper.updateInterestCalculationConfigForFixedDeposit(clientId.toString(), - fixedDepositProductId.toString(), fixedDepositAccountId.toString(), SUBMITTED_ON_DATE, VALID_FROM, VALID_TO, DAYS_365, - WHOLE_TERM, INTEREST_CALCULATION_USING_DAILY_BALANCE, DAILY, MONTHLY); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float principal = (Float) fixedDepositAccountData.get("depositAmount"); - Float maturityAmount = (Float) fixedDepositAccountData.get("maturityAmount"); - Integer depositPeriod = (Integer) fixedDepositAccountData.get("depositPeriod"); - HashMap daysInYearMap = (HashMap) fixedDepositAccountData.get("interestCalculationDaysInYearType"); - Integer daysInYear = (Integer) daysInYearMap.get("id"); - ArrayList<ArrayList<HashMap>> interestRateChartData = this.fixedDepositProductHelper.getInterestRateChartSlabsByProductId( - this.requestSpec, this.responseSpec, fixedDepositProductId); - - Float interestRate = this.fixedDepositAccountHelper.getInterestRate(interestRateChartData, depositPeriod); - double interestRateInFraction = (interestRate / 100); - double perDay = (double) 1 / (daysInYear); - System.out.println("per day = " + perDay); - double interestPerDay = interestRateInFraction * perDay; - - Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE); - - principal = this.fixedDepositAccountHelper.getPrincipalAfterCompoundingInterest(todaysDate, principal, depositPeriod, - interestPerDay, DAILY_COMPOUNDING_INTERVAL, MONTHLY_INTERVAL); - - DecimalFormat decimalFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US)); - decimalFormat.applyPattern("."); - principal = new Float(decimalFormat.format(principal)); - maturityAmount = new Float(decimalFormat.format(maturityAmount)); - System.out.println(principal); - Assert.assertEquals("Verifying Maturity amount for Fixed Deposit Account", principal, maturityAmount); - - } - - @Test - public void testMaturityAmountForDailyCompoundingAndMonthlyPosting_With_360_Days() { - this.fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - this.fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); - - DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); - DateFormat currentDateFormat = new SimpleDateFormat("dd"); - - Calendar todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -3); - final String VALID_FROM = dateFormat.format(todaysDate.getTime()); - todaysDate.add(Calendar.YEAR, 10); - final String VALID_TO = dateFormat.format(todaysDate.getTime()); - - todaysDate = Calendar.getInstance(); - todaysDate.add(Calendar.MONTH, -1); - Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime())); - todaysDate.add(Calendar.DATE, -(currentDate - 1)); - final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime()); - final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime()); - final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime()); - - System.out.println("Submitted Date:"+SUBMITTED_ON_DATE); - Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec); - Assert.assertNotNull(clientId); - - final String accountingRule = NONE; - Integer fixedDepositProductId = createFixedDepositProduct(VALID_FROM, VALID_TO, accountingRule); - Assert.assertNotNull(fixedDepositProductId); - - Integer fixedDepositAccountId = applyForFixedDepositApplication(clientId.toString(), fixedDepositProductId.toString(), VALID_FROM, - VALID_TO, SUBMITTED_ON_DATE, WHOLE_TERM); - Assert.assertNotNull(fixedDepositAccountId); - - HashMap modificationsHashMap = this.fixedDepositAccountHelper.updateInterestCalculationConfigForFixedDeposit(clientId.toString(), - fixedDepositProductId.toString(), fixedDepositAccountId.toString(), SUBMITTED_ON_DATE, VALID_FROM, VALID_TO, DAYS_360, - WHOLE_TERM, INTEREST_CALCULATION_USING_DAILY_BALANCE, DAILY, MONTHLY); - - HashMap fixedDepositAccountStatusHashMap = FixedDepositAccountStatusChecker.getStatusOfFixedDepositAccount(this.requestSpec, - this.responseSpec, fixedDepositAccountId.toString()); - FixedDepositAccountStatusChecker.verifyFixedDepositIsPending(fixedDepositAccountStatusHashMap); - - fixedDepositAccountStatusHashMap = this.fixedDepositAccountHelper.approveFixedDeposit(fixedDepositAccountId, APPROVED_ON_DATE); - FixedDepositAccountStatusChecker.verifyFixedDepositIsApproved(fixedDepositAccountStatusHashMap); - - HashMap fixedDepositAccountData = this.fixedDepositAccountHelper.getFixedDepositAccountById(this.requestSpec, this.responseSpec, - fixedDepositAccountId); - Float principal = (Float) fixedDepositAccountData.get("depositAmount"); - Float maturityAmount = (Float) fixedDepositAccountData.get("maturityAmount"); - Integer depositPeriod = (Integer) fixedDepositAccountData.get("depositPeriod"); - HashMap daysInYearMap = (HashMap) fixedDepositAccountData.get("interestCalculationDaysInYearType"); - Integer daysInYear = (Integer) daysInYearMap.get("id"); - ArrayList<ArrayList<HashMap>> interestRateChartData = this.fixedDepositProductHelper.getInterestRateChartSlabsByProductId( - this.requestSpec, t
<TRUNCATED>
