package example.domain.services.hibernate;
import example.domain.Document;
import example.domain.Identity;
import org.junit.Test;
import org.springframework.orm.hibernate3.HibernateOperations;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.mock;
import static org.mockito.BDDMockito.verifyZeroInteractions;
public class HibernateDocumentRepositoryTests {
@Test
public void shouldReturnFoundDocument() throws Exception {
Identity id = new Identity();
Document doc = new Document(id);
HibernateOperations hibernate = mock(HibernateOperations.class);
given(hibernate.get(Document.class, id)).willReturn(doc);
HibernateDocumentRepository repository = new HibernateDocumentRepository(hibernate);
assertThat(repository.get(id), sameInstance(doc));
}
@Test
public void shouldCreateDocumentWhenCannotFindDocumentInDatabase() throws Exception {
Identity id = new Identity();
HibernateDocumentRepository repository = new HibernateDocumentRepository(mock(HibernateOperations.class));
Document document = repository.get(id);
assertThat(document, notNullValue());
assertThat(document.getIdentity(), is(id));
}
@Test
public void shouldNotAttemptToRetrieveDocumentFromDatabaseForNewIdentity() throws Exception {
HibernateOperations hibernate = mock(HibernateOperations.class);
HibernateDocumentRepository repository = new HibernateDocumentRepository(hibernate);
Document document = repository.get(Identity.NEW);
assertThat(document, notNullValue());
assertThat(document.getIdentity(), is(Identity.NEW));
verifyZeroInteractions(hibernate);
}
}