|
@@ -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.dal.mysql.dict.SysDictDataMapper;
|
|
import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer;
|
|
import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer;
|
|
import cn.iocoder.dashboard.modules.system.service.dict.impl.SysDictDataServiceImpl;
|
|
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 cn.iocoder.dashboard.util.object.ObjectUtils;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import java.util.List;
|
|
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.assertPojoEquals;
|
|
import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException;
|
|
import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException;
|
|
import static cn.iocoder.dashboard.util.RandomUtils.*;
|
|
import static cn.iocoder.dashboard.util.RandomUtils.*;
|
|
@@ -107,8 +109,7 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest {
|
|
SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class,
|
|
SysDictDataCreateReqVO reqVO = randomPojo(SysDictDataCreateReqVO.class,
|
|
o -> o.setStatus(randomCommonStatus()));
|
|
o -> o.setStatus(randomCommonStatus()));
|
|
// mock 方法
|
|
// 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);
|
|
Long dictDataId = dictDataService.createDictData(reqVO);
|
|
@@ -121,21 +122,66 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest {
|
|
verify(dictDataProducer, times(1)).sendDictDataRefreshMessage();
|
|
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
|
|
@Test
|
|
public void testUpdateDictData_success() {
|
|
public void testUpdateDictData_success() {
|
|
// mock 数据
|
|
// mock 数据
|
|
- SysDictDataDO dbDictData = randomPojo(SysDictDataDO.class);
|
|
|
|
|
|
+ SysDictDataDO dbDictData = randomDictDataDO();
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
// 准备参数
|
|
// 准备参数
|
|
SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> {
|
|
SysDictDataUpdateReqVO reqVO = randomPojo(SysDictDataUpdateReqVO.class, o -> {
|
|
o.setId(dbDictData.getId()); // 设置更新的 ID
|
|
o.setId(dbDictData.getId()); // 设置更新的 ID
|
|
|
|
+ o.setStatus(randomCommonStatus());
|
|
});
|
|
});
|
|
|
|
+ // mock 方法,字典类型
|
|
|
|
+ when(dictTypeService.getDictType(eq(reqVO.getDictType()))).thenReturn(randomDictTypeDO(reqVO.getDictType()));
|
|
|
|
|
|
// 调用
|
|
// 调用
|
|
dictDataService.updateDictData(reqVO);
|
|
dictDataService.updateDictData(reqVO);
|
|
// 校验是否更新正确
|
|
// 校验是否更新正确
|
|
SysDictDataDO dictData = dictDataMapper.selectById(reqVO.getId()); // 获取最新的
|
|
SysDictDataDO dictData = dictDataMapper.selectById(reqVO.getId()); // 获取最新的
|
|
assertPojoEquals(reqVO, dictData);
|
|
assertPojoEquals(reqVO, dictData);
|
|
|
|
+ // 校验调用
|
|
|
|
+ verify(dictDataProducer, times(1)).sendDictDataRefreshMessage();
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
@@ -147,18 +193,75 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest {
|
|
assertServiceException(() -> dictDataService.updateDictData(reqVO), DICT_DATA_NOT_EXISTS);
|
|
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
|
|
@Test
|
|
public void testDeleteDictData_success() {
|
|
public void testDeleteDictData_success() {
|
|
// mock 数据
|
|
// mock 数据
|
|
- SysDictDataDO dbDictData = randomPojo(SysDictDataDO.class);
|
|
|
|
|
|
+ SysDictDataDO dbDictData = randomDictDataDO();
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
dictDataMapper.insert(dbDictData);// @Sql: 先插入出一条存在的数据
|
|
// 准备参数
|
|
// 准备参数
|
|
Long id = dbDictData.getId();
|
|
Long id = dbDictData.getId();
|
|
|
|
|
|
// 调用
|
|
// 调用
|
|
dictDataService.deleteDictData(id);
|
|
dictDataService.deleteDictData(id);
|
|
- // 校验数据不存在了
|
|
|
|
- assertNull(dictDataMapper.selectById(id));
|
|
|
|
|
|
+ // 校验数据不存在了
|
|
|
|
+ assertNull(dictDataMapper.selectById(id));
|
|
|
|
+ // 校验调用
|
|
|
|
+ verify(dictDataProducer, times(1)).sendDictDataRefreshMessage();
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
@@ -170,4 +273,27 @@ public class SysDictDataServiceTest extends BaseSpringBootUnitTest {
|
|
assertServiceException(() -> dictDataService.deleteDictData(id), DICT_DATA_NOT_EXISTS);
|
|
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 是开启
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|