Commit fcd44d8b0d7dc80a8db5d0386c12500810c404a4

Authored by YunaiV
1 parent 4be5b73d

修复工作流的单元测试

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java
... ... @@ -23,7 +23,7 @@ public interface SysDeptMapper extends BaseMapperX<SysDeptDO> {
23 23  
24 24 default SysDeptDO selectByParentIdAndName(Long parentId, String name) {
25 25 return selectOne(new LambdaQueryWrapper<SysDeptDO>().eq(SysDeptDO::getParentId, parentId)
26   - .eq(SysDeptDO::getParentId, name));
  26 + .eq(SysDeptDO::getName, name));
27 27 }
28 28  
29 29 default Integer selectCountByParentId(Long parentId) {
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysMenuMapper.java
... ... @@ -24,7 +24,7 @@ public interface SysMenuMapper extends BaseMapperX&lt;SysMenuDO&gt; {
24 24 }
25 25  
26 26 default List<SysMenuDO> selectList(SysMenuListReqVO reqVO) {
27   - return selectList(new LambdaQueryWrapperX<SysMenuDO>().likeIfPresent(SysMenuDO::getParentId, reqVO.getName())
  27 + return selectList(new LambdaQueryWrapperX<SysMenuDO>().likeIfPresent(SysMenuDO::getName, reqVO.getName())
28 28 .eqIfPresent(SysMenuDO::getStatus, reqVO.getStatus()));
29 29 }
30 30  
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehaviorTest.java
... ... @@ -17,6 +17,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
17 17 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
18 18 import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
19 19 import org.activiti.engine.impl.persistence.entity.TaskEntity;
  20 +import org.activiti.engine.impl.persistence.entity.TaskEntityImpl;
20 21 import org.junit.jupiter.api.Test;
21 22 import org.mockito.InjectMocks;
22 23 import org.mockito.Mock;
... ... @@ -70,7 +71,7 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest {
70 71 // mock 方法
71 72 List<SysUserDO> users = CollectionUtils.convertList(asSet(11L, 22L),
72 73 id -> new SysUserDO().setId(id));
73   - when(userService.getUsersByPostIds(eq(rule.getOptions()))).thenReturn(users);
  74 + when(userService.getUsersByDeptIds(eq(rule.getOptions()))).thenReturn(users);
74 75 mockGetUserMap(asSet(11L, 22L));
75 76  
76 77 // 调用
... ... @@ -185,10 +186,11 @@ public class BpmUserTaskActivitiBehaviorTest extends BaseMockitoUnitTest {
185 186  
186 187 @Test
187 188 public void testRemoveDisableUsers() {
188   - // 准备参数
  189 + // 准备参数. 1L 可以找到;2L 是禁用的;3L 找不到
189 190 Set<Long> assigneeUserIds = asSet(1L, 2L, 3L);
190 191 // mock 方法
191   - SysUserDO user1 = randomPojo(SysUserDO.class, o -> o.setId(1L));
  192 + SysUserDO user1 = randomPojo(SysUserDO.class, o -> o.setId(1L)
  193 + .setStatus(CommonStatusEnum.ENABLE.getStatus()));
192 194 SysUserDO user2 = randomPojo(SysUserDO.class, o -> o.setId(2L)
193 195 .setStatus(CommonStatusEnum.DISABLE.getStatus()));
194 196 Map<Long, SysUserDO> userMap = MapUtil.builder(user1.getId(), user1)
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmFormServiceTest.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.definition;
2 2  
  3 +import cn.hutool.core.util.RandomUtil;
3 4 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
4 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormCreateReqVO;
5 6 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormPageReqVO;
6 7 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.form.BpmFormUpdateReqVO;
7 8 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO;
8 9 import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmFormMapper;
  10 +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmFormFieldRespDTO;
9 11 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmFormServiceImpl;
10 12 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  13 +import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
11 14 import org.junit.jupiter.api.Test;
12 15 import org.springframework.context.annotation.Import;
13 16  
14 17 import javax.annotation.Resource;
15 18  
  19 +import java.util.ArrayList;
  20 +import java.util.Arrays;
  21 +import java.util.Collections;
  22 +import java.util.List;
  23 +import java.util.function.Consumer;
  24 +import java.util.function.Function;
  25 +import java.util.stream.Collectors;
  26 +import java.util.stream.Stream;
  27 +
16 28 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.FORM_NOT_EXISTS;
17 29 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
18 30 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
... ... @@ -38,7 +50,10 @@ public class BpmFormServiceTest extends BaseDbUnitTest {
38 50 @Test
39 51 public void testCreateForm_success() {
40 52 // 准备参数
41   - BpmFormCreateReqVO reqVO = randomPojo(BpmFormCreateReqVO.class);
  53 + BpmFormCreateReqVO reqVO = randomPojo(BpmFormCreateReqVO.class, o -> {
  54 + o.setConf("{}");
  55 + o.setFields(randomFields());
  56 + });
42 57  
43 58 // 调用
44 59 Long formId = formService.createForm(reqVO);
... ... @@ -52,11 +67,16 @@ public class BpmFormServiceTest extends BaseDbUnitTest {
52 67 @Test
53 68 public void testUpdateForm_success() {
54 69 // mock 数据
55   - BpmFormDO dbForm = randomPojo(BpmFormDO.class);
  70 + BpmFormDO dbForm = randomPojo(BpmFormDO.class, o -> {
  71 + o.setConf("{}");
  72 + o.setFields(randomFields());
  73 + });
56 74 formMapper.insert(dbForm);// @Sql: 先插入出一条存在的数据
57 75 // 准备参数
58 76 BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class, o -> {
59 77 o.setId(dbForm.getId()); // 设置更新的 ID
  78 + o.setConf("{'yudao': 'yuanma'}");
  79 + o.setFields(randomFields());
60 80 });
61 81  
62 82 // 调用
... ... @@ -69,7 +89,10 @@ public class BpmFormServiceTest extends BaseDbUnitTest {
69 89 @Test
70 90 public void testUpdateForm_notExists() {
71 91 // 准备参数
72   - BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class);
  92 + BpmFormUpdateReqVO reqVO = randomPojo(BpmFormUpdateReqVO.class, o -> {
  93 + o.setConf("{'yudao': 'yuanma'}");
  94 + o.setFields(randomFields());
  95 + });
73 96  
74 97 // 调用, 并断言异常
75 98 assertServiceException(() -> formService.updateForm(reqVO), FORM_NOT_EXISTS);
... ... @@ -119,4 +142,11 @@ public class BpmFormServiceTest extends BaseDbUnitTest {
119 142 assertPojoEquals(dbForm, pageResult.getList().get(0));
120 143 }
121 144  
  145 + private List<String> randomFields() {
  146 + int size = RandomUtil.randomInt(1, 3);
  147 + return Stream.iterate(0, i -> i).limit(size)
  148 + .map(i -> JsonUtils.toJsonString(randomPojo(BpmFormFieldRespDTO.class)))
  149 + .collect(Collectors.toList());
  150 + }
  151 +
122 152 }
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmUserGroupServiceTest.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.definition;
2 2  
  3 +import cn.hutool.core.date.DateUtil;
3 4 import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
4 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.group.BpmUserGroupCreateReqVO;
5 6 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
7 8 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmUserGroupDO;
8 9 import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmUserGroupMapper;
9 10 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl.BpmUserGroupServiceImpl;
  11 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
10 12 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  13 +import cn.iocoder.yudao.framework.common.util.date.DateUtils;
11 14 import org.junit.jupiter.api.Test;
12 15 import org.springframework.context.annotation.Import;
13 16  
... ... @@ -98,27 +101,27 @@ public class BpmUserGroupServiceTest extends BaseDbUnitTest {
98 101 assertServiceException(() -> userGroupService.deleteUserGroup(id), USER_GROUP_NOT_EXISTS);
99 102 }
100 103  
101   - @Test // TODO 请修改 null 为需要的值
  104 + @Test
102 105 public void testGetUserGroupPage() {
103 106 // mock 数据
104 107 BpmUserGroupDO dbUserGroup = randomPojo(BpmUserGroupDO.class, o -> { // 等会查询到
105   - o.setName(null);
106   - o.setStatus(null);
107   - o.setCreateTime(null);
  108 + o.setName("芋道源码");
  109 + o.setStatus(CommonStatusEnum.ENABLE.getStatus());
  110 + o.setCreateTime(DateUtils.buildTime(2021, 11, 11));
108 111 });
109 112 userGroupMapper.insert(dbUserGroup);
110 113 // 测试 name 不匹配
111   - userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setName(null)));
  114 + userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setName("芋道")));
112 115 // 测试 status 不匹配
113   - userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setStatus(null)));
  116 + userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
114 117 // 测试 createTime 不匹配
115   - userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setCreateTime(null)));
  118 + userGroupMapper.insert(cloneIgnoreId(dbUserGroup, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12))));
116 119 // 准备参数
117 120 BpmUserGroupPageReqVO reqVO = new BpmUserGroupPageReqVO();
118   - reqVO.setName(null);
119   - reqVO.setStatus(null);
120   - reqVO.setBeginCreateTime(null);
121   - reqVO.setEndCreateTime(null);
  121 + reqVO.setName("源码");
  122 + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
  123 + reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 11, 10));
  124 + reqVO.setEndCreateTime(DateUtils.buildTime(2021, 11, 12));
122 125  
123 126 // 调用
124 127 PageResult<BpmUserGroupDO> pageResult = userGroupService.getUserGroupPage(reqVO);
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/dept/SysDeptServiceTest.java
... ... @@ -172,7 +172,6 @@ class SysDeptServiceTest extends BaseDbUnitTest {
172 172 });
173 173 // 调用, 并断言异常
174 174 assertServiceException(() -> deptService.updateDept(reqVO), DEPT_NAME_DUPLICATE);
175   -
176 175 }
177 176  
178 177 @Test
... ...
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysMenuServiceTest.java
... ... @@ -28,7 +28,7 @@ import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeCons
28 28 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
29 29 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
30 30 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
31   -import static org.junit.jupiter.api.Assertions.assertEquals;
  31 +import static org.junit.jupiter.api.Assertions.*;
32 32 import static org.mockito.Mockito.verify;
33 33  
34 34 @Import(SysMenuServiceImpl.class)
... ... @@ -146,12 +146,12 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
146 146 SysMenuDO sonMenuDO = initParentAndSonMenuDO();
147 147 Long sonId = sonMenuDO.getId();
148 148  
149   - //调用
  149 + // 调用
150 150 sysMenuService.deleteMenu(sonId);
151 151  
152   - //断言
  152 + // 断言
153 153 SysMenuDO menuDO = menuMapper.selectById(sonId);
154   - Assert.isNull(menuDO);
  154 + assertNull(menuDO);
155 155 verify(sysPermissionService).processMenuDeleted(sonId);
156 156 verify(sysMenuProducer).sendMenuRefreshMessage();
157 157 }
... ... @@ -182,18 +182,18 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
182 182 menuMapper.insert(sonMenu);
183 183 idMenuMap.put(sonMenu.getId(), sonMenu);
184 184  
185   - //调用
  185 + // 调用
186 186 List<SysMenuDO> menuDOS = sysMenuService.getMenus();
187 187  
188   - //断言
189   - Assert.isTrue(menuDOS.size() == idMenuMap.size());
  188 + // 断言
  189 + assertEquals(menuDOS.size(), idMenuMap.size());
190 190 menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
191 191 }
192 192  
193 193 @Test
194 194 public void testGetMenusReqVo_success() {
195 195 Map<Long, SysMenuDO> idMenuMap = new HashMap<>();
196   - //用于验证可以模糊搜索名称包含"name",状态为1的menu
  196 + // 用于验证可以模糊搜索名称包含"name",状态为1的menu
197 197 SysMenuDO menu = createMenuDO(MenuTypeEnum.MENU, "name2", 0L, 1);
198 198 menuMapper.insert(menu);
199 199 idMenuMap.put(menu.getId(), menu);
... ... @@ -206,32 +206,32 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
206 206 menuMapper.insert(menu);
207 207 idMenuMap.put(menu.getId(), menu);
208 208  
209   - //以下是不符合搜索条件的的menu
  209 + // 以下是不符合搜索条件的的menu
210 210 menu = createMenuDO(MenuTypeEnum.MENU, "xxxxxx", 0L, 1);
211 211 menuMapper.insert(menu);
212 212 menu = createMenuDO(MenuTypeEnum.MENU, "name", 0L, 2);
213 213 menuMapper.insert(menu);
214 214  
215   - //调用
  215 + // 调用
216 216 SysMenuListReqVO reqVO = new SysMenuListReqVO();
217 217 reqVO.setStatus(1);
218 218 reqVO.setName("name");
219 219 List<SysMenuDO> menuDOS = sysMenuService.getMenus(reqVO);
220 220  
221   - //断言
222   - Assert.isTrue(menuDOS.size() == idMenuMap.size());
  221 + // 断言
  222 + assertEquals(menuDOS.size(), idMenuMap.size());
223 223 menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
224 224 }
225 225  
226 226 @Test
227 227 public void testListMenusFromCache_success() throws Exception {
228 228 Map<Long, SysMenuDO> mockCacheMap = new HashMap<>();
229   - //获取代理对象
  229 + // 获取代理对象
230 230 SysMenuServiceImpl target = (SysMenuServiceImpl) SpringAopUtils.getTarget(sysMenuService);
231 231 BeanUtil.setFieldValue(target, "menuCache", mockCacheMap);
232 232  
233 233 Map<Long, SysMenuDO> idMenuMap = new HashMap<>();
234   - //用于验证搜索类型为MENU,状态为1的menu
  234 + // 用于验证搜索类型为MENU,状态为1的menu
235 235 SysMenuDO menuDO = createMenuDO(1L, MenuTypeEnum.MENU, "name", 0L, 1);
236 236 mockCacheMap.put(menuDO.getId(), menuDO);
237 237 idMenuMap.put(menuDO.getId(), menuDO);
... ... @@ -240,7 +240,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
240 240 mockCacheMap.put(menuDO.getId(), menuDO);
241 241 idMenuMap.put(menuDO.getId(), menuDO);
242 242  
243   - //以下是不符合搜索条件的menu
  243 + // 以下是不符合搜索条件的menu
244 244 menuDO = createMenuDO(3L, MenuTypeEnum.BUTTON, "name", 0L, 1);
245 245 mockCacheMap.put(menuDO.getId(), menuDO);
246 246 menuDO = createMenuDO(4L, MenuTypeEnum.MENU, "name", 0L, 2);
... ... @@ -248,24 +248,24 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
248 248  
249 249 List<SysMenuDO> menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(MenuTypeEnum.MENU.getType()),
250 250 Collections.singletonList(CommonStatusEnum.DISABLE.getStatus()));
251   - Assert.isTrue(menuDOS.size() == idMenuMap.size());
  251 + assertEquals(menuDOS.size(), idMenuMap.size());
252 252 menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
253 253 }
254 254  
255 255 @Test
256 256 public void testListMenusFromCache2_success() throws Exception {
257 257 Map<Long, SysMenuDO> mockCacheMap = new HashMap<>();
258   - //获取代理对象
  258 + // 获取代理对象
259 259 SysMenuServiceImpl target = (SysMenuServiceImpl) SpringAopUtils.getTarget(sysMenuService);
260 260 BeanUtil.setFieldValue(target, "menuCache", mockCacheMap);
261 261  
262 262 Map<Long, SysMenuDO> idMenuMap = new HashMap<>();
263   - //验证搜索id为1, 类型为MENU, 状态为1 的menu
  263 + // 验证搜索id为1, 类型为MENU, 状态为1 的menu
264 264 SysMenuDO menuDO = createMenuDO(1L, MenuTypeEnum.MENU, "name", 0L, 1);
265 265 mockCacheMap.put(menuDO.getId(), menuDO);
266 266 idMenuMap.put(menuDO.getId(), menuDO);
267 267  
268   - //以下是不符合搜索条件的menu
  268 + // 以下是不符合搜索条件的menu
269 269 menuDO = createMenuDO(2L, MenuTypeEnum.MENU, "name", 0L, 1);
270 270 mockCacheMap.put(menuDO.getId(), menuDO);
271 271 menuDO = createMenuDO(3L, MenuTypeEnum.BUTTON, "name", 0L, 1);
... ... @@ -275,7 +275,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
275 275  
276 276 List<SysMenuDO> menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(1L),
277 277 Collections.singletonList(MenuTypeEnum.MENU.getType()), Collections.singletonList(1));
278   - Assert.isTrue(menuDOS.size() == idMenuMap.size());
  278 + assertEquals(menuDOS.size(), idMenuMap.size());
279 279 menuDOS.forEach(menu -> assertPojoEquals(idMenuMap.get(menu.getId()), menu));
280 280 }
281 281  
... ...
yudao-admin-server/src/test/resources/logback-spring.xml deleted
1   -<configuration>
2   - <!-- 引用 Spring Boot 的 logback 基础配置 -->
3   - <include resource="org/springframework/boot/logging/logback/defaults.xml" />
4   -</configuration>
yudao-admin-server/src/test/resources/logback.xml 0 → 100644
  1 +<configuration>
  2 + <!-- 由于单元测试未开启 Spring Boot 的上下文,所以只能使用 logback.xml 文件 -->
  3 +
  4 + <!-- 引用 Spring Boot 的 logback 基础配置 -->
  5 + <include resource="org/springframework/boot/logging/logback/defaults.xml" />
  6 +
  7 + <!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->
  8 + <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}"/>
  9 +
  10 + <!-- 控制台 Appender -->
  11 + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">     
  12 + <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  13 + <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
  14 + <pattern>${PATTERN_DEFAULT}</pattern>
  15 + </layout>
  16 + </encoder>
  17 + </appender>
  18 +
  19 + <root level="INFO">
  20 + <appender-ref ref="STDOUT"/>
  21 + </root>
  22 +
  23 +</configuration>
... ...
yudao-admin-server/src/test/resources/sql/clean.sql
... ... @@ -35,3 +35,4 @@ DELETE FROM pay_refund;
35 35  
36 36 -- bpm 开头的 DB
37 37 DELETE FROM "bpm_form";
  38 +DELETE FROM "bpm_user_group";
... ...
yudao-admin-server/src/test/resources/sql/create_tables.sql
... ... @@ -74,7 +74,7 @@ CREATE TABLE IF NOT EXISTS &quot;sys_dept&quot; (
74 74 "name" varchar(30) NOT NULL DEFAULT '',
75 75 "parent_id" bigint NOT NULL DEFAULT '0',
76 76 "sort" int NOT NULL DEFAULT '0',
77   - "leader" varchar(20) DEFAULT NULL,
  77 + "leader_user_id" bigint DEFAULT NULL,
78 78 "phone" varchar(11) DEFAULT NULL,
79 79 "email" varchar(50) DEFAULT NULL,
80 80 "status" tinyint NOT NULL,
... ... @@ -490,8 +490,9 @@ CREATE TABLE IF NOT EXISTS &quot;pay_merchant&quot;
490 490 PRIMARY KEY ("id")
491 491 ) COMMENT '支付商户信息';
492 492  
493   -CREATE TABLE IF NOT EXISTS "pay_app"
494   -(
  493 +-- bpm 开头的 DB
  494 +
  495 +CREATE TABLE IF NOT EXISTS "pay_app" (
495 496 "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
496 497 "name" varchar(64) NOT NULL,
497 498 "status" tinyint NOT NULL,
... ... @@ -507,8 +508,7 @@ CREATE TABLE IF NOT EXISTS &quot;pay_app&quot;
507 508 PRIMARY KEY ("id")
508 509 ) COMMENT = '支付应用信息';
509 510  
510   -CREATE TABLE IF NOT EXISTS "pay_channel"
511   -(
  511 +CREATE TABLE IF NOT EXISTS "pay_channel" (
512 512 "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
513 513 "code" varchar(32) NOT NULL,
514 514 "status" tinyint(4) NOT NULL,
... ... @@ -525,8 +525,7 @@ CREATE TABLE IF NOT EXISTS &quot;pay_channel&quot;
525 525 PRIMARY KEY ("id")
526 526 ) COMMENT = '支付渠道';
527 527  
528   -CREATE TABLE IF NOT EXISTS `pay_order`
529   -(
  528 +CREATE TABLE IF NOT EXISTS `pay_order` (
530 529 "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
531 530 `merchant_id` bigint(20) NOT NULL,
532 531 `app_id` bigint(20) NOT NULL,
... ... @@ -559,12 +558,8 @@ CREATE TABLE IF NOT EXISTS `pay_order`
559 558 PRIMARY KEY ("id")
560 559 ) COMMENT = '支付订单';
561 560  
562   -
563   -
564   -CREATE TABLE IF NOT EXISTS `pay_refund`
565   -(
  561 +CREATE TABLE IF NOT EXISTS `pay_refund` (
566 562 "id" number NOT NULL GENERATED BY DEFAULT AS IDENTITY,
567   - `req_no` varchar(64) NOT NULL,
568 563 `merchant_id` bigint(20) NOT NULL,
569 564 `app_id` bigint(20) NOT NULL,
570 565 `channel_id` bigint(20) NOT NULL,
... ... @@ -597,7 +592,7 @@ CREATE TABLE IF NOT EXISTS `pay_refund`
597 592 PRIMARY KEY ("id")
598 593 ) COMMENT = '退款订单';
599 594  
600   -
  595 +-- bpm 开头的 DB
601 596  
602 597 CREATE TABLE IF NOT EXISTS "bpm_form" (
603 598 "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
... ... @@ -613,3 +608,17 @@ CREATE TABLE IF NOT EXISTS &quot;bpm_form&quot; (
613 608 "deleted" bit NOT NULL DEFAULT FALSE,
614 609 PRIMARY KEY ("id")
615 610 ) COMMENT '动态表单';
  611 +
  612 +CREATE TABLE IF NOT EXISTS "bpm_user_group" (
  613 + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
  614 + "name" varchar(63) NOT NULL,
  615 + "description" varchar(255) NOT NULL,
  616 + "status" tinyint NOT NULL,
  617 + "member_user_ids" varchar(255) NOT NULL,
  618 + "creator" varchar(64) DEFAULT '',
  619 + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  620 + "updater" varchar(64) DEFAULT '',
  621 + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  622 + "deleted" bit NOT NULL DEFAULT FALSE,
  623 + PRIMARY KEY ("id")
  624 + ) COMMENT '用户组';
... ...
yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java
... ... @@ -70,7 +70,7 @@ public class RandomUtils {
70 70 }
71 71  
72 72 public static <T> Set<T> randomSet(Class<T> clazz) {
73   - return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(0, RANDOM_DATE_MAX))
  73 + return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(1, RANDOM_COLLECTION_LENGTH))
74 74 .map(i -> randomPojo(clazz)).collect(Collectors.toSet());
75 75 }
76 76  
... ...
更新日志.md
... ... @@ -39,6 +39,7 @@
39 39 * 总代码行数:61594
40 40 * 源码代码行数:37931
41 41 * 注释行数:14225
  42 +* 单元测试用例数:278
42 43  
43 44 ### ⭐ New Features
44 45  
... ...