package net.sf.gazpachoquest.repository; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.fest.assertions.api.Assertions.assertThat; import java.util.List; import net.sf.gazpachoquest.domain.core.Question; import net.sf.gazpachoquest.domain.core.Section; import net.sf.gazpachoquest.domain.core.QuestionnaireDefinition; import net.sf.gazpachoquest.domain.core.embeddables.SectionLanguageSettings; import net.sf.gazpachoquest.domain.core.embeddables.QuestionLanguageSettings; import net.sf.gazpachoquest.domain.core.embeddables.QuestionnaireDefinitionLanguageSettings; import net.sf.gazpachoquest.domain.user.User; import net.sf.gazpachoquest.test.dbunit.support.ColumnDetectorXmlDataSetLoader; import net.sf.gazpachoquest.test.shiro.support.AbstractShiroTest; import net.sf.gazpachoquest.types.EntityStatus; import net.sf.gazpachoquest.types.Language; import net.sf.gazpachoquest.types.QuestionType; import net.sf.gazpachoquest.types.RandomizationStrategy; import net.sf.gazpachoquest.types.RenderingMode; import org.apache.shiro.subject.Subject; import org.junit.After; import org.junit.Before; 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("QuestionnaireDefinitionRepository-dataset.xml") @DatabaseTearDown("QuestionnaireDefinitionRepository-dataset.xml") @DbUnitConfiguration(dataSetLoader = ColumnDetectorXmlDataSetLoader.class) public class QuestionnaireDefinitionRepositoryTest extends AbstractShiroTest { @Autowired private QuestionnaireDefinitionRepository repository; @Test public void findOne() { Integer questionnairDefinitionId = 7; QuestionnaireDefinition questionnaireDefinition = repository.findOne(questionnairDefinitionId); List<Section> sections = questionnaireDefinition.getSections(); assertThat(sections).hasSize(3); } @Test public void saveWithSections() { QuestionnaireDefinitionLanguageSettings settings = QuestionnaireDefinitionLanguageSettings.with() .title("My QuestionnaireDefinition example").description("My questionnaireDefinition description") .welcomeText("welcome").endText("").build(); QuestionnaireDefinition questionnaireDefinition = QuestionnaireDefinition.with().status(EntityStatus.DRAFT).language(Language.ES) .languageSettings(settings).sectionInfoVisible(true).progressVisible(true).welcomeVisible(true) .randomizationStrategy(RandomizationStrategy.NONE).renderingMode(RenderingMode.SECTION_BY_SECTION).questionNumberVisible(false).build(); Section section = Section.with().language(Language.ES).randomizationEnabled(false).relevance("").build(); SectionLanguageSettings groupSettings = new SectionLanguageSettings(); groupSettings.setTitle("Group 1"); groupSettings.setDescription(""); section.setLanguageSettings(groupSettings); questionnaireDefinition.addSection(section); repository.save(questionnaireDefinition); Question question = new Question(); question.setLanguage(Language.ES); question.setCode("Q1"); question.setRelevance(""); question.setType(QuestionType.S); QuestionLanguageSettings questionLanguageSettings = new QuestionLanguageSettings(); questionLanguageSettings.setTitle("Question 1"); questionLanguageSettings.setExplanation(""); question.setLanguageSettings(questionLanguageSettings); question.setOtherAllowed(false); question.setRequired(false); section.addQuestion(question); question = new Question(); question.setCode("Q2"); question.setRelevance(""); question.setType(QuestionType.S); question.setLanguage(Language.ES); questionLanguageSettings = new QuestionLanguageSettings(); questionLanguageSettings.setTitle("Question 2"); questionLanguageSettings.setExplanation(""); question.setLanguageSettings(questionLanguageSettings); question.setOtherAllowed(false); question.setRequired(false); section.addQuestion(question); questionnaireDefinition = repository.save(questionnaireDefinition); QuestionnaireDefinition fetched = repository.findOne(questionnaireDefinition.getId()); assertThat(fetched.getSections()).hasSize(1); assertThat(fetched.getSections().get(0).getQuestions()).hasSize(2); } @Test public void saveTest() { QuestionnaireDefinitionLanguageSettings languageSettings = QuestionnaireDefinitionLanguageSettings.with() .title("My QuestionnaireDefinition").description("my description").welcomeText("welcome").endText("").build(); QuestionnaireDefinition questionnaireDefinition = QuestionnaireDefinition.with().status(EntityStatus.DRAFT).language(Language.EN) .languageSettings(languageSettings).sectionInfoVisible(true).progressVisible(true) .welcomeVisible(true).randomizationStrategy(RandomizationStrategy.NONE).questionNumberVisible(false) .renderingMode(RenderingMode.SECTION_BY_SECTION).build(); questionnaireDefinition = repository.save(questionnaireDefinition); assertThat(questionnaireDefinition.getCreatedDate()).isNotNull(); assertThat(questionnaireDefinition.getCreatedBy()).isNotNull(); languageSettings = QuestionnaireDefinitionLanguageSettings.with().description("my description") .title("My QuestionnaireDefinition. Version 1").welcomeText("welcome").endText("").build(); questionnaireDefinition.setLanguageSettings(languageSettings); questionnaireDefinition = repository.save(questionnaireDefinition); assertThat(questionnaireDefinition.getLastModifiedBy()).isNotNull(); assertThat(questionnaireDefinition.getLastModifiedDate()).isNotNull(); } @Test public void questionsCountGroupBySectionsTest() { Integer questionnairDefinitionId = 7; List<Object[]> result = repository.questionsCountGroupBySections(questionnairDefinitionId); assertThat(result).hasSize(3); assertThat(result.get(0)).isEqualTo(new Object[] { 11, 2L, 0 }); assertThat(result.get(1)).isEqualTo(new Object[] { 10, 3L, 1 }); assertThat(result.get(2)).isEqualTo(new Object[] { 9, 3L, 2 }); } @Test public void questionsCountTest() { Integer questionnairDefinitionId = 7; Integer count = repository.questionsCount(questionnairDefinitionId); assertThat(count).isEqualTo(8); } @Before public void setUpSubject() { Subject subjectUnderTest = createNiceMock(Subject.class); User support = User.with().id(1).build(); expect(subjectUnderTest.getPrincipal()).andReturn(support).anyTimes(); replay(subjectUnderTest); // 2. Bind the subject to the current thread: setSubject(subjectUnderTest); } @After public void tearDownSubject() { // 3. Unbind the subject from the current thread: clearSubject(); } }