Commit aa37c2cd7c86406bc711d48f8354f0487e4a87ef

Authored by YunaiV
1 parent 987fcd36

完善 OperateLogServiceImpl 单元测试

yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.java
@@ -71,7 +71,7 @@ public class OperateLogController { @@ -71,7 +71,7 @@ public class OperateLogController {
71 @PreAuthorize("@ss.hasPermission('system:operate-log:export')") 71 @PreAuthorize("@ss.hasPermission('system:operate-log:export')")
72 @OperateLog(type = EXPORT) 72 @OperateLog(type = EXPORT)
73 public void exportOperateLog(HttpServletResponse response, @Valid OperateLogExportReqVO reqVO) throws IOException { 73 public void exportOperateLog(HttpServletResponse response, @Valid OperateLogExportReqVO reqVO) throws IOException {
74 - List<OperateLogDO> list = operateLogService.getOperateLogs(reqVO); 74 + List<OperateLogDO> list = operateLogService.getOperateLogList(reqVO);
75 75
76 // 获得拼接需要的数据 76 // 获得拼接需要的数据
77 Collection<Long> userIds = CollectionUtils.convertList(list, OperateLogDO::getUserId); 77 Collection<Long> userIds = CollectionUtils.convertList(list, OperateLogDO::getUserId);
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogService.java
1 package cn.iocoder.yudao.module.system.service.logger; 1 package cn.iocoder.yudao.module.system.service.logger;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.framework.operatelog.core.service.OperateLog;  
5 -import cn.iocoder.yudao.framework.operatelog.core.service.OperateLogFrameworkService;  
6 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO; 4 import cn.iocoder.yudao.module.system.api.logger.dto.OperateLogCreateReqDTO;
7 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO; 5 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
8 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; 6 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
@@ -38,6 +36,6 @@ public interface OperateLogService { @@ -38,6 +36,6 @@ public interface OperateLogService {
38 * @param reqVO 列表条件 36 * @param reqVO 列表条件
39 * @return 日志列表 37 * @return 日志列表
40 */ 38 */
41 - List<OperateLogDO> getOperateLogs(OperateLogExportReqVO reqVO); 39 + List<OperateLogDO> getOperateLogList(OperateLogExportReqVO reqVO);
42 40
43 } 41 }
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImpl.java
@@ -59,7 +59,7 @@ public class OperateLogServiceImpl implements OperateLogService { @@ -59,7 +59,7 @@ public class OperateLogServiceImpl implements OperateLogService {
59 } 59 }
60 60
61 @Override 61 @Override
62 - public List<OperateLogDO> getOperateLogs(OperateLogExportReqVO reqVO) { 62 + public List<OperateLogDO> getOperateLogList(OperateLogExportReqVO reqVO) {
63 // 处理基于用户昵称的查询 63 // 处理基于用户昵称的查询
64 Collection<Long> userIds = null; 64 Collection<Long> userIds = null;
65 if (StrUtil.isNotEmpty(reqVO.getUserNickname())) { 65 if (StrUtil.isNotEmpty(reqVO.getUserNickname())) {
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/logger/OperateLogServiceImplTest.java
@@ -5,8 +5,6 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -5,8 +5,6 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; 5 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
6 import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; 6 import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
7 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 -import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;  
9 -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;  
10 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; 8 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
11 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 9 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
12 import cn.iocoder.yudao.framework.test.core.util.RandomUtils; 10 import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
@@ -16,20 +14,20 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.Oper @@ -16,20 +14,20 @@ import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.Oper
16 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; 14 import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
17 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; 15 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
18 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper; 16 import cn.iocoder.yudao.module.system.dal.mysql.logger.OperateLogMapper;
19 -import cn.iocoder.yudao.module.system.enums.common.SexEnum;  
20 import cn.iocoder.yudao.module.system.service.user.AdminUserService; 17 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
21 import org.junit.jupiter.api.Test; 18 import org.junit.jupiter.api.Test;
22 import org.springframework.boot.test.mock.mockito.MockBean; 19 import org.springframework.boot.test.mock.mockito.MockBean;
23 import org.springframework.context.annotation.Import; 20 import org.springframework.context.annotation.Import;
24 21
25 import javax.annotation.Resource; 22 import javax.annotation.Resource;
26 -import java.time.LocalDateTime;  
27 import java.util.Collections; 23 import java.util.Collections;
28 import java.util.List; 24 import java.util.List;
29 25
30 import static cn.hutool.core.util.RandomUtil.randomEle; 26 import static cn.hutool.core.util.RandomUtil.randomEle;
31 import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; 27 import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
  28 +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
32 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; 29 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
  30 +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
33 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; 31 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
34 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; 32 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
35 import static org.junit.jupiter.api.Assertions.assertEquals; 33 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -49,34 +47,28 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { @@ -49,34 +47,28 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest {
49 47
50 @Test 48 @Test
51 public void testCreateOperateLogAsync() { 49 public void testCreateOperateLogAsync() {
52 - String traceId = TracerUtils.getTraceId();  
53 - OperateLogCreateReqDTO reqVO = RandomUtils.randomPojo(OperateLogCreateReqDTO.class, o -> {  
54 - o.setTraceId(traceId);  
55 - o.setUserId(randomLongId());  
56 - o.setUserType(randomEle(UserTypeEnum.values()).getValue());  
57 - o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build());  
58 - }); 50 + OperateLogCreateReqDTO reqVO = RandomUtils.randomPojo(OperateLogCreateReqDTO.class,
  51 + o -> o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build()));
59 52
60 - // 执行service方法 53 + // 调研
61 operateLogServiceImpl.createOperateLog(reqVO); 54 operateLogServiceImpl.createOperateLog(reqVO);
62 - // 断言插入是否正确  
63 - OperateLogDO sysOperateLogDO = operateLogMapper.selectOne("trace_id", traceId);  
64 - assertPojoEquals(reqVO, sysOperateLogDO); 55 + // 断言
  56 + OperateLogDO operateLogDO = operateLogMapper.selectOne(null);
  57 + assertPojoEquals(reqVO, operateLogDO);
65 } 58 }
66 59
67 @Test 60 @Test
68 public void testGetOperateLogPage() { 61 public void testGetOperateLogPage() {
69 - // 构造测试数据  
70 - // 先构造用户 62 + // mock(用户信息)
71 AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> { 63 AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> {
72 - o.setNickname("wangkai");  
73 - o.setSex(SexEnum.MALE.getSex()); 64 + o.setNickname("wang");
74 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 65 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
75 }); 66 });
76 - when(userService.getUsersByNickname("wangkai")).thenReturn(Collections.singletonList(user)); 67 + when(userService.getUsersByNickname("wang")).thenReturn(Collections.singletonList(user));
77 Long userId = user.getId(); 68 Long userId = user.getId();
  69 +
78 // 构造操作日志 70 // 构造操作日志
79 - OperateLogDO sysOperateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> { 71 + OperateLogDO operateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> {
80 o.setUserId(userId); 72 o.setUserId(userId);
81 o.setUserType(randomEle(UserTypeEnum.values()).getValue()); 73 o.setUserType(randomEle(UserTypeEnum.values()).getValue());
82 o.setModule("order"); 74 o.setModule("order");
@@ -85,50 +77,46 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { @@ -85,50 +77,46 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest {
85 o.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode()); 77 o.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode());
86 o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build()); 78 o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build());
87 }); 79 });
88 - operateLogMapper.insert(sysOperateLogDO);  
89 -  
90 - // 下面几个是不匹配的数据  
91 - // 随机 userId  
92 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setUserId(userId + 1)));  
93 - // module 不同  
94 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setModule("user")));  
95 - // type 不同  
96 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setType(OperateTypeEnum.IMPORT.getType())));  
97 - // createTime 不同  
98 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setStartTime(buildTime(2021, 2, 6))));  
99 - // resultCode 不同  
100 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setResultCode(BAD_REQUEST.getCode()))); 80 + operateLogMapper.insert(operateLogDO);
  81 + // 测试 userId 不匹配
  82 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setUserId(userId + 1)));
  83 + // 测试 module 不匹配
  84 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setModule("user")));
  85 + // 测试 type 不匹配
  86 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setType(OperateTypeEnum.IMPORT.getType())));
  87 + // 测试 createTime 不匹配
  88 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setStartTime(buildTime(2021, 2, 6))));
  89 + // 测试 resultCode 不匹配
  90 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setResultCode(BAD_REQUEST.getCode())));
101 91
102 // 构造调用参数 92 // 构造调用参数
103 OperateLogPageReqVO reqVO = new OperateLogPageReqVO(); 93 OperateLogPageReqVO reqVO = new OperateLogPageReqVO();
104 - reqVO.setUserNickname("wangkai"); 94 + reqVO.setUserNickname("wang");
105 reqVO.setModule("order"); 95 reqVO.setModule("order");
106 reqVO.setType(OperateTypeEnum.CREATE.getType()); 96 reqVO.setType(OperateTypeEnum.CREATE.getType());
107 - reqVO.setStartTime((new LocalDateTime[]{buildTime(2021, 3, 5),  
108 - buildTime(2021, 3, 7)})); 97 + reqVO.setStartTime(buildBetweenTime(2021, 3, 5, 2021, 3, 7));
109 reqVO.setSuccess(true); 98 reqVO.setSuccess(true);
110 99
111 - // 调用service方法 100 + // 调用
112 PageResult<OperateLogDO> pageResult = operateLogServiceImpl.getOperateLogPage(reqVO); 101 PageResult<OperateLogDO> pageResult = operateLogServiceImpl.getOperateLogPage(reqVO);
113 // 断言,只查到了一条符合条件的 102 // 断言,只查到了一条符合条件的
114 assertEquals(1, pageResult.getTotal()); 103 assertEquals(1, pageResult.getTotal());
115 assertEquals(1, pageResult.getList().size()); 104 assertEquals(1, pageResult.getList().size());
116 - assertPojoEquals(sysOperateLogDO, pageResult.getList().get(0)); 105 + assertPojoEquals(operateLogDO, pageResult.getList().get(0));
117 } 106 }
118 107
119 @Test 108 @Test
120 public void testGetOperateLogs() { 109 public void testGetOperateLogs() {
121 - // 构造测试数据  
122 - // 先构造用户 110 + // mock(用户信息)
123 AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> { 111 AdminUserDO user = RandomUtils.randomPojo(AdminUserDO.class, o -> {
124 - o.setNickname("wangkai");  
125 - o.setSex(SexEnum.MALE.getSex()); 112 + o.setNickname("wang");
126 o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 113 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
127 }); 114 });
128 - when(userService.getUsersByNickname("wangkai")).thenReturn(Collections.singletonList(user)); 115 + when(userService.getUsersByNickname("wang")).thenReturn(Collections.singletonList(user));
129 Long userId = user.getId(); 116 Long userId = user.getId();
  117 +
130 // 构造操作日志 118 // 构造操作日志
131 - OperateLogDO sysOperateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> { 119 + OperateLogDO operateLogDO = RandomUtils.randomPojo(OperateLogDO.class, o -> {
132 o.setUserId(userId); 120 o.setUserId(userId);
133 o.setUserType(randomEle(UserTypeEnum.values()).getValue()); 121 o.setUserType(randomEle(UserTypeEnum.values()).getValue());
134 o.setModule("order"); 122 o.setModule("order");
@@ -137,33 +125,31 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest { @@ -137,33 +125,31 @@ public class OperateLogServiceImplTest extends BaseDbUnitTest {
137 o.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode()); 125 o.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode());
138 o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build()); 126 o.setExts(MapUtil.<String, Object>builder("orderId", randomLongId()).build());
139 }); 127 });
140 - operateLogMapper.insert(sysOperateLogDO);  
141 -  
142 - // 下面几个是不匹配的数据  
143 - // 随机 userId  
144 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setUserId(userId + 1)));  
145 - // module 不同  
146 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setModule("user")));  
147 - // type 不同  
148 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setType(OperateTypeEnum.IMPORT.getType())));  
149 - // createTime 不同  
150 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setStartTime(buildTime(2021, 2, 6))));  
151 - // resultCode 不同  
152 - operateLogMapper.insert(ObjectUtils.cloneIgnoreId(sysOperateLogDO, logDO -> logDO.setResultCode(BAD_REQUEST.getCode()))); 128 + operateLogMapper.insert(operateLogDO);
  129 + // 测试 userId 不匹配
  130 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setUserId(userId + 1)));
  131 + // 测试 module 不匹配
  132 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setModule("user")));
  133 + // 测试 type 不匹配
  134 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setType(OperateTypeEnum.IMPORT.getType())));
  135 + // 测试 createTime 不匹配
  136 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setStartTime(buildTime(2021, 2, 6))));
  137 + // 测试 resultCode 不匹配
  138 + operateLogMapper.insert(cloneIgnoreId(operateLogDO, o -> o.setResultCode(BAD_REQUEST.getCode())));
153 139
154 // 构造调用参数 140 // 构造调用参数
155 OperateLogExportReqVO reqVO = new OperateLogExportReqVO(); 141 OperateLogExportReqVO reqVO = new OperateLogExportReqVO();
156 - reqVO.setUserNickname("wangkai"); 142 + reqVO.setUserNickname("wang");
157 reqVO.setModule("order"); 143 reqVO.setModule("order");
158 reqVO.setType(OperateTypeEnum.CREATE.getType()); 144 reqVO.setType(OperateTypeEnum.CREATE.getType());
159 - reqVO.setStartTime((new LocalDateTime[]{buildTime(2021, 3, 5),buildTime(2021, 3, 7)})); 145 + reqVO.setStartTime(buildBetweenTime(2021, 3, 5, 2021, 3, 7));
160 reqVO.setSuccess(true); 146 reqVO.setSuccess(true);
161 147
162 // 调用 service 方法 148 // 调用 service 方法
163 - List<OperateLogDO> list = operateLogServiceImpl.getOperateLogs(reqVO); 149 + List<OperateLogDO> list = operateLogServiceImpl.getOperateLogList(reqVO);
164 // 断言,只查到了一条符合条件的 150 // 断言,只查到了一条符合条件的
165 assertEquals(1, list.size()); 151 assertEquals(1, list.size());
166 - assertPojoEquals(sysOperateLogDO, list.get(0)); 152 + assertPojoEquals(operateLogDO, list.get(0));
167 } 153 }
168 154
169 } 155 }