package org.appfuse.service.impl;
import org.appfuse.Constants;
import org.appfuse.dao.RoleDao;
import org.appfuse.dao.UserDao;
import org.appfuse.model.Role;
import org.appfuse.model.User;
import org.appfuse.service.UserExistsException;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.security.crypto.password.PasswordEncoder;
import static org.junit.Assert.*;
import static org.mockito.BDDMockito.*;
public class UserManagerImplTest extends BaseManagerMockTestCase {
//~ Instance fields ========================================================
@Mock
private UserDao userDao;
@Mock
private PasswordEncoder passwordEncoder;
@Mock
private PasswordTokenManager passwordTokenManager;
@InjectMocks
private UserManagerImpl userManager = new UserManagerImpl();
//~ Methods ================================================================
@Test
public void testGetUser() throws Exception {
//given
final User testData = new User("1");
testData.getRoles().add(new Role("user"));
given(userDao.get(1L)).willReturn(testData);
//then
User user = userManager.getUser("1");
//then
assertTrue(user != null);
assert user != null;
assertTrue(user.getRoles().size() == 1);
}
@Test
public void testSaveUser() throws Exception {
//given
final User testData = new User("1");
testData.getRoles().add(new Role("user"));
given(userDao.get(1L)).willReturn(testData);
final User user = userManager.getUser("1");
user.setPhoneNumber("303-555-1212");
given(userDao.saveUser(user)).willReturn(user);
//when
User returned = userManager.saveUser(user);
//then
assertTrue(returned.getPhoneNumber().equals("303-555-1212"));
assertTrue(returned.getRoles().size() == 1);
}
@Test
public void testAddAndRemoveUser() throws Exception {
//given
User user = new User();
// call populate method in super class to populate test data
// from a properties file matching this class name
user = (User) populate(user);
Role role = new Role(Constants.USER_ROLE);
user.addRole(role);
final User user1 = user;
given(userDao.saveUser(user1)).willReturn(user1);
//when
user = userManager.saveUser(user);
//then
assertTrue(user.getUsername().equals("john"));
assertTrue(user.getRoles().size() == 1);
//given
willDoNothing().given(userDao).remove(5L);
userManager.removeUser("5");
given(userDao.get(5L)).willReturn(null);
//when
user = userManager.getUser("5");
//then
assertNull(user);
verify(userDao).remove(5L);
}
@Test
public void testUserExistsException() {
// set expectations
final User user = new User("admin");
user.setEmail("matt@raibledesigns.com");
willThrow(new DataIntegrityViolationException("")).given(userDao).saveUser(user);
// run test
try {
userManager.saveUser(user);
fail("Expected UserExistsException not thrown");
} catch (UserExistsException e) {
log.debug("expected exception: " + e.getMessage());
assertNotNull(e);
}
}
}