package tudu.service.impl; import org.easymock.EasyMock; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.test.util.ReflectionTestUtils; import tudu.domain.Todo; import tudu.domain.TodoList; import tudu.domain.User; import tudu.security.PermissionDeniedException; import tudu.service.TodoListsService; import tudu.service.UserService; import javax.persistence.EntityManager; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; public class TodosServiceImplTest { Todo todo = new Todo(); TodoList todoList = new TodoList(); User user = new User(); TodoListsService todoListsService = null; UserService userService = null; EntityManager em = null; TodosServiceImpl todosService = new TodosServiceImpl(); @Before public void setUp() { todo.setTodoId("0001"); todo.setDescription("Test description"); todo.setPriority(0); todo.setCompleted(false); todoList.setListId("001"); todoList.setName("Test Todo List"); todoList.setRssAllowed(false); user.setLogin("test_user"); user.setFirstName("First name"); user.setLastName("Last name"); em = createMock(EntityManager.class); todoListsService = createMock(TodoListsService.class); userService = createMock(UserService.class); ReflectionTestUtils.setField(todosService, "em", em); ReflectionTestUtils.setField(todosService, "todoListsService", todoListsService); ReflectionTestUtils.setField(todosService, "userService", userService); } @After public void tearDown() { verify(em); verify(todoListsService); verify(userService); } private void replay() { EasyMock.replay(em); EasyMock.replay(todoListsService); EasyMock.replay(userService); } @Test public void testFindTodo() { todo.setTodoList(todoList); expect(em.find(Todo.class, "0001")).andReturn(todo); user.getTodoLists().add(todoList); expect(userService.getCurrentUser()).andReturn(user); replay(); try { Todo testTodo = todosService.findTodo("0001"); assertEquals(todo, testTodo); } catch (PermissionDeniedException pde) { fail("Permission denied when looking for Todo."); } } @Test public void testFailedFindTodo() { expect(em.find(Todo.class, "0001")).andReturn(todo); expect(userService.getCurrentUser()).andReturn(user); replay(); try { todosService.findTodo("0001"); fail("A PermissionDeniedException should have been thrown"); } catch (PermissionDeniedException pde) { } } @Test public void testCreateTodo() { expect(todoListsService.findTodoList("001")).andReturn(todoList); todoListsService.updateTodoList(todoList); em.persist(todo); replay(); todosService.createTodo("001", todo); assertNotNull(todo.getCreationDate()); assertEquals(todoList, todo.getTodoList()); assertTrue(todoList.getTodos().contains(todo)); } @Test public void testUpdateTodo() { todoListsService.updateTodoList(todo.getTodoList()); replay(); todo.setCompleted(true); todosService.updateTodo(todo); assertTrue(todo.isCompleted()); } @Test public void testDeleteTodo() { todo.setTodoList(todoList); todoList.getTodos().add(todo); user.getTodoLists().add(todoList); em.remove(todo); todoListsService.updateTodoList(todo.getTodoList()); replay(); todosService.deleteTodo(todo); assertFalse(todoList.getTodos().contains(todo)); } @Test public void testCompleteTodo() { todo.setTodoList(todoList); todoList.getTodos().add(todo); expect(em.find(Todo.class, "0001")).andReturn(todo); user.getTodoLists().add(todoList); expect(userService.getCurrentUser()).andReturn(user); todoListsService.updateTodoList(todo.getTodoList()); replay(); Todo todo = todosService.completeTodo("0001"); assertTrue(todo.isCompleted()); assertNotNull(todo.getCompletionDate()); } @Test public void testReopenTodo() { todo.setTodoList(todoList); todoList.getTodos().add(todo); expect(em.find(Todo.class, "0001")).andReturn(todo); user.getTodoLists().add(todoList); expect(userService.getCurrentUser()).andReturn(user); todoListsService.updateTodoList(todo.getTodoList()); replay(); Todo todo = todosService.reopenTodo("0001"); assertFalse(todo.isCompleted()); assertNull(todo.getCompletionDate()); } }