mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-23 07:41:53 +08:00
完善 SysPermissionServiceImpl 数据权限相关的单元测试
This commit is contained in:
parent
619a7b73c3
commit
fba230c2b2
@ -48,7 +48,7 @@ public class SysPermissionServiceImpl implements SysPermissionService {
|
|||||||
/**
|
/**
|
||||||
* LoginUser 的 Context 缓存 Key
|
* LoginUser 的 Context 缓存 Key
|
||||||
*/
|
*/
|
||||||
private static final String CONTEXT_KEY = SysPermissionServiceImpl.class.getSimpleName();
|
public static final String CONTEXT_KEY = SysPermissionServiceImpl.class.getSimpleName();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 定时执行 {@link #schedulePeriodicRefresh()} 的周期
|
* 定时执行 {@link #schedulePeriodicRefresh()} 的周期
|
||||||
|
@ -1,12 +1,19 @@
|
|||||||
package cn.iocoder.yudao.adminserver.modules.system.service.permission;
|
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.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.SysRoleMenuDO;
|
||||||
import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysUserRoleDO;
|
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.SysRoleMenuMapper;
|
||||||
import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.permission.SysUserRoleMapper;
|
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.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.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.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
import org.springframework.context.annotation.Import;
|
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.AssertUtils.assertPojoEquals;
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
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.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@Import(SysPermissionServiceImpl.class)
|
@Import(SysPermissionServiceImpl.class)
|
||||||
public class SysPermissionServiceTest extends BaseDbUnitTest {
|
public class SysPermissionServiceTest extends BaseDbUnitTest {
|
||||||
@ -35,6 +46,8 @@ public class SysPermissionServiceTest extends BaseDbUnitTest {
|
|||||||
private SysRoleService roleService;
|
private SysRoleService roleService;
|
||||||
@MockBean
|
@MockBean
|
||||||
private SysMenuService menuService;
|
private SysMenuService menuService;
|
||||||
|
@MockBean
|
||||||
|
private SysDeptService deptService;
|
||||||
|
|
||||||
@MockBean
|
@MockBean
|
||||||
private SysPermissionProducer permissionProducer;
|
private SysPermissionProducer permissionProducer;
|
||||||
@ -106,4 +119,111 @@ public class SysPermissionServiceTest extends BaseDbUnitTest {
|
|||||||
assertPojoEquals(dbUserRoles.get(0), userRoleDO02);
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user