package net.petrikainulainen.spring.datasolr.todo.service; import net.petrikainulainen.spring.datasolr.todo.TodoTestUtil; import net.petrikainulainen.spring.datasolr.todo.document.TodoDocument; import net.petrikainulainen.spring.datasolr.todo.model.Todo; import net.petrikainulainen.spring.datasolr.todo.repository.solr.TodoDocumentRepository; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.springframework.test.util.ReflectionTestUtils; import java.util.ArrayList; import java.util.List; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import static org.mockito.Mockito.*; /** * @author Petri Kainulainen */ public class RepositoryTodoIndexServiceTest { private static final String SEARCH_TERM = "Foo"; private RepositoryTodoIndexService service; private TodoDocumentRepository repositoryMock; @Before public void setUp() { service = new RepositoryTodoIndexService(); repositoryMock = mock(TodoDocumentRepository.class); ReflectionTestUtils.setField(service, "repository", repositoryMock); } @Test public void addToIndex_ShouldCreateNewDocument_ToIndex() { Todo todoEntry = TodoTestUtil.createModel(TodoTestUtil.ID, TodoTestUtil.DESCRIPTION, TodoTestUtil.TITLE); service.addToIndex(todoEntry); ArgumentCaptor<TodoDocument> todoDocumentArgument = ArgumentCaptor.forClass(TodoDocument.class); verify(repositoryMock, times(1)).save(todoDocumentArgument.capture()); verifyNoMoreInteractions(repositoryMock); TodoDocument todoDocument = todoDocumentArgument.getValue(); assertEquals(todoEntry.getId().toString(), todoDocument.getId()); assertEquals(todoEntry.getDescription(), todoDocument.getDescription()); assertEquals(todoEntry.getTitle(), todoDocument.getTitle()); } @Test public void deleteFromIndex_ShouldDeleteDocumentFromIndex() { service.deleteFromIndex(1L); verify(repositoryMock, times(1)).delete("1"); verifyNoMoreInteractions(repositoryMock); } @Test public void search_ShouldReturnDocuments() { List<TodoDocument> expected = new ArrayList<TodoDocument>(); when(repositoryMock.search(SEARCH_TERM)).thenReturn(expected); List<TodoDocument> actual = service.search(SEARCH_TERM); verify(repositoryMock, times(1)).search(SEARCH_TERM); verifyNoMoreInteractions(repositoryMock); assertEquals(expected, actual); } @Test public void update_ExistingTodo_ShouldUpdateDocument() { Todo todoEntry = TodoTestUtil.createModel(TodoTestUtil.ID, TodoTestUtil.DESCRIPTION, TodoTestUtil.TITLE); service.update(todoEntry); verify(repositoryMock, times(1)).update(todoEntry); verifyNoMoreInteractions(repositoryMock); } }