package org.mifos.test.acceptance.loan;
import org.mifos.test.acceptance.framework.admin.AdminPage;
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.testhelpers.NavigationHelper;
import org.mifos.test.acceptance.framework.questionnaire.CreateQuestionParameters;
import java.util.ArrayList;
import java.util.List;
import static java.util.Arrays.asList;
public class QuestionGroupHelper {
private final NavigationHelper navigationHelper;
public QuestionGroupHelper(NavigationHelper navigationHelper) {
this.navigationHelper = navigationHelper;
}
public void createQuestionGroup(String questionGroupTitle, String question1, String question2, String appliesTo) {
AdminPage adminPage = navigationHelper.navigateToAdminPage();
CreateQuestionPage createQuestionPage = adminPage.navigateToCreateQuestionPage();
createQuestionPage.addQuestion(getCreateQuestionParams(question1, CreateClientLoanAccountTest.DATE, null));
createQuestionPage.addQuestion(getCreateQuestionParams(question2, CreateClientLoanAccountTest.SINGLE_SELECT, asList("Choice1", "Choice2")));
adminPage = createQuestionPage.submitQuestions();
CreateQuestionGroupPage createQuestionGroupPage = adminPage.navigateToCreateQuestionGroupPage();
CreateQuestionGroupParameters parameters = getCreateQuestionGroupParameters(questionGroupTitle, question1, question2, appliesTo);
for(String section : parameters.getExistingQuestions().keySet()){
createQuestionGroupPage.addExistingQuestion(section, parameters.getExistingQuestions().get(section));
}
createQuestionGroupPage.markEveryOtherQuestionsMandatory(asList(question1));
createQuestionGroupPage.submit(parameters);
}
@SuppressWarnings("unchecked")
public void createQuestionGroupSmart(String questionGroupTitle, String appliesTo, String question1, String choice1, String choice2, List<String> tag1, List<String> tag2) {
AdminPage adminPage = navigationHelper.navigateToAdminPage();
CreateQuestionPage createQuestionPage = adminPage.navigateToCreateQuestionPage();
createQuestionPage.addQuestion(getCreateQuestionParams(question1, "Smart Select", asList(choice1, choice2), asList(tag1,tag2)));
adminPage = createQuestionPage.submitQuestions();
CreateQuestionGroupPage createQuestionGroupPage = adminPage.navigateToCreateQuestionGroupPage();
CreateQuestionGroupParameters parameters = getCreateQuestionGroupParameters(questionGroupTitle, question1, appliesTo);
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, List<String> choices) {
CreateQuestionParameters parameters = new CreateQuestionParameters();
parameters.setText(title);
parameters.setType(type);
parameters.setChoicesFromStrings(choices);
return parameters;
}
private CreateQuestionParameters getCreateQuestionParams(String title, String type, List<String> choices, List<List<String>> tags) {
CreateQuestionParameters parameters = new CreateQuestionParameters();
parameters.setText(title);
parameters.setType(type);
List<Choice> choiceList = new ArrayList<Choice>();
for (int i=0; i<choices.size(); i++){
choiceList.add(createNewChoice(choices.get(i), tags.get(i)));
}
parameters.setChoices(choiceList);
return parameters;
}
private CreateQuestionGroupParameters getCreateQuestionGroupParameters(String questionGroupTitle, String question1, String question2, String appliesTo) {
CreateQuestionGroupParameters parameters = new CreateQuestionGroupParameters();
parameters.setTitle(questionGroupTitle);
parameters.setAppliesTo(appliesTo);
parameters.setAnswerEditable(true);
parameters.addExistingQuestion("Default Section", question1);
parameters.addExistingQuestion("Default Section", question2);
return parameters;
}
private CreateQuestionGroupParameters getCreateQuestionGroupParameters(String questionGroupTitle, String question1, String appliesTo) {
CreateQuestionGroupParameters parameters = new CreateQuestionGroupParameters();
parameters.setTitle(questionGroupTitle);
parameters.setAppliesTo(appliesTo);
parameters.setAnswerEditable(true);
parameters.addExistingQuestion("Default Section", question1);
return parameters;
}
private Choice createNewChoice(String choices, List<String> tags){
return new Choice(choices, tags);
}
}