package org.mifos.test.acceptance.center;
import org.joda.time.DateTime;
import org.mifos.test.acceptance.framework.MifosPage;
import org.mifos.test.acceptance.framework.UiTestCaseBase;
import org.mifos.test.acceptance.framework.center.CreateCenterEnterDataPage;
import org.mifos.test.acceptance.framework.center.MeetingParameters;
import org.mifos.test.acceptance.framework.group.CreateGroupEntryPage;
import org.mifos.test.acceptance.framework.loan.CreateLoanAccountEntryPage;
import org.mifos.test.acceptance.framework.office.OfficeParameters;
import org.mifos.test.acceptance.framework.testhelpers.CenterTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.GroupTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.LoanTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.NavigationHelper;
import org.mifos.test.acceptance.framework.testhelpers.OfficeHelper;
import org.mifos.test.acceptance.framework.testhelpers.UserHelper;
import org.mifos.test.acceptance.framework.user.CreateUserParameters;
import org.mifos.test.acceptance.remote.DateTimeUpdaterRemoteTestingService;
import org.mifos.test.acceptance.remote.InitializeApplicationRemoteTestingService;
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 = { "center", "acceptance", "ui", "no_db_unit"})
public class CenterMeetingTest extends UiTestCaseBase{
private String centerName;
private String groupName;
private String firstName;
private String lastName;
private static final String loanProductName = "WeeklyGroupFlatLoanWithOnetimeFee";
@Autowired
private ApplicationDatabaseOperation databaseOperation;
@Override
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
// one of the dependent methods throws Exception
@BeforeMethod(alwaysRun = true)
public void setUp() throws Exception {
super.setUp();
new InitializeApplicationRemoteTestingService().reinitializeApplication(selenium);
}
@AfterMethod
public void logOut() {
(new MifosPage(selenium)).logout();
}
private void prepareGroupForTest() {
GroupTestHelper groupHelper = new GroupTestHelper(selenium);
CreateGroupEntryPage.CreateGroupSubmitParameters groupParams =
new CreateGroupEntryPage.CreateGroupSubmitParameters();
groupName = StringUtil.getRandomString(8);
groupParams.setGroupName(groupName);
groupParams.setRecruitedBy(firstName + " " + lastName);
groupHelper.createNewGroup(centerName, groupParams);
groupHelper.activateGroup(groupName);
new NavigationHelper(selenium).navigateToHomePage();
}
private void prepareCenterForTest(MeetingParameters meeting) {
OfficeHelper officeHelper = new OfficeHelper(selenium);
String officeName = "Office" + StringUtil.getRandomString(10);
OfficeParameters officeParameters = new OfficeParameters();
officeParameters.setOfficeName(officeName);
officeParameters.setOfficeType(OfficeParameters.BRANCH_OFFICE);
officeParameters.setShortName(StringUtil.getRandomString(4));
officeParameters.setParentOffice("Head Office(Mifos HO )");
officeHelper.createOffice(officeParameters);
UserHelper userHelper = new UserHelper(selenium);
CreateUserParameters userParameters = new CreateUserParameters();
firstName = StringUtil.getRandomString(6);
lastName = StringUtil.getRandomString(6);
userParameters.setFirstName(firstName);
userParameters.setLastName(lastName);
userParameters.setDateOfBirthDD("11");
userParameters.setDateOfBirthMM("11");
userParameters.setDateOfBirthYYYY("1950");
String userName = StringUtil.getRandomString(6);
String password = StringUtil.getRandomString(6);
userParameters.setPassword(password);
userParameters.setPasswordRepeat(password);
userParameters.setUserName(userName);
userParameters.setUserLevel(CreateUserParameters.LOAN_OFFICER);
userParameters.setGender(CreateUserParameters.MALE);
userHelper.createUser(userParameters, officeName);
CenterTestHelper centerHelper = new CenterTestHelper(selenium);
CreateCenterEnterDataPage.SubmitFormParameters formParameters =
new CreateCenterEnterDataPage.SubmitFormParameters();
centerName = "Center" + StringUtil.getRandomString(8);
formParameters.setCenterName(centerName);
formParameters.setLoanOfficer(firstName + " " + lastName);
formParameters.setMeeting(meeting);
centerHelper.createCenter(formParameters, officeName);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
private void setTime(DateTime time) throws Exception {
DateTimeUpdaterRemoteTestingService dateTimeUpdaterRemoteTestingService =
new DateTimeUpdaterRemoteTestingService(selenium);
dateTimeUpdaterRemoteTestingService.setDateTime(time);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
private void verifyDefaultDisburstmentDateWithDefaultMeetingStartDate(int lsim) throws Exception {
databaseOperation.updateLSIM(lsim);
DateTime time = new DateTime(2012, 10, 19, 1, 0, 0, 0);
setTime(time);
MeetingParameters meeting = new MeetingParameters();
meeting.setMeetingPlace("centerTestMeetingPlace" + StringUtil.getRandomString(5));
meeting.setWeekFrequency("1");
meeting.setWeekDay(MeetingParameters.WeekDay.MONDAY);
meeting.setMeetingStartDate(null);
prepareCenterForTest(meeting);
prepareGroupForTest();
LoanTestHelper loanHelper = new LoanTestHelper(selenium);
CreateLoanAccountEntryPage loanEntryPage =
loanHelper.navigateToCreateLoanAccountEntryPageWithoutLogout(groupName, loanProductName);
loanEntryPage.verifyDisbsursalDate("22", "10", "2012");
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithDefaultMeetingStartDateWhenLSIMIsDisabled() throws Exception {
verifyDefaultDisburstmentDateWithDefaultMeetingStartDate(0);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithDefaultMeetingStartDateWhenLSIMIsEnabled() throws Exception {
verifyDefaultDisburstmentDateWithDefaultMeetingStartDate(1);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
private void verifyDefaultDisburstmentDateWithTodayMeetingStartDate(int lsim) throws Exception {
databaseOperation.updateLSIM(lsim);
DateTime time = new DateTime(2012, 10, 19, 1, 0, 0, 0);
setTime(time);
MeetingParameters meeting = new MeetingParameters();
meeting.setMeetingPlace("centerTestMeetingPlace" + StringUtil.getRandomString(5));
meeting.setWeekFrequency("1");
meeting.setWeekDay(MeetingParameters.WeekDay.MONDAY);
meeting.setMeetingStartDate("19/10/2012");
prepareCenterForTest(meeting);
prepareGroupForTest();
LoanTestHelper loanHelper = new LoanTestHelper(selenium);
CreateLoanAccountEntryPage loanEntryPage =
loanHelper.navigateToCreateLoanAccountEntryPageWithoutLogout(groupName, loanProductName);
loanEntryPage.verifyDisbsursalDate("22", "10", "2012");
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithTodayMeetingStartDateWhenLSIMIsDisabled() throws Exception {
verifyDefaultDisburstmentDateWithTodayMeetingStartDate(0);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithTodayMeetingStartDateWhenLSIMIsEnabled() throws Exception {
verifyDefaultDisburstmentDateWithTodayMeetingStartDate(1);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
private void verifyDefaultDisburstmentDateWithTodayMeetingStartDateAndCurrentWeekDay(int lsim) throws Exception {
databaseOperation.updateLSIM(lsim);
DateTime time = new DateTime(2012, 10, 19, 1, 0, 0, 0);
setTime(time);
MeetingParameters meeting = new MeetingParameters();
meeting.setMeetingPlace("centerTestMeetingPlace" + StringUtil.getRandomString(5));
meeting.setWeekFrequency("1");
meeting.setWeekDay(MeetingParameters.WeekDay.FRIDAY);
meeting.setMeetingStartDate("19/10/2012");
prepareCenterForTest(meeting);
prepareGroupForTest();
LoanTestHelper loanHelper = new LoanTestHelper(selenium);
CreateLoanAccountEntryPage loanEntryPage =
loanHelper.navigateToCreateLoanAccountEntryPageWithoutLogout(groupName, loanProductName);
loanEntryPage.verifyDisbsursalDate("19", "10", "2012");
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithTodayMeetingStartDateAndCurrentWeekDayWhenLSIMIsDisabled()
throws Exception {
verifyDefaultDisburstmentDateWithTodayMeetingStartDateAndCurrentWeekDay(0);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithTodayMeetingStartDateAndCurrentWeekDayWhenLSIMIsEnabled()
throws Exception {
verifyDefaultDisburstmentDateWithTodayMeetingStartDateAndCurrentWeekDay(1);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
private void verifyDefaultDisburstmentDateWithMeetingStartDateInThePast(int lsim) throws Exception {
databaseOperation.updateLSIM(lsim);
DateTime time = new DateTime(2012, 10, 19, 1, 0, 0, 0);
setTime(time);
MeetingParameters meeting = new MeetingParameters();
meeting.setMeetingPlace("centerTestMeetingPlace" + StringUtil.getRandomString(5));
meeting.setWeekFrequency("1");
meeting.setWeekDay(MeetingParameters.WeekDay.MONDAY);
meeting.setMeetingStartDate("10/10/2000");
prepareCenterForTest(meeting);
prepareGroupForTest();
LoanTestHelper loanHelper = new LoanTestHelper(selenium);
CreateLoanAccountEntryPage loanEntryPage =
loanHelper.navigateToCreateLoanAccountEntryPageWithoutLogout(groupName, loanProductName);
loanEntryPage.verifyDisbsursalDate("22", "10", "2012");
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithMeetingStartDateInThePastWhenLSIMIsDisabled() throws Exception {
verifyDefaultDisburstmentDateWithMeetingStartDateInThePast(0);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithMeetingStartDateInThePastWhenLSIMIsEnabled() throws Exception {
verifyDefaultDisburstmentDateWithMeetingStartDateInThePast(1);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
private void verifyDefaultDisburstmentDateWithMeetingStartDateInTheFuture(int lsim) throws Exception {
databaseOperation.updateLSIM(lsim);
DateTime time = new DateTime(2012, 10, 19, 1, 0, 0, 0);
setTime(time);
MeetingParameters meeting = new MeetingParameters();
meeting.setMeetingPlace("centerTestMeetingPlace" + StringUtil.getRandomString(5));
meeting.setWeekFrequency("1");
meeting.setWeekDay(MeetingParameters.WeekDay.WEDNESDAY);
meeting.setMeetingStartDate("25/10/2012");
prepareCenterForTest(meeting);
prepareGroupForTest();
LoanTestHelper loanHelper = new LoanTestHelper(selenium);
CreateLoanAccountEntryPage loanEntryPage =
loanHelper.navigateToCreateLoanAccountEntryPageWithoutLogout(groupName, loanProductName);
loanEntryPage.verifyDisbsursalDate("31", "10", "2012");
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithMeetingStartDateInTheFutureWhenLSIMIsDisabled() throws Exception {
verifyDefaultDisburstmentDateWithMeetingStartDateInTheFuture(0);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithMeetingStartDateInTheFutureWhenLSIMIsEnabled() throws Exception {
verifyDefaultDisburstmentDateWithMeetingStartDateInTheFuture(1);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
private void verifyDefaultDisburstmentDateWithMeetingStartDateInTheFutureWithSameWeekDays(int lsim) throws Exception {
databaseOperation.updateLSIM(lsim);
DateTime time = new DateTime(2012, 10, 19, 1, 0, 0, 0);
setTime(time);
MeetingParameters meeting = new MeetingParameters();
meeting.setMeetingPlace("centerTestMeetingPlace" + StringUtil.getRandomString(5));
meeting.setWeekFrequency("1");
meeting.setWeekDay(MeetingParameters.WeekDay.WEDNESDAY);
meeting.setMeetingStartDate("31/10/2012");
prepareCenterForTest(meeting);
prepareGroupForTest();
LoanTestHelper loanHelper = new LoanTestHelper(selenium);
CreateLoanAccountEntryPage loanEntryPage =
loanHelper.navigateToCreateLoanAccountEntryPageWithoutLogout(groupName, loanProductName);
loanEntryPage.verifyDisbsursalDate("31", "10", "2012");
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithMeetingStartDateInTheFutureWithSameWeekDaysWhenLSIMIsDisabled()
throws Exception {
verifyDefaultDisburstmentDateWithMeetingStartDateInTheFutureWithSameWeekDays(0);
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
@Test
public void verifyDefaultDisburstmentDateWithMeetingStartDateInTheFutureWithSameWeekDaysWhenLSIMIsEnabled()
throws Exception {
verifyDefaultDisburstmentDateWithMeetingStartDateInTheFutureWithSameWeekDays(1);
}
}