/*
* 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.questionnaire;
import static org.junit.Assert.assertTrue;
import java.util.Map;
import org.junit.Assert;
import org.mifos.test.acceptance.framework.MifosPage;
import org.mifos.test.acceptance.framework.client.ClientViewDetailsPage;
import org.mifos.test.acceptance.framework.client.CreateClientEnterMfiDataPage;
import org.mifos.test.acceptance.framework.group.CreateGroupConfirmationPage;
import org.mifos.test.acceptance.framework.group.GroupViewDetailsPage;
import org.mifos.test.acceptance.framework.loan.CreateLoanAccountReviewInstallmentPage;
import org.mifos.test.acceptance.framework.loan.DisburseLoanConfirmationPage;
import org.mifos.test.acceptance.framework.loan.EditAccountStatusConfirmationPage;
import org.mifos.test.acceptance.framework.loan.QuestionResponseParameters;
import org.mifos.test.acceptance.framework.office.CreateOfficePreviewDataPage;
import org.mifos.test.acceptance.framework.savings.CreateSavingsAccountPreviewPage;
import org.mifos.test.acceptance.framework.user.CreateUserPreviewDataPage;
import com.thoughtworks.selenium.Selenium;
public class QuestionResponsePage extends MifosPage {
public QuestionResponsePage(Selenium selenium) {
super(selenium);
super.verifyPage("captureQuestionResponse");
}
public void verifyPage() {
super.verifyPage("captureQuestionResponse");
}
public void verifyNumericBoundsValidation(String questionInputId, String answer, int minimum, int maximum, String questionTitle) {
populateTextAnswer(questionInputId, answer);
navigateToNextPage();
assertTrue(selenium.isTextPresent("Please specify a number between " + minimum + " and " + maximum + " for " + questionTitle));
}
public void verifyQuestionsDoesnotappear(String[] questions) {
for (String question : questions) {
Assert.assertFalse(selenium.isTextPresent(question));
}
}
public void verifyQuestionsExists(String[] questions) {
for(String question: questions) {
Assert.assertTrue(selenium.isTextPresent(question));
}
}
public void verifySectionDoesnotappear(String section ) {
Assert.assertFalse(selenium.isTextPresent(section));
}
public boolean isQuestionPresent(int qg, int s, int q) {
return selenium.isElementPresent("questionGroups[" + qg + "].sectionDetails[" + s + "].questions[" + q + "].value");
}
public void populateSmartSelect(String smartSelectId, Map<String, String> tags) {
for (String tag : tags.keySet()) {
selenium.type(smartSelectId, tag);
selenium.keyUp(smartSelectId, " ");
selenium.check(String.format("css=input[value=%s:%s]", tags.get(tag), tag));
}
}
public CreateGroupConfirmationPage submitNewGroupForApproval() {
navigateToNextPageAndTestEdit();
selenium.isVisible("previewgroup.button.submitForApproval");
selenium.click("previewgroup.button.submitForApproval");
waitForPageToLoad();
return new CreateGroupConfirmationPage(selenium);
}
public void navigateToNextPageAndTestEdit() {
navigateToNextPage();
selenium.click("editQuestionResponses_button");
// selenium.click("_eventId_editQuestionGroups");
waitForPageToLoad();
super.verifyPage("captureQuestionResponse");
navigateToNextPage();
}
public void navigateToNextPage() {
selenium.click("captureQuestionResponses.button.continue");
waitForPageToLoad();
}
public CreateOfficePreviewDataPage navigateToNextPageAndReturnPage() {
navigateToNextPage();
return new CreateOfficePreviewDataPage(selenium);
}
public DisburseLoanConfirmationPage continueAndNavigateToDisburseLoanConfirmationPage() {
navigateToNextPage();
return new DisburseLoanConfirmationPage(selenium);
}
public CreateClientEnterMfiDataPage navigateToNextPageClientCreation() {
navigateToNextPage();
return new CreateClientEnterMfiDataPage(selenium);
}
public CreateSavingsAccountPreviewPage navigateToNextPageSavingsAccountCreation() {
navigateToNextPage();
return new CreateSavingsAccountPreviewPage(selenium);
}
public GroupViewDetailsPage navigateToCreateGroupDetailsPage(String status) {
CreateGroupConfirmationPage confirmationPage = submitNewGroupForApproval();
confirmationPage.verifyPage();
GroupViewDetailsPage groupDetailsPage = confirmationPage.navigateToGroupDetailsPage();
groupDetailsPage.verifyStatus(status);
return groupDetailsPage;
}
public CreateLoanAccountReviewInstallmentPage continueAndNavigateToCreateLoanAccountReviewInstallmentPage() {
navigateToNextPage();
return new CreateLoanAccountReviewInstallmentPage(selenium);
}
public EditAccountStatusConfirmationPage continueAndNavigateToEditAccountStatusConfirmationPage() {
navigateToNextPage();
return new EditAccountStatusConfirmationPage(selenium);
}
public CreateUserPreviewDataPage continueAndNavigateToCreateUserPreviewPage(){
navigateToNextPage();
return new CreateUserPreviewDataPage(selenium);
}
public void populateAnswers(QuestionResponseParameters responseParameters) {
for (Map.Entry<String, String> entry : responseParameters.getTextResponses().entrySet()) {
populateTextAnswer(entry.getKey(), entry.getValue());
}
for (Map.Entry<String, String> entry : responseParameters.getSingleSelectResponses().entrySet()) {
populateSingleSelectAnswer(entry.getKey(), entry.getValue());
}
}
public void populateTextAnswer(String questionInputId, String answer) {
selenium.type(questionInputId, answer);
}
private void populateSingleSelectAnswer(String questionInputId, String answer) {
selenium.check("//input[@name='" + questionInputId + "' and @value='" + answer + "']");
}
public ClientViewDetailsPage cancel() {
selenium.click("captureQuestionResponses_button_cancel");
waitForPageToLoad();
return new ClientViewDetailsPage(selenium);
}
}