mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-28 00:38:42 +08:00 
			
		
		
		
	完善 SysPermissionServiceImpl 数据权限相关的单元测试
This commit is contained in:
		| @@ -48,7 +48,7 @@ public class SysPermissionServiceImpl implements SysPermissionService { | ||||
|     /** | ||||
|      * LoginUser 的 Context 缓存 Key | ||||
|      */ | ||||
|     private static final String CONTEXT_KEY = SysPermissionServiceImpl.class.getSimpleName(); | ||||
|     public static final String CONTEXT_KEY = SysPermissionServiceImpl.class.getSimpleName(); | ||||
|  | ||||
|     /** | ||||
|      * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 | ||||
|   | ||||
| @@ -1,12 +1,19 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.system.service.permission; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.iocoder.yudao.adminserver.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleMenuDO; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysUserRoleDO; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysRoleMenuMapper; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysUserRoleMapper; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission.SysPermissionProducer; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.permission.impl.SysPermissionServiceImpl; | ||||
| import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO; | ||||
| import cn.iocoder.yudao.framework.security.core.LoginUser; | ||||
| import cn.iocoder.yudao.framework.security.core.enums.DataScopeEnum; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.context.annotation.Import; | ||||
| @@ -17,8 +24,12 @@ import java.util.List; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; | ||||
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||||
| import static java.util.Collections.singletonList; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
| import static org.mockito.ArgumentMatchers.eq; | ||||
| import static org.mockito.ArgumentMatchers.same; | ||||
| import static org.mockito.Mockito.verify; | ||||
| import static org.mockito.Mockito.when; | ||||
|  | ||||
| @Import(SysPermissionServiceImpl.class) | ||||
| public class SysPermissionServiceTest extends BaseDbUnitTest { | ||||
| @@ -35,6 +46,8 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { | ||||
|     private SysRoleService roleService; | ||||
|     @MockBean | ||||
|     private SysMenuService menuService; | ||||
|     @MockBean | ||||
|     private SysDeptService deptService; | ||||
|  | ||||
|     @MockBean | ||||
|     private SysPermissionProducer permissionProducer; | ||||
| @@ -106,4 +119,111 @@ public class SysPermissionServiceTest extends BaseDbUnitTest { | ||||
|         assertPojoEquals(dbUserRoles.get(0), userRoleDO02); | ||||
|     } | ||||
|  | ||||
|     @Test // 测试从 context 获取的场景 | ||||
|     public void testGetDeptDataPermission_fromContext() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         DeptDataPermissionRespDTO respDTO = new DeptDataPermissionRespDTO(); | ||||
|         loginUser.setContext(SysPermissionServiceImpl.CONTEXT_KEY, respDTO); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         // 断言 | ||||
|         assertSame(respDTO, result); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_All() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.ALL.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         // 断言 | ||||
|         assertTrue(result.getAll()); | ||||
|         assertFalse(result.getSelf()); | ||||
|         assertTrue(CollUtil.isEmpty(result.getDeptIds())); | ||||
|         assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_DeptCustom() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_CUSTOM.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         // 断言 | ||||
|         assertFalse(result.getAll()); | ||||
|         assertFalse(result.getSelf()); | ||||
|         assertEquals(roleDO.getDataScopeDeptIds().size() + 1, result.getDeptIds().size()); | ||||
|         assertTrue(CollUtil.containsAll(result.getDeptIds(), roleDO.getDataScopeDeptIds())); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), loginUser.getDeptId())); | ||||
|         assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_DeptOnly() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_ONLY.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         // 断言 | ||||
|         assertFalse(result.getAll()); | ||||
|         assertFalse(result.getSelf()); | ||||
|         assertEquals(1, result.getDeptIds().size()); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), loginUser.getDeptId())); | ||||
|         assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_DeptAndChild() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法(角色) | ||||
|         SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_AND_CHILD.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|         // mock 方法(部门) | ||||
|         SysDeptDO deptDO = randomPojo(SysDeptDO.class); | ||||
|         when(deptService.getDeptsByParentIdFromCache(eq(loginUser.getDeptId()), eq(true))) | ||||
|                 .thenReturn(singletonList(deptDO)); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         // 断言 | ||||
|         assertFalse(result.getAll()); | ||||
|         assertFalse(result.getSelf()); | ||||
|         assertEquals(1, result.getDeptIds().size()); | ||||
|         assertTrue(CollUtil.contains(result.getDeptIds(), deptDO.getId())); | ||||
|         assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetDeptDataPermission_Self() { | ||||
|         // 准备参数 | ||||
|         LoginUser loginUser = randomPojo(LoginUser.class); | ||||
|         // mock 方法 | ||||
|         SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> o.setDataScope(DataScopeEnum.SELF.getScope())); | ||||
|         when(roleService.getRolesFromCache(same(loginUser.getRoleIds()))).thenReturn(singletonList(roleDO)); | ||||
|  | ||||
|         // 调用 | ||||
|         DeptDataPermissionRespDTO result = permissionService.getDeptDataPermission(loginUser); | ||||
|         // 断言 | ||||
|         assertFalse(result.getAll()); | ||||
|         assertTrue(result.getSelf()); | ||||
|         assertTrue(CollUtil.isEmpty(result.getDeptIds())); | ||||
|         assertSame(result, loginUser.getContext(SysPermissionServiceImpl.CONTEXT_KEY, DeptDataPermissionRespDTO.class)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV