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 java.util.Optional; import net.sf.gazpachoquest.domain.core.AnonymousInvitation; import net.sf.gazpachoquest.domain.core.Research; import net.sf.gazpachoquest.domain.support.Invitation; import net.sf.gazpachoquest.domain.user.User; import net.sf.gazpachoquest.qbe.SearchParameters; import net.sf.gazpachoquest.repository.dynamic.QuestionnaireAnswersRepositoryImpl; import net.sf.gazpachoquest.test.dbunit.support.ColumnDetectorXmlDataSetLoader; import net.sf.gazpachoquest.test.shiro.support.AbstractShiroTest; import net.sf.gazpachoquest.types.InvitationStatus; 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.slf4j.Logger; import org.slf4j.LoggerFactory; 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("InvitationRepository-dataset.xml") @DatabaseTearDown("InvitationRepository-dataset.xml") @DbUnitConfiguration(dataSetLoader = ColumnDetectorXmlDataSetLoader.class) public class InvitationRepositoryTest extends AbstractShiroTest { private static final Logger logger = LoggerFactory.getLogger(InvitationRepositoryTest.class); @Autowired private ResearchRepository researchRepository; @Autowired private QuestionnaireDefinitionRepository questionnaireDefinitionRepository; @Autowired private InvitationRepository invitationRepository; @Test public void findAllTest() { assertThat(invitationRepository.findAll()).hasSize(5); } @Test public void findByExampleTest() { logger.debug("hola holitas"); Invitation personalInvitation = new Invitation(); personalInvitation.setToken("NHAZXA4UK9"); List<Invitation> invitations = invitationRepository.findByExample(personalInvitation, new SearchParameters()); assertThat(invitations).contains(Invitation.with().id(61).build()); } @Test public void findOneByExampleTest() { Invitation example = Invitation.with().token("NHAZXA4UK9").build(); Optional<Invitation> invitation = invitationRepository.findOneByExample(example, new SearchParameters()); assertThat(invitation.isPresent()); assertThat(invitation.get()).isEqualTo(Invitation.with().id(61).build()); example = Invitation.with().token("9999999").build(); invitation = invitationRepository.findOneByExample(example, new SearchParameters()); assertThat(invitation.isPresent()).isFalse(); } @Test public void saveTest() { Research research = researchRepository.findOne(57); AnonymousInvitation invitation = AnonymousInvitation.with().research(research).status(InvitationStatus.ACTIVE) .token("1234").build(); Invitation saved = invitationRepository.save(invitation); assertThat(saved.isNew()).isFalse(); } @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(); } }