package org.mifos.test.acceptance.framework.questionnaire;
import java.util.Arrays;
import java.util.List;
import org.mifos.test.acceptance.framework.admin.AdminPage;
import com.thoughtworks.selenium.Selenium;
import org.testng.Assert;
import static java.util.Arrays.asList;
import static org.testng.Assert.assertEquals;
public class CreateQuestionPage extends CreateQuestionRootPage {
public CreateQuestionPage(Selenium selenium) {
super(selenium);
verifyPage("createQuestion");
}
public CreateQuestionPage addQuestion(CreateQuestionParameters createQuestionParameters) {
enterDetails(createQuestionParameters);
selenium.click("_eventId_addQuestion");
waitForPageToLoad();
return new CreateQuestionPage(selenium);
}
public void setNumberQuestion(String name, String min, String max) {
selenium.type("currentQuestion.text", name);
selenium.select("id=currentQuestion.type", "value=number");
selenium.type("currentQuestion.numericMin", min);
selenium.type("currentQuestion.numericMax", max);
}
public AdminPage submitQuestions() {
selenium.click("_eventId_createQuestions");
waitForPageToLoad();
return new AdminPage(selenium);
}
public AdminPage cancelQuestion() {
selenium.click("_eventId_cancel");
waitForPageToLoad();
return new AdminPage(selenium);
}
public AdminPage navigateToAdminPage() {
selenium.click("header.link.admin");
waitForPageToLoad();
return new AdminPage(selenium);
}
public String submitButtonClass() {
return selenium.getEval("window.document.getElementById('_eventId_createQuestions').className");
}
public String submitButtonStatus() {
return selenium.getEval("window.document.getElementById('_eventId_createQuestions').disabled");
}
public CreateQuestionParameters getLastAddedQuestion() {
CreateQuestionParameters questionParameters = new CreateQuestionParameters();
String noOfRows = selenium.getEval("window.document.getElementById(\"questions.table\").getElementsByTagName(\"tr\").length;");
int indexOfLastQuestion = Integer.parseInt(noOfRows) - 1;
questionParameters.setText(selenium.getTable("questions.table." + indexOfLastQuestion + ".0"));
questionParameters.setType(selenium.getTable("questions.table." + indexOfLastQuestion + ".1"));
String[] choices = selenium.getTable("questions.table." + indexOfLastQuestion + ".2").split(", ");
questionParameters.setChoicesFromStrings(Arrays.asList(choices));
return questionParameters;
}
public void testSubmitButtonEnabled() {
assertEquals("false", submitButtonStatus());
assertEquals("buttn", submitButtonClass());
}
public void assertLastAddedQuestion(CreateQuestionParameters createQuestionParameters) {
CreateQuestionParameters question = getLastAddedQuestion();
assertEquals(createQuestionParameters.getText(), question.getText());
assertEquals(createQuestionParameters.getType(), question.getType());
if (createQuestionParameters.questionHasAnswerChoices() || createQuestionParameters.questionHasSmartAnswerChoices()) {
Assert.assertEquals(createQuestionParameters.getChoicesAsStrings(), question.getChoicesAsStrings());
} else {
Assert.assertEquals(asList("Not Applicable"), question.getChoicesAsStrings());
}
testSubmitButtonEnabled();
}
public void assertRecentQuestion(CreateQuestionParameters createQuestionParameters, String atLeast2Choices) {
List<String> choices = createQuestionParameters.getChoicesAsStrings();
if ((createQuestionParameters.questionHasAnswerChoices() || createQuestionParameters.questionHasSmartAnswerChoices()) && choices.size() < 2) {
Assert.assertTrue(selenium.isTextPresent(atLeast2Choices), "Missing warning for giving at least 2 choices");
} else {
assertLastAddedQuestion(createQuestionParameters);
}
}
public void verifyTextPresent(String expectedText, String errorMessage) {
Assert.assertTrue(selenium.isTextPresent(expectedText), errorMessage);
}
public void verifyNotTextPresent(String expectedText, String errorMessage) {
Assert.assertFalse(selenium.isTextPresent(expectedText), errorMessage);
}
public void verifySubmitButtonStatus(String status) {
Assert.assertEquals(submitButtonStatus(), status);
}
public void verifyNumberQuestion(String min, String max) {
Assert.assertEquals(selenium.getText("currentQuestion.numericMin"), min);
Assert.assertEquals(selenium.getText("currentQuestion.numericMax"), max);
}
public void verifyQuestionPresent(CreateQuestionParameters createQuestionParameters, int row) {
assertEquals(selenium.getTable("questions.table." + row + ".0"), createQuestionParameters.getText());
assertEquals(selenium.getTable("questions.table." + row + ".1"), createQuestionParameters.getType());
}
}