/* * 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.framework.testhelpers; import com.thoughtworks.selenium.Selenium; import org.mifos.test.acceptance.framework.account.EditAccountStatusParameters; import org.mifos.test.acceptance.framework.admin.AdminPage; import org.mifos.test.acceptance.framework.center.CenterViewDetailsPage; import org.mifos.test.acceptance.framework.client.ClientViewDetailsPage; import org.mifos.test.acceptance.framework.group.GroupViewDetailsPage; import org.mifos.test.acceptance.framework.loan.AttachSurveyPage; 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.loan.LoanAccountPage; import org.mifos.test.acceptance.framework.loan.QuestionResponseParameters; import org.mifos.test.acceptance.framework.office.CreateOfficePreviewDataPage; import org.mifos.test.acceptance.framework.questionnaire.AttachQuestionGroupParameters; 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.EditQuestionGroupPage; import org.mifos.test.acceptance.framework.questionnaire.EditQuestionPage; import org.mifos.test.acceptance.framework.questionnaire.QuestionDetailPage; import org.mifos.test.acceptance.framework.questionnaire.QuestionGroupDetailPage; import org.mifos.test.acceptance.framework.questionnaire.ViewQuestionResponseDetailPage; import org.mifos.test.acceptance.framework.questionnaire.QuestionResponsePage; import org.mifos.test.acceptance.framework.questionnaire.QuestionnairePage; import org.mifos.test.acceptance.framework.questionnaire.ViewAllQuestionGroupsPage; import org.mifos.test.acceptance.framework.questionnaire.ViewAllQuestionsPage; import org.mifos.test.acceptance.framework.questionnaire.QuestionGroupResponsePage; import org.mifos.test.acceptance.framework.savings.SavingsAccountDetailPage; import org.testng.Assert; import java.util.List; import java.util.Map; public class QuestionGroupTestHelper { private final NavigationHelper navigationHelper; private final Selenium selenium; public QuestionGroupTestHelper(Selenium selenium) { super(); this.navigationHelper = new NavigationHelper(selenium); this.selenium = selenium; } public void createQuestionGroup(CreateQuestionGroupParameters createQuestionGroupParameters) { AdminPage adminPage = navigationHelper.navigateToAdminPage(); CreateQuestionGroupPage createQuestionGroupPage = adminPage.navigateToCreateQuestionGroupPage(); for (String section : createQuestionGroupParameters.getExistingQuestions().keySet()) { createQuestionGroupPage.addExistingQuestion(section, createQuestionGroupParameters.getExistingQuestions().get(section)); } for (String section : createQuestionGroupParameters.getNewQuestions().keySet()){ createQuestionGroupPage.setSection(section); for(CreateQuestionParameters createQuestionParameters : createQuestionGroupParameters.getNewQuestions().get(section)){ createQuestionGroupPage.addNewQuestion(createQuestionParameters); } } createQuestionGroupPage.submit(createQuestionGroupParameters); } public QuestionGroupDetailPage changeAppliesTo(String questionGroup, String[] eventList){ EditQuestionGroupPage editQuestionGroupPage = naviagateToEditQuestionGroup(questionGroup); return editQuestionGroupPage.changeAppliesTo(eventList); } public void validatePageBlankMandatoryField() { CreateQuestionGroupPage createQuestionGroupPage = navigateToCreateQuestionGroupPage(); createQuestionGroupPage.submit(); String error = "Please specify Question Group title"; createQuestionGroupPage.verifyTextPresent(error, "No text <"+ error +"> present on the page"); error = "Please add at least one section"; createQuestionGroupPage.verifyTextPresent(error, "No text <"+ error +"> present on the page"); error = "Please choose a valid 'Applies To' value"; createQuestionGroupPage.verifyTextPresent(error, "No text <"+ error +"> present on the page"); createQuestionGroupPage.cancel(); Assert.assertEquals(selenium.getAttribute("page.id@title"), AdminPage.PAGE_ID); } public void validateQuestionGroupTitle(List<String> titles) { navigationHelper.navigateToAdminPage().navigateToCreateQuestionGroupPage(); for(String title : titles) { selenium.type("title", title); Assert.assertEquals(selenium.getValue("title"), title); } } public ClientViewDetailsPage attachQuestionGroup(String clientName, String questionGroupTitle, List<String> sections, Map<String,String> answers) { AttachSurveyPage attachSurveyPage = navigationHelper.navigateToClientViewDetailsPage(clientName).navigateToAttachSurveyPage(); QuestionnairePage questionnairePage = attachSurveyPage.selectSurvey(questionGroupTitle); for(String section: sections) { questionnairePage.verifyTextPresent(section, clientName); } for(String question: answers.keySet()) { questionnairePage.setResponse(question, answers.get(question)); } return (ClientViewDetailsPage)questionnairePage.submit(); } public CenterViewDetailsPage attachQuestionGroupToCenter(AttachQuestionGroupParameters attachParams) { return (CenterViewDetailsPage) navigationHelper .navigateToCenterViewDetailsPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .verifyNoneSelected() .selectSurvey(attachParams.getQuestionGroupName()) .verifyEmptyTextQuestionResponses(attachParams.getTextResponses()) .verifyEmptyCheckQuestionResponses(attachParams.getCheckResponses()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToCenterViewDetailsPage(); } public CenterViewDetailsPage editQuestionGroupResponsesInCenter(AttachQuestionGroupParameters attachParams) { CenterViewDetailsPage centerViewDetailsPage = (CenterViewDetailsPage) navigationHelper .navigateToCenterViewDetailsPage(attachParams.getTarget()) .navigateToLatestViewQuestionResponseDetailPage(attachParams.getQuestionGroupName()) .navigateToEditSection("0") .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToCenterViewDetailsPage(); ViewQuestionResponseDetailPage viewQuestionResponseDetailPage = centerViewDetailsPage.navigateToLatestViewQuestionResponseDetailPage(attachParams.getQuestionGroupName()); viewQuestionResponseDetailPage.verifyQuestionsAndAnswers(attachParams); viewQuestionResponseDetailPage.navigateBack(); return new CenterViewDetailsPage(selenium); } public CenterViewDetailsPage verifyErrorsWhileAttachingQuestionGroupToCenter(AttachQuestionGroupParameters attachParams) { QuestionnairePage questionnairePage = (QuestionnairePage) navigationHelper .navigateToCenterViewDetailsPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .selectSurvey(attachParams.getQuestionGroupName()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToCenterViewDetailsPage(); questionnairePage.verifyErrorsOnPage(attachParams.getErrors()); return questionnairePage.cancelAndNavigateToCenterViewDetailsPage(); } public GroupViewDetailsPage attachQuestionGroupToGroup(AttachQuestionGroupParameters attachParams) { return (GroupViewDetailsPage) navigationHelper .navigateToGroupViewDetailsPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .verifyNoneSelected() .selectSurvey(attachParams.getQuestionGroupName()) .verifyEmptyTextQuestionResponses(attachParams.getTextResponses()) .verifyEmptyCheckQuestionResponses(attachParams.getCheckResponses()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToGroupViewDetailsPage(); } public GroupViewDetailsPage editQuestionGroupResponsesInGroup(AttachQuestionGroupParameters attachParams) { return (GroupViewDetailsPage) navigationHelper .navigateToGroupViewDetailsPage(attachParams.getTarget()) .navigateToViewQuestionResponseDetailPage(attachParams.getQuestionGroupName()) .navigateToEditSection("0") .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToGroupViewDetailsPage(); } public GroupViewDetailsPage verifyErrorsWhileAttachingQuestionGroupToGroup(AttachQuestionGroupParameters attachParams) { QuestionnairePage questionnairePage = (QuestionnairePage) navigationHelper .navigateToGroupViewDetailsPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .selectSurvey(attachParams.getQuestionGroupName()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToGroupViewDetailsPage(); questionnairePage.verifyErrorsOnPage(attachParams.getErrors()); return questionnairePage.cancelAndNavigateToGroupViewDetailsPage(); } public LoanAccountPage attachQuestionGroupToLoan(AttachQuestionGroupParameters attachParams) { return (LoanAccountPage) navigationHelper .navigateToLoanAccountPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .verifyNoneSelected() .selectSurvey(attachParams.getQuestionGroupName()) .verifyEmptyTextQuestionResponses(attachParams.getTextResponses()) .verifyEmptyCheckQuestionResponses(attachParams.getCheckResponses()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToLoanViewDetailsPage(); } public LoanAccountPage editQuestionGroupResponsesInLoan(AttachQuestionGroupParameters attachParams) { return (LoanAccountPage) navigationHelper .navigateToLoanAccountPage(attachParams.getTarget()) .navigateToViewQuestionResponseDetailPage(attachParams.getQuestionGroupName()) .navigateToEditSection("0") .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToLoanViewDetailsPage(); } public LoanAccountPage verifyErrorsWhileAttachingQuestionGroupToLoan(AttachQuestionGroupParameters attachParams) { QuestionnairePage questionnairePage = (QuestionnairePage) navigationHelper .navigateToLoanAccountPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .selectSurvey(attachParams.getQuestionGroupName()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToLoanViewDetailsPage(); questionnairePage.verifyErrorsOnPage(attachParams.getErrors()); return questionnairePage.cancelAndNavigateToLoanViewDetailsPage(); } public ClientViewDetailsPage attachQuestionGroupToClient(AttachQuestionGroupParameters attachParams) { return (ClientViewDetailsPage) navigationHelper .navigateToClientViewDetailsPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .verifyNoneSelected() .selectSurvey(attachParams.getQuestionGroupName()) .verifyEmptyTextQuestionResponses(attachParams.getTextResponses()) .verifyEmptyCheckQuestionResponses(attachParams.getCheckResponses()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToClientViewDetailsPage(); } public ClientViewDetailsPage editQuestionGroupResponsesInClient(AttachQuestionGroupParameters attachParams) { return (ClientViewDetailsPage) navigationHelper .navigateToClientViewDetailsPage(attachParams.getTarget()) .navigateToViewQuestionResponseDetailPage(attachParams.getQuestionGroupName()) .navigateToEditSection("0") .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToClientViewDetailsPage(); } public ClientViewDetailsPage verifyErrorsWhileAttachingQuestionGroupToClient(AttachQuestionGroupParameters attachParams) { QuestionnairePage questionnairePage = (QuestionnairePage) navigationHelper .navigateToClientViewDetailsPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .selectSurvey(attachParams.getQuestionGroupName()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToClientViewDetailsPage(); questionnairePage.verifyErrorsOnPage(attachParams.getErrors()); return questionnairePage.cancel(); } public void createQuestions(List<CreateQuestionParameters> questions){ AdminPage adminPage = navigationHelper.navigateToAdminPage(); CreateQuestionPage createQuestionPage = adminPage.navigateToCreateQuestionPage(); for (CreateQuestionParameters question : questions) { createQuestionPage.addQuestion(question); } adminPage = createQuestionPage.submitQuestions(); } public void addQuestionsToQuestionGroup(String questionGroup, Map<String, List<String>> existingQuestions){ EditQuestionGroupPage editQuestionGroupPage = naviagateToEditQuestionGroup(questionGroup); for (String section : existingQuestions.keySet()) { editQuestionGroupPage.addExistingQuestion(section, existingQuestions.get(section)); } editQuestionGroupPage.submit(); } public void addQuestionsToQuestionGroup(int questionGroupId, Map<String, List<String>> existingQuestions){ EditQuestionGroupPage editQuestionGroupPage = naviagateToEditQuestionGroup(questionGroupId); for (String section : existingQuestions.keySet()) { editQuestionGroupPage.addExistingQuestion(section, existingQuestions.get(section)); } editQuestionGroupPage.submit(); } public EditQuestionGroupPage naviagateToEditQuestionGroup(String questionGroup){ AdminPage adminPage = navigationHelper.navigateToAdminPage(); ViewAllQuestionGroupsPage allQuestionGroupsPage = adminPage.navigateToViewAllQuestionGroups(); QuestionGroupDetailPage questionGroupDetailPage = allQuestionGroupsPage.navigateToQuestionGroupDetailPage(questionGroup); return questionGroupDetailPage.navigateToEditPage(); } public EditQuestionGroupPage naviagateToEditQuestionGroup(int questionGroupId){ AdminPage adminPage = navigationHelper.navigateToAdminPage(); ViewAllQuestionGroupsPage allQuestionGroupsPage = adminPage.navigateToViewAllQuestionGroups(); QuestionGroupDetailPage questionGroupDetailPage = allQuestionGroupsPage.navigateToQuestionGroupDetailPage(questionGroupId); return questionGroupDetailPage.navigateToEditPage(); } private EditQuestionPage naviagateToEditQuestion(String question){ AdminPage adminPage = navigationHelper.navigateToAdminPage(); ViewAllQuestionsPage viewAllQuestionsPage = adminPage.navigateToViewAllQuestions(); QuestionDetailPage questionDetailPage = viewAllQuestionsPage.navigateToQuestionDetail(question); return questionDetailPage.navigateToEditQuestionPage(); } public ViewAllQuestionGroupsPage navigateToViewQuestionGroups(List<String> questions) { AdminPage adminPage = navigationHelper.navigateToAdminPage(); ViewAllQuestionGroupsPage viewAllQuestionGroupsPage = adminPage.navigateToViewAllQuestionGroups(); viewAllQuestionGroupsPage.verifyQuestionGroup(questions); return viewAllQuestionGroupsPage; } public CreateQuestionPage navigateToCreateQuestionPage() { return navigationHelper .navigateToAdminPage() .navigateToCreateQuestionPage(); } public CreateQuestionGroupPage navigateToCreateQuestionGroupPage() { return navigationHelper .navigateToAdminPage() .navigateToCreateQuestionGroupPage(); } public void markQuestionAsInactive(String question) { EditQuestionPage editQuestionPage = naviagateToEditQuestion(question); editQuestionPage.deactivate(); } public void markQuestionAsActive(String question) { EditQuestionPage editQuestionPage = naviagateToEditQuestion(question); editQuestionPage.activate(); } public void changeQuestionName(String question, String newName) { EditQuestionPage editQuestionPage = naviagateToEditQuestion(question); editQuestionPage.changeName(newName); } public void markQuestionGroupAsActive(String questionGroup) { EditQuestionGroupPage editQuestionGroupPage = naviagateToEditQuestionGroup(questionGroup); editQuestionGroupPage.activate(); } public void markQuestionGroupAsInactive(String questionGroup) { EditQuestionGroupPage editQuestionGroupPage = naviagateToEditQuestionGroup(questionGroup); editQuestionGroupPage.deactivate(); } public void addNewQuestionsToQuestionGroup(String questionGroupName, List<CreateQuestionParameters> questions) { EditQuestionGroupPage editQuestionGroupPage = navigationHelper .navigateToAdminPage() .navigateToViewAllQuestionGroups() .navigateToQuestionGroupDetailPage(questionGroupName) .navigateToEditPage(); editQuestionGroupPage.addNewQuestions(questions); editQuestionGroupPage.submit(); } public ViewAllQuestionsPage markQuestionsAsInactive(List<String> questions) { ViewAllQuestionsPage viewAllQuestionsPage = navigationHelper .navigateToAdminPage() .navigateToViewAllQuestions(); for(String question : questions) { EditQuestionPage editQuestionPage = viewAllQuestionsPage .navigateToQuestionDetail(question) .navigateToEditQuestionPage(); editQuestionPage.deactivate().navigateToViewAllQuestionsPage(); } return viewAllQuestionsPage; } public CreateQuestionGroupParameters getCreateQuestionGroupParameters(String questionGroupTitle, List<String> questions, String appliesTo, String sectionName) { CreateQuestionGroupParameters parameters = new CreateQuestionGroupParameters(); parameters.setTitle(questionGroupTitle); parameters.setAppliesTo(appliesTo); parameters.setAnswerEditable(true); for (String question : questions) { parameters.addExistingQuestion(sectionName, question); } return parameters; } public CreateOfficePreviewDataPage createOfficeWithQuestionGroup(QuestionResponsePage questionResponsePage, QuestionResponseParameters initialResponse, QuestionResponseParameters updatedResponse) { questionResponsePage.populateAnswers(initialResponse); CreateOfficePreviewDataPage createOfficePreviewDataPage = questionResponsePage.navigateToNextPageAndReturnPage(); QuestionResponsePage questionResponsePage2 = createOfficePreviewDataPage.editAdditionalInformation(); questionResponsePage2.populateAnswers(updatedResponse); createOfficePreviewDataPage = questionResponsePage2.navigateToNextPageAndReturnPage(); return createOfficePreviewDataPage.submitWithError(); } public void editResponses(ClientViewDetailsPage clientViewDetailsPage, int id, Map<String,String> answers) { QuestionGroupResponsePage questionGroupResponsePage = clientViewDetailsPage.navigateToQuestionGroupResponsePage(id); QuestionnairePage questionnairePage = questionGroupResponsePage.navigateToEditResponses(); for(String question: answers.keySet()) { questionnairePage.setResponse(question, answers.get(question)); } ClientViewDetailsPage clientViewDetailsPage2 = (ClientViewDetailsPage)questionnairePage.submit(); if(clientViewDetailsPage2!=null && clientViewDetailsPage2.getQuestionGroupInstances()!=null && clientViewDetailsPage2.getQuestionGroupInstances().size()>2) { Assert.assertEquals(clientViewDetailsPage2.getQuestionGroupInstances().get(2).getName(),"TestQuestionGroup"); } } public QuestionResponsePage navigateToQuestionResponsePageDuringLoanDisbursal(String loanAccountID, DisburseLoanParameters disburseParams) { return navigationHelper .navigateToLoanAccountPage(loanAccountID) .navigateToDisburseLoan() .submitAndNavigateToQuestionResponsePage(disburseParams); } public QuestionResponsePage navigateToQuestionResponsePageDuringLoanCreation(CreateLoanAccountSearchParameters createLoanAccountSearchParameters, CreateLoanAccountSubmitParameters formParameters) { return navigationHelper .navigateToClientsAndAccountsPage() .navigateToCreateLoanAccountUsingLeftMenu() .searchAndNavigateToCreateLoanAccountPage(createLoanAccountSearchParameters) .fillAdditionalFee(formParameters) .submitAndNavigateToQuestionResponsePage(); } public QuestionResponsePage navigateToQuestionResponsePageDuringLoanStatusChange(String loanID, EditAccountStatusParameters editAccountStatusParameters) { return navigationHelper .navigateToLoanAccountPage(loanID) .navigateToEditAccountStatus() .submitAndNavigateToQuestionResponsePage(editAccountStatusParameters); } public ViewQuestionResponseDetailPage navigateToLoanViewQuestionResponseDetailPage(String loanID) { return navigationHelper .navigateToLoanAccountPage(loanID) .navigateToAdditionalInformationPage(); } public SavingsAccountDetailPage editQuestionGroupResponsesInSavingsAccount(AttachQuestionGroupParameters attachParams) { SavingsAccountDetailPage savingsAccountDetailPage = navigationHelper .navigateToSavingsAccountDetailPage(attachParams.getTarget()) .navigateToLatestViewQuestionResponseDetailPage(attachParams.getQuestionGroupName()) .navigateToEditSection("0") .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToSavingsAccountDetailPage(); ViewQuestionResponseDetailPage viewQuestionResponseDetailPage = savingsAccountDetailPage.navigateToLatestViewQuestionResponseDetailPage(attachParams.getQuestionGroupName()); viewQuestionResponseDetailPage.verifyQuestionsAndAnswers(attachParams); viewQuestionResponseDetailPage.navigateBack(); return new SavingsAccountDetailPage(selenium); } public SavingsAccountDetailPage attachQuestionGroupToSavingsAccount(AttachQuestionGroupParameters attachParams) { return navigationHelper .navigateToSavingsAccountDetailPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .selectSurvey(attachParams.getQuestionGroupName()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submitAndNavigateToSavingsAccountDetailPage(); } public SavingsAccountDetailPage verifyErrorsWhileAttachingQuestionGroupToSavingsAccount(AttachQuestionGroupParameters attachParams) { QuestionnairePage questionnairePage = (QuestionnairePage) navigationHelper .navigateToSavingsAccountDetailPage(attachParams.getTarget()) .navigateToAttachSurveyPage() .cancelAttachQuestionGroup(attachParams.getQuestionGroupName()) .navigateToAttachSurveyPage() .selectSurvey(attachParams.getQuestionGroupName()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .cancelAndNavigateToSavingsAccountDetailPage() .navigateToAttachSurveyPage() .selectSurvey(attachParams.getQuestionGroupName()) .setResponses(attachParams.getTextResponses()) .checkResponses(attachParams.getCheckResponses()) .submit(); questionnairePage.verifyErrorsOnPage(attachParams.getErrors()); return questionnairePage.cancelAndNavigateToSavingsAccountDetailPage(); } public AdminPage activatePPI(String countryName){ return navigationHelper .navigateToAdminPage() .navigateToActivatePPI() .activateQuestionGroup(countryName); } }