/*
* 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.group;
import org.mifos.test.acceptance.framework.AppLauncher;
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.admin.AdminPage;
import org.mifos.test.acceptance.framework.admin.DefineAcceptedPaymentTypesPage;
import org.mifos.test.acceptance.framework.customer.CustomerChangeStatusPage;
import org.mifos.test.acceptance.framework.customer.CustomerChangeStatusPreviewPage;
import org.mifos.test.acceptance.framework.group.CancelReason;
import org.mifos.test.acceptance.framework.group.CenterSearchTransferGroupPage;
import org.mifos.test.acceptance.framework.group.ConfirmCenterMembershipPage;
import org.mifos.test.acceptance.framework.group.CreateGroupConfirmationPage;
import org.mifos.test.acceptance.framework.group.CreateGroupEntryPage;
import org.mifos.test.acceptance.framework.group.CreateGroupEntryPage.CreateGroupSubmitParameters;
import org.mifos.test.acceptance.framework.group.CreateGroupSearchPage;
import org.mifos.test.acceptance.framework.group.EditCustomerStatusParameters;
import org.mifos.test.acceptance.framework.group.GroupStatus;
import org.mifos.test.acceptance.framework.group.GroupViewDetailsPage;
import org.mifos.test.acceptance.framework.loan.ApplyPaymentPage;
import org.mifos.test.acceptance.framework.loan.QuestionResponseParameters;
import org.mifos.test.acceptance.framework.login.LoginPage;
import org.mifos.test.acceptance.framework.questionnaire.Choice;
import org.mifos.test.acceptance.framework.questionnaire.CreateQuestionGroupPage;
import org.mifos.test.acceptance.framework.questionnaire.CreateQuestionGroupParameters;
import org.mifos.test.acceptance.framework.questionnaire.CreateQuestionPage;
import org.mifos.test.acceptance.framework.questionnaire.CreateQuestionParameters;
import org.mifos.test.acceptance.framework.questionnaire.QuestionResponsePage;
import org.mifos.test.acceptance.framework.questionnaire.QuestionnairePage;
import org.mifos.test.acceptance.framework.questionnaire.ViewQuestionResponseDetailPage;
import org.mifos.test.acceptance.framework.search.SearchResultsPage;
import org.mifos.test.acceptance.framework.testhelpers.GroupTestHelper;
import org.mifos.test.acceptance.framework.testhelpers.NavigationHelper;
import org.mifos.test.acceptance.framework.testhelpers.QuestionGroupTestHelper;
import org.mifos.test.acceptance.util.StringUtil;
import org.springframework.test.context.ContextConfiguration;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import static java.util.Arrays.asList;
@SuppressWarnings("PMD")
@ContextConfiguration(locations = {"classpath:ui-test-context.xml"})
public class GroupTest extends UiTestCaseBase {
private AppLauncher appLauncher;
private Random random;
private NavigationHelper navigationHelper;
private static final String NUMBER = "Number";
private static final String SMART_SELECT = "Smart Select";
private QuestionGroupTestHelper questionGroupTestHelper;
private GroupTestHelper groupTestHelper;
@Override
@SuppressWarnings("PMD.SignatureDeclareThrowsException") // one of the dependent methods throws Exception
@BeforeMethod(alwaysRun = true)
public void setUp() throws Exception {
super.setUp();
appLauncher = new AppLauncher(selenium);
navigationHelper = new NavigationHelper(selenium);
random = new Random();
groupTestHelper = new GroupTestHelper(selenium);
questionGroupTestHelper = new QuestionGroupTestHelper(selenium);
}
@AfterMethod(alwaysRun = true)
public void logOut() {
(new MifosPage(selenium)).logout();
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
// http://mifosforge.jira.com/browse/MIFOSTEST-247
@Test(singleThreaded = true, groups = {"group", "acceptance", "ui", "no_db_unit"})
public void verifyAcceptedPaymentTypesForGroup() throws Exception {
//When
GroupTestHelper groupTestHelper = new GroupTestHelper(selenium);
CreateGroupSubmitParameters groupParams = new CreateGroupSubmitParameters();
groupParams.setGroupName("TestGroup123456");
groupTestHelper.createNewGroup("Default Center", groupParams);
AdminPage adminPage = navigationHelper.navigateToAdminPage();
DefineAcceptedPaymentTypesPage defineAcceptedPaymentTypesPage = adminPage.navigateToDefineAcceptedPaymentType();
defineAcceptedPaymentTypesPage.addLoanFeesPaymentType(DefineAcceptedPaymentTypesPage.CHEQUE);
adminPage = navigationHelper.navigateToAdminPage();
defineAcceptedPaymentTypesPage = adminPage.navigateToDefineAcceptedPaymentType();
defineAcceptedPaymentTypesPage.addLoanFeesPaymentType(DefineAcceptedPaymentTypesPage.VOUCHER);
ApplyPaymentPage applyPaymentPage = navigationHelper.navigateToGroupViewDetailsPage("TestGroup123456")
.navigateToViewGroupChargesDetailPage().navigateToApplyPayments();
//Then
applyPaymentPage.verifyModeOfPayments();
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException") // one of the dependent methods throws Exception
@Test(singleThreaded = true, groups = {"group", "acceptance", "ui", "no_db_unit"})
public void testHitGroupDashboard() throws Exception {
LoginPage loginPage = appLauncher.launchMifos();
HomePage homePage = loginPage.loginSuccessfullyUsingDefaultCredentials();
SearchResultsPage searchResultsPage = homePage.search("Default Group");
searchResultsPage.verifyPage();
// click on any search result leading to a group dashboard
searchResultsPage.navigateToGroupViewDetailsPage("link=Default Group*");
}
@Test(singleThreaded = true, groups = {"group", "acceptance", "ui", "no_db_unit"})
@SuppressWarnings("PMD.SignatureDeclareThrowsException") // one of the dependent methods throws Exception
// http://mifosforge.jira.com/browse/MIFOSTEST-301
public void createGroupInPendingApprovalStateTest() throws Exception {
//When
CreateGroupEntryPage groupEntryPage = loginAndNavigateToNewGroupPage();
CreateGroupSubmitParameters formParameters = getGenericGroupFormParameters();
CreateGroupConfirmationPage confirmationPage = groupEntryPage.submitNewGroupForApproval(formParameters);
confirmationPage.verifyPage();
GroupViewDetailsPage groupDetailsPage = confirmationPage.navigateToGroupDetailsPage();
//Then
groupDetailsPage.verifyStatus("Application Pending*");
//When
CustomerChangeStatusPage customerChangeStatusPage = groupDetailsPage.navigateToEditGroupStatusPage();
EditCustomerStatusParameters editCustomerStatusParameters = new EditCustomerStatusParameters();
editCustomerStatusParameters.setGroupStatus(GroupStatus.ACTIVE);
editCustomerStatusParameters.setNote("test");
CustomerChangeStatusPreviewPage customerChangeStatusPreviewPage = customerChangeStatusPage.setChangeStatusParametersAndSubmit(editCustomerStatusParameters);
GroupViewDetailsPage detailsPage = customerChangeStatusPreviewPage.navigateToGroupDetailsPage();
//Then
detailsPage.verifyStatus("Active*");
}
@Test(singleThreaded = true, groups = {"group", "acceptance", "ui", "no_db_unit"})
// http://mifosforge.jira.com/browse/MIFOSTEST-300
@SuppressWarnings("PMD.SignatureDeclareThrowsException") // one of the dependent methods throws Exception
public void createGroupInPartialApplicationStateTest() throws Exception {
//When
CreateGroupEntryPage groupEntryPage = loginAndNavigateToNewGroupPage();
CreateGroupSubmitParameters formParameters = getGenericGroupFormParameters();
CreateGroupConfirmationPage confirmationPage = groupEntryPage.submitNewGroupForPartialApplication(formParameters);
confirmationPage.verifyPage();
GroupViewDetailsPage groupDetailsPage = confirmationPage.navigateToGroupDetailsPage();
//Then
groupDetailsPage.verifyStatus("Partial Application*");
//When
CustomerChangeStatusPage customerChangeStatusPage = groupDetailsPage.navigateToEditGroupStatusPage();
EditCustomerStatusParameters editCustomerStatusParameters = new EditCustomerStatusParameters();
editCustomerStatusParameters.setGroupStatus(GroupStatus.PENDING_APPROVAL);
editCustomerStatusParameters.setNote("test");
CustomerChangeStatusPreviewPage customerChangeStatusPreviewPage = customerChangeStatusPage.setChangeStatusParametersAndSubmit(editCustomerStatusParameters);
GroupViewDetailsPage detailsPage = customerChangeStatusPreviewPage.navigateToGroupDetailsPage();
//Then
detailsPage.verifyStatus("Application Pending Approval*");
}
@Test(singleThreaded = true, groups = {"group", "acceptance", "ui", "no_db_unit"})
@SuppressWarnings("PMD.SignatureDeclareThrowsException") // one of the dependent methods throws Exception
public void changeCenterMembership() throws Exception {
CreateGroupEntryPage groupEntryPage = loginAndNavigateToNewGroupPage();
CreateGroupSubmitParameters formParameters = getGenericGroupFormParameters();
CreateGroupConfirmationPage confirmationPage = groupEntryPage.submitNewGroupForApproval(formParameters);
confirmationPage.verifyPage();
GroupViewDetailsPage groupDetailsPage = confirmationPage.navigateToGroupDetailsPage();
CenterSearchTransferGroupPage centerSearchTransfer = groupDetailsPage.editCenterMembership();
centerSearchTransfer.verifyPage();
ConfirmCenterMembershipPage confirmMembership = centerSearchTransfer.search("WeeklyMeetingCenter");
confirmMembership.verifyPage();
groupDetailsPage = confirmMembership.submitMembershipChange();
groupDetailsPage.verifyLoanOfficer(" Loan officer: loan officer");
}
@Test(singleThreaded = true, groups = {"smoke", "group", "acceptance", "ui", "no_db_unit"})
@SuppressWarnings("PMD.SignatureDeclareThrowsException") // one of the dependent methods throws Exception
public void createGroupInPendingApprovalStateTestWithSurveys() throws Exception {
QuestionGroupTestHelper questionGroupTestHelper = new QuestionGroupTestHelper(selenium);
String questionGroupTitle = "QG1" + random.nextInt(100);
String question1 = "Nu_" + random.nextInt(100);
String question2 = "SS_" + random.nextInt(100);
List<Choice> choices = asList(new Choice("Choice1", asList("Tag1", "Tag2")), new Choice("Choice2", asList("Tag3", "Tag4")));
createQuestionGroupForCreateGroup(questionGroupTitle, question1, question2, choices);
CreateGroupEntryPage groupEntryPage = loginAndNavigateToNewGroupPage();
CreateGroupSubmitParameters formParameters = getGenericGroupFormParameters();
QuestionResponsePage questionResponsePage = groupEntryPage.submitNewGroupAndNavigateToQuestionResponsePage(formParameters);
questionResponsePage.verifyPage();
questionResponsePage.verifyNumericBoundsValidation("name=questionGroups[0].sectionDetails[0].questions[0].value", "1000", 10, 100, question1);
questionResponsePage.populateTextAnswer("name=questionGroups[0].sectionDetails[0].questions[0].value", "30");
questionResponsePage.populateSmartSelect("txtListSearch", getChoiceTags());
GroupViewDetailsPage groupViewDetailsPage = questionResponsePage.navigateToCreateGroupDetailsPage("Application Pending*");
ViewQuestionResponseDetailPage responsePage = groupViewDetailsPage.navigateToViewAdditionalInformationPage();
responsePage.verifyPage();
responsePage.verifyQuestionPresent(question1, "30");
responsePage.verifyQuestionPresent(question2, "Choice", "Choice2");
responsePage.navigateToDetailsPage();
questionGroupTestHelper.markQuestionGroupAsInactive(questionGroupTitle);
}
/**
* Verify when Pending Approval (Groups) is set to default(true);
* the system transitions the account to this state when creating new groups
* http://mifosforge.jira.com/browse/MIFOSTEST-210
*
* @throws Exception
*/
@Test(groups = {"group", "acceptance", "ui", "no_db_unit"})
@SuppressWarnings("PMD.SignatureDeclareThrowsException") // one of the dependent methods throws Exception
public void verifyPendingApprovalSetToDefault() throws Exception {
CreateGroupSubmitParameters groupParams = getGenericGroupFormParameters();
String centerName = "WeeklyMeetingCenter";
GroupViewDetailsPage groupViewDetailsPage = groupTestHelper.createNewGroup(centerName, groupParams);
groupViewDetailsPage.verifyStatus(GroupViewDetailsPage.STATUS_PENDING_APPROVAL);
}
/**
* Create group and change center membership for group
* http://mifosforge.jira.com/browse/MIFOSTEST-655
*
* @throws Exception
*/
@Test(groups = {"group", "acceptance", "ui", "no_db_unit"})
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
public void verifyChangeCenterMembership() throws Exception {
String centerName = "Default Center";
String newCenterName = "WeeklyMeetingCenter";
String groupName = "Group655";
CreateGroupSubmitParameters groupParams = getGenericGroupFormParameters();
groupParams.setGroupName(groupName);
EditCustomerStatusParameters groupStatusParams = new EditCustomerStatusParameters();
groupStatusParams.setNote("note");
GroupViewDetailsPage groupViewDetailsPage = groupTestHelper.createNewGroupPartialApplication(centerName, groupParams);
groupViewDetailsPage.verifyStatus(GroupViewDetailsPage.STATUS_PARTIAL_APPLICATION);
groupStatusParams.setGroupStatus(GroupStatus.PENDING_APPROVAL);
groupTestHelper.changeGroupStatus(groupName, groupStatusParams);
groupStatusParams.setGroupStatus(GroupStatus.ACTIVE);
groupViewDetailsPage = groupTestHelper.changeGroupStatus(groupName, groupStatusParams);
groupViewDetailsPage.verifyStatus(GroupViewDetailsPage.STATUS_ACTIVE);
groupViewDetailsPage = groupTestHelper.changeGroupCenterMembership(groupName, newCenterName);
groupViewDetailsPage.navigateToGroupsCenter(newCenterName);
}
@Test(singleThreaded = true, groups = {"group", "acceptance", "ui", "no_db_unit"}, enabled=true)
// http://mifosforge.jira.com/browse/MIFOSTEST-682
// questions dispear from database before this test (another test must delete questions)
// https://mifosforge.jira.com/browse/MIFOS-5850
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
public void createGroupWithQuestionGroup() throws Exception {
//Given
CreateQuestionGroupParameters questionGroupParams = new CreateQuestionGroupParameters();
questionGroupParams.setTitle("CreateGroupQG");
questionGroupParams.setAppliesTo("Create Group");
questionGroupParams.setAnswerEditable(true);
questionGroupParams.addExistingQuestion("Sec 1", "Date");
questionGroupParams.addExistingQuestion("Sec 1", "ToBeDisabled");
questionGroupParams.addExistingQuestion("Sec 2", "FreeText");
questionGroupParams.addExistingQuestion("Sec 2", "SingleSelect");
questionGroupTestHelper.createQuestionGroup(questionGroupParams);
CreateQuestionGroupParameters questionGroupParams2 = new CreateQuestionGroupParameters();
questionGroupParams2.setTitle("CreateGroupQG2");
questionGroupParams2.setAppliesTo("Create Group");
questionGroupParams2.setAnswerEditable(true);
questionGroupParams2.addExistingQuestion("Sec 1", "DateQuestion");
questionGroupParams2.addExistingQuestion("Sec 1", "Number");
questionGroupParams2.addExistingQuestion("Sec 2", "MultiSelect");
questionGroupParams2.addExistingQuestion("Sec 2", "Text");
questionGroupTestHelper.createQuestionGroup(questionGroupParams2);
CreateGroupSubmitParameters groupParams = new CreateGroupSubmitParameters();
groupParams.setGroupName("GroupTest");
String centerName = "Default Center";
String qG_1 = "CreateGroupQG";
String qG_2 = "CreateGroupQG2";
QuestionResponseParameters responseParams = getQuestionResponseParametersForGroupCreation("answer1");
QuestionResponseParameters responseParams2 = getQuestionResponseParametersForGroupCreation("answer2");
List<CreateQuestionParameters> questionsList = new ArrayList<CreateQuestionParameters>();
questionsList.add(newFreeTextQuestionParameters("new question 1"));
questionsList.add(newFreeTextQuestionParameters("new question 2"));
questionsList.add(newFreeTextQuestionParameters("new question 3"));
String[] newActiveQuestions = {"new question 1", "new question 2"};
String[] deactivateArray = {"new question 3", "SingleSelect", "ToBeDisabled"};
String[] deactivatedGroupArray = {"MultiSelect", "DateQuestion"};
List<String> deactivateList = Arrays.asList(deactivateArray);
//When / Then
GroupViewDetailsPage groupViewDetailsPage = groupTestHelper.createGroupWithQuestionGroupsEdited(
groupParams, centerName, responseParams, responseParams2);
groupViewDetailsPage.navigateToViewAdditionalInformationPage().navigateBack();
QuestionGroupTestHelper questionTestHelper = new QuestionGroupTestHelper(selenium);
questionTestHelper.addNewQuestionsToQuestionGroup(qG_1, questionsList);
questionTestHelper.markQuestionsAsInactive(deactivateList);
questionTestHelper.markQuestionGroupAsInactive(qG_2);
QuestionResponsePage responsePage = groupTestHelper.navigateToQuestionResponsePageWhenCreatingGroup(
groupParams, centerName);
responsePage.verifyQuestionsDoesnotappear(deactivateArray);
responsePage.verifyQuestionsDoesnotappear(deactivatedGroupArray);
responsePage.verifyQuestionsExists(newActiveQuestions);
groupViewDetailsPage = navigationHelper.navigateToGroupViewDetailsPage(groupParams.getGroupName());
ViewQuestionResponseDetailPage responseDetailsPage = groupViewDetailsPage
.navigateToViewAdditionalInformationPage();
responseDetailsPage.verifyQuestionsDoesnotappear(deactivateArray);
QuestionnairePage questionnairePage = responseDetailsPage.navigateToEditSection("0");
questionnairePage.verifyField("details[0].sectionDetails[0].questions[0].value", "");
questionnairePage.verifyField("details[0].sectionDetails[0].questions[1].value", "");
questionGroupTestHelper.markQuestionGroupAsInactive(qG_1);
questionTestHelper.markQuestionAsActive("SingleSelect");
questionTestHelper.markQuestionAsActive("ToBeDisabled");
}
private QuestionResponseParameters getQuestionResponseParametersForGroupCreation(String answer) {
QuestionResponseParameters responseParams = new QuestionResponseParameters();
responseParams.addTextAnswer("questionGroups[0].sectionDetails[0].questions[0].value", "24/01/2011");
//responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[1].valuesAsArray", "first");
responseParams.addTextAnswer("questionGroups[0].sectionDetails[1].questions[0].value", "text");
//responseParams.addTextAnswer("questionGroups[0].sectionDetails[1].questions[0].value", "24/01/2011");
//responseParams.addTextAnswer("questionGroups[0].sectionDetails[1].questions[0].value", "text2");
//responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[1].questions[1].value", "red");
//responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[1].questions[2].valuesAsArray", "february:feb");
responseParams.addTextAnswer("questionGroups[1].sectionDetails[0].questions[0].value", "24/01/2011");
//responseParams.addSingleSelectAnswer("questionGroups[1].sectionDetails[0].questions[1].valuesAsArray", "first");
responseParams.addTextAnswer("questionGroups[1].sectionDetails[0].questions[1].value", "10");
responseParams.addSingleSelectAnswer("questionGroups[1].sectionDetails[1].questions[0].valuesAsArray", "one");
responseParams.addSingleSelectAnswer("questionGroups[1].sectionDetails[1].questions[0].valuesAsArray", "four");
responseParams.addTextAnswer("questionGroups[1].sectionDetails[1].questions[1].value", "text3");
//responseParams.addSingleSelectAnswer("questionGroups[1].sectionDetails[1].questions[1].value", "good");
//responseParams.addSingleSelectAnswer("questionGroups[1].sectionDetails[1].questions[0].valuesAsArray", "february:feb");
//responseParams.addSingleSelectAnswer("questionGroups[1].sectionDetails[1].questions[1].value", "good");
//responseParams.addSingleSelectAnswer("questionGroups[1].sectionDetails[1].questions[2].valuesAsArray", "answer2:2");
return responseParams;
}
private CreateQuestionParameters newFreeTextQuestionParameters(String text) {
CreateQuestionParameters questionParams = new CreateQuestionParameters();
questionParams.setText(text);
questionParams.setType(CreateQuestionParameters.TYPE_FREE_TEXT);
return questionParams;
}
private Map<String, String> getChoiceTags() {
Map<String, String> tags = new HashMap<String, String>();
tags.put("Tag1", "Choice1");
tags.put("Tag3", "Choice2");
return tags;
}
private void createQuestionGroupForCreateGroup(String questionGroupTitle, String question1, String question2, List<Choice> choices) {
AdminPage adminPage = navigationHelper.navigateToAdminPage();
CreateQuestionPage createQuestionPage = adminPage.navigateToCreateQuestionPage();
createQuestionPage.addQuestion(getCreateQuestionParams(question1, NUMBER, 10, 100, null));
createQuestionPage.addQuestion(getCreateQuestionParams(question2, SMART_SELECT, null, null, choices));
adminPage = createQuestionPage.submitQuestions();
CreateQuestionGroupPage createQuestionGroupPage = adminPage.navigateToCreateQuestionGroupPage();
CreateQuestionGroupParameters parameters = getCreateQuestionGroupParameters(questionGroupTitle, asList(question1, question2));
for (String section : parameters.getExistingQuestions().keySet()) {
createQuestionGroupPage.addExistingQuestion(section, parameters.getExistingQuestions().get(section));
}
createQuestionGroupPage.markEveryOtherQuestionsMandatory(asList(question1));
createQuestionGroupPage.submit(parameters);
}
private CreateQuestionParameters getCreateQuestionParams(String title, String type, Integer numericMin, Integer numericMax, List<Choice> choices) {
CreateQuestionParameters parameters = new CreateQuestionParameters();
parameters.setText(title);
parameters.setType(type);
parameters.setChoices(choices);
parameters.setNumericMin(numericMin);
parameters.setNumericMax(numericMax);
return parameters;
}
private CreateQuestionGroupParameters getCreateQuestionGroupParameters(String questionGroupTitle, List<String> questions) {
CreateQuestionGroupParameters parameters = new CreateQuestionGroupParameters();
parameters.setTitle(questionGroupTitle);
parameters.setAppliesTo("Create Group");
parameters.setAnswerEditable(true);
for (String question : questions) {
parameters.addExistingQuestion("Default Section", question);
}
return parameters;
}
private CreateGroupEntryPage loginAndNavigateToNewGroupPage() {
LoginPage loginPage = appLauncher.launchMifos();
HomePage homePage = loginPage.loginSuccessfullyUsingDefaultCredentials();
String centerName = "Default Center";
CreateGroupSearchPage groupSearchPage = homePage.navigateToCreateNewGroupSearchPage();
groupSearchPage.verifyPage();
return groupSearchPage.searchAndNavigateToCreateGroupPage(centerName);
}
private CreateGroupSubmitParameters getGenericGroupFormParameters() {
CreateGroupSubmitParameters formParameters = new CreateGroupSubmitParameters();
formParameters.setGroupName("groupTest" + StringUtil.getRandomString(6));
formParameters.setRecruitedBy("Bagonza Wilson");
formParameters.setTrainedDateDay("25");
formParameters.setTrainedDateMonth("03");
formParameters.setTrainedDateYear("1999");
formParameters.setExternalId("external12345");
formParameters.setAddressOne("address one: 4321 Pine Street");
formParameters.setAddressTwo("address two: P.O. Box 99");
formParameters.setAddressThree("address three: suite 322");
formParameters.setCity("Circuit City");
formParameters.setState("Garden State");
formParameters.setCountry("Elbonia");
formParameters.setPostalCode("33AB3");
formParameters.setTelephone("88855533322");
return formParameters;
}
//http://mifosforge.jira.com/browse/MIFOS-4643
/**
* Creates new group, tests status changes and verifies blacklisted flag.
* @see http://mifosforge.jira.com/browse/MIFOS-4643
*/
@Test(enabled=true,groups = {"group", "acceptance", "ui", "no_db_unit"})
public void changeGroupStatusAndVerifyBlacklistedFlag(){
String groupStatusNote = "GROUP TEST FOR GROUP";
String center="Default Center";
String fullGroupName="testGroup"+StringUtil.getRandomString(8);
//create test group
CreateGroupSubmitParameters groupParams = new CreateGroupSubmitParameters();
groupParams.setGroupName(fullGroupName);
GroupViewDetailsPage detailsPage=groupTestHelper.createNewGroupPartialApplication(center, groupParams);
//verify with starting status
EditCustomerStatusParameters statusParameters=new EditCustomerStatusParameters();
statusParameters.setGroupStatus(GroupStatus.PARTIAL);
statusParameters.setNote(groupStatusNote+fullGroupName); //note will be set only once
detailsPage.verifyStatus(statusParameters);
//change status to Cancelled with reason Rejected and check
changeStatusParameters(statusParameters,GroupStatus.CANCELLED,CancelReason.GROUP_REJECTED);
detailsPage = changeGroupStatusToCancelled(fullGroupName,statusParameters);
detailsPage.verifyStatus(statusParameters);
//change status back to Partial Application and verify
detailsPage=changeGroupStatusBackToPartial(fullGroupName,statusParameters);
detailsPage.verifyStatus(statusParameters);
//change status to Cancelled with Reason blacklisted
changeStatusParameters(statusParameters, GroupStatus.CANCELLED, CancelReason.GROUP_BLACKLISTED);
detailsPage=changeGroupStatusToCancelledAndVerifyFlag(fullGroupName,
statusParameters);
//sequence of setting group status to partial, verifying blackflag, changing status to cancelled and verifying again
CancelReason reasonArray[]={CancelReason.GROUP_DUPLICATE, CancelReason.GROUP_OTHER, CancelReason.GROUP_REJECTED,
CancelReason.GROUP_WITHDRAW, CancelReason.GROUP_BLACKLISTED};
for (CancelReason cancelReason : reasonArray) {
detailsPage=changeGroupStatusToPartialAndVerifyFlag(fullGroupName, statusParameters);
changeStatusParameters(statusParameters, GroupStatus.CANCELLED, cancelReason);
changeGroupStatusToCancelledAndVerifyFlag(fullGroupName,statusParameters);
}
}
private GroupViewDetailsPage changeGroupStatusToCancelledAndVerifyFlag(
String fullGroupName, EditCustomerStatusParameters statusParameters) {
GroupViewDetailsPage detailsPage;
int expectedNumberOfFlags = 1;
detailsPage=changeGroupStatusToCancelled(fullGroupName, statusParameters);
detailsPage.verifyStatus(statusParameters);
detailsPage.verifyNumberOfBlackFlags(expectedNumberOfFlags);
return detailsPage;
}
private GroupViewDetailsPage changeGroupStatusToPartialAndVerifyFlag(String fullGroupName,
EditCustomerStatusParameters statusParameters) {
GroupViewDetailsPage detailsPage;
int expectedNumberOfFlags = 1;
detailsPage=changeGroupStatusBackToPartial(fullGroupName, statusParameters);
detailsPage.verifyStatus(statusParameters);
detailsPage.verifyNumberOfBlackFlags(expectedNumberOfFlags);
return detailsPage;
}
private GroupViewDetailsPage changeGroupStatusToCancelled(String fullGroupName,
EditCustomerStatusParameters statusParameters) {
GroupViewDetailsPage detailsPage;
detailsPage=groupTestHelper.changeGroupStatus(fullGroupName, statusParameters);
return detailsPage;
}
private GroupViewDetailsPage changeGroupStatusBackToPartial(String fullGroupName,
EditCustomerStatusParameters statusParameters) {
statusParameters.setGroupStatus(GroupStatus.PARTIAL);
return groupTestHelper.changeGroupStatus(fullGroupName, statusParameters);
}
private void changeStatusParameters(EditCustomerStatusParameters statusParameters, GroupStatus status,
CancelReason reason) {
statusParameters.setGroupStatus(status);
if(status.equals(GroupStatus.CANCELLED)){
statusParameters.setCancelReason(reason);
}
}
}