完善 RoleService 的单元测试
This commit is contained in:
parent
152fc70e86
commit
afd3128803
|
@ -106,14 +106,6 @@ public interface RoleService {
|
||||||
*/
|
*/
|
||||||
List<RoleDO> getRoleList();
|
List<RoleDO> getRoleList();
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断角色编号数组中,是否有管理员
|
|
||||||
*
|
|
||||||
* @param ids 角色编号数组
|
|
||||||
* @return 是否有管理员
|
|
||||||
*/
|
|
||||||
boolean hasAnySuperAdmin(Collection<Long> ids);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得角色分页
|
* 获得角色分页
|
||||||
*
|
*
|
||||||
|
@ -130,6 +122,14 @@ public interface RoleService {
|
||||||
*/
|
*/
|
||||||
List<RoleDO> getRoleList(RoleExportReqVO reqVO);
|
List<RoleDO> getRoleList(RoleExportReqVO reqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断角色编号数组中,是否有管理员
|
||||||
|
*
|
||||||
|
* @param ids 角色编号数组
|
||||||
|
* @return 是否有管理员
|
||||||
|
*/
|
||||||
|
boolean hasAnySuperAdmin(Collection<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验角色们是否有效。如下情况,视为无效:
|
* 校验角色们是否有效。如下情况,视为无效:
|
||||||
* 1. 角色编号不存在
|
* 1. 角色编号不存在
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class RoleServiceImpl implements RoleService {
|
||||||
private RoleMapper roleMapper;
|
private RoleMapper roleMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createRole(RoleCreateReqVO reqVO, Integer type) {
|
public Long createRole(RoleCreateReqVO reqVO, Integer type) {
|
||||||
// 校验角色
|
// 校验角色
|
||||||
validateRoleDuplicate(reqVO.getName(), reqVO.getCode(), null);
|
validateRoleDuplicate(reqVO.getName(), reqVO.getCode(), null);
|
||||||
|
@ -116,64 +116,6 @@ public class RoleServiceImpl implements RoleService {
|
||||||
permissionService.processRoleDeleted(id);
|
permissionService.processRoleDeleted(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RoleDO> getRoleListByStatus(@Nullable Collection<Integer> statuses) {
|
|
||||||
return roleMapper.selectListByStatus(statuses);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RoleDO> getRoleList() {
|
|
||||||
return roleMapper.selectList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RoleDO getRole(Long id) {
|
|
||||||
return roleMapper.selectById(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Cacheable(value = RedisKeyConstants.ROLE, key = "#id", unless = "#result == null")
|
|
||||||
public RoleDO getRoleFromCache(Long id) {
|
|
||||||
return roleMapper.selectById(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RoleDO> getRoleList(Collection<Long> ids) {
|
|
||||||
return roleMapper.selectBatchIds(ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RoleDO> getRoleListFromCache(Collection<Long> ids) {
|
|
||||||
if (CollectionUtil.isEmpty(ids)) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
// 这里采用 for 循环从缓存中获取,主要考虑 Spring CacheManager 无法批量操作的问题
|
|
||||||
RoleServiceImpl self = getSelf();
|
|
||||||
return convertList(ids, self::getRoleFromCache);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasAnySuperAdmin(Collection<Long> ids) {
|
|
||||||
if (CollectionUtil.isEmpty(ids)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return ids.stream().anyMatch(id -> {
|
|
||||||
RoleDO role = getRoleFromCache(id);
|
|
||||||
return role != null && RoleCodeEnum.isSuperAdmin(role.getCode());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<RoleDO> getRolePage(RolePageReqVO reqVO) {
|
|
||||||
return roleMapper.selectPage(reqVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RoleDO> getRoleList(RoleExportReqVO reqVO) {
|
|
||||||
return roleMapper.selectList(reqVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验角色的唯一字段是否重复
|
* 校验角色的唯一字段是否重复
|
||||||
*
|
*
|
||||||
|
@ -223,6 +165,65 @@ public class RoleServiceImpl implements RoleService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RoleDO getRole(Long id) {
|
||||||
|
return roleMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Cacheable(value = RedisKeyConstants.ROLE, key = "#id", unless = "#result == null")
|
||||||
|
public RoleDO getRoleFromCache(Long id) {
|
||||||
|
return roleMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RoleDO> getRoleListByStatus(Collection<Integer> statuses) {
|
||||||
|
return roleMapper.selectListByStatus(statuses);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RoleDO> getRoleList() {
|
||||||
|
return roleMapper.selectList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RoleDO> getRoleList(Collection<Long> ids) {
|
||||||
|
return roleMapper.selectBatchIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RoleDO> getRoleListFromCache(Collection<Long> ids) {
|
||||||
|
if (CollectionUtil.isEmpty(ids)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
// 这里采用 for 循环从缓存中获取,主要考虑 Spring CacheManager 无法批量操作的问题
|
||||||
|
RoleServiceImpl self = getSelf();
|
||||||
|
return convertList(ids, self::getRoleFromCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<RoleDO> getRolePage(RolePageReqVO reqVO) {
|
||||||
|
return roleMapper.selectPage(reqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RoleDO> getRoleList(RoleExportReqVO reqVO) {
|
||||||
|
return roleMapper.selectList(reqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasAnySuperAdmin(Collection<Long> ids) {
|
||||||
|
if (CollectionUtil.isEmpty(ids)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
RoleServiceImpl self = getSelf();
|
||||||
|
return ids.stream().anyMatch(id -> {
|
||||||
|
RoleDO role = self.getRoleFromCache(id);
|
||||||
|
return role != null && RoleCodeEnum.isSuperAdmin(role.getCode());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validateRoleList(Collection<Long> ids) {
|
public void validateRoleList(Collection<Long> ids) {
|
||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package cn.iocoder.yudao.module.system.service.permission;
|
package cn.iocoder.yudao.module.system.service.permission;
|
||||||
|
|
||||||
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
|
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
|
||||||
|
@ -11,15 +12,14 @@ 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.dal.mysql.permission.RoleMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum;
|
import cn.iocoder.yudao.module.system.enums.permission.DataScopeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum;
|
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.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.MockedStatic;
|
||||||
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;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static cn.hutool.core.util.RandomUtil.randomEle;
|
import static cn.hutool.core.util.RandomUtil.randomEle;
|
||||||
|
@ -33,6 +33,8 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
||||||
import static java.util.Collections.singleton;
|
import static java.util.Collections.singleton;
|
||||||
import static java.util.Collections.singletonList;
|
import static java.util.Collections.singletonList;
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
|
import static org.mockito.Mockito.mockStatic;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
@Import(RoleServiceImpl.class)
|
@Import(RoleServiceImpl.class)
|
||||||
|
@ -46,26 +48,9 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
|
|
||||||
@MockBean
|
@MockBean
|
||||||
private PermissionService permissionService;
|
private PermissionService permissionService;
|
||||||
@MockBean
|
|
||||||
private RoleProducer roleProducer;
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInitLocalCache() {
|
public void testCreateRole() {
|
||||||
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);
|
RoleCreateReqVO reqVO = randomPojo(RoleCreateReqVO.class);
|
||||||
|
|
||||||
|
@ -77,12 +62,10 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
assertEquals(RoleTypeEnum.CUSTOM.getType(), roleDO.getType());
|
assertEquals(RoleTypeEnum.CUSTOM.getType(), roleDO.getType());
|
||||||
assertEquals(CommonStatusEnum.ENABLE.getStatus(), roleDO.getStatus());
|
assertEquals(CommonStatusEnum.ENABLE.getStatus(), roleDO.getStatus());
|
||||||
assertEquals(DataScopeEnum.ALL.getScope(), roleDO.getDataScope());
|
assertEquals(DataScopeEnum.ALL.getScope(), roleDO.getDataScope());
|
||||||
// verify 发送刷新消息
|
|
||||||
verify(roleProducer).sendRoleRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateRole_success() {
|
public void testUpdateRole() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType()));
|
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType()));
|
||||||
roleMapper.insert(roleDO);
|
roleMapper.insert(roleDO);
|
||||||
|
@ -95,12 +78,10 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
// 断言
|
// 断言
|
||||||
RoleDO newRoleDO = roleMapper.selectById(id);
|
RoleDO newRoleDO = roleMapper.selectById(id);
|
||||||
assertPojoEquals(reqVO, newRoleDO);
|
assertPojoEquals(reqVO, newRoleDO);
|
||||||
// verify 发送刷新消息
|
|
||||||
verify(roleProducer).sendRoleRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateRoleStatus_success() {
|
public void testUpdateRoleStatus() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||||
.setType(RoleTypeEnum.CUSTOM.getType()));
|
.setType(RoleTypeEnum.CUSTOM.getType()));
|
||||||
|
@ -114,12 +95,10 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
// 断言
|
// 断言
|
||||||
RoleDO dbRoleDO = roleMapper.selectById(roleId);
|
RoleDO dbRoleDO = roleMapper.selectById(roleId);
|
||||||
assertEquals(CommonStatusEnum.DISABLE.getStatus(), dbRoleDO.getStatus());
|
assertEquals(CommonStatusEnum.DISABLE.getStatus(), dbRoleDO.getStatus());
|
||||||
// verify 发送刷新消息
|
|
||||||
verify(roleProducer).sendRoleRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateRoleDataScope_success() {
|
public void testUpdateRoleDataScope() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType()));
|
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType()));
|
||||||
roleMapper.insert(roleDO);
|
roleMapper.insert(roleDO);
|
||||||
|
@ -134,12 +113,10 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
RoleDO dbRoleDO = roleMapper.selectById(id);
|
RoleDO dbRoleDO = roleMapper.selectById(id);
|
||||||
assertEquals(dataScope, dbRoleDO.getDataScope());
|
assertEquals(dataScope, dbRoleDO.getDataScope());
|
||||||
assertEquals(dataScopeRoleIds, dbRoleDO.getDataScopeDeptIds());
|
assertEquals(dataScopeRoleIds, dbRoleDO.getDataScopeDeptIds());
|
||||||
// verify 发送刷新消息
|
|
||||||
verify(roleProducer).sendRoleRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeleteRole_success() {
|
public void testDeleteRole() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType()));
|
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setType(RoleTypeEnum.CUSTOM.getType()));
|
||||||
roleMapper.insert(roleDO);
|
roleMapper.insert(roleDO);
|
||||||
|
@ -152,23 +129,65 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
assertNull(roleMapper.selectById(id));
|
assertNull(roleMapper.selectById(id));
|
||||||
// verify 删除相关数据
|
// verify 删除相关数据
|
||||||
verify(permissionService).processRoleDeleted(id);
|
verify(permissionService).processRoleDeleted(id);
|
||||||
// verify 发送刷新消息
|
|
||||||
verify(roleProducer).sendRoleRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetRoleFromCache() {
|
public void testValidateRoleDuplicate_success() {
|
||||||
// mock 数据(缓存)
|
// 调用,不会抛异常
|
||||||
|
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);
|
RoleDO roleDO = randomPojo(RoleDO.class);
|
||||||
roleMapper.insert(roleDO);
|
roleMapper.insert(roleDO);
|
||||||
roleService.initLocalCache();
|
// 准备参数
|
||||||
// 参数准备
|
|
||||||
Long id = roleDO.getId();
|
Long id = roleDO.getId();
|
||||||
|
|
||||||
// 调用
|
// 调用,无异常
|
||||||
RoleDO dbRoleDO = roleService.getRoleFromCache(id);
|
roleService.validateRoleForUpdate(id);
|
||||||
// 断言
|
}
|
||||||
assertPojoEquals(roleDO, dbRoleDO);
|
|
||||||
|
@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
|
@Test
|
||||||
|
@ -186,22 +205,21 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetRoleListByStatus_statusNotEmpty() {
|
public void testGetRoleFromCache() {
|
||||||
// mock 数据
|
// mock 数据(缓存)
|
||||||
RoleDO dbRole = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
RoleDO roleDO = randomPojo(RoleDO.class);
|
||||||
roleMapper.insert(dbRole);
|
roleMapper.insert(roleDO);
|
||||||
// 测试 status 不匹配
|
// 参数准备
|
||||||
roleMapper.insert(cloneIgnoreId(dbRole, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
Long id = roleDO.getId();
|
||||||
|
|
||||||
// 调用
|
// 调用
|
||||||
List<RoleDO> list = roleService.getRoleListByStatus(singleton(CommonStatusEnum.ENABLE.getStatus()));
|
RoleDO dbRoleDO = roleService.getRoleFromCache(id);
|
||||||
// 断言
|
// 断言
|
||||||
assertEquals(1, list.size());
|
assertPojoEquals(roleDO, dbRoleDO);
|
||||||
assertPojoEquals(dbRole, list.get(0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetRoleListByStatus_statusEmpty() {
|
public void testGetRoleListByStatus() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
RoleDO dbRole01 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
RoleDO dbRole01 = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||||
roleMapper.insert(dbRole01);
|
roleMapper.insert(dbRole01);
|
||||||
|
@ -209,21 +227,24 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
roleMapper.insert(dbRole02);
|
roleMapper.insert(dbRole02);
|
||||||
|
|
||||||
// 调用
|
// 调用
|
||||||
List<RoleDO> list = roleService.getRoleListByStatus(null);
|
List<RoleDO> list = roleService.getRoleListByStatus(
|
||||||
|
singleton(CommonStatusEnum.ENABLE.getStatus()));
|
||||||
// 断言
|
// 断言
|
||||||
assertEquals(2, list.size());
|
assertEquals(1, list.size());
|
||||||
assertPojoEquals(dbRole01, list.get(0));
|
assertPojoEquals(dbRole01, list.get(0));
|
||||||
assertPojoEquals(dbRole02, list.get(1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetRoleListFromCache() {
|
public void testGetRoleListFromCache() {
|
||||||
|
try (MockedStatic<SpringUtil> springUtilMockedStatic = mockStatic(SpringUtil.class)) {
|
||||||
|
springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(RoleServiceImpl.class)))
|
||||||
|
.thenReturn(roleService);
|
||||||
|
|
||||||
// mock 数据
|
// mock 数据
|
||||||
RoleDO dbRole = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
RoleDO dbRole = randomPojo(RoleDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||||
roleMapper.insert(dbRole);
|
roleMapper.insert(dbRole);
|
||||||
// 测试 id 不匹配
|
// 测试 id 不匹配
|
||||||
roleMapper.insert(cloneIgnoreId(dbRole, o -> {}));
|
roleMapper.insert(cloneIgnoreId(dbRole, o -> {}));
|
||||||
roleService.initLocalCache();
|
|
||||||
// 准备参数
|
// 准备参数
|
||||||
Collection<Long> ids = singleton(dbRole.getId());
|
Collection<Long> ids = singleton(dbRole.getId());
|
||||||
|
|
||||||
|
@ -233,6 +254,7 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
assertEquals(1, list.size());
|
assertEquals(1, list.size());
|
||||||
assertPojoEquals(dbRole, list.get(0));
|
assertPojoEquals(dbRole, list.get(0));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetRoleList() {
|
public void testGetRoleList() {
|
||||||
|
@ -296,72 +318,37 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHasAnySuperAdmin() {
|
public void testHasAnySuperAdmin_true() {
|
||||||
// 是超级
|
try (MockedStatic<SpringUtil> springUtilMockedStatic = mockStatic(SpringUtil.class)) {
|
||||||
assertTrue(roleService.hasAnySuperAdmin(singletonList(randomPojo(RoleDO.class,
|
springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(RoleServiceImpl.class)))
|
||||||
o -> o.setCode("super_admin")))));
|
.thenReturn(roleService);
|
||||||
// 非超级
|
|
||||||
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 数据
|
// mock 数据
|
||||||
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setName("role_name"));
|
RoleDO dbRole = randomPojo(RoleDO.class).setCode("super_admin");
|
||||||
roleMapper.insert(roleDO);
|
roleMapper.insert(dbRole);
|
||||||
// 准备参数
|
// 准备参数
|
||||||
String name = "role_name";
|
Long id = dbRole.getId();
|
||||||
|
|
||||||
// 调用,并断言异常
|
// 调用,并调用
|
||||||
assertServiceException(() -> roleService.validateRoleDuplicate(name, randomString(), null),
|
assertTrue(roleService.hasAnySuperAdmin(singletonList(id)));
|
||||||
ROLE_NAME_DUPLICATE, name);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testValidateRoleDuplicate_codeDuplicate() {
|
public void testHasAnySuperAdmin_false() {
|
||||||
|
try (MockedStatic<SpringUtil> springUtilMockedStatic = mockStatic(SpringUtil.class)) {
|
||||||
|
springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(RoleServiceImpl.class)))
|
||||||
|
.thenReturn(roleService);
|
||||||
|
|
||||||
// mock 数据
|
// mock 数据
|
||||||
RoleDO roleDO = randomPojo(RoleDO.class, o -> o.setCode("code"));
|
RoleDO dbRole = randomPojo(RoleDO.class).setCode("tenant_admin");
|
||||||
roleMapper.insert(roleDO);
|
roleMapper.insert(dbRole);
|
||||||
// 准备参数
|
// 准备参数
|
||||||
String code = "code";
|
Long id = dbRole.getId();
|
||||||
|
|
||||||
// 调用,并断言异常
|
// 调用,并调用
|
||||||
assertServiceException(() -> roleService.validateRoleDuplicate(randomString(), code, null),
|
assertFalse(roleService.hasAnySuperAdmin(singletonList(id)));
|
||||||
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
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue