package net.techreadiness.service; import static org.mockito.Matchers.any; import static org.mockito.Mockito.times; import java.util.List; import net.techreadiness.persistence.dao.RoleDAO; import net.techreadiness.persistence.dao.UserDAO; import net.techreadiness.persistence.dao.UserRoleDAO; import net.techreadiness.persistence.domain.RoleDO; import net.techreadiness.persistence.domain.UserDO; import net.techreadiness.persistence.domain.UserRoleDO; import net.techreadiness.service.exception.AuthorizationException; import net.techreadiness.service.exception.ValidationServiceException; import net.techreadiness.service.object.User; import net.techreadiness.service.object.mapping.MappingServiceImpl; import org.junit.Before; import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import org.springframework.context.MessageSource; import com.google.common.collect.Lists; public class UserRoleServiceTest { private UserRoleServiceImpl userRoleService; private RoleDAO roleDAO; private UserRoleDAO userRoleDAO; private UserDAO userDAO; @Before public void setup() { userRoleService = new UserRoleServiceImpl(); roleDAO = Mockito.mock(RoleDAO.class); userRoleDAO = Mockito.mock(UserRoleDAO.class); userDAO = Mockito.mock(UserDAO.class); userRoleService.setRoleDao(roleDAO); userRoleService.setUserRoleDao(userRoleDAO); userRoleService.setUserDao(userDAO); userRoleService.messageSource = Mockito.mock(MessageSource.class); userRoleService.setMappingService(new MappingServiceImpl()); } @Test public void testPersistNotExist() { Mockito.when(userRoleDAO.getUserRoleByUserIdAndRoleId(any(Long.class), any(Long.class))).thenReturn(null); RoleDO role = new RoleDO(); Long roleId = Long.valueOf(3); role.setRoleId(roleId); UserDO user = new UserDO(); Mockito.when(roleDAO.getById(any(Long.class))).thenReturn(role); Mockito.when(userDAO.getById(any(Long.class))).thenReturn(user); Mockito.when(roleDAO.findDelegatableRoles(any(Long.class), any(Long.class))).thenReturn(Lists.newArrayList(role)); userRoleService.persist(new ServiceContext(), Long.valueOf(1), roleId); Mockito.verify(userRoleDAO, times(1)).persist(any(UserRoleDO.class)); } @Test public void testPersistExist() { UserRoleDO userRole = new UserRoleDO(); Mockito.when(userRoleDAO.getUserRoleByUserIdAndRoleId(any(Long.class), any(Long.class))).thenReturn(userRole); RoleDO role = new RoleDO(); Long roleId = Long.valueOf(3); role.setRoleId(roleId); UserDO user = new UserDO(); userRole.setRole(role); userRole.setUser(user); Mockito.when(roleDAO.getById(any(Long.class))).thenReturn(role); Mockito.when(userDAO.getById(any(Long.class))).thenReturn(user); Mockito.when(roleDAO.findDelegatableRoles(any(Long.class), any(Long.class))).thenReturn(Lists.newArrayList(role)); userRoleService.persist(new ServiceContext(), Long.valueOf(1), roleId); Mockito.verify(userRoleDAO, Mockito.never()).persist(any(UserRoleDO.class)); } @Test(expected = AuthorizationException.class) public void testPersistRoleNotConferrable() { Mockito.when(userRoleDAO.getUserRoleByUserIdAndRoleId(any(Long.class), any(Long.class))).thenReturn(null); RoleDO role = new RoleDO(); Long roleId = Long.valueOf(3); role.setRoleId(roleId); UserDO user = new UserDO(); Mockito.when(roleDAO.getById(any(Long.class))).thenReturn(role); Mockito.when(userDAO.getById(any(Long.class))).thenReturn(user); Mockito.when(roleDAO.findDelegatableRoles(any(Long.class), any(Long.class))).thenReturn( Lists.<RoleDO> newArrayList()); try { userRoleService.persist(new ServiceContext(), Long.valueOf(1), roleId); } finally { Mockito.verify(userRoleDAO, Mockito.never()).persist(any(UserRoleDO.class)); } } @Test(expected = ValidationServiceException.class) public void testMergeAddNotDelegatable() { RoleDO delegatable = new RoleDO(); delegatable.setRoleId(Long.valueOf(2)); delegatable.setName("delgatable"); Mockito.when(roleDAO.findDelegatableRoles(any(Long.class), any(Long.class))).thenReturn( Lists.<RoleDO> newArrayList()); Mockito.when(roleDAO.findRolesByCode(any(Long.class), any(List.class))).thenReturn(Lists.newArrayList(delegatable)); Mockito.when(userDAO.getById(Long.valueOf(5))).thenReturn(new UserDO()); try { ServiceContext context = new ServiceContext(); User user = new User(); user.setUserId(Long.valueOf(5)); context.setUser(user); userRoleService.mergeUserRoles(context, Long.valueOf(1), Lists.<String> newArrayList("foo")); } finally { Mockito.verify(userRoleDAO, Mockito.never()).persist(any(UserRoleDO.class)); } } @Test public void testDeleteExists() { RoleDO delegatable = new RoleDO(); Long roleId = Long.valueOf(2); delegatable.setRoleId(roleId); delegatable.setName("delgatable"); Mockito.when(userRoleDAO.getUserRoleByUserIdAndRoleId(any(Long.class), any(Long.class))) .thenReturn(new UserRoleDO()); Mockito.when(roleDAO.findDelegatableRoles(any(Long.class), any(Long.class))).thenReturn( Lists.newArrayList(delegatable)); userRoleService.delete(new ServiceContext(), Long.valueOf(1), roleId); Mockito.verify(userRoleDAO, times(1)).delete(any(UserRoleDO.class)); } @Test(expected = AuthorizationException.class) public void testDeleteExistsNotDelegatable() { RoleDO notDelegatable = new RoleDO(); Long roleId = Long.valueOf(2); notDelegatable.setRoleId(roleId); notDelegatable.setName("notDelgatable"); Mockito.when(roleDAO.getById(Matchers.eq(roleId))).thenReturn(notDelegatable); Mockito.when(userRoleDAO.getUserRoleByUserIdAndRoleId(any(Long.class), any(Long.class))) .thenReturn(new UserRoleDO()); Mockito.when(roleDAO.findDelegatableRoles(any(Long.class), any(Long.class))).thenReturn( Lists.<RoleDO> newArrayList()); try { userRoleService.delete(new ServiceContext(), Long.valueOf(1), roleId); } finally { Mockito.verify(userRoleDAO, Mockito.never()).delete(any(UserRoleDO.class)); } } }