package tudu.service.impl;
import static org.easymock.EasyMock.*;
import org.junit.After;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import tudu.domain.RolesEnum;
import tudu.domain.dao.RoleDAO;
import tudu.domain.dao.TodoDAO;
import tudu.domain.dao.TodoListDAO;
import tudu.domain.dao.UserDAO;
import tudu.domain.model.Role;
import tudu.domain.model.Todo;
import tudu.domain.model.TodoList;
import tudu.domain.model.User;
import tudu.service.UserAlreadyExistsException;
public class UserManagerImplTest {
User user = new User();
UserDAO userDAO = null;
RoleDAO roleDAO = null;
TodoListDAO todoListDAO = null;
TodoDAO todoDAO = null;
UserManagerImpl userManager = new UserManagerImpl();
@Before
public void before() {
user.setLogin("test_user");
user.setFirstName("First name");
user.setLastName("Last name");
userDAO = createMock(UserDAO.class);
roleDAO = createMock(RoleDAO.class);
todoListDAO = createMock(TodoListDAO.class);
todoDAO = createMock(TodoDAO.class);
ReflectionTestUtils.setField(userManager, "userDAO", userDAO);
ReflectionTestUtils.setField(userManager, "roleDAO", roleDAO);
ReflectionTestUtils.setField(userManager, "todoListDAO", todoListDAO);
ReflectionTestUtils.setField(userManager, "todoDAO", todoDAO);
}
@After
public void after() {
verify(userDAO);
verify(roleDAO);
verify(todoListDAO);
verify(todoDAO);
}
private void replay_() {
replay(userDAO);
replay(roleDAO);
replay(todoListDAO);
replay(todoDAO);
}
@Test
public void testFindUser() {
expect(userDAO.getUser("test_user")).andReturn(user);
replay_();
User testUser = userManager.findUser("test_user");
assertEquals(testUser, user);
}
@Test
public void testUpdateUser() {
userDAO.updateUser(user);
replay_();
userManager.updateUser(user);
}
@Test
public void testCreateUser() {
expect(userDAO.getUser("test_user")).andReturn(null);
Role role = new Role();
role.setRole(RolesEnum.ROLE_USER.toString());
expect(roleDAO.getRole(RolesEnum.ROLE_USER.toString())).andReturn(role);
userDAO.saveUser(user);
TodoList todoList = new TodoList();
todoListDAO.saveTodoList(todoList);
Todo todo = new Todo();
todoDAO.saveTodo(todo);
todoListDAO.updateTodoList(todoList);
replay_();
try {
userManager.createUser(user);
assertTrue(user.isEnabled());
assertNotNull(user.getCreationDate());
assertNotNull(user.getLastAccessDate());
assertEquals(1, user.getRoles().size());
Role testRole = user.getRoles().iterator().next();
assertEquals(RolesEnum.ROLE_USER.toString(), testRole.getRole());
assertEquals(1, user.getTodoLists().size());
TodoList testTodoList = user.getTodoLists().iterator().next();
assertNotNull(testTodoList.getLastUpdate());
assertEquals(1, testTodoList.getTodos().size());
} catch (UserAlreadyExistsException e) {
fail("A UserAlreadyExistsException should not have been thrown.");
}
}
@Test
public void testFailedCreateUser() {
expect(userDAO.getUser("test_user")).andReturn(user);
replay_();
try {
userManager.createUser(user);
fail("A UserAlreadyExistsException should have been thrown.");
} catch (UserAlreadyExistsException e) {
}
}
}