/*
* Copyright (c) 2005-2011 Grameen Foundation USA
* All rights reserved.
*
* Licensed 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.
*
* See also http://www.apache.org/licenses/LICENSE-2.0.html for an
* explanation of the license and how it is applied.
*/
package org.mifos.test.acceptance.holiday;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.DateTime;
import org.mifos.test.acceptance.framework.AppLauncher;
import org.mifos.test.acceptance.framework.ClientsAndAccountsHomepage;
import org.mifos.test.acceptance.framework.HomePage;
import org.mifos.test.acceptance.framework.MifosPage;
import org.mifos.test.acceptance.framework.UiTestCaseBase;
import org.mifos.test.acceptance.framework.holiday.CreateHolidayEntryPage;
import org.mifos.test.acceptance.framework.holiday.CreateHolidayEntryPage.CreateHolidaySubmitParameters;
import org.mifos.test.acceptance.framework.loan.ChargeParameters;
import org.mifos.test.acceptance.framework.loan.CreateLoanAccountConfirmationPage;
import org.mifos.test.acceptance.framework.loan.CreateLoanAccountEntryPage;
import org.mifos.test.acceptance.framework.loan.CreateLoanAccountSearchPage;
import org.mifos.test.acceptance.framework.loan.CreateLoanAccountSearchParameters;
import org.mifos.test.acceptance.framework.loan.CreateLoanAccountSubmitParameters;
import org.mifos.test.acceptance.framework.loan.DisburseLoanParameters;
import org.mifos.test.acceptance.framework.login.LoginPage;
import org.mifos.test.acceptance.framework.testhelpers.BatchJobHelper;
import org.mifos.test.acceptance.framework.testhelpers.CenterTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.ClientTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.GroupTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.HolidayTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.LoanTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.NavigationHelper;
import org.mifos.test.acceptance.remote.DateTimeUpdaterRemoteTestingService;
import org.mifos.test.acceptance.util.ApplicationDatabaseOperation;
import org.mifos.test.acceptance.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@ContextConfiguration(locations = {"classpath:ui-test-context.xml"})
@Test(singleThreaded = true, groups = {"holiday", "schedules", "acceptance", "ui", "no_db_unit"})
public class AdditionalHolidayTest extends UiTestCaseBase {
@Autowired
private ApplicationDatabaseOperation applicationDatabaseOperation;
private AppLauncher appLauncher;
private HolidayTestHelper holidayTestHelper;
private CenterTestHelper centerTestHelper;
private GroupTestHelper groupTestHelper;
private ClientTestHelper clientTestHelper;
private LoanTestHelper loanTestHelper;
private NavigationHelper navigationHelper;
private DateTimeUpdaterRemoteTestingService dateTimeUpdaterRemoteTestingService;
@Override
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
// one of the dependent methods throws Exception
@BeforeMethod(alwaysRun = true)
public void setUp() throws Exception {
super.setUp();
dateTimeUpdaterRemoteTestingService = new DateTimeUpdaterRemoteTestingService(selenium);
appLauncher = new AppLauncher(selenium);
holidayTestHelper = new HolidayTestHelper(selenium);
centerTestHelper = new CenterTestHelper(selenium);
groupTestHelper = new GroupTestHelper(selenium);
clientTestHelper = new ClientTestHelper(selenium);
loanTestHelper = new LoanTestHelper(selenium);
navigationHelper = new NavigationHelper(selenium);
}
@AfterMethod
public void logOut() {
new MifosPage(selenium).logout();
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
/*
* loan creation for setup is stepping into questionnaire page when it shouldnt
*/
@Test(enabled=true)
public void createTwoWeeklyLoansInDifferentOffices() throws Exception {
DateTime targetTime = new DateTime(2011, 3, 9, 0, 0, 0, 0);
dateTimeUpdaterRemoteTestingService.setDateTime(targetTime);
CreateLoanAccountSearchParameters searchParameters1 = new CreateLoanAccountSearchParameters();
searchParameters1.setSearchString("Stu1233171716380 Client1233171716380");
searchParameters1.setLoanProduct("WeeklyClientFlatLoanWithNoFee");
CreateLoanAccountSubmitParameters submitAccountParameters1 = new CreateLoanAccountSubmitParameters();
submitAccountParameters1.setAmount("2000");
this.createLoan(searchParameters1, submitAccountParameters1);
// create second loan account
CreateLoanAccountSearchParameters searchParameters2 = new CreateLoanAccountSearchParameters();
searchParameters2.setSearchString("ClientInBranch1 ClientInBranch1");
searchParameters2.setLoanProduct("WeeklyClientFlatLoanWithNoFee");
CreateLoanAccountSubmitParameters submitAccountParameters2 = new CreateLoanAccountSubmitParameters();
submitAccountParameters2.setAmount("2000");
this.createLoan(searchParameters2, submitAccountParameters2);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
//http://mifosforge.jira.com/browse/MIFOSTEST-280
public void testBranchSpecificMoratorium() throws Exception {
DateTime targetTime = new DateTime(2009, 3, 11, 0, 0, 0, 0);
dateTimeUpdaterRemoteTestingService.setDateTime(targetTime);
//Given
CreateHolidaySubmitParameters param = getCreateHolidaySubmitParameters();
//When / Then
holidayTestHelper.createHoliday(param);
}
private CreateHolidaySubmitParameters getCreateHolidaySubmitParameters() {
CreateHolidaySubmitParameters params = new CreateHolidayEntryPage.CreateHolidaySubmitParameters();
params.setName("Holiday" + StringUtil.getRandomString(8));
params.setFromDateDD("01");
params.setFromDateMM("02");
params.setFromDateYYYY("2011");
params.setThruDateDD("14");
params.setThruDateMM("02");
params.setThruDateYYYY("2011");
params.setRepaymentRule(CreateHolidaySubmitParameters.MORATORIUM);
params.addOffice("MyOfficeDHMFT");
return params;
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
// http://mifosforge.jira.com/browse/MIFOSTEST-281
public void testHolidayAffectsFeeSchedule() throws Exception {
DateTime targetTime = new DateTime(2009, 3, 11, 0, 0, 0, 0);
dateTimeUpdaterRemoteTestingService.setDateTime(targetTime);
// Given
ChargeParameters chargeParameters = new ChargeParameters();
String officeName = "MyOfficeDHMFT";
String centerName = "Default Center";
String groupName = "Default Group";
String clientName = "Holiday TestClient";
String loanId = "000100000000035";
CreateHolidaySubmitParameters params = new CreateHolidayEntryPage.CreateHolidaySubmitParameters();
params.setName("Holiday" + StringUtil.getRandomString(8));
params.setFromDateDD("16");
params.setFromDateMM("03");
params.setFromDateYYYY("2009");
params.setRepaymentRule(CreateHolidaySubmitParameters.MORATORIUM);
params.addOffice(officeName);
// When
chargeParameters.setType("Misc Fees");
chargeParameters.setAmount("100");
centerTestHelper.applyCharge(centerName, chargeParameters);
String centerAmount = navigationHelper.navigateToCenterViewDetailsPage(centerName).getAmountDue();
chargeParameters.setType("Misc Fees");
chargeParameters.setAmount("100");
groupTestHelper.applyCharge(groupName, chargeParameters);
String groupAmount = navigationHelper.navigateToGroupViewDetailsPage(groupName).getAmountDue();
chargeParameters.setType("Misc Fees");
chargeParameters.setAmount("100");
clientTestHelper.applyCharge(clientName, chargeParameters);
String clientAmount = navigationHelper.navigateToClientViewDetailsPage(clientName).getAmountDue();
chargeParameters.setType("loanWeeklyFee");
chargeParameters.setAmount("100");
loanTestHelper.applyChargeUsingFeeLabel(loanId, chargeParameters);
holidayTestHelper.createHoliday(params);
navigationHelper.navigateToAdminPage();
applicationDatabaseOperation.cleanBatchJobTables();
List<String> jobsToRun = new ArrayList<String>();
jobsToRun.add("ApplyHolidayChangesTaskJob");
new BatchJobHelper(selenium).runSomeBatchJobs(jobsToRun);
targetTime = new DateTime(2009, 3, 17, 0, 0, 0, 0);
dateTimeUpdaterRemoteTestingService.setDateTime(targetTime);
navigationHelper.navigateToCenterViewDetailsPage(centerName).verifyAmountDue(centerAmount);
navigationHelper.navigateToGroupViewDetailsPage(groupName).verifyAmountDue(groupAmount);
navigationHelper.navigateToClientViewDetailsPage(clientName).verifyAmountDue(clientAmount);
navigationHelper.navigateToLoanAccountPage(loanId).navigateToRepaymentSchedulePage().verifyScheduleNotContainDate("16-Mar-2009");
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
public void testHolidayLoanDisbursement() throws Exception {
DateTime targetTime = new DateTime(2020, 8, 9, 0, 0, 0, 0);
dateTimeUpdaterRemoteTestingService.setDateTime(targetTime);
String officeName = "MyOfficeDHMFT";
String loanId = "000100000000035";
CreateHolidaySubmitParameters holidayParams = new CreateHolidayEntryPage.CreateHolidaySubmitParameters();
holidayParams.setName("Holiday" + StringUtil.getRandomString(8));
holidayParams.setFromDateDD("16");
holidayParams.setFromDateMM("08");
holidayParams.setFromDateYYYY("2020");
holidayParams.setRepaymentRule(CreateHolidaySubmitParameters.MORATORIUM);
holidayParams.addOffice(officeName);
holidayTestHelper.createHoliday(holidayParams);
DateTime targetTime1 = new DateTime(2020, 8, 16, 0, 0, 0, 0);
dateTimeUpdaterRemoteTestingService.setDateTime(targetTime1);
DisburseLoanParameters disburseParams = new DisburseLoanParameters();
disburseParams.setDisbursalDateDD("16");
disburseParams.setDisbursalDateMM("08");
disburseParams.setDisbursalDateYYYY("2020");
disburseParams.setPaymentType(DisburseLoanParameters.CASH);
loanTestHelper.prepareToDisburseLoan(loanId)
.submitAndNavigateToDisburseLoanConfirmationPage(disburseParams)
.submitButDisbursalFailed("Disbursement date must be on a working day.");
}
private void createLoan(final CreateLoanAccountSearchParameters searchParameters,
final CreateLoanAccountSubmitParameters submitAccountParameters) {
logOut();
CreateLoanAccountSearchPage createLoanAccountSearchPage = navigateToCreateLoanAccountSearchPage();
CreateLoanAccountEntryPage createLoanAccountEntryPage = createLoanAccountSearchPage
.searchAndNavigateToCreateLoanAccountPage(searchParameters);
CreateLoanAccountConfirmationPage createLoanAccountConfirmationPage = createLoanAccountEntryPage
.submitAndNavigateToLoanAccountConfirmationPage(submitAccountParameters);
createLoanAccountConfirmationPage.navigateToLoanAccountDetailsPage();
}
private CreateLoanAccountSearchPage navigateToCreateLoanAccountSearchPage() {
LoginPage loginPage = appLauncher.launchMifos();
loginPage.verifyPage();
HomePage homePage = loginPage.loginSuccessfullyUsingDefaultCredentials();
ClientsAndAccountsHomepage clientsAndAccountsPage = homePage.navigateToClientsAndAccountsUsingHeaderTab();
return clientsAndAccountsPage.navigateToCreateLoanAccountUsingLeftMenu();
}
}