mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-01 02:38:43 +08:00 
			
		
		
		
	完善 RoleServiceImpl 单元测试
This commit is contained in:
		| @@ -106,7 +106,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|         Collection<Integer> menusStatuses = asList(0, 1); | ||||
|         // mock 方法 | ||||
|         List<RoleDO> roleList = singletonList(randomPojo(RoleDO.class, o -> o.setId(100L))); | ||||
|         when(roleService.getRolesFromCache(eq(roleIds))).thenReturn(roleList); | ||||
|         when(roleService.getRoleListFromCache(eq(roleIds))).thenReturn(roleList); | ||||
|         when(roleService.hasAnySuperAdmin(same(roleList))).thenReturn(true); | ||||
|         List<MenuDO> menuList = randomPojoList(MenuDO.class); | ||||
|         when(menuService.getMenuListFromCache(eq(menuTypes), eq(menusStatuses))).thenReturn(menuList); | ||||
| @@ -419,7 +419,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRoleFromCache(eq(100L))).thenReturn(role); | ||||
|         // mock 其它方法 | ||||
|         when(roleService.getRolesFromCache(eq(asSet(100L)))).thenReturn(singletonList(role)); | ||||
|         when(roleService.getRoleListFromCache(eq(asSet(100L)))).thenReturn(singletonList(role)); | ||||
|  | ||||
|         // 调用 | ||||
|         boolean has = permissionService.hasAnyRoles(userId, roles); | ||||
| @@ -436,7 +436,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.ALL.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|  | ||||
|         // 调用 | ||||
| @@ -456,7 +456,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_CUSTOM.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|         // mock 部门的返回 | ||||
|         when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), null, null); // 最后返回 null 的目的,看看会不会重复调用 | ||||
| @@ -480,7 +480,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_ONLY.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|         // mock 部门的返回 | ||||
|         when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), null, null); // 最后返回 null 的目的,看看会不会重复调用 | ||||
| @@ -503,7 +503,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.DEPT_AND_CHILD.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|         // mock 部门的返回 | ||||
|         when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), null, null); // 最后返回 null 的目的,看看会不会重复调用 | ||||
| @@ -531,7 +531,7 @@ public class PermissionServiceTest extends BaseDbUnitTest { | ||||
|         // mock 获得用户的角色 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setDataScope(DataScopeEnum.SELF.getScope()) | ||||
|                 .setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(roleService.getRolesFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleListFromCache(eq(singleton(2L)))).thenReturn(singletonList(roleDO)); | ||||
|         when(roleService.getRoleFromCache(eq(2L))).thenReturn(roleDO); | ||||
|  | ||||
|         // 调用 | ||||
|   | ||||
| @@ -0,0 +1,399 @@ | ||||
| package cn.iocoder.yudao.module.system.service.permission; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; | ||||
| import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; | ||||
| import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; | ||||
| import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; | ||||
| import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper; | ||||
| import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum; | ||||
| import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; | ||||
| import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.context.annotation.Import; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
|  | ||||
| import static cn.hutool.core.util.RandomUtil.randomEle; | ||||
| import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; | ||||
| import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; | ||||
| import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; | ||||
| import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; | ||||
| import static java.util.Collections.singleton; | ||||
| import static java.util.Collections.singletonList; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
| import static org.mockito.Mockito.verify; | ||||
|  | ||||
| @Import(RoleServiceImpl.class) | ||||
| public class RoleServiceImplTest extends BaseDbUnitTest { | ||||
|  | ||||
|     @Resource | ||||
|     private RoleServiceImpl roleService; | ||||
|  | ||||
|     @Resource | ||||
|     private RoleMapper roleMapper; | ||||
|  | ||||
|     @MockBean | ||||
|     private PermissionService permissionService; | ||||
|     @MockBean | ||||
|     private RoleProducer roleProducer; | ||||
|  | ||||
|     @Test | ||||
|     public void testInitLocalCache() { | ||||
|         RoleDO roleDO1 = randomPojo(RoleDO.class); | ||||
|         roleMapper.insert(roleDO1); | ||||
|         RoleDO roleDO2 = randomPojo(RoleDO.class); | ||||
|         roleMapper.insert(roleDO2); | ||||
|  | ||||
|         // 调用 | ||||
|         roleService.initLocalCache(); | ||||
|         // 断言 roleCache 缓存 | ||||
|         Map<Long, RoleDO> roleCache = roleService.getRoleCache(); | ||||
|         assertPojoEquals(roleDO1, roleCache.get(roleDO1.getId())); | ||||
|         assertPojoEquals(roleDO2, roleCache.get(roleDO2.getId())); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCreateRole_success() { | ||||
|         // 准备参数 | ||||
|         RoleCreateReqVO reqVO = randomPojo(RoleCreateReqVO.class); | ||||
|  | ||||
|         // 调用 | ||||
|         Long roleId = roleService.createRole(reqVO, null); | ||||
|         // 断言 | ||||
|         RoleDO roleDO = roleMapper.selectById(roleId); | ||||
|         assertPojoEquals(reqVO, roleDO); | ||||
|         assertEquals(RoleTypeEnum.CUSTOM.getType(), roleDO.getType()); | ||||
|         assertEquals(CommonStatusEnum.ENABLE.getStatus(), roleDO.getStatus()); | ||||
|         assertEquals(DataScopeEnum.ALL.getScope(), roleDO.getDataScope()); | ||||
|         // verify 发送刷新消息 | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRole_success() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType())); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 准备参数 | ||||
|         Long id = roleDO.getId(); | ||||
|         RoleUpdateReqVO reqVO = randomPojo(RoleUpdateReqVO.class, o -> o.setId(id)); | ||||
|  | ||||
|         // 调用 | ||||
|         roleService.updateRole(reqVO); | ||||
|         // 断言 | ||||
|         RoleDO newRoleDO = roleMapper.selectById(id); | ||||
|         assertPojoEquals(reqVO, newRoleDO); | ||||
|         // verify 发送刷新消息 | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRoleStatus_success() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()) | ||||
|                 .setType(RoleTypeEnum.CUSTOM.getType())); | ||||
|         roleMapper.insert(roleDO); | ||||
|  | ||||
|         // 准备参数 | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         // 调用 | ||||
|         roleService.updateRoleStatus(roleId, CommonStatusEnum.DISABLE.getStatus()); | ||||
|         // 断言 | ||||
|         RoleDO dbRoleDO = roleMapper.selectById(roleId); | ||||
|         assertEquals(CommonStatusEnum.DISABLE.getStatus(), dbRoleDO.getStatus()); | ||||
|         // verify 发送刷新消息 | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRoleDataScope_success() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType())); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 准备参数 | ||||
|         Long id = roleDO.getId(); | ||||
|         Integer dataScope = randomEle(DataScopeEnum.values()).getScope(); | ||||
|         Set<Long> dataScopeRoleIds = randomSet(Long.class); | ||||
|  | ||||
|         // 调用 | ||||
|         roleService.updateRoleDataScope(id, dataScope, dataScopeRoleIds); | ||||
|         // 断言 | ||||
|         RoleDO dbRoleDO = roleMapper.selectById(id); | ||||
|         assertEquals(dataScope, dbRoleDO.getDataScope()); | ||||
|         assertEquals(dataScopeRoleIds, dbRoleDO.getDataScopeDeptIds()); | ||||
|         // verify 发送刷新消息 | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testDeleteRole_success() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType())); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 参数准备 | ||||
|         Long id = roleDO.getId(); | ||||
|  | ||||
|         // 调用 | ||||
|         roleService.deleteRole(id); | ||||
|         // 断言 | ||||
|         assertNull(roleMapper.selectById(id)); | ||||
|         // verify 删除相关数据 | ||||
|         verify(permissionService).processRoleDeleted(id); | ||||
|         // verify 发送刷新消息 | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRoleFromCache() { | ||||
|         // mock 数据(缓存) | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class); | ||||
|         roleMapper.insert(roleDO); | ||||
|         roleService.initLocalCache(); | ||||
|         // 参数准备 | ||||
|         Long id = roleDO.getId(); | ||||
|  | ||||
|         // 调用 | ||||
|         RoleDO dbRoleDO = roleService.getRoleFromCache(id); | ||||
|         // 断言 | ||||
|         assertPojoEquals(roleDO, dbRoleDO); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRole() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 参数准备 | ||||
|         Long id = roleDO.getId(); | ||||
|  | ||||
|         // 调用 | ||||
|         RoleDO dbRoleDO = roleService.getRole(id); | ||||
|         // 断言 | ||||
|         assertPojoEquals(roleDO, dbRoleDO); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRoleListByStatus_statusNotEmpty() { | ||||
|         // mock 数据 | ||||
|         RoleDO dbRole = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         roleMapper.insert(dbRole); | ||||
|         // 测试 status 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | ||||
|  | ||||
|         // 调用 | ||||
|         List<RoleDO> list = roleService.getRoleListByStatus(singleton(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         // 断言 | ||||
|         assertEquals(1, list.size()); | ||||
|         assertPojoEquals(dbRole, list.get(0)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRoleListByStatus_statusEmpty() { | ||||
|         // mock 数据 | ||||
|         RoleDO dbRole01 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         roleMapper.insert(dbRole01); | ||||
|         RoleDO dbRole02 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); | ||||
|         roleMapper.insert(dbRole02); | ||||
|  | ||||
|         // 调用 | ||||
|         List<RoleDO> list = roleService.getRoleListByStatus(null); | ||||
|         // 断言 | ||||
|         assertEquals(2, list.size()); | ||||
|         assertPojoEquals(dbRole01, list.get(0)); | ||||
|         assertPojoEquals(dbRole02, list.get(1)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRoleListFromCache() { | ||||
|         // mock 数据 | ||||
|         RoleDO dbRole = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         roleMapper.insert(dbRole); | ||||
|         // 测试 id 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> {})); | ||||
|         roleService.initLocalCache(); | ||||
|         // 准备参数 | ||||
|         Collection<Long> ids = singleton(dbRole.getId()); | ||||
|  | ||||
|         // 调用 | ||||
|         List<RoleDO> list = roleService.getRoleListFromCache(ids); | ||||
|         // 断言 | ||||
|         assertEquals(1, list.size()); | ||||
|         assertPojoEquals(dbRole, list.get(0)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRoleList() { | ||||
|         // mock 数据 | ||||
|         RoleDO dbRole = randomPojo(RoleDO.class, o -> { // 等会查询到 | ||||
|             o.setName("土豆"); | ||||
|             o.setCode("tudou"); | ||||
|             o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|             o.setCreateTime(buildTime(2022, 2, 8)); | ||||
|         }); | ||||
|         roleMapper.insert(dbRole); | ||||
|         // 测试 name 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setName("红薯"))); | ||||
|         // 测试 code 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCode("hong"))); | ||||
|         // 测试 createTime 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCreateTime(buildTime(2022, 2, 16)))); | ||||
|         // 准备参数 | ||||
|         RoleExportReqVO reqVO = new RoleExportReqVO(); | ||||
|         reqVO.setName("土豆"); | ||||
|         reqVO.setCode("tu"); | ||||
|         reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|         reqVO.setCreateTime(buildBetweenTime(2022, 2, 1, 2022, 2, 12)); | ||||
|  | ||||
|         // 调用 | ||||
|         List<RoleDO> list = roleService.getRoleList(reqVO); | ||||
|         // 断言 | ||||
|         assertEquals(1, list.size()); | ||||
|         assertPojoEquals(dbRole, list.get(0)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRolePage() { | ||||
|         // mock 数据 | ||||
|         RoleDO dbRole = randomPojo(RoleDO.class, o -> { // 等会查询到 | ||||
|             o.setName("土豆"); | ||||
|             o.setCode("tudou"); | ||||
|             o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|             o.setCreateTime(buildTime(2022, 2, 8)); | ||||
|         }); | ||||
|         roleMapper.insert(dbRole); | ||||
|         // 测试 name 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setName("红薯"))); | ||||
|         // 测试 code 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCode("hong"))); | ||||
|         // 测试 createTime 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCreateTime(buildTime(2022, 2, 16)))); | ||||
|         // 准备参数 | ||||
|         RolePageReqVO reqVO = new RolePageReqVO(); | ||||
|         reqVO.setName("土豆"); | ||||
|         reqVO.setCode("tu"); | ||||
|         reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|         reqVO.setCreateTime(buildBetweenTime(2022, 2, 1, 2022, 2, 12)); | ||||
|  | ||||
|         // 调用 | ||||
|         PageResult<RoleDO> pageResult = roleService.getRolePage(reqVO); | ||||
|         // 断言 | ||||
|         assertEquals(1, pageResult.getTotal()); | ||||
|         assertEquals(1, pageResult.getList().size()); | ||||
|         assertPojoEquals(dbRole, pageResult.getList().get(0)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testHasAnySuperAdmin() { | ||||
|         // 是超级 | ||||
|         assertTrue(roleService.hasAnySuperAdmin(singletonList(randomPojo(RoleDO.class, | ||||
|                 o -> o.setCode("super_admin"))))); | ||||
|         // 非超级 | ||||
|         assertFalse(roleService.hasAnySuperAdmin(singletonList(randomPojo(RoleDO.class, | ||||
|                 o -> o.setCode("tenant_admin"))))); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateRoleDuplicate_success() { | ||||
|         // 调用,不会抛异常 | ||||
|         roleService.validateRoleDuplicate(randomString(), randomString(), null); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateRoleDuplicate_nameDuplicate() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setName("role_name")); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 准备参数 | ||||
|         String name = "role_name"; | ||||
|  | ||||
|         // 调用,并断言异常 | ||||
|         assertServiceException(() -> roleService.validateRoleDuplicate(name, randomString(), null), | ||||
|                 ROLE_NAME_DUPLICATE, name); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateRoleDuplicate_codeDuplicate() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setCode("code")); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 准备参数 | ||||
|         String code = "code"; | ||||
|  | ||||
|         // 调用,并断言异常 | ||||
|         assertServiceException(() -> roleService.validateRoleDuplicate(randomString(), code, null), | ||||
|                 ROLE_CODE_DUPLICATE, code); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateUpdateRole_success() { | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 准备参数 | ||||
|         Long id = roleDO.getId(); | ||||
|  | ||||
|         // 调用,无异常 | ||||
|         roleService.validateRoleForUpdate(id); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateUpdateRole_roleIdNotExist() { | ||||
|         assertServiceException(() -> roleService.validateRoleForUpdate(randomLongId()), ROLE_NOT_EXISTS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateUpdateRole_systemRoleCanNotBeUpdate() { | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.SYSTEM.getType())); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 准备参数 | ||||
|         Long id = roleDO.getId(); | ||||
|  | ||||
|         assertServiceException(() -> roleService.validateRoleForUpdate(id), | ||||
|                 ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateRoleList_success() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         roleMapper.insert(roleDO); | ||||
|         // 准备参数 | ||||
|         List<Long> ids = singletonList(roleDO.getId()); | ||||
|  | ||||
|         // 调用,无需断言 | ||||
|         roleService.validateRoleList(ids); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateRoleList_notFound() { | ||||
|         // 准备参数 | ||||
|         List<Long> ids = singletonList(randomLongId()); | ||||
|  | ||||
|         // 调用, 并断言异常 | ||||
|         assertServiceException(() -> roleService.validateRoleList(ids), ROLE_NOT_EXISTS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testValidateRoleList_notEnable() { | ||||
|         // mock 数据 | ||||
|         RoleDO RoleDO = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); | ||||
|         roleMapper.insert(RoleDO); | ||||
|         // 准备参数 | ||||
|         List<Long> ids = singletonList(RoleDO.getId()); | ||||
|  | ||||
|         // 调用, 并断言异常 | ||||
|         assertServiceException(() -> roleService.validateRoleList(ids), ROLE_IS_DISABLE, RoleDO.getName()); | ||||
|     } | ||||
| } | ||||
| @@ -1,301 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.system.service.permission; | ||||
|  | ||||
| import cn.hutool.core.util.RandomUtil; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleCreateReqVO; | ||||
| import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; | ||||
| import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; | ||||
| import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; | ||||
| import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper; | ||||
| import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum; | ||||
| import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; | ||||
| import cn.iocoder.yudao.module.system.mq.producer.permission.RoleProducer; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.context.annotation.Import; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.*; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; | ||||
| import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; | ||||
| import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
| import static org.mockito.Mockito.verify; | ||||
|  | ||||
| // TODO @芋艿:单测的代码质量可以提升下 | ||||
| @Import(RoleServiceImpl.class) | ||||
| public class RoleServiceTest extends BaseDbUnitTest { | ||||
|  | ||||
|     @Resource | ||||
|     private RoleServiceImpl roleService; | ||||
|  | ||||
|     @Resource | ||||
|     private RoleMapper roleMapper; | ||||
|  | ||||
|     @MockBean | ||||
|     private PermissionService permissionService; | ||||
|     @MockBean | ||||
|     private RoleProducer roleProducer; | ||||
|  | ||||
|     @Test | ||||
|     public void testInitLocalCache() { | ||||
|         RoleDO roleDO1 = randomRole(); | ||||
|         roleMapper.insert(roleDO1); | ||||
|         RoleDO roleDO2 = randomRole(); | ||||
|         roleMapper.insert(roleDO2); | ||||
|  | ||||
|         // 调用 | ||||
|         roleService.initLocalCache(); | ||||
|         // 断言 roleCache 缓存 | ||||
|         Map<Long, RoleDO> roleCache = roleService.getRoleCache(); | ||||
|         assertPojoEquals(roleDO1, roleCache.get(roleDO1.getId())); | ||||
|         assertPojoEquals(roleDO2, roleCache.get(roleDO2.getId())); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCreateRole_success() { | ||||
|         // 准备参数 | ||||
|         RoleCreateReqVO reqVO = randomPojo(RoleCreateReqVO.class); | ||||
|  | ||||
|         // 调用 | ||||
|         Long roleId = roleService.createRole(reqVO, null); | ||||
|         // 断言 | ||||
|         assertNotNull(roleId); | ||||
|         RoleDO roleDO = roleMapper.selectById(roleId); | ||||
|         assertPojoEquals(reqVO, roleDO); | ||||
|         assertEquals(RoleTypeEnum.CUSTOM.getType(), roleDO.getType()); | ||||
|         assertEquals(CommonStatusEnum.ENABLE.getStatus(), roleDO.getStatus()); | ||||
|         assertEquals(DataScopeEnum.ALL.getScope(), roleDO.getDataScope()); | ||||
|         // verify 发送刷新消息 | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRole_success() { | ||||
|         // mock 数据 | ||||
|         RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         //调用 | ||||
|         RoleUpdateReqVO reqVO = randomPojo(RoleUpdateReqVO.class, o -> { | ||||
|             o.setId(roleId); | ||||
|             o.setCode("role_code"); | ||||
|             o.setName("update_name"); | ||||
|             o.setSort(999); | ||||
|         }); | ||||
|         roleService.updateRole(reqVO); | ||||
|  | ||||
|         //断言 | ||||
|         RoleDO newRoleDO = roleMapper.selectById(roleId); | ||||
|         assertPojoEquals(reqVO, newRoleDO); | ||||
|  | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRoleStatus_success() { | ||||
|         RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL, CommonStatusEnum.ENABLE.getStatus()); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         //调用 | ||||
|         roleService.updateRoleStatus(roleId, CommonStatusEnum.DISABLE.getStatus()); | ||||
|  | ||||
|         //断言 | ||||
|         RoleDO newRoleDO = roleMapper.selectById(roleId); | ||||
|         assertEquals(CommonStatusEnum.DISABLE.getStatus(), newRoleDO.getStatus()); | ||||
|  | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateRoleDataScope_success() { | ||||
|         RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         //调用 | ||||
|         Set<Long> deptIdSet = new HashSet<>(Arrays.asList(1L, 2L, 3L, 4L, 5L)); | ||||
|         roleService.updateRoleDataScope(roleId, DataScopeEnum.DEPT_CUSTOM.getScope(), deptIdSet); | ||||
|  | ||||
|         //断言 | ||||
|         RoleDO newRoleDO = roleMapper.selectById(roleId); | ||||
|         assertEquals(DataScopeEnum.DEPT_CUSTOM.getScope(), newRoleDO.getDataScope()); | ||||
|  | ||||
|         Set<Long> newDeptIdSet = newRoleDO.getDataScopeDeptIds(); | ||||
|         assertEquals(deptIdSet.size(), newDeptIdSet.size()); | ||||
|         deptIdSet.stream().forEach(d -> assertTrue(newDeptIdSet.contains(d))); | ||||
|  | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testDeleteRole_success() { | ||||
|         RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         //调用 | ||||
|         roleService.deleteRole(roleId); | ||||
|  | ||||
|         //断言 | ||||
|         RoleDO newRoleDO = roleMapper.selectById(roleId); | ||||
|         assertNull(newRoleDO); | ||||
|  | ||||
|         verify(roleProducer).sendRoleRefreshMessage(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRoles() { | ||||
|         // mock 数据 | ||||
|         RoleDO dbRole = randomPojo(RoleDO.class, o -> { // 等会查询到 | ||||
|             o.setName("土豆"); | ||||
|             o.setCode("tudou"); | ||||
|             o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|             o.setCreateTime(buildTime(2022, 2, 8)); | ||||
|         }); | ||||
|         roleMapper.insert(dbRole); | ||||
|         // 测试 name 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setName("红薯"))); | ||||
|         // 测试 code 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCode("hong"))); | ||||
|         // 测试 createTime 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCreateTime(buildTime(2022, 2, 16)))); | ||||
|         // 准备参数 | ||||
|         RoleExportReqVO reqVO = new RoleExportReqVO(); | ||||
|         reqVO.setName("土豆"); | ||||
|         reqVO.setCode("tu"); | ||||
|         reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|         reqVO.setCreateTime((new LocalDateTime[]{buildTime(2022, 2, 1),buildTime(2022, 2, 12)})); | ||||
|  | ||||
|         // 调用 | ||||
|         List<RoleDO> list = roleService.getRoleList(reqVO); | ||||
|         // 断言 | ||||
|         assertEquals(1, list.size()); | ||||
|         assertPojoEquals(dbRole, list.get(0)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testGetRolePage() { | ||||
|         // mock 数据 | ||||
|         RoleDO dbRole = randomPojo(RoleDO.class, o -> { // 等会查询到 | ||||
|             o.setName("土豆"); | ||||
|             o.setCode("tudou"); | ||||
|             o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|             o.setCreateTime(buildTime(2022, 2, 8)); | ||||
|         }); | ||||
|         roleMapper.insert(dbRole); | ||||
|         // 测试 name 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setName("红薯"))); | ||||
|         // 测试 code 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCode("hong"))); | ||||
|         // 测试 createTime 不匹配 | ||||
|         roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setCreateTime(buildTime(2022, 2, 16)))); | ||||
|         // 准备参数 | ||||
|         RolePageReqVO reqVO = new RolePageReqVO(); | ||||
|         reqVO.setName("土豆"); | ||||
|         reqVO.setCode("tu"); | ||||
|         reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|         reqVO.setCreateTime((new LocalDateTime[]{buildTime(2022, 2, 1),buildTime(2022, 2, 12)})); | ||||
|  | ||||
|         // 调用 | ||||
|         PageResult<RoleDO> pageResult = roleService.getRolePage(reqVO); | ||||
|         // 断言 | ||||
|         assertEquals(1, pageResult.getTotal()); | ||||
|         assertEquals(1, pageResult.getList().size()); | ||||
|         assertPojoEquals(dbRole, pageResult.getList().get(0)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckDuplicateRole_success() { | ||||
|         roleService.checkDuplicateRole(randomString(), randomString(), null); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckDuplicateRole_nameDuplicate() { | ||||
|         RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|  | ||||
|         String duplicateName = "role_name"; | ||||
|  | ||||
|         assertServiceException(() -> roleService.checkDuplicateRole(duplicateName, randomString(), null), ROLE_NAME_DUPLICATE, duplicateName); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckDuplicateRole_codeDuplicate() { | ||||
|         RoleDO roleDO = randomPojo(RoleDO.class, o -> { | ||||
|             o.setName("role_999"); | ||||
|             o.setCode("code"); | ||||
|             o.setType(RoleTypeEnum.CUSTOM.getType()); | ||||
|             o.setStatus(1); | ||||
|             o.setDataScope(DataScopeEnum.ALL.getScope()); | ||||
|         }); | ||||
|         roleMapper.insert(roleDO); | ||||
|  | ||||
|         String randomName = randomString(); | ||||
|         String duplicateCode = "code"; | ||||
|  | ||||
|         assertServiceException(() -> roleService.checkDuplicateRole(randomName, duplicateCode, null), ROLE_CODE_DUPLICATE, duplicateCode); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckUpdateRole_success() { | ||||
|         RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.CUSTOM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         roleService.checkUpdateRole(roleId); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckUpdateRole_roleIdNotExist() { | ||||
|         assertServiceException(() -> roleService.checkUpdateRole(randomLongId()), ROLE_NOT_EXISTS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testCheckUpdateRole_systemRoleCanNotBeUpdate() { | ||||
|         RoleDO roleDO = createRoleDO("role_name", RoleTypeEnum.SYSTEM, DataScopeEnum.ALL); | ||||
|         roleMapper.insert(roleDO); | ||||
|         Long roleId = roleDO.getId(); | ||||
|  | ||||
|         assertServiceException(() -> roleService.checkUpdateRole(roleId), ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); | ||||
|     } | ||||
|  | ||||
|     private RoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status) { | ||||
|         return createRoleDO( name, typeEnum, scopeEnum, status, randomString()); | ||||
|     } | ||||
|  | ||||
|     private RoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { | ||||
|         return createRoleDO(null, name, typeEnum, scopeEnum, status, code); | ||||
|     } | ||||
|  | ||||
|     private RoleDO createRoleDO(String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum) { | ||||
|         return createRoleDO(null, name, typeEnum, scopeEnum, randomCommonStatus(), randomString()); | ||||
|     } | ||||
|  | ||||
|     private RoleDO createRoleDO(Long id, String name, RoleTypeEnum typeEnum, DataScopeEnum scopeEnum, Integer status, String code) { | ||||
|         return randomPojo(RoleDO.class, o -> { | ||||
|             o.setId(id); | ||||
|             o.setName(name); | ||||
|             o.setType(typeEnum.getType()); | ||||
|             o.setStatus(status); | ||||
|             o.setDataScope(scopeEnum.getScope()); | ||||
|             o.setCode(code); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     private RoleDO randomRole() { | ||||
|         return randomPojo(RoleDO.class, | ||||
|                 o -> o.setDataScope(RandomUtil.randomEle(DataScopeEnum.values()).getScope())); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -196,7 +196,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest { | ||||
|         role100.setTenantId(dbTenant.getId()); | ||||
|         RoleDO role101 = randomPojo(RoleDO.class, o -> o.setId(101L)); | ||||
|         role101.setTenantId(dbTenant.getId()); | ||||
|         when(roleService.getRoles(isNull())).thenReturn(asList(role100, role101)); | ||||
|         when(roleService.getRoleList(isNull())).thenReturn(asList(role100, role101)); | ||||
|         // mock 每个角色的权限 | ||||
|         when(permissionService.getRoleMenuIds(eq(101L))).thenReturn(asSet(201L, 202L)); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV