infra:完善 config 的单元测试

This commit is contained in:
YunaiV 2023-02-04 00:57:09 +08:00
parent 10f7352ef8
commit b5b23b3d7c
7 changed files with 71 additions and 58 deletions

View File

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.infra.controller.admin.config; package cn.iocoder.yudao.module.infra.controller.admin.config;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
@ -8,8 +7,8 @@ import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.*;
import cn.iocoder.yudao.module.infra.convert.config.ConfigConvert; import cn.iocoder.yudao.module.infra.convert.config.ConfigConvert;
import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
import cn.iocoder.yudao.module.infra.service.config.ConfigService;
import cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants; import cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants;
import cn.iocoder.yudao.module.infra.service.config.ConfigService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -23,6 +22,7 @@ import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@ -76,7 +76,7 @@ public class ConfigController {
return null; return null;
} }
if (!config.getVisible()) { if (!config.getVisible()) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_VISIBLE); throw exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_VISIBLE);
} }
return success(config.getValue()); return success(config.getValue());
} }
@ -93,7 +93,7 @@ public class ConfigController {
@ApiOperation("导出参数配置") @ApiOperation("导出参数配置")
@PreAuthorize("@ss.hasPermission('infra:config:export')") @PreAuthorize("@ss.hasPermission('infra:config:export')")
@OperateLog(type = EXPORT) @OperateLog(type = EXPORT)
public void exportSysConfig(@Valid ConfigExportReqVO reqVO, public void exportConfig(@Valid ConfigExportReqVO reqVO,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {
List<ConfigDO> list = configService.getConfigList(reqVO); List<ConfigDO> list = configService.getConfigList(reqVO);
// 拼接数据 // 拼接数据

View File

@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqV
import cn.iocoder.yudao.module.infra.convert.config.ConfigConvert; import cn.iocoder.yudao.module.infra.convert.config.ConfigConvert;
import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper; import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper;
import cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants;
import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum; import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -20,6 +19,7 @@ import javax.annotation.Resource;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*;
/** /**
* 参数配置 Service 实现类 * 参数配置 Service 实现类
@ -35,7 +35,7 @@ public class ConfigServiceImpl implements ConfigService {
@Override @Override
public Long createConfig(ConfigCreateReqVO reqVO) { public Long createConfig(ConfigCreateReqVO reqVO) {
// 校验正确性 // 校验正确性
checkCreateOrUpdate(null, reqVO.getKey()); validateConfigForCreateOrUpdate(null, reqVO.getKey());
// 插入参数配置 // 插入参数配置
ConfigDO config = ConfigConvert.INSTANCE.convert(reqVO); ConfigDO config = ConfigConvert.INSTANCE.convert(reqVO);
config.setType(ConfigTypeEnum.CUSTOM.getType()); config.setType(ConfigTypeEnum.CUSTOM.getType());
@ -46,19 +46,19 @@ public class ConfigServiceImpl implements ConfigService {
@Override @Override
public void updateConfig(ConfigUpdateReqVO reqVO) { public void updateConfig(ConfigUpdateReqVO reqVO) {
// 校验正确性 // 校验正确性
checkCreateOrUpdate(reqVO.getId(), null); // 不允许更新 key validateConfigForCreateOrUpdate(reqVO.getId(), null); // 不允许更新 key
// 更新参数配置 // 更新参数配置
ConfigDO updateObj = ConfigConvert.INSTANCE.convert(reqVO); ConfigDO updateObj = ConfigConvert.INSTANCE.convert(reqVO);
configMapper.updateById(updateObj);; configMapper.updateById(updateObj);
} }
@Override @Override
public void deleteConfig(Long id) { public void deleteConfig(Long id) {
// 校验配置存在 // 校验配置存在
ConfigDO config = checkConfigExists(id); ConfigDO config = validateConfigExists(id);
// 内置配置不允许删除 // 内置配置不允许删除
if (ConfigTypeEnum.SYSTEM.getType().equals(config.getType())) { if (ConfigTypeEnum.SYSTEM.getType().equals(config.getType())) {
throw exception(ErrorCodeConstants.CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); throw exception(CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE);
} }
// 删除 // 删除
configMapper.deleteById(id); configMapper.deleteById(id);
@ -84,39 +84,39 @@ public class ConfigServiceImpl implements ConfigService {
return configMapper.selectList(reqVO); return configMapper.selectList(reqVO);
} }
private void checkCreateOrUpdate(Long id, String key) { private void validateConfigForCreateOrUpdate(Long id, String key) {
// 校验自己存在 // 校验自己存在
checkConfigExists(id); validateConfigExists(id);
// 校验参数配置 key 的唯一性 // 校验参数配置 key 的唯一性
if (StrUtil.isNotEmpty(key)) { if (StrUtil.isNotEmpty(key)) {
checkConfigKeyUnique(id, key); validateConfigKeyUnique(id, key);
} }
} }
@VisibleForTesting @VisibleForTesting
public ConfigDO checkConfigExists(Long id) { public ConfigDO validateConfigExists(Long id) {
if (id == null) { if (id == null) {
return null; return null;
} }
ConfigDO config = configMapper.selectById(id); ConfigDO config = configMapper.selectById(id);
if (config == null) { if (config == null) {
throw exception(ErrorCodeConstants.CONFIG_NOT_EXISTS); throw exception(CONFIG_NOT_EXISTS);
} }
return config; return config;
} }
@VisibleForTesting @VisibleForTesting
public void checkConfigKeyUnique(Long id, String key) { public void validateConfigKeyUnique(Long id, String key) {
ConfigDO config = configMapper.selectByKey(key); ConfigDO config = configMapper.selectByKey(key);
if (config == null) { if (config == null) {
return; return;
} }
// 如果 id 为空说明不用比较是否为相同 id 的参数配置 // 如果 id 为空说明不用比较是否为相同 id 的参数配置
if (id == null) { if (id == null) {
throw exception(ErrorCodeConstants.CONFIG_KEY_DUPLICATE); throw exception(CONFIG_KEY_DUPLICATE);
} }
if (!config.getId().equals(id)) { if (!config.getId().equals(id)) {
throw exception(ErrorCodeConstants.CONFIG_KEY_DUPLICATE); throw exception(CONFIG_KEY_DUPLICATE);
} }
} }

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.infra.service.config;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.framework.test.core.util.RandomUtils; import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO; import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO;
@ -12,17 +11,17 @@ import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqV
import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper; import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper;
import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum; import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
import static cn.hutool.core.util.RandomUtil.randomEle; 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.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.assertPojoEquals;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 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.framework.test.core.util.RandomUtils.*;
@ -50,7 +49,7 @@ public class ConfigServiceTest extends BaseDbUnitTest {
// 校验记录的属性是否正确 // 校验记录的属性是否正确
ConfigDO config = configMapper.selectById(configId); ConfigDO config = configMapper.selectById(configId);
assertPojoEquals(reqVO, config); assertPojoEquals(reqVO, config);
Assertions.assertEquals(ConfigTypeEnum.CUSTOM.getType(), config.getType()); assertEquals(ConfigTypeEnum.CUSTOM.getType(), config.getType());
} }
@Test @Test
@ -101,40 +100,40 @@ public class ConfigServiceTest extends BaseDbUnitTest {
} }
@Test @Test
public void testCheckConfigExists_success() { public void testValidateConfigExists_success() {
// mock 数据 // mock 数据
ConfigDO dbConfigDO = randomConfigDO(); ConfigDO dbConfigDO = randomConfigDO();
configMapper.insert(dbConfigDO);// @Sql: 先插入出一条存在的数据 configMapper.insert(dbConfigDO);// @Sql: 先插入出一条存在的数据
// 调用成功 // 调用成功
configService.checkConfigExists(dbConfigDO.getId()); configService.validateConfigExists(dbConfigDO.getId());
} }
@Test @Test
public void testCheckConfigExist_notExists() { public void testValidateConfigExist_notExists() {
assertServiceException(() -> configService.checkConfigExists(randomLongId()), CONFIG_NOT_EXISTS); assertServiceException(() -> configService.validateConfigExists(randomLongId()), CONFIG_NOT_EXISTS);
} }
@Test @Test
public void testCheckConfigKeyUnique_success() { public void testValidateConfigKeyUnique_success() {
// 调用成功 // 调用成功
configService.checkConfigKeyUnique(randomLongId(), randomString()); configService.validateConfigKeyUnique(randomLongId(), randomString());
} }
@Test @Test
public void testCheckConfigKeyUnique_keyDuplicateForCreate() { public void testValidateConfigKeyUnique_keyDuplicateForCreate() {
// 准备参数 // 准备参数
String key = randomString(); String key = randomString();
// mock 数据 // mock 数据
configMapper.insert(randomConfigDO(o -> o.setConfigKey(key))); configMapper.insert(randomConfigDO(o -> o.setConfigKey(key)));
// 调用校验异常 // 调用校验异常
assertServiceException(() -> configService.checkConfigKeyUnique(null, key), assertServiceException(() -> configService.validateConfigKeyUnique(null, key),
CONFIG_KEY_DUPLICATE); CONFIG_KEY_DUPLICATE);
} }
@Test @Test
public void testCheckConfigKeyUnique_keyDuplicateForUpdate() { public void testValidateConfigKeyUnique_keyDuplicateForUpdate() {
// 准备参数 // 准备参数
Long id = randomLongId(); Long id = randomLongId();
String key = randomString(); String key = randomString();
@ -142,7 +141,7 @@ public class ConfigServiceTest extends BaseDbUnitTest {
configMapper.insert(randomConfigDO(o -> o.setConfigKey(key))); configMapper.insert(randomConfigDO(o -> o.setConfigKey(key)));
// 调用校验异常 // 调用校验异常
assertServiceException(() -> configService.checkConfigKeyUnique(id, key), assertServiceException(() -> configService.validateConfigKeyUnique(id, key),
CONFIG_KEY_DUPLICATE); CONFIG_KEY_DUPLICATE);
} }
@ -157,19 +156,19 @@ public class ConfigServiceTest extends BaseDbUnitTest {
}); });
configMapper.insert(dbConfig); configMapper.insert(dbConfig);
// 测试 name 不匹配 // 测试 name 不匹配
configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setName("土豆"))); configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setName("土豆")));
// 测试 key 不匹配 // 测试 key 不匹配
configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setConfigKey("tudou"))); configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setConfigKey("tudou")));
// 测试 type 不匹配 // 测试 type 不匹配
configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType()))); configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType())));
// 测试 createTime 不匹配 // 测试 createTime 不匹配
configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1)))); configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1))));
// 准备参数 // 准备参数
ConfigPageReqVO reqVO = new ConfigPageReqVO(); ConfigPageReqVO reqVO = new ConfigPageReqVO();
reqVO.setName(""); reqVO.setName("");
reqVO.setKey("nai"); reqVO.setKey("nai");
reqVO.setType(ConfigTypeEnum.SYSTEM.getType()); reqVO.setType(ConfigTypeEnum.SYSTEM.getType());
reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021, 1, 15),buildTime(2021, 2, 15)})); reqVO.setCreateTime(buildBetweenTime(2021, 1, 15, 2021, 2, 15));
// 调用 // 调用
PageResult<ConfigDO> pageResult = configService.getConfigPage(reqVO); PageResult<ConfigDO> pageResult = configService.getConfigPage(reqVO);
@ -190,19 +189,19 @@ public class ConfigServiceTest extends BaseDbUnitTest {
}); });
configMapper.insert(dbConfig); configMapper.insert(dbConfig);
// 测试 name 不匹配 // 测试 name 不匹配
configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setName("土豆"))); configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setName("土豆")));
// 测试 key 不匹配 // 测试 key 不匹配
configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setConfigKey("tudou"))); configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setConfigKey("tudou")));
// 测试 type 不匹配 // 测试 type 不匹配
configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType()))); configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType())));
// 测试 createTime 不匹配 // 测试 createTime 不匹配
configMapper.insert(ObjectUtils.cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1)))); configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1))));
// 准备参数 // 准备参数
ConfigExportReqVO reqVO = new ConfigExportReqVO(); ConfigExportReqVO reqVO = new ConfigExportReqVO();
reqVO.setName(""); reqVO.setName("");
reqVO.setKey("nai"); reqVO.setKey("nai");
reqVO.setType(ConfigTypeEnum.SYSTEM.getType()); reqVO.setType(ConfigTypeEnum.SYSTEM.getType());
reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021, 1, 15),buildTime(2021, 2, 15)})); reqVO.setCreateTime(buildBetweenTime(2021, 1, 15, 2021, 2, 15));
// 调用 // 调用
List<ConfigDO> list = configService.getConfigList(reqVO); List<ConfigDO> list = configService.getConfigList(reqVO);
@ -211,6 +210,21 @@ public class ConfigServiceTest extends BaseDbUnitTest {
assertPojoEquals(dbConfig, list.get(0)); assertPojoEquals(dbConfig, list.get(0));
} }
@Test
public void testGetConfig() {
// mock 数据
ConfigDO dbConfig = randomConfigDO();
configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbConfig.getId();
// 调用
ConfigDO config = configService.getConfig(id);
// 断言
assertNotNull(config);
assertPojoEquals(dbConfig, config);
}
@Test @Test
public void testGetConfigByKey() { public void testGetConfigByKey() {
// mock 数据 // mock 数据

View File

@ -89,7 +89,6 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest {
o.setId(dbDataSourceConfig.getId()); // 设置更新的 ID o.setId(dbDataSourceConfig.getId()); // 设置更新的 ID
}); });
// mock 方法 // mock 方法
// when(stringEncryptor.encrypt(eq(reqVO.getPassword()))).thenReturn("123456");
databaseUtilsMock.when(() -> JdbcUtils.isConnectionOK(eq(reqVO.getUrl()), databaseUtilsMock.when(() -> JdbcUtils.isConnectionOK(eq(reqVO.getUrl()),
eq(reqVO.getUsername()), eq(reqVO.getPassword()))).thenReturn(true); eq(reqVO.getUsername()), eq(reqVO.getPassword()))).thenReturn(true);

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.system.controller.admin.user;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO;
@ -31,6 +30,7 @@ import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_IS_EMPTY; import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_IS_EMPTY;
@ -99,7 +99,7 @@ public class UserProfileController {
@ApiOperation("上传用户个人头像") @ApiOperation("上传用户个人头像")
public CommonResult<String> updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception { public CommonResult<String> updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception {
if (file.isEmpty()) { if (file.isEmpty()) {
throw ServiceExceptionUtil.exception(FILE_IS_EMPTY); throw exception(FILE_IS_EMPTY);
} }
String avatar = userService.updateUserAvatar(getLoginUserId(), file.getInputStream()); String avatar = userService.updateUserAvatar(getLoginUserId(), file.getInputStream());
return success(avatar); return success(avatar);

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.system.service.permission;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
@ -31,6 +30,7 @@ import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO.ID_ROOT; import static cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO.ID_ROOT;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
@ -118,7 +118,7 @@ public class MenuServiceImpl implements MenuService {
public void updateMenu(MenuUpdateReqVO reqVO) { public void updateMenu(MenuUpdateReqVO reqVO) {
// 校验更新的菜单是否存在 // 校验更新的菜单是否存在
if (menuMapper.selectById(reqVO.getId()) == null) { if (menuMapper.selectById(reqVO.getId()) == null) {
throw ServiceExceptionUtil.exception(MENU_NOT_EXISTS); throw exception(MENU_NOT_EXISTS);
} }
// 校验父菜单存在 // 校验父菜单存在
validateParentMenu(reqVO.getParentId(), reqVO.getId()); validateParentMenu(reqVO.getParentId(), reqVO.getId());
@ -138,11 +138,11 @@ public class MenuServiceImpl implements MenuService {
public void deleteMenu(Long menuId) { public void deleteMenu(Long menuId) {
// 校验是否还有子菜单 // 校验是否还有子菜单
if (menuMapper.selectCountByParentId(menuId) > 0) { if (menuMapper.selectCountByParentId(menuId) > 0) {
throw ServiceExceptionUtil.exception(MENU_EXISTS_CHILDREN); throw exception(MENU_EXISTS_CHILDREN);
} }
// 校验删除的菜单是否存在 // 校验删除的菜单是否存在
if (menuMapper.selectById(menuId) == null) { if (menuMapper.selectById(menuId) == null) {
throw ServiceExceptionUtil.exception(MENU_NOT_EXISTS); throw exception(MENU_NOT_EXISTS);
} }
// 标记删除 // 标记删除
menuMapper.deleteById(menuId); menuMapper.deleteById(menuId);
@ -229,17 +229,17 @@ public class MenuServiceImpl implements MenuService {
} }
// 不能设置自己为父菜单 // 不能设置自己为父菜单
if (parentId.equals(childId)) { if (parentId.equals(childId)) {
throw ServiceExceptionUtil.exception(MENU_PARENT_ERROR); throw exception(MENU_PARENT_ERROR);
} }
MenuDO menu = menuMapper.selectById(parentId); MenuDO menu = menuMapper.selectById(parentId);
// 父菜单不存在 // 父菜单不存在
if (menu == null) { if (menu == null) {
throw ServiceExceptionUtil.exception(MENU_PARENT_NOT_EXISTS); throw exception(MENU_PARENT_NOT_EXISTS);
} }
// 父菜单必须是目录或者菜单类型 // 父菜单必须是目录或者菜单类型
if (!MenuTypeEnum.DIR.getType().equals(menu.getType()) if (!MenuTypeEnum.DIR.getType().equals(menu.getType())
&& !MenuTypeEnum.MENU.getType().equals(menu.getType())) { && !MenuTypeEnum.MENU.getType().equals(menu.getType())) {
throw ServiceExceptionUtil.exception(MENU_PARENT_NOT_DIR_OR_MENU); throw exception(MENU_PARENT_NOT_DIR_OR_MENU);
} }
} }
@ -260,10 +260,10 @@ public class MenuServiceImpl implements MenuService {
} }
// 如果 id 为空说明不用比较是否为相同 id 的菜单 // 如果 id 为空说明不用比较是否为相同 id 的菜单
if (id == null) { if (id == null) {
throw ServiceExceptionUtil.exception(MENU_NAME_DUPLICATE); throw exception(MENU_NAME_DUPLICATE);
} }
if (!menu.getId().equals(id)) { if (!menu.getId().equals(id)) {
throw ServiceExceptionUtil.exception(MENU_NAME_DUPLICATE); throw exception(MENU_NAME_DUPLICATE);
} }
} }

View File

@ -34,6 +34,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet; import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
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.date.LocalDateTimeUtils.buildTime;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; 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.assertPojoEquals;
@ -310,7 +311,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
reqVO.setContactName(""); reqVO.setContactName("");
reqVO.setContactMobile("1560"); reqVO.setContactMobile("1560");
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
reqVO.setCreateTime(new LocalDateTime[]{buildTime(2020, 12, 1),buildTime(2020, 12, 24)}); reqVO.setCreateTime(buildBetweenTime(2020, 12, 1, 2020, 12, 24));
// 调用 // 调用
PageResult<TenantDO> pageResult = tenantService.getTenantPage(reqVO); PageResult<TenantDO> pageResult = tenantService.getTenantPage(reqVO);
@ -347,7 +348,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
reqVO.setContactName(""); reqVO.setContactName("");
reqVO.setContactMobile("1560"); reqVO.setContactMobile("1560");
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
reqVO.setCreateTime(new LocalDateTime[]{buildTime(2020, 12, 1),buildTime(2020, 12, 24)}); reqVO.setCreateTime(buildBetweenTime(2020, 12, 1, 2020, 12, 24));
// 调用 // 调用
List<TenantDO> list = tenantService.getTenantList(reqVO); List<TenantDO> list = tenantService.getTenantList(reqVO);
@ -356,7 +357,6 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
assertPojoEquals(dbTenant, list.get(0)); assertPojoEquals(dbTenant, list.get(0));
} }
@Test @Test
public void testGetTenantByName() { public void testGetTenantByName() {
// mock 数据 // mock 数据