Commit aa37c2cd7c86406bc711d48f8354f0487e4a87ef
1 parent
987fcd36
完善 OperateLogServiceImpl 单元测试
Showing
4 changed files
with
51 additions
and
67 deletions
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 | } |