package net.sf.gazpachoquest.repository;
import static org.fest.assertions.api.Assertions.assertThat;
import java.util.Arrays;
import java.util.List;
import net.sf.gazpachoquest.domain.core.Question;
import net.sf.gazpachoquest.qbe.SearchMode;
import net.sf.gazpachoquest.qbe.SearchParameters;
import net.sf.gazpachoquest.test.dbunit.support.ColumnDetectorXmlDataSetLoader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import com.github.springtestdbunit.DbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import com.github.springtestdbunit.annotation.DatabaseTearDown;
import com.github.springtestdbunit.annotation.DbUnitConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/jpa-test-context.xml", "classpath:/datasource-test-context.xml" })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.class })
@DatabaseSetup("QuestionRepository-dataset.xml")
@DatabaseTearDown("QuestionRepository-dataset.xml")
@DbUnitConfiguration(dataSetLoader = ColumnDetectorXmlDataSetLoader.class)
public class QuestionRepositoryTest {
@Autowired
private QuestionRepository repository;
@Test
public void findOneByPositionInSectionTest() {
int sectionId = 9;
int position = 2;
Question question = repository.findOneByPositionInSection(sectionId, position);
assertThat(question).isEqualTo(Question.with().id(29).build());
}
@Test
public void findInListTest() {
List<Integer> questionIds = Arrays.asList(12, 13, 29, 30, 31, 35, 50, 39);
List<Question> questions = repository.findInList(questionIds);
assertThat(questions).hasSameSizeAs(questionIds);
}
@Test
public void findPositionInSectionTest() {
Integer questionId = 31;
Integer position = repository.findPositionInSection(questionId);
assertThat(position).isEqualTo(1);
}
@Test
public void findQuestionBySection() {
int sectionId = 11;
List<Question> questions = repository.findBySectionId(sectionId);
assertThat(questions).containsExactly(Question.with().id(39).build(), Question.with().id(50).build());
}
@Test
public void findQuestionsByQuestionnairDefinitionId() {
Integer questionnairDefinitionId = 7;
List<Question> questions = repository.findByQuestionnaireId(questionnairDefinitionId);
assertThat(questions).containsExactly(Question.with().id(12).build(), Question.with().id(13).build(),
Question.with().id(29).build(), Question.with().id(30).build(), Question.with().id(31).build(),
Question.with().id(35).build(), Question.with().id(39).build(), Question.with().id(50).build());
}
@Test
public void findByExample() {
Question example = Question.with().code("Q7.1").build();
List<Question> questions = repository
.findByExample(example, new SearchParameters().searchMode(SearchMode.LIKE));
assertThat(questions).containsExactly(Question.with().id(46).build());
assertThat(questions.get(0).getParent()).isNotNull();
questions = repository.findByExample(Question.with().parent(Question.with().id(39).build()).build(),
new SearchParameters().searchMode(SearchMode.LIKE));
assertThat(questions).containsExactly(Question.with().id(46).build(), Question.with().id(47).build(),
Question.with().id(48).build(), Question.with().id(49).build());
}
}