package net.sf.gazpachoquest.services; 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.time.LocalDateTime; import java.util.Set; import net.sf.gazpachoquest.domain.core.QuestionnaireDefinition; import net.sf.gazpachoquest.domain.core.embeddables.QuestionnaireDefinitionLanguageSettings; import net.sf.gazpachoquest.domain.i18.QuestionnaireDefinitionTranslation; 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.RandomizationStrategy; import net.sf.gazpachoquest.types.RenderingMode; import net.sf.gazpachoquest.types.Topology; 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.beans.factory.annotation.Qualifier; 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", "classpath:/services-context.xml", "classpath:/components-context.xml" }) @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DbUnitTestExecutionListener.class }) @DatabaseSetup("QuestionnaireDefinitionService-dataset.xml") @DatabaseTearDown("QuestionnaireDefinitionService-dataset.xml") @DbUnitConfiguration(dataSetLoader = ColumnDetectorXmlDataSetLoader.class) public class QuestionnaireDefinitionServiceTest extends AbstractShiroTest { @Autowired @Qualifier("questionnaireDefinitionServiceImpl") private QuestionnaireDefinitionService questionnaireDefinitionService; @Test public void confirmTest() { QuestionnaireDefinition questionnaireDefinition = QuestionnaireDefinition.with().id(7).build(); questionnaireDefinitionService.confirm(questionnaireDefinition); } @Test public void findAllTest() { assertThat(questionnaireDefinitionService.findAll()).hasSize(1); } @Test public void findOneTest() { int questionnaireDefinitionId = 7; QuestionnaireDefinition questionnaireDefinition = questionnaireDefinitionService .findOne(questionnaireDefinitionId); assertThat(questionnaireDefinition).isNotNull(); } @Test public void sectionsCountTest() { int questionnaireDefinitionId = 7; long count = questionnaireDefinitionService.sectionsCount(questionnaireDefinitionId); assertThat(count).isEqualTo(3); } @Test public void getTopologyTest() { int questionnaireDefinitionId = 7; Topology topology = questionnaireDefinitionService.getTopology(questionnaireDefinitionId); assertThat(topology).isEqualTo(Topology.SKIP_PATTERN); } @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).renderingMode(RenderingMode.SECTION_BY_SECTION) .questionNumberVisible(false).build(); questionnaireDefinition = questionnaireDefinitionService.save(questionnaireDefinition); LocalDateTime lastModifiedDate = questionnaireDefinition.getLastModifiedDate(); QuestionnaireDefinition created = questionnaireDefinitionService.findOne(questionnaireDefinition.getId()); QuestionnaireDefinitionLanguageSettings newLanguageSettings = QuestionnaireDefinitionLanguageSettings.with() .title("My QuestionnaireDefinition. Ver 1").description("My description").welcomeText("my welcome") .endText("").build(); created.setLanguageSettings(newLanguageSettings); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new IllegalStateException(e); } QuestionnaireDefinition updated = questionnaireDefinitionService.save(created); assertThat(lastModifiedDate).isNotEqualTo(updated.getLastModifiedDate()); } @Test public void saveTranslationTest() { QuestionnaireDefinitionLanguageSettings languageSettings = new QuestionnaireDefinitionLanguageSettings(); languageSettings.setTitle("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); languageSettings.setDescription("Donec pellentesque consequat orci."); languageSettings.setWelcomeText("dolorem"); languageSettings.setEndText(""); int questionnairDefinitionId = 7; QuestionnaireDefinitionTranslation translation = QuestionnaireDefinitionTranslation.with() .translatedEntityId(questionnairDefinitionId).language(Language.FR).languageSettings(languageSettings) .build(); questionnaireDefinitionService.saveTranslation(translation); Set<Language> translations = questionnaireDefinitionService.translationsSupported(questionnairDefinitionId); assertThat(translations).contains(Language.FR); } @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(); } }