package org.mifos.platform.questionnaire.ui.controller;
import org.junit.Test;
import org.mifos.platform.questionnaire.service.dtos.ChoiceDto;
import org.mifos.platform.questionnaire.service.QuestionDetail;
import org.mifos.platform.questionnaire.ui.model.Question;
import org.mifos.platform.questionnaire.ui.model.QuestionForm;
import java.util.List;
import static java.util.Arrays.asList;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertThat;
@SuppressWarnings("PMD")
public class QuestionFormTest {
private static final String TITLE = "title";
@Test
public void testDuplicateQuestionInForm(){
QuestionForm questionForm = new QuestionForm();
questionForm.setQuestions(asList(getQuestion(TITLE), getQuestion(TITLE + 1), getQuestion(TITLE + 2)));
assertThat(questionForm.isDuplicateTitle(TITLE), is(true));
assertThat(questionForm.isDuplicateTitle(" " + TITLE), is(true));
assertThat(questionForm.isDuplicateTitle(TITLE.toUpperCase()), is(true));
assertThat(questionForm.isDuplicateTitle(null), is(false));
assertThat(questionForm.isDuplicateTitle(TITLE + "2"), is(true));
assertThat(questionForm.isDuplicateTitle(TITLE + 3), is(false));
}
@Test
public void testAddCurrentQuestion(){
QuestionForm questionForm = getQuestionForm(" Q1 ", "freeText", "choice1");
List<Question> questionList = questionForm.getQuestions();
assertThat(questionList.size(), is(1));
String text = questionList.get(0).getText();
String type = questionList.get(0).getType();
List<ChoiceDto> choices = questionList.get(0).getChoices();
assertNotSame(text, questionForm.getCurrentQuestion().getText());
assertNotSame(type, questionForm.getCurrentQuestion().getType());
assertThat(text, is("Q1"));
assertThat(type, is("freeText"));
assertThat(choices.size(), is(0));
}
@Test
public void testAddCurrentMultiSelectQuestion(){
QuestionForm questionForm = getQuestionForm("title", "multiSelect", "choice2");
List<Question> questionList = questionForm.getQuestions();
assertThat(questionList.size(), is(1));
String text = questionList.get(0).getText();
String type = questionList.get(0).getType();
List<ChoiceDto> choices = questionList.get(0).getChoices();
assertNotSame(type, questionForm.getCurrentQuestion().getType());
assertNotSame(text, questionForm.getCurrentQuestion().getText());
assertThat(type, is("multiSelect"));
assertThat(text, is("title"));
assertThat(choices.get(0).getValue(), is("choice2"));
}
@Test
public void testAddCurrentSingleSelectQuestion(){
QuestionForm questionForm = getQuestionForm("title1", "singleSelect", "choice");
List<Question> questionList = questionForm.getQuestions();
assertThat(questionList.size(), is(1));
String text = questionList.get(0).getText();
String type = questionList.get(0).getType();
List<ChoiceDto> choices = questionList.get(0).getChoices();
assertNotSame(text, questionForm.getCurrentQuestion().getText());
assertNotSame(type, questionForm.getCurrentQuestion().getType());
assertThat(choices.get(0).getValue(), is("choice"));
assertThat(text, is("title1"));
assertThat(type, is("singleSelect"));
}
private Question getQuestion(String title) {
Question question = new Question(new QuestionDetail());
question.setText(title);
return question;
}
private QuestionForm getQuestionForm(String title, String type, String choice) {
QuestionForm questionForm = new QuestionForm();
questionForm.getCurrentQuestion().setText(title);
questionForm.getCurrentQuestion().setType(type);
questionForm.getCurrentQuestion().setCurrentChoice(choice);
questionForm.getCurrentQuestion().addAnswerChoice();
questionForm.addCurrentQuestion();
return questionForm;
}
}