|
|
|
|
@ -12,14 +12,16 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO;
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper;
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer;
|
|
|
|
|
import cn.iocoder.dashboard.modules.system.service.dict.impl.SysDictDataServiceImpl;
|
|
|
|
|
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.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.DICT_DATA_NOT_EXISTS;
|
|
|
|
|
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.*;
|
|
|
|
|
@ -107,8 +109,7 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest {
|
|
|
|
|
SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class,
|
|
|
|
|
o -> o.setStatus(randomCommonStatus()));
|
|
|
|
|
// mock 方法
|
|
|
|
|
when(dictTypeService.getDictType(eq(reqVO.getDictType())))
|
|
|
|
|
.thenReturn(randomPojo(SysDictTypeDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())));
|
|
|
|
|
when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType()));
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
Long dictDataId = dictDataService.createDictData(reqVO);
|
|
|
|
|
@ -121,21 +122,66 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest {
|
|
|
|
|
verify(dictDataProducer, times(1)).sendDictDataRefreshMessage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testCreateDictData_dictTypeNotExists() {
|
|
|
|
|
// 准备参数
|
|
|
|
|
SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class,
|
|
|
|
|
o -> o.setStatus(randomCommonStatus()));
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
assertServiceException(() -> dictDataService.createDictData(reqVO), DICT_TYPE_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testCreateDictData_dictTypeNotEnable() {
|
|
|
|
|
// 准备参数
|
|
|
|
|
SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class,
|
|
|
|
|
o -> o.setStatus(randomCommonStatus()));
|
|
|
|
|
// mock 方法,数据类型被禁用
|
|
|
|
|
when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(
|
|
|
|
|
randomPojo(SysDictTypeDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
assertServiceException(() -> dictDataService.createDictData(reqVO), DICT_TYPE_NOT_ENABLE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testCreateDictData_dictDataValueDuplicate() {
|
|
|
|
|
// 准备参数
|
|
|
|
|
SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class,
|
|
|
|
|
o -> o.setStatus(randomCommonStatus()));
|
|
|
|
|
// mock 方法,字典类型
|
|
|
|
|
when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType()));
|
|
|
|
|
// mock dictData 重复 value 重复
|
|
|
|
|
dictDataMapper.insert(randomDictDataDO(o -> {
|
|
|
|
|
o.setDictType(reqVO.getDictType());
|
|
|
|
|
o.setValue(reqVO.getValue()); // 使用 reqVO 的 value,实现重复
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
assertServiceException(() -> dictDataService.createDictData(reqVO), DICT_DATA_VALUE_DUPLICATE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testUpdateDictData_success() {
|
|
|
|
|
// mock 数据
|
|
|
|
|
SysDictDataDO dbDictData = randomPojo(SysDictDataDO.class);
|
|
|
|
|
SysDictDataDO dbDictData = randomDictDataDO();
|
|
|
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
// 准备参数
|
|
|
|
|
SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> {
|
|
|
|
|
o.setId(dbDictData.getId()); // 设置更新的 ID
|
|
|
|
|
o.setStatus(randomCommonStatus());
|
|
|
|
|
});
|
|
|
|
|
// mock 方法,字典类型
|
|
|
|
|
when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType()));
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
dictDataService.updateDictData(reqVO);
|
|
|
|
|
// 校验是否更新正确
|
|
|
|
|
SysDictDataDO dictData = dictDataMapper.selectById(reqVO.getId()); // 获取最新的
|
|
|
|
|
assertPojoEquals(reqVO, dictData);
|
|
|
|
|
// 校验调用
|
|
|
|
|
verify(dictDataProducer, times(1)).sendDictDataRefreshMessage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@ -147,18 +193,75 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest {
|
|
|
|
|
assertServiceException(() -> dictDataService.updateDictData(reqVO), DICT_DATA_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testUpdateDictData_dictTypeNotExists() {
|
|
|
|
|
// mock 数据
|
|
|
|
|
SysDictDataDO dbDictData = randomDictDataDO();
|
|
|
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
// 准备参数
|
|
|
|
|
SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> {
|
|
|
|
|
o.setId(dbDictData.getId()); // 设置更新的 ID
|
|
|
|
|
o.setStatus(randomCommonStatus());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
assertServiceException(() -> dictDataService.updateDictData(reqVO), DICT_TYPE_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testUpdateDictData_dictTypeNotEnable() {
|
|
|
|
|
// mock 数据
|
|
|
|
|
SysDictDataDO dbDictData = randomDictDataDO();
|
|
|
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
// 准备参数
|
|
|
|
|
SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> {
|
|
|
|
|
o.setId(dbDictData.getId()); // 设置更新的 ID
|
|
|
|
|
o.setStatus(randomCommonStatus());
|
|
|
|
|
});
|
|
|
|
|
// mock 方法,数据类型被禁用
|
|
|
|
|
when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(
|
|
|
|
|
randomPojo(SysDictTypeDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
assertServiceException(() -> dictDataService.updateDictData(reqVO), DICT_TYPE_NOT_ENABLE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testUpdateDictData_dictDataValueDuplicate() {
|
|
|
|
|
// mock 数据
|
|
|
|
|
SysDictDataDO dbDictData = randomDictDataDO();
|
|
|
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
// 准备参数
|
|
|
|
|
SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> {
|
|
|
|
|
o.setId(dbDictData.getId()); // 设置更新的 ID
|
|
|
|
|
o.setStatus(randomCommonStatus());
|
|
|
|
|
});
|
|
|
|
|
// mock 方法,字典类型
|
|
|
|
|
when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType()));
|
|
|
|
|
// mock dictData 重复 value 重复
|
|
|
|
|
dictDataMapper.insert(randomDictDataDO(o -> {
|
|
|
|
|
o.setDictType(reqVO.getDictType());
|
|
|
|
|
o.setValue(reqVO.getValue()); // 使用 reqVO 的 value,实现重复
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
// 调用, 并断言异常
|
|
|
|
|
assertServiceException(() -> dictDataService.updateDictData(reqVO), DICT_DATA_VALUE_DUPLICATE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testDeleteDictData_success() {
|
|
|
|
|
// mock 数据
|
|
|
|
|
SysDictDataDO dbDictData = randomPojo(SysDictDataDO.class);
|
|
|
|
|
SysDictDataDO dbDictData = randomDictDataDO();
|
|
|
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
|
|
|
// 准备参数
|
|
|
|
|
Long id = dbDictData.getId();
|
|
|
|
|
|
|
|
|
|
// 调用
|
|
|
|
|
dictDataService.deleteDictData(id);
|
|
|
|
|
// 校验数据不存在了
|
|
|
|
|
assertNull(dictDataMapper.selectById(id));
|
|
|
|
|
// 校验数据不存在了
|
|
|
|
|
assertNull(dictDataMapper.selectById(id));
|
|
|
|
|
// 校验调用
|
|
|
|
|
verify(dictDataProducer, times(1)).sendDictDataRefreshMessage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@ -170,4 +273,27 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest {
|
|
|
|
|
assertServiceException(() -> dictDataService.deleteDictData(id), DICT_DATA_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ========== 随机对象 ==========
|
|
|
|
|
|
|
|
|
|
@SafeVarargs
|
|
|
|
|
private static SysDictDataDO randomDictDataDO(Consumer<SysDictDataDO>... consumers) {
|
|
|
|
|
Consumer<SysDictDataDO> consumer = (o) -> {
|
|
|
|
|
o.setStatus(randomCommonStatus()); // 保证 status 的范围
|
|
|
|
|
};
|
|
|
|
|
return randomPojo(SysDictDataDO.class, ArrayUtils.append(consumer, consumers));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成一个有效的字典类型
|
|
|
|
|
*
|
|
|
|
|
* @param type 字典类型
|
|
|
|
|
* @return SysDictTypeDO 对象
|
|
|
|
|
*/
|
|
|
|
|
private static SysDictTypeDO randomDictTypeDO(String type) {
|
|
|
|
|
return randomPojo(SysDictTypeDO.class, o -> {
|
|
|
|
|
o.setType(type);
|
|
|
|
|
o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 保证 status 是开启
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|