|
|
|
@ -0,0 +1,263 @@
|
|
|
|
|
|
|
|
package cn.iocoder.dashboard.modules.system.service.dict;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.BaseSpringBootUnitTest;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.common.pojo.PageResult;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeCreateReqVO;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeExportReqVO;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypePageReqVO;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.controller.dict.vo.type.SysDictTypeUpdateReqVO;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictTypeMapper;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.service.dict.impl.SysDictTypeServiceImpl;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.util.collection.ArrayUtils;
|
|
|
|
|
|
|
|
import cn.iocoder.dashboard.util.object.ObjectUtils;
|
|
|
|
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
|
|
|
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import static cn.hutool.core.util.RandomUtil.randomEle;
|
|
|
|
|
|
|
|
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.randomLongId;
|
|
|
|
|
|
|
|
import static cn.iocoder.dashboard.util.RandomUtils.randomPojo;
|
|
|
|
|
|
|
|
import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
|
|
|
|
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
|
|
|
|
import static org.mockito.ArgumentMatchers.eq;
|
|
|
|
|
|
|
|
import static org.mockito.Mockito.when;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* {@link SysDictTypeServiceImpl} 的单元测试类
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @author 芋艿
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class SysDictTypeServiceTest extends BaseSpringBootUnitTest {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
private SysDictTypeServiceImpl dictTypeService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
private SysDictTypeMapper dictTypeMapper;
|
|
|
|
|
|
|
|
@MockBean
|
|
|
|
|
|
|
|
private SysDictDataService dictDataService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testGetDictTypePage() {
|
|
|
|
|
|
|
|
// mock 数据
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomPojo(SysDictTypeDO.class, o -> { // 等会查询到
|
|
|
|
|
|
|
|
o.setName("yunai");
|
|
|
|
|
|
|
|
o.setType("芋艿");
|
|
|
|
|
|
|
|
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
|
|
|
|
|
|
|
o.setCreateTime(buildTime(2021, 1, 15));
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);
|
|
|
|
|
|
|
|
// 测试 name 不匹配
|
|
|
|
|
|
|
|
dictTypeMapper.insert(ObjectUtils.clone(dbDictType, o -> o.setName("tudou")));
|
|
|
|
|
|
|
|
// 测试 type 不匹配
|
|
|
|
|
|
|
|
dictTypeMapper.insert(ObjectUtils.clone(dbDictType, o -> o.setType("土豆")));
|
|
|
|
|
|
|
|
// 测试 status 不匹配
|
|
|
|
|
|
|
|
dictTypeMapper.insert(ObjectUtils.clone(dbDictType, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
|
|
|
|
|
|
|
// 测试 createTime 不匹配
|
|
|
|
|
|
|
|
dictTypeMapper.insert(ObjectUtils.clone(dbDictType, o -> o.setCreateTime(buildTime(2021, 1, 1))));
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
SysDictTypePageReqVO reqVO = new SysDictTypePageReqVO();
|
|
|
|
|
|
|
|
reqVO.setName("nai");
|
|
|
|
|
|
|
|
reqVO.setType("艿");
|
|
|
|
|
|
|
|
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
|
|
|
|
|
|
|
reqVO.setBeginCreateTime(buildTime(2021, 1, 10));
|
|
|
|
|
|
|
|
reqVO.setEndCreateTime(buildTime(2021, 1, 20));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
|
|
|
PageResult<SysDictTypeDO> pageResult = dictTypeService.getDictTypePage(reqVO);
|
|
|
|
|
|
|
|
// 断言
|
|
|
|
|
|
|
|
assertEquals(1, pageResult.getTotal());
|
|
|
|
|
|
|
|
assertEquals(1, pageResult.getList().size());
|
|
|
|
|
|
|
|
assertPojoEquals(dbDictType, pageResult.getList().get(0));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testGetDictTypeList() {
|
|
|
|
|
|
|
|
// mock 数据
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomPojo(SysDictTypeDO.class, o -> { // 等会查询到
|
|
|
|
|
|
|
|
o.setName("yunai");
|
|
|
|
|
|
|
|
o.setType("芋艿");
|
|
|
|
|
|
|
|
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
|
|
|
|
|
|
|
o.setCreateTime(buildTime(2021, 1, 15));
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);
|
|
|
|
|
|
|
|
// 测试 name 不匹配
|
|
|
|
|
|
|
|
dictTypeMapper.insert(ObjectUtils.clone(dbDictType, o -> o.setName("tudou")));
|
|
|
|
|
|
|
|
// 测试 type 不匹配
|
|
|
|
|
|
|
|
dictTypeMapper.insert(ObjectUtils.clone(dbDictType, o -> o.setType("土豆")));
|
|
|
|
|
|
|
|
// 测试 status 不匹配
|
|
|
|
|
|
|
|
dictTypeMapper.insert(ObjectUtils.clone(dbDictType, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
|
|
|
|
|
|
|
// 测试 createTime 不匹配
|
|
|
|
|
|
|
|
dictTypeMapper.insert(ObjectUtils.clone(dbDictType, o -> o.setCreateTime(buildTime(2021, 1, 1))));
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
SysDictTypeExportReqVO reqVO = new SysDictTypeExportReqVO();
|
|
|
|
|
|
|
|
reqVO.setName("nai");
|
|
|
|
|
|
|
|
reqVO.setType("艿");
|
|
|
|
|
|
|
|
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
|
|
|
|
|
|
|
reqVO.setBeginCreateTime(buildTime(2021, 1, 10));
|
|
|
|
|
|
|
|
reqVO.setEndCreateTime(buildTime(2021, 1, 20));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
|
|
|
List<SysDictTypeDO> list = dictTypeService.getDictTypeList(reqVO);
|
|
|
|
|
|
|
|
// 断言
|
|
|
|
|
|
|
|
assertEquals(1, list.size());
|
|
|
|
|
|
|
|
assertPojoEquals(dbDictType, list.get(0));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testGetDictType() {
|
|
|
|
|
|
|
|
// mock 数据
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomDictTypeDO();
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
String type = dbDictType.getType();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
|
|
|
SysDictTypeDO dictType = dictTypeService.getDictType(type);
|
|
|
|
|
|
|
|
// 断言
|
|
|
|
|
|
|
|
assertNotNull(dictType);
|
|
|
|
|
|
|
|
assertPojoEquals(dbDictType, dictType);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testCreateDictType_success() {
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
SysDictTypeCreateReqVO reqVO = randomPojo(SysDictTypeCreateReqVO.class,
|
|
|
|
|
|
|
|
o -> o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
|
|
|
Long dictTypeId = dictTypeService.createDictType(reqVO);
|
|
|
|
|
|
|
|
// 断言
|
|
|
|
|
|
|
|
assertNotNull(dictTypeId);
|
|
|
|
|
|
|
|
// 校验记录的属性是否正确
|
|
|
|
|
|
|
|
SysDictTypeDO dictType = dictTypeMapper.selectById(dictTypeId);
|
|
|
|
|
|
|
|
assertPojoEquals(reqVO, dictType);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testCreateDictType_nameDuplicate() {
|
|
|
|
|
|
|
|
// mock 数据
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomDictTypeDO();
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
SysDictTypeCreateReqVO reqVO = randomPojo(SysDictTypeCreateReqVO.class,
|
|
|
|
|
|
|
|
o -> o.setName(dbDictType.getName())); // 模拟 name 重复
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
|
|
|
assertServiceException(() -> dictTypeService.createDictType(reqVO), DICT_TYPE_NAME_DUPLICATE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testCreateDictType_typeDuplicate() {
|
|
|
|
|
|
|
|
// mock 数据
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomDictTypeDO();
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
SysDictTypeCreateReqVO reqVO = randomPojo(SysDictTypeCreateReqVO.class,
|
|
|
|
|
|
|
|
o -> o.setType(dbDictType.getType())); // 模拟 type 重复
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
|
|
|
assertServiceException(() -> dictTypeService.createDictType(reqVO), DICT_TYPE_TYPE_DUPLICATE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testUpdateDictType_success() {
|
|
|
|
|
|
|
|
// mock 数据
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomDictTypeDO();
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
SysDictTypeUpdateReqVO reqVO = randomPojo(SysDictTypeUpdateReqVO.class, o -> {
|
|
|
|
|
|
|
|
o.setId(dbDictType.getId()); // 设置更新的 ID
|
|
|
|
|
|
|
|
o.setStatus(randomEle(CommonStatusEnum.values()).getStatus());
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
|
|
|
dictTypeService.updateDictType(reqVO);
|
|
|
|
|
|
|
|
// 校验是否更新正确
|
|
|
|
|
|
|
|
SysDictTypeDO dictType = dictTypeMapper.selectById(reqVO.getId()); // 获取最新的
|
|
|
|
|
|
|
|
assertPojoEquals(reqVO, dictType);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testUpdateDictType_notExists() {
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
SysDictTypeUpdateReqVO reqVO = randomPojo(SysDictTypeUpdateReqVO.class);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
|
|
|
assertServiceException(() -> dictTypeService.updateDictType(reqVO), DICT_TYPE_NOT_EXISTS);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testUpdateDictType_nameDuplicate() {
|
|
|
|
|
|
|
|
// mock 数据,稍后更新它
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomDictTypeDO();
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);
|
|
|
|
|
|
|
|
// mock 数据,ks稍后模拟重复它的名字
|
|
|
|
|
|
|
|
SysDictTypeDO nameDictType = randomDictTypeDO();
|
|
|
|
|
|
|
|
dictTypeMapper.insert(nameDictType);
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
SysDictTypeUpdateReqVO reqVO = randomPojo(SysDictTypeUpdateReqVO.class, o -> {
|
|
|
|
|
|
|
|
o.setId(dbDictType.getId()); // 设置更新的 ID
|
|
|
|
|
|
|
|
o.setName(nameDictType.getName()); // 模拟 name 重复
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
|
|
|
assertServiceException(() -> dictTypeService.updateDictType(reqVO), DICT_TYPE_NAME_DUPLICATE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testDeleteDictType_success() {
|
|
|
|
|
|
|
|
// mock 数据
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomDictTypeDO();
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
Long id = dbDictType.getId();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
|
|
|
dictTypeService.deleteDictType(id);
|
|
|
|
|
|
|
|
// 校验数据不存在了
|
|
|
|
|
|
|
|
assertNull(dictTypeMapper.selectById(id));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testDeleteDictType_notExists() {
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
Long id = randomLongId();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
|
|
|
assertServiceException(() -> dictTypeService.deleteDictType(id), DICT_TYPE_NOT_EXISTS);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
public void testDeleteDictType_hasChildren() {
|
|
|
|
|
|
|
|
// mock 数据
|
|
|
|
|
|
|
|
SysDictTypeDO dbDictType = randomDictTypeDO();
|
|
|
|
|
|
|
|
dictTypeMapper.insert(dbDictType);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
|
|
|
// 准备参数
|
|
|
|
|
|
|
|
Long id = dbDictType.getId();
|
|
|
|
|
|
|
|
// mock 方法
|
|
|
|
|
|
|
|
when(dictDataService.countByDictType(eq(dbDictType.getType()))).thenReturn(1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
|
|
|
assertServiceException(() -> dictTypeService.deleteDictType(id), DICT_TYPE_HAS_CHILDREN);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ========== 随机对象 ==========
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@SafeVarargs
|
|
|
|
|
|
|
|
private static SysDictTypeDO randomDictTypeDO(Consumer<SysDictTypeDO>... consumers) {
|
|
|
|
|
|
|
|
Consumer<SysDictTypeDO> consumer = (o) -> {
|
|
|
|
|
|
|
|
o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
return randomPojo(SysDictTypeDO.class, ArrayUtils.append(consumer, consumers));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|