【同步】与 yudao-boot 版本保持一致!
This commit is contained in:
@@ -1,308 +0,0 @@
|
||||
package cn.iocoder.yudao.module.system.service.errorcode;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
|
||||
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
|
||||
import cn.iocoder.yudao.module.system.api.errorcode.dto.ErrorCodeAutoGenerateReqDTO;
|
||||
import cn.iocoder.yudao.module.system.api.errorcode.dto.ErrorCodeRespDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.errorcode.vo.ErrorCodeSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.errorcode.ErrorCodeDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.errorcode.ErrorCodeMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.errorcode.ErrorCodeTypeEnum;
|
||||
import org.assertj.core.util.Lists;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
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.object.ObjectUtils.cloneIgnoreId;
|
||||
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.RandomUtils.*;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.ERROR_CODE_DUPLICATE;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.ERROR_CODE_NOT_EXISTS;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@Import(ErrorCodeServiceImpl.class)
|
||||
public class ErrorCodeServiceTest extends BaseDbUnitTest {
|
||||
|
||||
@Resource
|
||||
private ErrorCodeServiceImpl errorCodeService;
|
||||
|
||||
@Resource
|
||||
private ErrorCodeMapper errorCodeMapper;
|
||||
|
||||
@Test
|
||||
public void testCreateErrorCode_success() {
|
||||
// 准备参数
|
||||
ErrorCodeSaveReqVO reqVO = randomPojo(ErrorCodeSaveReqVO.class)
|
||||
.setId(null); // 防止 id 被赋值
|
||||
|
||||
// 调用
|
||||
Long errorCodeId = errorCodeService.createErrorCode(reqVO);
|
||||
// 断言
|
||||
assertNotNull(errorCodeId);
|
||||
// 校验记录的属性是否正确
|
||||
ErrorCodeDO errorCode = errorCodeMapper.selectById(errorCodeId);
|
||||
assertPojoEquals(reqVO, errorCode, "id");
|
||||
assertEquals(ErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateErrorCode_success() {
|
||||
// mock 数据
|
||||
ErrorCodeDO dbErrorCode = randomErrorCodeDO();
|
||||
errorCodeMapper.insert(dbErrorCode);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
ErrorCodeSaveReqVO reqVO = randomPojo(ErrorCodeSaveReqVO.class, o -> {
|
||||
o.setId(dbErrorCode.getId()); // 设置更新的 ID
|
||||
});
|
||||
|
||||
// 调用
|
||||
errorCodeService.updateErrorCode(reqVO);
|
||||
// 校验是否更新正确
|
||||
ErrorCodeDO errorCode = errorCodeMapper.selectById(reqVO.getId()); // 获取最新的
|
||||
assertPojoEquals(reqVO, errorCode);
|
||||
assertEquals(ErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteErrorCode_success() {
|
||||
// mock 数据
|
||||
ErrorCodeDO dbErrorCode = randomErrorCodeDO();
|
||||
errorCodeMapper.insert(dbErrorCode);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
Long id = dbErrorCode.getId();
|
||||
|
||||
// 调用
|
||||
errorCodeService.deleteErrorCode(id);
|
||||
// 校验数据不存在了
|
||||
assertNull(errorCodeMapper.selectById(id));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetErrorCodePage() {
|
||||
// mock 数据
|
||||
ErrorCodeDO dbErrorCode = initGetErrorCodePage();
|
||||
// 准备参数
|
||||
ErrorCodePageReqVO reqVO = new ErrorCodePageReqVO();
|
||||
reqVO.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType());
|
||||
reqVO.setApplicationName("tu");
|
||||
reqVO.setCode(1);
|
||||
reqVO.setMessage("ma");
|
||||
reqVO.setCreateTime(buildBetweenTime(2020, 11, 1, 2020, 11, 30));
|
||||
|
||||
// 调用
|
||||
PageResult<ErrorCodeDO> pageResult = errorCodeService.getErrorCodePage(reqVO);
|
||||
// 断言
|
||||
assertEquals(1, pageResult.getTotal());
|
||||
assertEquals(1, pageResult.getList().size());
|
||||
assertPojoEquals(dbErrorCode, pageResult.getList().get(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化 getErrorCodePage 方法的测试数据
|
||||
*/
|
||||
private ErrorCodeDO initGetErrorCodePage() {
|
||||
ErrorCodeDO dbErrorCode = randomErrorCodeDO(o -> { // 等会查询到
|
||||
o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType());
|
||||
o.setApplicationName("tudou");
|
||||
o.setCode(1);
|
||||
o.setMessage("yuanma");
|
||||
o.setCreateTime(buildTime(2020, 11, 11));
|
||||
});
|
||||
errorCodeMapper.insert(dbErrorCode);
|
||||
// 测试 type 不匹配
|
||||
errorCodeMapper.insert(cloneIgnoreId(dbErrorCode, o -> o.setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType())));
|
||||
// 测试 applicationName 不匹配
|
||||
errorCodeMapper.insert(cloneIgnoreId(dbErrorCode, o -> o.setApplicationName("yuan")));
|
||||
// 测试 code 不匹配
|
||||
errorCodeMapper.insert(cloneIgnoreId(dbErrorCode, o -> o.setCode(2)));
|
||||
// 测试 message 不匹配
|
||||
errorCodeMapper.insert(cloneIgnoreId(dbErrorCode, o -> o.setMessage("nai")));
|
||||
// 测试 createTime 不匹配
|
||||
errorCodeMapper.insert(cloneIgnoreId(dbErrorCode, o -> o.setCreateTime(buildTime(2020, 12, 12))));
|
||||
return dbErrorCode;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateCodeDuplicate_codeDuplicateForCreate() {
|
||||
// 准备参数
|
||||
Integer code = randomInteger();
|
||||
// mock 数据
|
||||
errorCodeMapper.insert(randomErrorCodeDO(o -> o.setCode(code)));
|
||||
|
||||
// 调用,校验异常
|
||||
assertServiceException(() -> errorCodeService.validateCodeDuplicate(code, null),
|
||||
ERROR_CODE_DUPLICATE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateCodeDuplicate_codeDuplicateForUpdate() {
|
||||
// 准备参数
|
||||
Long id = randomLongId();
|
||||
Integer code = randomInteger();
|
||||
// mock 数据
|
||||
errorCodeMapper.insert(randomErrorCodeDO(o -> o.setCode(code)));
|
||||
|
||||
// 调用,校验异常
|
||||
assertServiceException(() -> errorCodeService.validateCodeDuplicate(code, id),
|
||||
ERROR_CODE_DUPLICATE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateErrorCodeExists_notExists() {
|
||||
assertServiceException(() -> errorCodeService.validateErrorCodeExists(null),
|
||||
ERROR_CODE_NOT_EXISTS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 情况 1,错误码不存在的情况
|
||||
*/
|
||||
@Test
|
||||
public void testAutoGenerateErrorCodes_01() {
|
||||
// 准备参数
|
||||
ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class);
|
||||
// mock 方法
|
||||
|
||||
// 调用
|
||||
errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO));
|
||||
// 断言
|
||||
ErrorCodeDO errorCode = errorCodeMapper.selectOne(null);
|
||||
assertPojoEquals(generateReqDTO, errorCode);
|
||||
assertEquals(ErrorCodeTypeEnum.AUTO_GENERATION.getType(), errorCode.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* 情况 2.1,错误码存在,但是是 ErrorCodeTypeEnum.MANUAL_OPERATION 类型
|
||||
*/
|
||||
@Test
|
||||
public void testAutoGenerateErrorCodes_021() {
|
||||
// mock 数据
|
||||
ErrorCodeDO dbErrorCode = randomErrorCodeDO(o -> o.setType(ErrorCodeTypeEnum.MANUAL_OPERATION.getType()));
|
||||
errorCodeMapper.insert(dbErrorCode);
|
||||
// 准备参数
|
||||
ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class,
|
||||
o -> o.setCode(dbErrorCode.getCode()));
|
||||
// mock 方法
|
||||
|
||||
// 调用
|
||||
errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO));
|
||||
// 断言,相等,说明不会更新
|
||||
ErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId());
|
||||
assertPojoEquals(dbErrorCode, errorCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 情况 2.2,错误码存在,但是是 applicationName 不匹配
|
||||
*/
|
||||
@Test
|
||||
public void testAutoGenerateErrorCodes_022() {
|
||||
// mock 数据
|
||||
ErrorCodeDO dbErrorCode = randomErrorCodeDO(o -> o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()));
|
||||
errorCodeMapper.insert(dbErrorCode);
|
||||
// 准备参数
|
||||
ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class,
|
||||
o -> o.setCode(dbErrorCode.getCode()).setApplicationName(randomString()));
|
||||
// mock 方法
|
||||
|
||||
// 调用
|
||||
errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO));
|
||||
// 断言,相等,说明不会更新
|
||||
ErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId());
|
||||
assertPojoEquals(dbErrorCode, errorCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 情况 2.3,错误码存在,但是是 message 相同
|
||||
*/
|
||||
@Test
|
||||
public void testAutoGenerateErrorCodes_023() {
|
||||
// mock 数据
|
||||
ErrorCodeDO dbErrorCode = randomErrorCodeDO(o -> o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()));
|
||||
errorCodeMapper.insert(dbErrorCode);
|
||||
// 准备参数
|
||||
ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class,
|
||||
o -> o.setCode(dbErrorCode.getCode()).setApplicationName(dbErrorCode.getApplicationName())
|
||||
.setMessage(dbErrorCode.getMessage()));
|
||||
// mock 方法
|
||||
|
||||
// 调用
|
||||
errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO));
|
||||
// 断言,相等,说明不会更新
|
||||
ErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId());
|
||||
assertPojoEquals(dbErrorCode, errorCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 情况 2.3,错误码存在,但是是 message 不同,则进行更新
|
||||
*/
|
||||
@Test
|
||||
public void testAutoGenerateErrorCodes_024() {
|
||||
// mock 数据
|
||||
ErrorCodeDO dbErrorCode = randomErrorCodeDO(o -> o.setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()));
|
||||
errorCodeMapper.insert(dbErrorCode);
|
||||
// 准备参数
|
||||
ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class,
|
||||
o -> o.setCode(dbErrorCode.getCode()).setApplicationName(dbErrorCode.getApplicationName()));
|
||||
// mock 方法
|
||||
|
||||
// 调用
|
||||
errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO));
|
||||
// 断言,匹配
|
||||
ErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId());
|
||||
assertPojoEquals(generateReqDTO, errorCode);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetErrorCode() {
|
||||
// 准备参数
|
||||
ErrorCodeDO errorCodeDO = randomErrorCodeDO();
|
||||
errorCodeMapper.insert(errorCodeDO);
|
||||
// mock 方法
|
||||
Long id = errorCodeDO.getId();
|
||||
|
||||
// 调用
|
||||
ErrorCodeDO dbErrorCode = errorCodeService.getErrorCode(id);
|
||||
// 断言
|
||||
assertPojoEquals(errorCodeDO, dbErrorCode);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetErrorCodeList() {
|
||||
// 准备参数
|
||||
ErrorCodeDO errorCodeDO01 = randomErrorCodeDO(
|
||||
o -> o.setApplicationName("yunai_server").setUpdateTime(buildTime(2022, 1, 10)));
|
||||
errorCodeMapper.insert(errorCodeDO01);
|
||||
ErrorCodeDO errorCodeDO02 = randomErrorCodeDO(
|
||||
o -> o.setApplicationName("yunai_server").setUpdateTime(buildTime(2022, 1, 12)));
|
||||
errorCodeMapper.insert(errorCodeDO02);
|
||||
// mock 方法
|
||||
String applicationName = "yunai_server";
|
||||
LocalDateTime minUpdateTime = buildTime(2022, 1, 11);
|
||||
|
||||
// 调用
|
||||
List<ErrorCodeRespDTO> errorCodeList = errorCodeService.getErrorCodeList(applicationName, minUpdateTime);
|
||||
// 断言
|
||||
assertEquals(1, errorCodeList.size());
|
||||
assertPojoEquals(errorCodeDO02, errorCodeList.get(0));
|
||||
}
|
||||
|
||||
// ========== 随机对象 ==========
|
||||
|
||||
@SafeVarargs
|
||||
private static ErrorCodeDO randomErrorCodeDO(Consumer<ErrorCodeDO>... consumers) {
|
||||
Consumer<ErrorCodeDO> consumer = (o) -> {
|
||||
o.setType(randomEle(ErrorCodeTypeEnum.values()).getType()); // 保证 key 的范围
|
||||
};
|
||||
return randomPojo(ErrorCodeDO.class, ArrayUtils.append(consumer, consumers));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,303 +0,0 @@
|
||||
package cn.iocoder.yudao.module.system.service.sensitiveword;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
|
||||
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.sensitiveword.vo.SensitiveWordSaveVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.sensitiveword.SensitiveWordDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.sensitiveword.SensitiveWordMapper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
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.object.ObjectUtils.cloneIgnoreId;
|
||||
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.RandomUtils.randomLongId;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.SENSITIVE_WORD_NOT_EXISTS;
|
||||
import static java.util.Collections.singletonList;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
/**
|
||||
* {@link SensitiveWordServiceImpl} 的单元测试类
|
||||
*
|
||||
* @author 永不言败
|
||||
*/
|
||||
@Import(SensitiveWordServiceImpl.class)
|
||||
public class SensitiveWordServiceImplTest extends BaseDbUnitTest {
|
||||
|
||||
@Resource
|
||||
private SensitiveWordServiceImpl sensitiveWordService;
|
||||
|
||||
@Resource
|
||||
private SensitiveWordMapper sensitiveWordMapper;
|
||||
|
||||
@BeforeEach
|
||||
public void setUp() {
|
||||
SensitiveWordServiceImpl.ENABLED = true;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitLocalCache() {
|
||||
SensitiveWordDO wordDO1 = randomPojo(SensitiveWordDO.class, o -> o.setName("傻瓜")
|
||||
.setTags(singletonList("论坛")).setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||
sensitiveWordMapper.insert(wordDO1);
|
||||
SensitiveWordDO wordDO2 = randomPojo(SensitiveWordDO.class, o -> o.setName("笨蛋")
|
||||
.setTags(singletonList("蔬菜")).setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||
sensitiveWordMapper.insert(wordDO2);
|
||||
SensitiveWordDO wordDO3 = randomPojo(SensitiveWordDO.class, o -> o.setName("白")
|
||||
.setTags(singletonList("测试")).setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||
sensitiveWordMapper.insert(wordDO3);
|
||||
SensitiveWordDO wordDO4 = randomPojo(SensitiveWordDO.class, o -> o.setName("白痴")
|
||||
.setTags(singletonList("测试")).setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||
sensitiveWordMapper.insert(wordDO4);
|
||||
|
||||
// 调用
|
||||
sensitiveWordService.initLocalCache();
|
||||
// 断言 sensitiveWordTagsCache 缓存
|
||||
assertEquals(SetUtils.asSet("论坛", "蔬菜", "测试"), sensitiveWordService.getSensitiveWordTagSet());
|
||||
// 断言 sensitiveWordCache
|
||||
assertEquals(4, sensitiveWordService.getSensitiveWordCache().size());
|
||||
assertPojoEquals(wordDO1, sensitiveWordService.getSensitiveWordCache().get(0));
|
||||
assertPojoEquals(wordDO2, sensitiveWordService.getSensitiveWordCache().get(1));
|
||||
assertPojoEquals(wordDO3, sensitiveWordService.getSensitiveWordCache().get(2));
|
||||
// 断言 tagSensitiveWordTries 缓存
|
||||
assertNotNull(sensitiveWordService.getDefaultSensitiveWordTrie());
|
||||
assertEquals(3, sensitiveWordService.getTagSensitiveWordTries().size());
|
||||
assertNotNull(sensitiveWordService.getTagSensitiveWordTries().get("论坛"));
|
||||
assertNotNull(sensitiveWordService.getTagSensitiveWordTries().get("蔬菜"));
|
||||
assertNotNull(sensitiveWordService.getTagSensitiveWordTries().get("测试"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshLocalCache() {
|
||||
// mock 数据
|
||||
SensitiveWordDO wordDO1 = randomPojo(SensitiveWordDO.class, o -> o.setName("傻瓜")
|
||||
.setTags(singletonList("论坛")).setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||
wordDO1.setUpdateTime(LocalDateTime.now());
|
||||
sensitiveWordMapper.insert(wordDO1);
|
||||
sensitiveWordService.initLocalCache();
|
||||
// mock 数据 ②
|
||||
SensitiveWordDO wordDO2 = randomPojo(SensitiveWordDO.class, o -> o.setName("笨蛋")
|
||||
.setTags(singletonList("蔬菜")).setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||
wordDO2.setUpdateTime(LocalDateTimeUtils.addTime(Duration.ofMinutes(1))); // 避免时间相同
|
||||
sensitiveWordMapper.insert(wordDO2);
|
||||
|
||||
// 调用
|
||||
sensitiveWordService.refreshLocalCache();
|
||||
// 断言 sensitiveWordTagsCache 缓存
|
||||
assertEquals(SetUtils.asSet("论坛", "蔬菜"), sensitiveWordService.getSensitiveWordTagSet());
|
||||
// 断言 sensitiveWordCache
|
||||
assertEquals(2, sensitiveWordService.getSensitiveWordCache().size());
|
||||
assertPojoEquals(wordDO1, sensitiveWordService.getSensitiveWordCache().get(0));
|
||||
assertPojoEquals(wordDO2, sensitiveWordService.getSensitiveWordCache().get(1));
|
||||
// 断言 tagSensitiveWordTries 缓存
|
||||
assertNotNull(sensitiveWordService.getDefaultSensitiveWordTrie());
|
||||
assertEquals(2, sensitiveWordService.getTagSensitiveWordTries().size());
|
||||
assertNotNull(sensitiveWordService.getTagSensitiveWordTries().get("论坛"));
|
||||
assertNotNull(sensitiveWordService.getTagSensitiveWordTries().get("蔬菜"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateSensitiveWord_success() {
|
||||
// 准备参数
|
||||
SensitiveWordSaveVO reqVO = randomPojo(SensitiveWordSaveVO.class)
|
||||
.setId(null); // 防止 id 被赋值
|
||||
|
||||
// 调用
|
||||
Long sensitiveWordId = sensitiveWordService.createSensitiveWord(reqVO);
|
||||
// 断言
|
||||
assertNotNull(sensitiveWordId);
|
||||
// 校验记录的属性是否正确
|
||||
SensitiveWordDO sensitiveWord = sensitiveWordMapper.selectById(sensitiveWordId);
|
||||
assertPojoEquals(reqVO, sensitiveWord, "id");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateSensitiveWord_success() {
|
||||
// mock 数据
|
||||
SensitiveWordDO dbSensitiveWord = randomPojo(SensitiveWordDO.class);
|
||||
sensitiveWordMapper.insert(dbSensitiveWord);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
SensitiveWordSaveVO reqVO = randomPojo(SensitiveWordSaveVO.class, o -> {
|
||||
o.setId(dbSensitiveWord.getId()); // 设置更新的 ID
|
||||
});
|
||||
|
||||
// 调用
|
||||
sensitiveWordService.updateSensitiveWord(reqVO);
|
||||
// 校验是否更新正确
|
||||
SensitiveWordDO sensitiveWord = sensitiveWordMapper.selectById(reqVO.getId()); // 获取最新的
|
||||
assertPojoEquals(reqVO, sensitiveWord);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateSensitiveWord_notExists() {
|
||||
// 准备参数
|
||||
SensitiveWordSaveVO reqVO = randomPojo(SensitiveWordSaveVO.class);
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> sensitiveWordService.updateSensitiveWord(reqVO), SENSITIVE_WORD_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSensitiveWord_success() {
|
||||
// mock 数据
|
||||
SensitiveWordDO dbSensitiveWord = randomPojo(SensitiveWordDO.class);
|
||||
sensitiveWordMapper.insert(dbSensitiveWord);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
Long id = dbSensitiveWord.getId();
|
||||
|
||||
// 调用
|
||||
sensitiveWordService.deleteSensitiveWord(id);
|
||||
// 校验数据不存在了
|
||||
assertNull(sensitiveWordMapper.selectById(id));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSensitiveWord_notExists() {
|
||||
// 准备参数
|
||||
Long id = randomLongId();
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> sensitiveWordService.deleteSensitiveWord(id), SENSITIVE_WORD_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSensitiveWord() {
|
||||
// mock 数据
|
||||
SensitiveWordDO sensitiveWord = randomPojo(SensitiveWordDO.class);
|
||||
sensitiveWordMapper.insert(sensitiveWord);
|
||||
// 准备参数
|
||||
Long id = sensitiveWord.getId();
|
||||
|
||||
// 调用
|
||||
SensitiveWordDO dbSensitiveWord = sensitiveWordService.getSensitiveWord(id);
|
||||
// 断言
|
||||
assertPojoEquals(sensitiveWord, dbSensitiveWord);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSensitiveWordList() {
|
||||
// mock 数据
|
||||
SensitiveWordDO sensitiveWord01 = randomPojo(SensitiveWordDO.class);
|
||||
sensitiveWordMapper.insert(sensitiveWord01);
|
||||
SensitiveWordDO sensitiveWord02 = randomPojo(SensitiveWordDO.class);
|
||||
sensitiveWordMapper.insert(sensitiveWord02);
|
||||
|
||||
// 调用
|
||||
List<SensitiveWordDO> list = sensitiveWordService.getSensitiveWordList();
|
||||
// 断言
|
||||
assertEquals(2, list.size());
|
||||
assertEquals(sensitiveWord01, list.get(0));
|
||||
assertEquals(sensitiveWord02, list.get(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSensitiveWordPage() {
|
||||
// mock 数据
|
||||
SensitiveWordDO dbSensitiveWord = randomPojo(SensitiveWordDO.class, o -> { // 等会查询到
|
||||
o.setName("笨蛋");
|
||||
o.setTags(Arrays.asList("论坛", "蔬菜"));
|
||||
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
o.setCreateTime(buildTime(2022, 2, 8));
|
||||
});
|
||||
sensitiveWordMapper.insert(dbSensitiveWord);
|
||||
// 测试 name 不匹配
|
||||
sensitiveWordMapper.insert(cloneIgnoreId(dbSensitiveWord, o -> o.setName("傻瓜")));
|
||||
// 测试 tags 不匹配
|
||||
sensitiveWordMapper.insert(cloneIgnoreId(dbSensitiveWord, o -> o.setTags(Arrays.asList("短信", "日用品"))));
|
||||
// 测试 createTime 不匹配
|
||||
sensitiveWordMapper.insert(cloneIgnoreId(dbSensitiveWord, o -> o.setCreateTime(buildTime(2022, 2, 16))));
|
||||
// 准备参数
|
||||
SensitiveWordPageReqVO reqVO = new SensitiveWordPageReqVO();
|
||||
reqVO.setName("笨");
|
||||
reqVO.setTag("论坛");
|
||||
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
reqVO.setCreateTime(buildBetweenTime(2022, 2, 1, 2022, 2, 12));
|
||||
|
||||
// 调用
|
||||
PageResult<SensitiveWordDO> pageResult = sensitiveWordService.getSensitiveWordPage(reqVO);
|
||||
// 断言
|
||||
assertEquals(1, pageResult.getTotal());
|
||||
assertEquals(1, pageResult.getList().size());
|
||||
assertPojoEquals(dbSensitiveWord, pageResult.getList().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateText_noTag() {
|
||||
testInitLocalCache();
|
||||
// 准备参数
|
||||
String text = "你是傻瓜,你是笨蛋";
|
||||
// 调用
|
||||
List<String> result = sensitiveWordService.validateText(text, null);
|
||||
// 断言
|
||||
assertEquals(Arrays.asList("傻瓜", "笨蛋"), result);
|
||||
|
||||
// 准备参数
|
||||
String text2 = "你是傻瓜,你是笨蛋,你是白";
|
||||
// 调用
|
||||
List<String> result2 = sensitiveWordService.validateText(text2, null);
|
||||
// 断言
|
||||
assertEquals(Arrays.asList("傻瓜", "笨蛋","白"), result2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateText_hasTag() {
|
||||
testInitLocalCache();
|
||||
// 准备参数
|
||||
String text = "你是傻瓜,你是笨蛋";
|
||||
// 调用
|
||||
List<String> result = sensitiveWordService.validateText(text, singletonList("论坛"));
|
||||
// 断言
|
||||
assertEquals(singletonList("傻瓜"), result);
|
||||
|
||||
|
||||
// 准备参数
|
||||
String text2 = "你是白";
|
||||
// 调用
|
||||
List<String> result2 = sensitiveWordService.validateText(text2, singletonList("测试"));
|
||||
// 断言
|
||||
assertEquals(singletonList("白"), result2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsTestValid_noTag() {
|
||||
testInitLocalCache();
|
||||
// 准备参数
|
||||
String text = "你是傻瓜,你是笨蛋";
|
||||
// 调用,断言
|
||||
assertFalse(sensitiveWordService.isTextValid(text, null));
|
||||
|
||||
// 准备参数
|
||||
String text2 = "你是白";
|
||||
// 调用,断言
|
||||
assertFalse(sensitiveWordService.isTextValid(text2, null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsTestValid_hasTag() {
|
||||
testInitLocalCache();
|
||||
// 准备参数
|
||||
String text = "你是傻瓜,你是笨蛋";
|
||||
// 调用,断言
|
||||
assertFalse(sensitiveWordService.isTextValid(text, singletonList("论坛")));
|
||||
|
||||
// 准备参数
|
||||
String text2 = "你是白";
|
||||
// 调用,断言
|
||||
assertFalse(sensitiveWordService.isTextValid(text2, singletonList("测试")));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -16,13 +16,11 @@ DELETE FROM "system_sms_channel";
|
||||
DELETE FROM "system_sms_template";
|
||||
DELETE FROM "system_sms_log";
|
||||
DELETE FROM "system_sms_code";
|
||||
DELETE FROM "system_error_code";
|
||||
DELETE FROM "system_social_client";
|
||||
DELETE FROM "system_social_user";
|
||||
DELETE FROM "system_social_user_bind";
|
||||
DELETE FROM "system_tenant";
|
||||
DELETE FROM "system_tenant_package";
|
||||
DELETE FROM "system_sensitive_word";
|
||||
DELETE FROM "system_oauth2_client";
|
||||
DELETE FROM "system_oauth2_approve";
|
||||
DELETE FROM "system_oauth2_access_token";
|
||||
|
||||
@@ -332,21 +332,6 @@ CREATE TABLE IF NOT EXISTS "system_sms_code" (
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT '短信日志';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "system_error_code" (
|
||||
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
"type" tinyint NOT NULL DEFAULT '0',
|
||||
"application_name" varchar(50) NOT NULL,
|
||||
"code" int NOT NULL DEFAULT '0',
|
||||
"message" varchar(512) NOT NULL DEFAULT '',
|
||||
"memo" varchar(512) DEFAULT '',
|
||||
"creator" varchar(64) DEFAULT '',
|
||||
"create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updater" varchar(64) DEFAULT '',
|
||||
"update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"deleted" bit NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT '错误码表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "system_social_client" (
|
||||
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
"name" varchar(255) NOT NULL,
|
||||
@@ -431,20 +416,6 @@ CREATE TABLE IF NOT EXISTS "system_tenant_package" (
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT '租户套餐表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "system_sensitive_word" (
|
||||
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
"name" varchar(255) NOT NULL,
|
||||
"tags" varchar(1024) NOT NULL,
|
||||
"status" bit NOT NULL DEFAULT FALSE,
|
||||
"description" varchar(512),
|
||||
"creator" varchar(64) DEFAULT '',
|
||||
"create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updater" varchar(64) DEFAULT '',
|
||||
"update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
"deleted" bit NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT '系统敏感词';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "system_oauth2_client" (
|
||||
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
"client_id" varchar NOT NULL,
|
||||
|
||||
Reference in New Issue
Block a user