mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-29 18:51:53 +08:00
修复工作流的单元测试
This commit is contained in:
parent
4be5b73dbc
commit
fcd44d8b0d
@ -23,7 +23,7 @@ public interface SysDeptMapper extends BaseMapperX<SysDeptDO> {
|
||||
|
||||
default SysDeptDO selectByParentIdAndName(Long parentId, String name) {
|
||||
return selectOne(new LambdaQueryWrapper<SysDeptDO>().eq(SysDeptDO::getParentId, parentId)
|
||||
.eq(SysDeptDO::getParentId, name));
|
||||
.eq(SysDeptDO::getName, name));
|
||||
}
|
||||
|
||||
default Integer selectCountByParentId(Long parentId) {
|
||||
|
@ -24,7 +24,7 @@ public interface SysMenuMapper extends BaseMapperX<SysMenuDO> {
|
||||
}
|
||||
|
||||
default List<SysMenuDO> selectList(SysMenuListReqVO reqVO) {
|
||||
return selectList(new LambdaQueryWrapperX<SysMenuDO>().likeIfPresent(SysMenuDO::getParentId, reqVO.getName())
|
||||
return selectList(new LambdaQueryWrapperX<SysMenuDO>().likeIfPresent(SysMenuDO::getName, reqVO.getName())
|
||||
.eqIfPresent(SysMenuDO::getStatus, reqVO.getStatus()));
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
|
||||
import org.activiti.engine.impl.persistence.entity.TaskEntity;
|
||||
import org.activiti.engine.impl.persistence.entity.TaskEntityImpl;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
@ -70,7 +71,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest {
|
||||
// mock 方法
|
||||
List<SysUserDO> users = CollectionUtils.convertList(asSet(11L, 22L),
|
||||
id -> new SysUserDO().setId(id));
|
||||
when(userService.getUsersByPostIds(eq(rule.getOptions()))).thenReturn(users);
|
||||
when(userService.getUsersByDeptIds(eq(rule.getOptions()))).thenReturn(users);
|
||||
mockGetUserMap(asSet(11L, 22L));
|
||||
|
||||
// 调用
|
||||
@ -185,10 +186,11 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest {
|
||||
|
||||
@Test
|
||||
public void testRemoveDisableUsers() {
|
||||
// 准备参数
|
||||
// 准备参数. 1L 可以找到;2L 是禁用的;3L 找不到
|
||||
Set<Long> assigneeUserIds = asSet(1L, 2L, 3L);
|
||||
// mock 方法
|
||||
SysUserDO user1 = randomPojo(SysUserDO.class, o -> o.setId(1L));
|
||||
SysUserDO user1 = randomPojo(SysUserDO.class, o -> o.setId(1L)
|
||||
.setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
||||
SysUserDO user2 = randomPojo(SysUserDO.class, o -> o.setId(2L)
|
||||
.setStatus(CommonStatusEnum.DISABLE.getStatus()));
|
||||
Map<Long, SysUserDO> userMap = MapUtil.builder(user1.getId(), user1)
|
||||
|
@ -1,18 +1,30 @@
|
||||
package cn.iocoder.yudao.adminserver.modules.bpm.service.definition;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormCreateReqVO;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormPageReqVO;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmFormFieldRespDTO;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmFormServiceImpl;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
||||
@ -38,7 +50,10 @@ public class BpmFormServiceTest extends BaseDbUnitTest {
|
||||
@Test
|
||||
public void testCreateForm_success() {
|
||||
// 准备参数
|
||||
BpmFormCreateReqVO reqVO = randomPojo(BpmFormCreateReqVO.class);
|
||||
BpmFormCreateReqVO reqVO = randomPojo(BpmFormCreateReqVO.class, o -> {
|
||||
o.setConf("{}");
|
||||
o.setFields(randomFields());
|
||||
});
|
||||
|
||||
// 调用
|
||||
Long formId = formService.createForm(reqVO);
|
||||
@ -52,11 +67,16 @@ public class BpmFormServiceTest extends BaseDbUnitTest {
|
||||
@Test
|
||||
public void testUpdateForm_success() {
|
||||
// mock 数据
|
||||
BpmFormDO dbForm = randomPojo(BpmFormDO.class);
|
||||
BpmFormDO dbForm = randomPojo(BpmFormDO.class, o -> {
|
||||
o.setConf("{}");
|
||||
o.setFields(randomFields());
|
||||
});
|
||||
formMapper.insert(dbForm);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class, o -> {
|
||||
o.setId(dbForm.getId()); // 设置更新的 ID
|
||||
o.setConf("{'yudao': 'yuanma'}");
|
||||
o.setFields(randomFields());
|
||||
});
|
||||
|
||||
// 调用
|
||||
@ -69,7 +89,10 @@ public class BpmFormServiceTest extends BaseDbUnitTest {
|
||||
@Test
|
||||
public void testUpdateForm_notExists() {
|
||||
// 准备参数
|
||||
BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class);
|
||||
BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class, o -> {
|
||||
o.setConf("{'yudao': 'yuanma'}");
|
||||
o.setFields(randomFields());
|
||||
});
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> formService.updateForm(reqVO), FORM_NOT_EXISTS);
|
||||
@ -119,4 +142,11 @@ public class BpmFormServiceTest extends BaseDbUnitTest {
|
||||
assertPojoEquals(dbForm, pageResult.getList().get(0));
|
||||
}
|
||||
|
||||
private List<String> randomFields() {
|
||||
int size = RandomUtil.randomInt(1, 3);
|
||||
return Stream.iterate(0, i -> i).limit(size)
|
||||
.map(i -> JsonUtils.toJsonString(randomPojo(BpmFormFieldRespDTO.class)))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.adminserver.modules.bpm.service.definition;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupPageReqVO;
|
||||
@ -7,7 +8,9 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.B
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper;
|
||||
import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmUserGroupServiceImpl;
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
@ -98,27 +101,27 @@ public class BpmUserGroupServiceTest extends BaseDbUnitTest {
|
||||
assertServiceException(() -> userGroupService.deleteUserGroup(id), USER_GROUP_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test // TODO 请修改 null 为需要的值
|
||||
@Test
|
||||
public void testGetUserGroupPage() {
|
||||
// mock 数据
|
||||
BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class, o -> { // 等会查询到
|
||||
o.setName(null);
|
||||
o.setStatus(null);
|
||||
o.setCreateTime(null);
|
||||
o.setName("芋道源码");
|
||||
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
o.setCreateTime(DateUtils.buildTime(2021, 11, 11));
|
||||
});
|
||||
userGroupMapper.insert(dbUserGroup);
|
||||
// 测试 name 不匹配
|
||||
userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setName(null)));
|
||||
userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setName("芋道")));
|
||||
// 测试 status 不匹配
|
||||
userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setStatus(null)));
|
||||
userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
||||
// 测试 createTime 不匹配
|
||||
userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setCreateTime(null)));
|
||||
userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12))));
|
||||
// 准备参数
|
||||
BpmUserGroupPageReqVO reqVO = new BpmUserGroupPageReqVO();
|
||||
reqVO.setName(null);
|
||||
reqVO.setStatus(null);
|
||||
reqVO.setBeginCreateTime(null);
|
||||
reqVO.setEndCreateTime(null);
|
||||
reqVO.setName("源码");
|
||||
reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 11, 10));
|
||||
reqVO.setEndCreateTime(DateUtils.buildTime(2021, 11, 12));
|
||||
|
||||
// 调用
|
||||
PageResult<BpmUserGroupDO> pageResult = userGroupService.getUserGroupPage(reqVO);
|
||||
|
@ -172,7 +172,6 @@ class SysDeptServiceTest extends BaseDbUnitTest {
|
||||
});
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> deptService.updateDept(reqVO), DEPT_NAME_DUPLICATE);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -28,7 +28,7 @@ import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeCons
|
||||
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 org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
@Import(SysMenuServiceImpl.class)
|
||||
@ -151,7 +151,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
|
||||
|
||||
// 断言
|
||||
SysMenuDO menuDO = menuMapper.selectById(sonId);
|
||||
Assert.isNull(menuDO);
|
||||
assertNull(menuDO);
|
||||
verify(sysPermissionService).processMenuDeleted(sonId);
|
||||
verify(sysMenuProducer).sendMenuRefreshMessage();
|
||||
}
|
||||
@ -186,7 +186,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
|
||||
List<SysMenuDO> menuDOS = sysMenuService.getMenus();
|
||||
|
||||
// 断言
|
||||
Assert.isTrue(menuDOS.size() == idMenuMap.size());
|
||||
assertEquals(menuDOS.size(), idMenuMap.size());
|
||||
menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
|
||||
}
|
||||
|
||||
@ -219,7 +219,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
|
||||
List<SysMenuDO> menuDOS = sysMenuService.getMenus(reqVO);
|
||||
|
||||
// 断言
|
||||
Assert.isTrue(menuDOS.size() == idMenuMap.size());
|
||||
assertEquals(menuDOS.size(), idMenuMap.size());
|
||||
menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
|
||||
}
|
||||
|
||||
@ -248,7 +248,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
|
||||
|
||||
List<SysMenuDO> menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(MenuTypeEnum.MENU.getType()),
|
||||
Collections.singletonList(CommonStatusEnum.DISABLE.getStatus()));
|
||||
Assert.isTrue(menuDOS.size() == idMenuMap.size());
|
||||
assertEquals(menuDOS.size(), idMenuMap.size());
|
||||
menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
|
||||
}
|
||||
|
||||
@ -275,7 +275,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
|
||||
|
||||
List<SysMenuDO> menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(1L),
|
||||
Collections.singletonList(MenuTypeEnum.MENU.getType()), Collections.singletonList(1));
|
||||
Assert.isTrue(menuDOS.size() == idMenuMap.size());
|
||||
assertEquals(menuDOS.size(), idMenuMap.size());
|
||||
menuDOS.forEach(menu -> assertPojoEquals(idMenuMap.get(menu.getId()), menu));
|
||||
}
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
<configuration>
|
||||
<!-- 引用 Spring Boot 的 logback 基础配置 -->
|
||||
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
|
||||
</configuration>
|
23
yudao-admin-server/src/test/resources/logback.xml
Normal file
23
yudao-admin-server/src/test/resources/logback.xml
Normal file
@ -0,0 +1,23 @@
|
||||
<configuration>
|
||||
<!-- 由于单元测试未开启 Spring Boot 的上下文,所以只能使用 logback.xml 文件 -->
|
||||
|
||||
<!-- 引用 Spring Boot 的 logback 基础配置 -->
|
||||
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
|
||||
|
||||
<!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->
|
||||
<property name="PATTERN_DEFAULT" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%thread] [%tid] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
|
||||
|
||||
<!-- 控制台 Appender -->
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<pattern>${PATTERN_DEFAULT}</pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
@ -35,3 +35,4 @@ DELETE FROM pay_refund;
|
||||
|
||||
-- bpm 开头的 DB
|
||||
DELETE FROM "bpm_form";
|
||||
DELETE FROM "bpm_user_group";
|
||||
|
@ -74,7 +74,7 @@ CREATE TABLE IF NOT EXISTS "sys_dept" (
|
||||
"name" varchar(30) NOT NULL DEFAULT '',
|
||||
"parent_id" bigint NOT NULL DEFAULT '0',
|
||||
"sort" int NOT NULL DEFAULT '0',
|
||||
"leader" varchar(20) DEFAULT NULL,
|
||||
"leader_user_id" bigint DEFAULT NULL,
|
||||
"phone" varchar(11) DEFAULT NULL,
|
||||
"email" varchar(50) DEFAULT NULL,
|
||||
"status" tinyint NOT NULL,
|
||||
@ -490,8 +490,9 @@ CREATE TABLE IF NOT EXISTS "pay_merchant"
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT '支付商户信息';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "pay_app"
|
||||
(
|
||||
-- bpm 开头的 DB
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "pay_app" (
|
||||
"id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
"name" varchar(64) NOT NULL,
|
||||
"status" tinyint NOT NULL,
|
||||
@ -507,8 +508,7 @@ CREATE TABLE IF NOT EXISTS "pay_app"
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT = '支付应用信息';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "pay_channel"
|
||||
(
|
||||
CREATE TABLE IF NOT EXISTS "pay_channel" (
|
||||
"id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
"code" varchar(32) NOT NULL,
|
||||
"status" tinyint(4) NOT NULL,
|
||||
@ -525,8 +525,7 @@ CREATE TABLE IF NOT EXISTS "pay_channel"
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT = '支付渠道';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pay_order`
|
||||
(
|
||||
CREATE TABLE IF NOT EXISTS `pay_order` (
|
||||
"id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
`merchant_id` bigint(20) NOT NULL,
|
||||
`app_id` bigint(20) NOT NULL,
|
||||
@ -559,12 +558,8 @@ CREATE TABLE IF NOT EXISTS `pay_order`
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT = '支付订单';
|
||||
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pay_refund`
|
||||
(
|
||||
CREATE TABLE IF NOT EXISTS `pay_refund` (
|
||||
"id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
`req_no` varchar(64) NOT NULL,
|
||||
`merchant_id` bigint(20) NOT NULL,
|
||||
`app_id` bigint(20) NOT NULL,
|
||||
`channel_id` bigint(20) NOT NULL,
|
||||
@ -597,7 +592,7 @@ CREATE TABLE IF NOT EXISTS `pay_refund`
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT = '退款订单';
|
||||
|
||||
|
||||
-- bpm 开头的 DB
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "bpm_form" (
|
||||
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
@ -613,3 +608,17 @@ CREATE TABLE IF NOT EXISTS "bpm_form" (
|
||||
"deleted" bit NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY ("id")
|
||||
) COMMENT '动态表单';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "bpm_user_group" (
|
||||
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||
"name" varchar(63) NOT NULL,
|
||||
"description" varchar(255) NOT NULL,
|
||||
"status" tinyint NOT NULL,
|
||||
"member_user_ids" varchar(255) NOT NULL,
|
||||
"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 '用户组';
|
||||
|
@ -70,7 +70,7 @@ public class RandomUtils {
|
||||
}
|
||||
|
||||
public static <T> Set<T> randomSet(Class<T> clazz) {
|
||||
return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(0, RANDOM_DATE_MAX))
|
||||
return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(1, RANDOM_COLLECTION_LENGTH))
|
||||
.map(i -> randomPojo(clazz)).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user