This is an automated email from the ASF dual-hosted git repository.

manojvm pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 538423622 FINERACT-2115: Create account transfers validation tests 
(#4011)
538423622 is described below

commit 53842362205ff96b2d9ff4dcf4fe531f8629648b
Author: Dhruv Sonagara <[email protected]>
AuthorDate: Sun Aug 25 12:48:39 2024 +0530

    FINERACT-2115: Create account transfers validation tests (#4011)
    
    * FINERACT-2115 Create credit bureau and account transfers validation tests
    
    * Added account trasnfer validation TCs and updated accot trasnfer helper 
class
    
    * Updated the spotless changes
    
    * Removed the unnescessary code and updated the account transfer validation 
tests
    
    * Added the test cases for invalid date format for the account transfer test
    
    * Updated the code according to the right response code for account 
transfer negative TC
---
 .../integrationtests/AccountTransferTest.java      | 450 +++++++++++++++++++++
 .../common/savings/AccountTransferHelper.java      |  52 +++
 2 files changed, 502 insertions(+)

diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/AccountTransferTest.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/AccountTransferTest.java
index 8d61a0b85..52824bbb3 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/AccountTransferTest.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/AccountTransferTest.java
@@ -70,12 +70,19 @@ public class AccountTransferTest {
     public static final String MINIMUM_OPENING_BALANCE = "30000.0";
     public static final String ACCOUNT_TYPE_INDIVIDUAL = "INDIVIDUAL";
     public static final String ACCOUNT_TRANSFER_AMOUNT = "15000.0";
+    public static final String ACCOUNT_TRANSFER_NEGATIVE_AMOUNT = "-15000.0";
     public static final String ACCOUNT_TRANSFER_AMOUNT_ADJUST = "3000.0";
+    public static final String ACCOUNT_TRANSFER_LARGE_AMOUNT = "100000.0";
+    public static final String ACCOUNT_TRANSFER_NEGATIVE_AMOUNT_ADJUST = 
"-3000.0";
     public static final String FROM_LOAN_ACCOUNT_TYPE = "1";
+    public static final String INVALID_LOAN_ACCOUNT_TYPE = "999";
     public static final String FROM_SAVINGS_ACCOUNT_TYPE = "2";
+    public static final String INVALID_SAVINGS_ACCOUNT_TYPE = "999";
     public static final String TO_LOAN_ACCOUNT_TYPE = "1";
     public static final String TO_SAVINGS_ACCOUNT_TYPE = "2";
 
+    public static final Integer INVALID_LOAN_ID = 123123123;
+
     public static final String LOAN_APPROVAL_DATE = "10 January 2013";
     public static final String LOAN_APPROVAL_DATE_PLUS_ONE = "11 January 2013";
     public static final String LOAN_DISBURSAL_DATE = "10 January 2013";
@@ -456,6 +463,449 @@ public class AccountTransferTest {
 
     }
 
+    @Test
+    public void testTransferWithNegativeAmount() {
+        final Account assetAccount = this.accountHelper.createAssetAccount();
+        final Account incomeAccount = this.accountHelper.createIncomeAccount();
+        final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account liabilityAccount = 
this.accountHelper.createLiabilityAccount();
+
+        final Account loanAssetAccount = 
this.accountHelper.createAssetAccount();
+        final Account loanIncomeAccount = 
this.accountHelper.createIncomeAccount();
+        final Account loanExpenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+
+        this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, 
this.responseSpec);
+        this.loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
+        this.accountTransferHelper = new 
AccountTransferHelper(this.requestSpec, this.responseSpec);
+
+        OfficeHelper officeHelper = new OfficeHelper(this.requestSpec, 
this.responseSpec);
+        Integer toOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(toOfficeId);
+
+        // Creating Loan Account to which fund to be Transferred
+        final Integer toClientID = ClientHelper.createClient(this.requestSpec, 
this.responseSpec, "01 January 2011",
+                String.valueOf(toOfficeId));
+        Assertions.assertNotNull(toClientID);
+
+        final Integer toSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE, assetAccount,
+                incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(toSavingsProductID);
+
+        final Integer toSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(toClientID, 
toSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(toSavingsID);
+
+        HashMap toSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
toSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(toSavingsStatusHashMap);
+
+        Integer fromOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(fromOfficeId);
+
+        // Creating Savings Account from which the Fund has to be Transferred
+        final Integer fromClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 
2011",
+                String.valueOf(fromOfficeId));
+        Assertions.assertNotNull(fromClientID);
+
+        final Integer loanProductID = createLoanProduct(loanAssetAccount, 
loanIncomeAccount, loanExpenseAccount, overpaymentAccount);
+        Assertions.assertNotNull(loanProductID);
+
+        final Integer loanID = applyForLoanApplication(fromClientID, 
loanProductID);
+        Assertions.assertNotNull(loanID);
+
+        HashMap loanStatusHashMap = 
LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
+        LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
+
+        loanStatusHashMap = 
this.loanTransactionHelper.approveLoan(LOAN_APPROVAL_DATE, loanID);
+        LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
+
+        String loanDetails = 
this.loanTransactionHelper.getLoanDetails(this.requestSpec, this.responseSpec, 
loanID);
+        loanStatusHashMap = 
this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount(LOAN_DISBURSAL_DATE,
 loanID,
+                
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
+        LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
+
+        final Integer fromSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE,
+                assetAccount, incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(fromSavingsProductID);
+
+        final Integer fromSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(fromClientID, 
fromSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(fromSavingsID);
+
+        HashMap fromSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(fromSavingsStatusHashMap);
+
+        final HashMap toSavingsSummaryBefore = 
this.savingsAccountHelper.getSavingsSummary(toSavingsID);
+
+        Float fromSavingsBalance = Float.valueOf(MINIMUM_OPENING_BALANCE);
+
+        Object accountTransfer = 
this.accountTransferHelper.invalidAccountTransfer(fromClientID, fromSavingsID, 
fromClientID, loanID,
+                FROM_SAVINGS_ACCOUNT_TYPE, TO_LOAN_ACCOUNT_TYPE, 
ACCOUNT_TRANSFER_NEGATIVE_AMOUNT);
+    }
+
+    @Test
+    public void testTransferWithInsufficientBalance() {
+        final Account assetAccount = this.accountHelper.createAssetAccount();
+        final Account incomeAccount = this.accountHelper.createIncomeAccount();
+        final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account liabilityAccount = 
this.accountHelper.createLiabilityAccount();
+
+        final Account loanAssetAccount = 
this.accountHelper.createAssetAccount();
+        final Account loanIncomeAccount = 
this.accountHelper.createIncomeAccount();
+        final Account loanExpenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+
+        this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, 
this.responseSpec);
+        this.loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
+        this.accountTransferHelper = new 
AccountTransferHelper(this.requestSpec, this.responseSpec);
+
+        OfficeHelper officeHelper = new OfficeHelper(this.requestSpec, 
this.responseSpec);
+        Integer toOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(toOfficeId);
+
+        // Creating Loan Account to which fund to be Transferred
+        final Integer toClientID = ClientHelper.createClient(this.requestSpec, 
this.responseSpec, "01 January 2011",
+                String.valueOf(toOfficeId));
+        Assertions.assertNotNull(toClientID);
+
+        final Integer toSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE, assetAccount,
+                incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(toSavingsProductID);
+
+        final Integer toSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(toClientID, 
toSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(toSavingsID);
+
+        HashMap toSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
toSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(toSavingsStatusHashMap);
+
+        Integer fromOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(fromOfficeId);
+
+        // Creating Savings Account from which the Fund has to be Transferred
+        final Integer fromClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 
2011",
+                String.valueOf(fromOfficeId));
+        Assertions.assertNotNull(fromClientID);
+
+        final Integer loanProductID = createLoanProduct(loanAssetAccount, 
loanIncomeAccount, loanExpenseAccount, overpaymentAccount);
+        Assertions.assertNotNull(loanProductID);
+
+        final Integer loanID = applyForLoanApplication(fromClientID, 
loanProductID);
+        Assertions.assertNotNull(loanID);
+
+        HashMap loanStatusHashMap = 
LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
+        LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
+
+        loanStatusHashMap = 
this.loanTransactionHelper.approveLoan(LOAN_APPROVAL_DATE, loanID);
+        LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
+
+        String loanDetails = 
this.loanTransactionHelper.getLoanDetails(this.requestSpec, this.responseSpec, 
loanID);
+        loanStatusHashMap = 
this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount(LOAN_DISBURSAL_DATE,
 loanID,
+                
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
+        LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
+
+        final Integer fromSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE,
+                assetAccount, incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(fromSavingsProductID);
+
+        final Integer fromSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(fromClientID, 
fromSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(fromSavingsID);
+
+        HashMap fromSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(fromSavingsStatusHashMap);
+
+        final HashMap toSavingsSummaryBefore = 
this.savingsAccountHelper.getSavingsSummary(toSavingsID);
+
+        Float fromSavingsBalance = Float.valueOf(MINIMUM_OPENING_BALANCE);
+
+        Object accountTransfer = 
this.accountTransferHelper.insufficientBalanceAccountTransfer(fromClientID, 
fromSavingsID, fromClientID,
+                loanID, FROM_SAVINGS_ACCOUNT_TYPE, TO_LOAN_ACCOUNT_TYPE, 
ACCOUNT_TRANSFER_LARGE_AMOUNT);
+
+    }
+
+    @Test
+    public void testTransferToInvalidAccountTypes() {
+        final Account assetAccount = this.accountHelper.createAssetAccount();
+        final Account incomeAccount = this.accountHelper.createIncomeAccount();
+        final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account liabilityAccount = 
this.accountHelper.createLiabilityAccount();
+
+        final Account loanAssetAccount = 
this.accountHelper.createAssetAccount();
+        final Account loanIncomeAccount = 
this.accountHelper.createIncomeAccount();
+        final Account loanExpenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+
+        this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, 
this.responseSpec);
+        this.loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
+        this.accountTransferHelper = new 
AccountTransferHelper(this.requestSpec, this.responseSpec);
+
+        OfficeHelper officeHelper = new OfficeHelper(this.requestSpec, 
this.responseSpec);
+        Integer toOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(toOfficeId);
+
+        // Creating Loan Account to which fund to be Transferred
+        final Integer toClientID = ClientHelper.createClient(this.requestSpec, 
this.responseSpec, "01 January 2011",
+                String.valueOf(toOfficeId));
+        Assertions.assertNotNull(toClientID);
+
+        final Integer toSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE, assetAccount,
+                incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(toSavingsProductID);
+
+        final Integer toSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(toClientID, 
toSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(toSavingsID);
+
+        HashMap toSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
toSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(toSavingsStatusHashMap);
+
+        Integer fromOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(fromOfficeId);
+
+        // Creating Savings Account from which the Fund has to be Transferred
+        final Integer fromClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 
2011",
+                String.valueOf(fromOfficeId));
+        Assertions.assertNotNull(fromClientID);
+
+        final Integer loanProductID = createLoanProduct(loanAssetAccount, 
loanIncomeAccount, loanExpenseAccount, overpaymentAccount);
+        Assertions.assertNotNull(loanProductID);
+
+        final Integer loanID = applyForLoanApplication(fromClientID, 
loanProductID);
+        Assertions.assertNotNull(loanID);
+
+        HashMap loanStatusHashMap = 
LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
+        LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
+
+        loanStatusHashMap = 
this.loanTransactionHelper.approveLoan(LOAN_APPROVAL_DATE, loanID);
+        LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
+
+        String loanDetails = 
this.loanTransactionHelper.getLoanDetails(this.requestSpec, this.responseSpec, 
loanID);
+        loanStatusHashMap = 
this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount(LOAN_DISBURSAL_DATE,
 loanID,
+                
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
+        LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
+
+        final Integer fromSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE,
+                assetAccount, incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(fromSavingsProductID);
+
+        final Integer fromSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(fromClientID, 
fromSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(fromSavingsID);
+
+        HashMap fromSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(fromSavingsStatusHashMap);
+
+        final HashMap toSavingsSummaryBefore = 
this.savingsAccountHelper.getSavingsSummary(toSavingsID);
+
+        Float fromSavingsBalance = Float.valueOf(MINIMUM_OPENING_BALANCE);
+
+        Object accountTransfer = 
this.accountTransferHelper.invalidAccountTransfer(fromClientID, fromSavingsID, 
fromClientID, loanID,
+                INVALID_SAVINGS_ACCOUNT_TYPE, INVALID_LOAN_ACCOUNT_TYPE, 
ACCOUNT_TRANSFER_AMOUNT);
+
+    }
+
+    @Test
+    public void testTransferToNonExistentAccount() {
+        final Account assetAccount = this.accountHelper.createAssetAccount();
+        final Account incomeAccount = this.accountHelper.createIncomeAccount();
+        final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account liabilityAccount = 
this.accountHelper.createLiabilityAccount();
+
+        final Account loanAssetAccount = 
this.accountHelper.createAssetAccount();
+        final Account loanIncomeAccount = 
this.accountHelper.createIncomeAccount();
+        final Account loanExpenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account overpaymentAccount = 
this.accountHelper.createLiabilityAccount();
+
+        this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, 
this.responseSpec);
+        this.loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
+        this.accountTransferHelper = new 
AccountTransferHelper(this.requestSpec, this.responseSpec);
+
+        OfficeHelper officeHelper = new OfficeHelper(this.requestSpec, 
this.responseSpec);
+        Integer toOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(toOfficeId);
+
+        // Creating Loan Account to which fund to be Transferred
+        final Integer toClientID = ClientHelper.createClient(this.requestSpec, 
this.responseSpec, "01 January 2011",
+                String.valueOf(toOfficeId));
+        Assertions.assertNotNull(toClientID);
+
+        final Integer toSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE, assetAccount,
+                incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(toSavingsProductID);
+
+        final Integer toSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(toClientID, 
toSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(toSavingsID);
+
+        HashMap toSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
toSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(toSavingsStatusHashMap);
+
+        Integer fromOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(fromOfficeId);
+
+        // Creating Savings Account from which the Fund has to be Transferred
+        final Integer fromClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 
2011",
+                String.valueOf(fromOfficeId));
+        Assertions.assertNotNull(fromClientID);
+
+        final Integer loanProductID = createLoanProduct(loanAssetAccount, 
loanIncomeAccount, loanExpenseAccount, overpaymentAccount);
+        Assertions.assertNotNull(loanProductID);
+
+        final Integer loanID = applyForLoanApplication(fromClientID, 
loanProductID);
+        Assertions.assertNotNull(loanID);
+
+        HashMap loanStatusHashMap = 
LoanStatusChecker.getStatusOfLoan(this.requestSpec, this.responseSpec, loanID);
+        LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
+
+        loanStatusHashMap = 
this.loanTransactionHelper.approveLoan(LOAN_APPROVAL_DATE, loanID);
+        LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
+
+        String loanDetails = 
this.loanTransactionHelper.getLoanDetails(this.requestSpec, this.responseSpec, 
loanID);
+        loanStatusHashMap = 
this.loanTransactionHelper.disburseLoanWithNetDisbursalAmount(LOAN_DISBURSAL_DATE,
 loanID,
+                
JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
+        LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
+
+        final Integer fromSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE,
+                assetAccount, incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(fromSavingsProductID);
+
+        final Integer fromSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(fromClientID, 
fromSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(fromSavingsID);
+
+        HashMap fromSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(fromSavingsStatusHashMap);
+
+        final HashMap toSavingsSummaryBefore = 
this.savingsAccountHelper.getSavingsSummary(toSavingsID);
+
+        Float fromSavingsBalance = Float.valueOf(MINIMUM_OPENING_BALANCE);
+        Object accountTransfer = 
this.accountTransferHelper.nonExistentAccountTransfer(fromClientID, 
fromSavingsID, fromClientID,
+                INVALID_LOAN_ID, FROM_SAVINGS_ACCOUNT_TYPE, 
TO_LOAN_ACCOUNT_TYPE, ACCOUNT_TRANSFER_AMOUNT);
+
+    }
+
+    @Test
+    public void 
testFromSavingsToSavingsAccountTransferWithInvalidTransferDate() {
+        this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, 
this.responseSpec);
+        this.accountTransferHelper = new 
AccountTransferHelper(this.requestSpec, this.responseSpec);
+
+        final Account assetAccount = this.accountHelper.createAssetAccount();
+        final Account incomeAccount = this.accountHelper.createIncomeAccount();
+        final Account expenseAccount = 
this.accountHelper.createExpenseAccount();
+        final Account liabilityAccount = 
this.accountHelper.createLiabilityAccount();
+
+        OfficeHelper officeHelper = new OfficeHelper(this.requestSpec, 
this.responseSpec);
+        Integer toOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(toOfficeId);
+
+        // Creating Savings Account to which fund to be Transferred
+        final Integer toClientID = ClientHelper.createClient(this.requestSpec, 
this.responseSpec, "01 January 2011",
+                String.valueOf(toOfficeId));
+        Assertions.assertNotNull(toClientID);
+
+        final Integer toSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE, assetAccount,
+                incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(toSavingsProductID);
+
+        final Integer toSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(toClientID, 
toSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(toSavingsProductID);
+
+        HashMap toSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
toSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(toSavingsStatusHashMap);
+
+        toSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(toSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(toSavingsStatusHashMap);
+
+        final HashMap toSavingsSummaryBefore = 
this.savingsAccountHelper.getSavingsSummary(toSavingsID);
+
+        Integer fromOfficeId = officeHelper.createOffice("01 January 2011");
+        Assertions.assertNotNull(fromOfficeId);
+
+        // Creating Savings Account from which the Fund has to be Transferred
+        final Integer fromClientID = 
ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 
2011",
+                String.valueOf(fromOfficeId));
+        Assertions.assertNotNull(fromClientID);
+
+        final Integer fromSavingsProductID = 
createSavingsProduct(this.requestSpec, this.responseSpec, 
MINIMUM_OPENING_BALANCE,
+                assetAccount, incomeAccount, expenseAccount, liabilityAccount);
+        Assertions.assertNotNull(fromSavingsProductID);
+
+        final Integer fromSavingsID = 
this.savingsAccountHelper.applyForSavingsApplication(fromClientID, 
fromSavingsProductID,
+                ACCOUNT_TYPE_INDIVIDUAL);
+        Assertions.assertNotNull(fromSavingsID);
+
+        HashMap fromSavingsStatusHashMap = 
SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, 
fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsPending(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.approveSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsApproved(fromSavingsStatusHashMap);
+
+        fromSavingsStatusHashMap = 
this.savingsAccountHelper.activateSavings(fromSavingsID);
+        SavingsStatusChecker.verifySavingsIsActive(fromSavingsStatusHashMap);
+
+        final HashMap fromSavingsSummaryBefore = 
this.savingsAccountHelper.getSavingsSummary(fromSavingsID);
+
+        Float fromSavingsBalance = Float.valueOf(MINIMUM_OPENING_BALANCE);
+        Float toSavingsBalance = Float.valueOf(MINIMUM_OPENING_BALANCE);
+
+        Object accountTransfer = 
this.accountTransferHelper.accountTransferWithInvalidDate(fromClientID, 
fromSavingsID, fromClientID,
+                toSavingsID, FROM_SAVINGS_ACCOUNT_TYPE, 
TO_SAVINGS_ACCOUNT_TYPE, ACCOUNT_TRANSFER_AMOUNT);
+
+    }
+
     private Integer createSavingsProduct(final RequestSpecification 
requestSpec, final ResponseSpecification responseSpec,
             final String minOpenningBalance, final Account... accounts) {
         LOG.info("------------------------------CREATING NEW SAVINGS PRODUCT 
---------------------------------------");
diff --git 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/AccountTransferHelper.java
 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/AccountTransferHelper.java
index 9368fb510..752ce199a 100644
--- 
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/AccountTransferHelper.java
+++ 
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/AccountTransferHelper.java
@@ -19,6 +19,7 @@
 package org.apache.fineract.integrationtests.common.savings;
 
 import com.google.gson.Gson;
+import io.restassured.builder.ResponseSpecBuilder;
 import io.restassured.specification.RequestSpecification;
 import io.restassured.specification.ResponseSpecification;
 import java.util.HashMap;
@@ -35,6 +36,7 @@ public class AccountTransferHelper {
     private static final String OFFICE_ID = "1";
     private static final String TRANSFER_DESCRIPTION = "Transfer";
     public static final String ACCOUNT_TRANSFER_DATE = "01 March 2013";
+    public static final String ACCOUNT_TRANSFER_INVALID_DATE = "01 05 2013";
 
     private String transferDate = "";
     private String officeId = OFFICE_ID;
@@ -86,6 +88,56 @@ public class AccountTransferHelper {
                 accountTransferJSON, "savingsId");
     }
 
+    public Object nonExistentAccountTransfer(final Integer fromClientId, final 
Integer fromAccountId, final Integer toClientId,
+            final Integer toAccountId, final String fromAccountType, final 
String toAccountType, final String transferAmount) {
+        LOG.info("--------------------------------ACCOUNT 
TRANSFER--------------------------------");
+        this.responseSpec = new 
ResponseSpecBuilder().expectStatusCode(404).build();
+        final String accountTransferJSON = new 
AccountTransferHelper(this.requestSpec, this.responseSpec) //
+                .withTransferOnDate(ACCOUNT_TRANSFER_DATE) //
+                .build(fromAccountId.toString(), fromClientId.toString(), 
toAccountId.toString(), toClientId.toString(), fromAccountType,
+                        toAccountType, transferAmount);
+
+        return Utils.performServerPost(this.requestSpec, this.responseSpec, 
ACCOUNT_TRANSFER_URL + "?" + Utils.TENANT_IDENTIFIER,
+                accountTransferJSON, "savingsId");
+    }
+
+    public Object insufficientBalanceAccountTransfer(final Integer 
fromClientId, final Integer fromAccountId, final Integer toClientId,
+            final Integer toAccountId, final String fromAccountType, final 
String toAccountType, final String transferAmount) {
+        LOG.info("--------------------------------ACCOUNT 
TRANSFER--------------------------------");
+        this.responseSpec = new 
ResponseSpecBuilder().expectStatusCode(403).build();
+        final String accountTransferJSON = new 
AccountTransferHelper(this.requestSpec, this.responseSpec) //
+                .withTransferOnDate(ACCOUNT_TRANSFER_DATE) //
+                .build(fromAccountId.toString(), fromClientId.toString(), 
toAccountId.toString(), toClientId.toString(), fromAccountType,
+                        toAccountType, transferAmount);
+
+        return Utils.performServerPost(this.requestSpec, this.responseSpec, 
ACCOUNT_TRANSFER_URL + "?" + Utils.TENANT_IDENTIFIER,
+                accountTransferJSON, "savingsId");
+    }
+
+    public Object invalidAccountTransfer(final Integer fromClientId, final 
Integer fromAccountId, final Integer toClientId,
+            final Integer toAccountId, final String fromAccountType, final 
String toAccountType, final String transferAmount) {
+        LOG.info("--------------------------------ACCOUNT 
TRANSFER--------------------------------");
+        this.responseSpec = new 
ResponseSpecBuilder().expectStatusCode(400).build();
+        final String accountTransferJSON = new 
AccountTransferHelper(this.requestSpec, this.responseSpec) //
+                .withTransferOnDate(ACCOUNT_TRANSFER_DATE) //
+                .build(fromAccountId.toString(), fromClientId.toString(), 
toAccountId.toString(), toClientId.toString(), fromAccountType,
+                        toAccountType, transferAmount);
+
+        return Utils.performServerPost(this.requestSpec, this.responseSpec, 
ACCOUNT_TRANSFER_URL + "?" + Utils.TENANT_IDENTIFIER,
+                accountTransferJSON, "savingsId");
+    }
+
+    public Object accountTransferWithInvalidDate(final Integer fromClientId, 
final Integer fromAccountId, final Integer toClientId,
+            final Integer toAccountId, final String fromAccountType, final 
String toAccountType, final String transferAmount) {
+        LOG.info("--------------------------------ACCOUNT 
TRANSFER--------------------------------");
+        final String accountTransferJSON = new 
AccountTransferHelper(this.requestSpec, this.responseSpec) //
+                .withTransferOnDate(ACCOUNT_TRANSFER_INVALID_DATE) //
+                .build(fromAccountId.toString(), fromClientId.toString(), 
toAccountId.toString(), toClientId.toString(), fromAccountType,
+                        toAccountType, transferAmount);
+        return Utils.performServerPost(this.requestSpec, this.responseSpec, 
ACCOUNT_TRANSFER_URL + "?" + Utils.TENANT_IDENTIFIER,
+                accountTransferJSON, "savingsId");
+    }
+
     public Integer refundLoanByTransfer(final String date, final Integer 
fromClientId, final Integer fromAccountId,
             final Integer toClientId, final Integer toAccountId, final String 
fromAccountType, final String toAccountType,
             final String transferAmount) {


Reply via email to