package tudu.service.impl; import static org.easymock.EasyMock.*; import org.easymock.EasyMock; import static org.junit.Assert.*; import org.junit.Before; import org.junit.After; import org.junit.Test; import org.springframework.test.util.ReflectionTestUtils; import tudu.domain.dao.TodoDAO; import tudu.domain.model.Todo; import tudu.domain.model.TodoList; import tudu.domain.model.User; import tudu.security.PermissionDeniedException; import tudu.service.TodoListsManager; import tudu.service.UserManager; public class TodosManagerImplTest { Todo todo = new Todo(); TodoList todoList = new TodoList(); User user = new User(); TodoDAO todoDAO = null; TodoListsManager todoListsManager = null; UserManager userManager = null; TodosManagerImpl todosManager = new TodosManagerImpl(); @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"); todoDAO = createMock(TodoDAO.class); todoListsManager = createMock(TodoListsManager.class); userManager = createMock(UserManager.class); ReflectionTestUtils.setField(todosManager, "todoDAO", todoDAO); ReflectionTestUtils.setField(todosManager, "todoListsManager", todoListsManager); ReflectionTestUtils.setField(todosManager, "userManager", userManager); } @After public void tearDown() { verify(todoDAO); verify(todoListsManager); verify(userManager); } private void replay() { EasyMock.replay(todoDAO); EasyMock.replay(todoListsManager); EasyMock.replay(userManager); } @Test public void testFindTodo() { todo.setTodoList(todoList); expect(todoDAO.getTodo("0001")).andReturn(todo); user.getTodoLists().add(todoList); expect(userManager.getCurrentUser()).andReturn(user); replay(); try { Todo testTodo = todosManager.findTodo("0001"); assertEquals(todo, testTodo); } catch (PermissionDeniedException pde) { fail("Permission denied when looking for Todo."); } } @Test public void testFailedFindTodo() { expect(todoDAO.getTodo("0001")).andReturn(todo); expect(userManager.getCurrentUser()).andReturn(user); replay(); try { todosManager.findTodo("0001"); fail("A PermissionDeniedException should have been thrown"); } catch (PermissionDeniedException pde) { } } @Test public void testCreateTodo() { expect(todoListsManager.findTodoList("001")).andReturn(todoList); todoDAO.saveTodo(todo); todoListsManager.updateTodoList(todoList); replay(); todosManager.createTodo("001", todo); assertNotNull(todo.getCreationDate()); assertEquals(todoList, todo.getTodoList()); assertTrue(todoList.getTodos().contains(todo)); } @Test public void testUpdateTodo() { todoDAO.updateTodo(todo); todoListsManager.updateTodoList(todo.getTodoList()); replay(); todo.setCompleted(true); todosManager.updateTodo(todo); assertTrue(todo.isCompleted()); } @Test public void testDeleteTodo() { todo.setTodoList(todoList); todoList.getTodos().add(todo); expect(todoDAO.getTodo("0001")).andReturn(todo); user.getTodoLists().add(todoList); expect(userManager.getCurrentUser()).andReturn(user); todoDAO.removeTodo("0001"); todoListsManager.updateTodoList(todo.getTodoList()); replay(); todosManager.deleteTodo("0001"); assertFalse(todoList.getTodos().contains(todo)); } @Test public void testCompleteTodo() { todo.setTodoList(todoList); todoList.getTodos().add(todo); expect(todoDAO.getTodo("0001")).andReturn(todo); user.getTodoLists().add(todoList); expect(userManager.getCurrentUser()).andReturn(user); todoListsManager.updateTodoList(todo.getTodoList()); replay(); Todo todo = todosManager.completeTodo("0001"); assertTrue(todo.isCompleted()); assertNotNull(todo.getCompletionDate()); } @Test public void testReopenTodo() { todo.setTodoList(todoList); todoList.getTodos().add(todo); expect(todoDAO.getTodo("0001")).andReturn(todo); user.getTodoLists().add(todoList); expect(userManager.getCurrentUser()).andReturn(user); todoListsManager.updateTodoList(todo.getTodoList()); replay(); Todo todo = todosManager.reopenTodo("0001"); assertFalse(todo.isCompleted()); assertNull(todo.getCompletionDate()); } }