package org.mifos.test.acceptance.loan; import java.io.IOException; import java.net.URISyntaxException; import java.sql.SQLException; import junit.framework.Assert; import org.dbunit.DatabaseUnitException; import org.joda.time.DateTime; import org.mifos.test.acceptance.framework.UiTestCaseBase; import org.mifos.test.acceptance.framework.admin.ManageRolePage; import org.mifos.test.acceptance.framework.loan.ApplyPaymentConfirmationPage; import org.mifos.test.acceptance.framework.loan.ApplyPaymentPage; import org.mifos.test.acceptance.framework.loan.CreateLoanAccountSearchParameters; import org.mifos.test.acceptance.framework.loan.LoanAccountPage; import org.mifos.test.acceptance.framework.loan.PaymentParameters; import org.mifos.test.acceptance.framework.loan.RedoLoanDisbursalParameters; import org.mifos.test.acceptance.framework.savings.CreateSavingsAccountSearchParameters; import org.mifos.test.acceptance.framework.savings.CreateSavingsAccountSubmitParameters; import org.mifos.test.acceptance.framework.savings.DepositWithdrawalSavingsParameters; import org.mifos.test.acceptance.framework.savings.FundsParameters; import org.mifos.test.acceptance.framework.savings.SavingFundTransferEnterDetailsPage; import org.mifos.test.acceptance.framework.savings.SavingsAccountDetailPage; import org.mifos.test.acceptance.framework.testhelpers.LoanTestHelper; import org.mifos.test.acceptance.framework.testhelpers.NavigationHelper; import org.mifos.test.acceptance.framework.testhelpers.SavingsAccountHelper; import org.mifos.test.acceptance.remote.DateTimeUpdaterRemoteTestingService; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @ContextConfiguration(locations = { "classpath:ui-test-context.xml" }) @Test(singleThreaded = true, groups = { "acceptance", "ui", "loan", "no_db_unit" }) public class SavingsPaymentTest extends UiTestCaseBase { private static final String CLIENT_GLOBAL_NUM = "Stu1233266063395 Client1233266063395"; private static final int TRANSFER_AMOUNT = 100; private static final int SAVINGS_START_BALANCE = 1000; private NavigationHelper navigationHelper; private LoanTestHelper loanTestHelper; private SavingsAccountHelper savingsTestHelper; @BeforeMethod(alwaysRun = true) @SuppressWarnings("PMD") public void setUp() throws Exception { super.setUp(); navigationHelper = new NavigationHelper(selenium); loanTestHelper = new LoanTestHelper(selenium); savingsTestHelper = new SavingsAccountHelper(selenium); setupTime(); } @Test(dependsOnMethods = "testPermissionForPaymentFromSavings") public void testPaymentFromSavings() { String loanGlobalNum = setUpLoanAccount(); String savingsGlobalNum = setUpSavingsAccount(); LoanAccountPage loanAccountPage = makePaymentFromSavings(loanGlobalNum, savingsGlobalNum, TRANSFER_AMOUNT); verifyLoanAccount(loanAccountPage, String.valueOf(TRANSFER_AMOUNT)); verifySavingsAccount(savingsGlobalNum, String.valueOf(SAVINGS_START_BALANCE - TRANSFER_AMOUNT)); } private void setupTime() throws DatabaseUnitException, SQLException, IOException, URISyntaxException { DateTimeUpdaterRemoteTestingService dateTimeUpdaterRemoteTestingService = new DateTimeUpdaterRemoteTestingService( selenium); DateTime targetTime = new DateTime(2011, 3, 13, 13, 0, 0, 0); dateTimeUpdaterRemoteTestingService.setDateTime(targetTime); } private String setUpLoanAccount() { RedoLoanDisbursalParameters redoParams = new RedoLoanDisbursalParameters(); redoParams.setDisbursalDateDD("12"); redoParams.setDisbursalDateMM("03"); redoParams.setDisbursalDateYYYY("2011"); LoanAccountPage loanAccountPage = loanTestHelper.redoLoanDisbursal(CLIENT_GLOBAL_NUM, "ClientEmergencyLoan", redoParams, null, 0, false); return loanAccountPage.getAccountId(); } private String setUpSavingsAccount() { CreateSavingsAccountSearchParameters searchParameters = new CreateSavingsAccountSearchParameters(); searchParameters.setSearchString(CLIENT_GLOBAL_NUM); searchParameters.setSavingsProduct("MonthlyClientSavingsAccount"); CreateSavingsAccountSubmitParameters submitAccountParameters = new CreateSavingsAccountSubmitParameters(); submitAccountParameters.setAmount("100"); SavingsAccountDetailPage savingsPage = savingsTestHelper.createSavingsAccount(searchParameters, submitAccountParameters); String savingsId = savingsPage.getAccountId(); savingsTestHelper.activateSavingsAccount(savingsId); DepositWithdrawalSavingsParameters depositParams = new DepositWithdrawalSavingsParameters(); depositParams.setAmount(String.valueOf(SAVINGS_START_BALANCE)); depositParams.setPaymentType(DepositWithdrawalSavingsParameters.CASH); depositParams.setTrxnType(DepositWithdrawalSavingsParameters.DEPOSIT); savingsTestHelper.makeDepositOrWithdrawalOnSavingsAccount(savingsId, depositParams); return savingsId; } private LoanAccountPage makePaymentFromSavings(String loanGlobalNum, String savingsGlobalNum, int amount) { CreateLoanAccountSearchParameters loanSearchParams = new CreateLoanAccountSearchParameters(); loanSearchParams.setSearchString(loanGlobalNum); LoanAccountPage loanAccountPage = navigationHelper.navigateToLoanAccountPage(loanGlobalNum); ApplyPaymentPage applyPaymentPage = loanAccountPage.navigateToApplyPayment(); PaymentParameters paymentParams = new PaymentParameters(); paymentParams.setAmount(String.valueOf(amount)); paymentParams.setPaymentType(PaymentParameters.TRANSFER); paymentParams.setSavingsAccountGlobalNum(savingsGlobalNum); paymentParams.setTransactionDateDD("13"); paymentParams.setTransactionDateMM("03"); paymentParams.setTransactionDateYYYY("2011"); paymentParams.setSavingsAccountBalance(String.valueOf(SAVINGS_START_BALANCE)); paymentParams.setSavingsAccountMaxWithdrawalAmount(String.valueOf(0)); paymentParams.setSavingsAccountType("Voluntary"); paymentParams.setSavingsAccountName("MonthlyClientSavingsAccount"); ApplyPaymentConfirmationPage paymentConfirmationPage = applyPaymentPage .submitAndNavigateToApplyPaymentConfirmationPage(paymentParams); return paymentConfirmationPage.submitAndNavigateToLoanAccountDetailsPage(); } private void verifyLoanAccount(LoanAccountPage loanAccountPage, String amountPaid) { loanAccountPage.verifyTotalAmountPaid(amountPaid); loanAccountPage.navigateToAccountActivityPage().verifyLastTotalPaid(amountPaid, 2); } private void verifySavingsAccount(String savingsGlobalNum, String expectedBalance) { SavingsAccountDetailPage savingsPage = navigationHelper.navigateToSavingsAccountDetailPage(savingsGlobalNum); savingsPage.verifySavingsAmount(expectedBalance); } public void testPermissionForPaymentFromSavings() { String loanGlobalNum = setUpLoanAccount(); String savingsGlobalNum = setUpSavingsAccount(); String errorMessage = "You do not have permission to make payment to the account using Savings Account Transfer"; //first uncheck permission and see if access denied page is displayed //while trying transfer from savings ManageRolePage manageRolePage = navigationHelper.navigateToAdminPage().navigateToViewRolesPage().navigateToManageRolePage("Admin"); if (manageRolePage.isPermissionEnable("5_1_11")) { manageRolePage.disablePermission("5_1_11"); } manageRolePage.submitAndGotoViewRolesPage(); CreateLoanAccountSearchParameters loanSearchParams = new CreateLoanAccountSearchParameters(); loanSearchParams.setSearchString(loanGlobalNum); LoanAccountPage loanAccountPage = navigationHelper.navigateToLoanAccountPage(loanGlobalNum); ApplyPaymentPage applyPaymentPage = loanAccountPage.navigateToApplyPayment(); PaymentParameters paymentParams = new PaymentParameters(); paymentParams.setAmount(String.valueOf(TRANSFER_AMOUNT)); paymentParams.setPaymentType(PaymentParameters.TRANSFER); paymentParams.setSavingsAccountGlobalNum(savingsGlobalNum); paymentParams.setTransactionDateDD("13"); paymentParams.setTransactionDateMM("03"); paymentParams.setTransactionDateYYYY("2011"); paymentParams.setSavingsAccountBalance(String.valueOf(SAVINGS_START_BALANCE)); paymentParams.setSavingsAccountMaxWithdrawalAmount(String.valueOf(0)); paymentParams.setSavingsAccountType("Voluntary"); paymentParams.setSavingsAccountName("MonthlyClientSavingsAccount"); try { applyPaymentPage.submitAndNavigateToApplyPaymentConfirmationPage(paymentParams); } catch (AssertionError e) { Assert.assertTrue(selenium.isTextPresent(errorMessage)); } //now enable permission and validate transfer success manageRolePage = navigationHelper.navigateToAdminPage().navigateToViewRolesPage().navigateToManageRolePage("Admin"); if (!manageRolePage.isPermissionEnable("5_1_11")) { manageRolePage.enablePermission("5_1_11"); } manageRolePage.submitAndGotoViewRolesPage(); navigationHelper.navigateToLoanAccountPage(loanGlobalNum) .navigateToApplyPayment() .submitAndNavigateToApplyPaymentConfirmationPage(paymentParams) .submitAndNavigateToLoanAccountDetailsPage(); } @Test(enabled=true) //https://mifosforge.jira.com/browse/MIFOSTEST-1189 public void verifyAbilityToTransferFundsFromOneSavingAccountToAnotherSavingAccount() { // Given String TRANSFER_AMOUNT = "50"; String senderSavingsAccountId = savingsTestHelper .createAndActivateSavingAccountWithDefaultAmountOfDeposit("Stu12332659912419 Client12332659912419").getAccountId(); String receiverSavingsAccountId = savingsTestHelper .createAndActivateSavingAccountWithDefaultAmountOfDeposit("Stu1233266299995 Client1233266299995").getAccountId(); ManageRolePage manageRolePage = new ManageRolePage(selenium); manageRolePage = navigationHelper.navigateToAdminPage().navigateToViewRolesPage().navigateToManageRolePage("Admin"); // When if(manageRolePage.isPermissionEnable("6_15")) { manageRolePage.disablePermission("6_15").submitAndGotoViewRolesPage(); } //Then SavingsAccountDetailPage savingAccountDetailPage = navigationHelper.navigateToSavingsAccountDetailPage(senderSavingsAccountId); savingAccountDetailPage.navigateToApplyTransferPage().verifyIsAccessDeniedMessageDisplayed(); //When manageRolePage = navigationHelper.navigateToAdminPage().navigateToViewRolesPage().navigateToManageRolePage("Admin"); if(!manageRolePage.isPermissionEnable("6_15")) { manageRolePage.enablePermission("6_15").submitAndGotoViewRolesPage(); } //Then savingAccountDetailPage = navigationHelper.navigateToSavingsAccountDetailPage(senderSavingsAccountId); SavingFundTransferEnterDetailsPage savingFundTransferEnterDetailPage = savingAccountDetailPage .navigateToApplyTransferPaymentPage("Stu1233266299995 Client1233266299995", receiverSavingsAccountId); FundsParameters params = new FundsParameters(); params.setTransactionDateDD("1c"); params.setTransactionDateMM("03"); params.setTransactionDateYYYY("2011"); savingFundTransferEnterDetailPage.submitWithWrongParams(params , "Date of transaction was invalid. Please enter a valid date."); params.setTransactionDateDD("13"); savingFundTransferEnterDetailPage.submitWithWrongParams(params , "Please specify Amount."); params.setAmount(TRANSFER_AMOUNT); savingFundTransferEnterDetailPage.submitAndNavigateToSavingFundPreviewPage(params).submitAndNavigateToSavingDetailPage(); //Then Assert.assertEquals("50", savingAccountDetailPage.getAccountBallance() ); savingAccountDetailPage = navigationHelper.navigateToSavingsAccountDetailPage(receiverSavingsAccountId); Assert.assertEquals( "150", savingAccountDetailPage.getAccountBallance() ); } }