mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 18:49:06 +08:00 
			
		
		
		
	完成role单测
This commit is contained in:
		| @ -30,8 +30,8 @@ public interface SysErrorCodeConstants { | ||||
|  | ||||
|     // ========== 角色模块 1002003000 ========== | ||||
|     ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1002003000, "角色不存在"); | ||||
|     ErrorCode ROLE_NAME_DUPLICATE = new ErrorCode(1002003001, "已经存在名为【{}}】的角色"); | ||||
|     ErrorCode ROLE_CODE_DUPLICATE = new ErrorCode(1002003002, "已经存在编码为【{}}】的角色"); | ||||
|     ErrorCode ROLE_NAME_DUPLICATE = new ErrorCode(1002003001, "已经存在名为【{}】的角色"); | ||||
|     ErrorCode ROLE_CODE_DUPLICATE = new ErrorCode(1002003002, "已经存在编码为【{}】的角色"); | ||||
|     ErrorCode ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE = new ErrorCode(1002003004, "不能操作类型为系统内置的角色"); | ||||
|  | ||||
|     // ========== 用户模块 1002004000 ========== | ||||
|  | ||||
| @ -18,6 +18,7 @@ import cn.iocoder.dashboard.modules.system.enums.permission.SysRoleTypeEnum; | ||||
| import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysRoleProducer; | ||||
| import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; | ||||
| import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; | ||||
| import com.google.common.annotations.VisibleForTesting; | ||||
| import com.google.common.collect.ImmutableMap; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.lang.Nullable; | ||||
| @ -245,7 +246,8 @@ public class SysRoleServiceImpl implements SysRoleService { | ||||
|      * @param code 角色额编码 | ||||
|      * @param id 角色编号 | ||||
|      */ | ||||
|     private void checkDuplicateRole(String name, String code, Long id) { | ||||
|     @VisibleForTesting | ||||
|     public void checkDuplicateRole(String name, String code, Long id) { | ||||
|         // 1. 该 name 名字被其它角色所使用 | ||||
|         SysRoleDO role = roleMapper.selectByName(name); | ||||
|         if (role != null && !role.getId().equals(id)) { | ||||
| @ -258,7 +260,7 @@ public class SysRoleServiceImpl implements SysRoleService { | ||||
|         // 该 code 编码被其它角色所使用 | ||||
|         role = roleMapper.selectByCode(code); | ||||
|         if (role != null && !role.getId().equals(id)) { | ||||
|             throw ServiceExceptionUtil.exception(ROLE_CODE_DUPLICATE, name); | ||||
|             throw ServiceExceptionUtil.exception(ROLE_CODE_DUPLICATE, code); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -267,7 +269,8 @@ public class SysRoleServiceImpl implements SysRoleService { | ||||
|      * | ||||
|      * @param id 角色编号 | ||||
|      */ | ||||
|     private void checkUpdateRole(Long id) { | ||||
|     @VisibleForTesting | ||||
|     public void checkUpdateRole(Long id) { | ||||
|         SysRoleDO roleDO = roleMapper.selectById(id); | ||||
|         if (roleDO == null) { | ||||
|             throw ServiceExceptionUtil.exception(ROLE_NOT_EXISTS); | ||||
|  | ||||
| @ -0,0 +1,308 @@ | ||||
| package cn.iocoder.dashboard.modules.system.service.permission; | ||||
|  | ||||
| import cn.hutool.core.bean.BeanUtil; | ||||
| import cn.iocoder.dashboard.BaseDbUnitTest; | ||||
| import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.dashboard.common.pojo.PageResult; | ||||
| import cn.iocoder.dashboard.framework.security.core.enums.DataScopeEnum; | ||||
| import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleCreateReqVO; | ||||
| import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRolePageReqVO; | ||||
| import cn.iocoder.dashboard.modules.system.controller.permission.vo.role.SysRoleUpdateReqVO; | ||||
| import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; | ||||
| import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysRoleMapper; | ||||
| import cn.iocoder.dashboard.modules.system.enums.permission.SysRoleTypeEnum; | ||||
| import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysRoleProducer; | ||||
| import cn.iocoder.dashboard.modules.system.service.permission.impl.SysRoleServiceImpl; | ||||
| import cn.iocoder.dashboard.util.AopTargetUtils; | ||||
| import cn.iocoder.dashboard.util.AssertUtils; | ||||
| import cn.iocoder.dashboard.util.RandomUtils; | ||||
| import cn.iocoder.dashboard.util.object.ObjectUtils; | ||||
| import com.google.common.collect.Sets; | ||||
| import org.junit.jupiter.api.Assertions; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.mockito.Mockito; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.context.annotation.Import; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.*; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||||
| import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; | ||||
| import static cn.iocoder.dashboard.util.RandomUtils.*; | ||||
| import static cn.iocoder.dashboard.util.object.ObjectUtils.max; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
| import static org.mockito.Mockito.verify; | ||||
|  | ||||
| @Import(SysRoleServiceImpl.class) | ||||
| public class SysRoleServiceTest extends BaseDbUnitTest { | ||||
|  | ||||
|     @Resource | ||||
|     private SysRoleServiceImpl sysRoleService; | ||||
|  | ||||
|     @Resource | ||||
|     private SysRoleMapper roleMapper; | ||||
|  | ||||
|     @MockBean | ||||
|     private SysPermissionService sysPermissionService; | ||||
|  | ||||
|     @MockBean | ||||
|     private SysRoleProducer sysRoleProducer; | ||||
|  | ||||
|     @Test | ||||
|     public void testInitLocalCache_success() throws Exception { | ||||
|         SysRoleDO roleDO1 = createRoleDO("role1", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO1); | ||||
|         SysRoleDO roleDO2 = createRoleDO("role2", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO2); | ||||
|  | ||||
|         //调用 | ||||
|         sysRoleService.initLocalCache(); | ||||
|  | ||||
|         //断言 | ||||
|         //获取代理对象 | ||||
|         SysRoleServiceImpl target = (SysRoleServiceImpl) AopTargetUtils.getTarget(sysRoleService); | ||||
|  | ||||
|         Map<Long, SysRoleDO> roleCache = (Map<Long, SysRoleDO>) BeanUtil.getFieldValue(target, "roleCache"); | ||||
|         assertPojoEquals(roleDO1, roleCache.get(roleDO1.getId())); | ||||
|         assertPojoEquals(roleDO2, roleCache.get(roleDO2.getId())); | ||||
|  | ||||
|         Date maxUpdateTime = (Date) BeanUtil.getFieldValue(target, "maxUpdateTime"); | ||||
|         assertEquals(max(roleDO1.getUpdateTime(), roleDO2.getUpdateTime()), maxUpdateTime); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCreateRole_success() { | ||||
|         SysRoleCreateReqVO reqVO = randomPojo(SysRoleCreateReqVO.class, o -> { | ||||
|             o.setCode("role_code"); | ||||
|             o.setName("role_name"); | ||||
|             o.setRemark("remark"); | ||||
|             o.setType(SysRoleTypeEnum.CUSTOM.getType()); | ||||
|             o.setSort(1); | ||||
|         }); | ||||
|         Long roleId = sysRoleService.createRole(reqVO); | ||||
|  | ||||
|         //断言 | ||||
|         assertNotNull(roleId); | ||||
|         SysRoleDO roleDO = roleMapper.selectById(roleId); | ||||
|         assertPojoEquals(reqVO, roleDO); | ||||
|  | ||||
|         verify(sysRoleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRole_success() { | ||||
|         SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         //调用 | ||||
|         SysRoleUpdateReqVO reqVO = randomPojo(SysRoleUpdateReqVO.class, o -> { | ||||
|             o.setId(roleId); | ||||
|             o.setCode("role_code"); | ||||
|             o.setName("update_name"); | ||||
|             o.setType(SysRoleTypeEnum.SYSTEM.getType()); | ||||
|             o.setSort(999); | ||||
|         }); | ||||
|         sysRoleService.updateRole(reqVO); | ||||
|  | ||||
|         //断言 | ||||
|         SysRoleDO newRoleDO = roleMapper.selectById(roleId); | ||||
|         assertPojoEquals(reqVO, newRoleDO); | ||||
|  | ||||
|         verify(sysRoleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRoleStatus_success() { | ||||
|         SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, CommonStatusEnum.ENABLE.getStatus()); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         //调用 | ||||
|         sysRoleService.updateRoleStatus(roleId, CommonStatusEnum.DISABLE.getStatus()); | ||||
|  | ||||
|         //断言 | ||||
|         SysRoleDO newRoleDO = roleMapper.selectById(roleId); | ||||
|         assertEquals(CommonStatusEnum.DISABLE.getStatus(), newRoleDO.getStatus()); | ||||
|  | ||||
|         verify(sysRoleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRoleDataScope_success() { | ||||
|         SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         //调用 | ||||
|         Set<Long> deptIdSet = Arrays.asList(1L, 2L, 3L, 4L, 5L).stream().collect(Collectors.toSet()); | ||||
|         sysRoleService.updateRoleDataScope(roleId, DataScopeEnum.DEPT_CUSTOM.getScore(), deptIdSet); | ||||
|  | ||||
|         //断言 | ||||
|         SysRoleDO newRoleDO = roleMapper.selectById(roleId); | ||||
|         assertEquals(DataScopeEnum.DEPT_CUSTOM.getScore(), newRoleDO.getDataScope()); | ||||
|  | ||||
|         Set<Long> newDeptIdSet = newRoleDO.getDataScopeDeptIds(); | ||||
|         assertTrue(deptIdSet.size() == newDeptIdSet.size()); | ||||
|         deptIdSet.stream().forEach(d -> assertTrue(newDeptIdSet.contains(d))); | ||||
|  | ||||
|         verify(sysRoleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testDeleteRole_success() { | ||||
|         SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         //调用 | ||||
|         sysRoleService.deleteRole(roleId); | ||||
|  | ||||
|         //断言 | ||||
|         SysRoleDO newRoleDO = roleMapper.selectById(roleId); | ||||
|         assertNull(newRoleDO); | ||||
|  | ||||
|         verify(sysRoleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRoles_success() { | ||||
|         Map<Long, SysRoleDO> idRoleMap = new HashMap<>(); | ||||
|         // 验证查询状态为1的角色 | ||||
|         SysRoleDO roleDO1 = createRoleDO("role1", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); | ||||
|         roleMapper.insert(roleDO1); | ||||
|         idRoleMap.put(roleDO1.getId(), roleDO1); | ||||
|  | ||||
|         SysRoleDO roleDO2 = createRoleDO("role2", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1); | ||||
|         roleMapper.insert(roleDO2); | ||||
|         idRoleMap.put(roleDO2.getId(), roleDO2); | ||||
|  | ||||
|         // 以下是排除的角色 | ||||
|         SysRoleDO roleDO3 = createRoleDO("role3", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 2); | ||||
|         roleMapper.insert(roleDO3); | ||||
|  | ||||
|         //调用 | ||||
|         List<SysRoleDO> roles = sysRoleService.getRoles(Arrays.asList(1)); | ||||
|  | ||||
|         //断言 | ||||
|         assertEquals(2, roles.size()); | ||||
|         roles.stream().forEach(r -> assertPojoEquals(idRoleMap.get(r.getId()), r)); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRolePage_success() { | ||||
|         Map<Long, SysRoleDO> idRoleMap = new HashMap<>(); | ||||
|         // 验证名称包含"role", 状态为1,code为"code"的角色 | ||||
|         // 第一页 | ||||
|         SysRoleDO roleDO = createRoleDO("role1", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "code"); | ||||
|         roleMapper.insert(roleDO); | ||||
|         idRoleMap.put(roleDO.getId(), roleDO); | ||||
|         // 第二页 | ||||
|         roleDO = createRoleDO("role2", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "code"); | ||||
|         roleMapper.insert(roleDO); | ||||
|  | ||||
|         // 以下是排除的角色 | ||||
|         roleDO = createRoleDO("role3", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 2, "code"); | ||||
|         roleMapper.insert(roleDO); | ||||
|         roleDO = createRoleDO("role4", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL, 1, "xxxxx"); | ||||
|         roleMapper.insert(roleDO); | ||||
|  | ||||
|         //调用 | ||||
|         SysRolePageReqVO reqVO = randomPojo(SysRolePageReqVO.class, o -> { | ||||
|             o.setName("role"); | ||||
|             o.setCode("code"); | ||||
|             o.setStatus(1); | ||||
|             o.setPageNo(1); | ||||
|             o.setPageSize(1); | ||||
|             o.setBeginTime(null); | ||||
|             o.setEndTime(null); | ||||
|         }); | ||||
|         PageResult<SysRoleDO> result = sysRoleService.getRolePage(reqVO); | ||||
|         assertEquals(2, result.getTotal()); | ||||
|         result.getList().stream().forEach(r -> assertPojoEquals(idRoleMap.get(r.getId()), r)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckDuplicateRole_success() { | ||||
|         sysRoleService.checkDuplicateRole(randomString(), randomString(), null); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckDuplicateRole_nameDuplicate() { | ||||
|         SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|  | ||||
|         String duplicateName = "role_name"; | ||||
|  | ||||
|         assertServiceException(() -> sysRoleService.checkDuplicateRole(duplicateName, randomString(), null), ROLE_NAME_DUPLICATE, duplicateName); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckDuplicateRole_codeDuplicate() { | ||||
|         SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> { | ||||
|             o.setName("role_999"); | ||||
|             o.setCode("code"); | ||||
|             o.setType(SysRoleTypeEnum.CUSTOM.getType()); | ||||
|             o.setStatus(1); | ||||
|             o.setDataScope(DataScopeEnum.ALL.getScore()); | ||||
|         }); | ||||
|         roleMapper.insert(roleDO); | ||||
|  | ||||
|         String randomName = randomString(); | ||||
|         String duplicateCode = "code"; | ||||
|  | ||||
|         assertServiceException(() -> sysRoleService.checkDuplicateRole(randomName, duplicateCode, null), ROLE_CODE_DUPLICATE, duplicateCode); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckUpdateRole_success() { | ||||
|         SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         sysRoleService.checkUpdateRole(roleId); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckUpdateRole_roleIdNotExist() { | ||||
|         assertServiceException(() -> sysRoleService.checkUpdateRole(randomLongId()), ROLE_NOT_EXISTS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckUpdateRole_systemRoleCanNotBeUpdate() { | ||||
|         SysRoleDO roleDO = createRoleDO("role_name", SysRoleTypeEnum.SYSTEM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         assertServiceException(() -> sysRoleService.checkUpdateRole(roleId), ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); | ||||
|     } | ||||
|  | ||||
|     private SysRoleDO createRoleDO(String name, SysRoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status) { | ||||
|         return createRoleDO( name, typeEnum, scopeEnum, status, randomString()); | ||||
|     } | ||||
|  | ||||
|     private SysRoleDO createRoleDO(String name, SysRoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { | ||||
|         return createRoleDO(null, name, typeEnum, scopeEnum, status, code); | ||||
|     } | ||||
|  | ||||
|     private SysRoleDO createRoleDO(String name, SysRoleTypeEnum typeEnum, DataScopeEnum scopeEnum) { | ||||
|         return createRoleDO(null, name, typeEnum, scopeEnum, randomCommonStatus(), randomString()); | ||||
|     } | ||||
|  | ||||
|     private SysRoleDO createRoleDO(Long id, String name, SysRoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { | ||||
|         SysRoleDO roleDO = randomPojo(SysRoleDO.class, o -> { | ||||
|             o.setId(id); | ||||
|             o.setName(name); | ||||
|             o.setType(typeEnum.getType()); | ||||
|             o.setStatus(status); | ||||
|             o.setDataScope(scopeEnum.getScore()); | ||||
|             o.setCode(code); | ||||
|         }); | ||||
|         return roleDO; | ||||
|     } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 timfruit
					timfruit