Commit 987fcd366c3f432acfd652a8d7d2dcbb9adb795c

Authored by YunaiV
1 parent 9ca79391

完善 LoginLogServiceImplTest 单元测试

yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java
... ... @@ -47,7 +47,7 @@ public class RandomUtils {
47 47 }
48 48 // 如果是 type、status 结尾的字段,返回 tinyint 范围
49 49 if (StrUtil.endWithAnyIgnoreCase(attributeMetadata.getAttributeName(),
50   - "type", "status", "category", "scope")) {
  50 + "type", "status", "category", "scope", "result")) {
51 51 return RandomUtil.randomInt(0, TINYINT_MAX + 1);
52 52 }
53 53 return RandomUtil.randomInt();
... ...
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java
1 1 package cn.iocoder.yudao.module.system.service.logger;
2 2  
3   -import cn.hutool.core.util.RandomUtil;
4   -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
5 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6   -import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
7   -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
8 4 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
9   -import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
10 5 import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
11 6 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
12 7 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
13 8 import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
14 9 import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper;
15   -import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
16 10 import org.junit.jupiter.api.Test;
17 11 import org.springframework.context.annotation.Import;
18 12  
19 13 import javax.annotation.Resource;
20   -import java.time.LocalDateTime;
21 14 import java.util.List;
22 15  
23   -import static cn.hutool.core.util.RandomUtil.randomEle;
  16 +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
24 17 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
  18 +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
25 19 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
26   -import static cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.*;
  20 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  21 +import static cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.CAPTCHA_CODE_ERROR;
  22 +import static cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum.SUCCESS;
27 23 import static org.junit.jupiter.api.Assertions.assertEquals;
28 24  
29 25 @Import(LoginLogServiceImpl.class)
... ... @@ -37,42 +33,31 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest {
37 33  
38 34 @Test
39 35 public void testGetLoginLogPage() {
40   - // 构造测试数据
41   - // 登录成功的
42   - LoginLogDO loginLogDO = RandomUtils.randomPojo(LoginLogDO.class, logDO -> {
43   - logDO.setLogType(RandomUtil.randomEle(cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum.values()).getType());
44   - logDO.setTraceId(TracerUtils.getTraceId());
45   - logDO.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue());
46   -
47   - logDO.setUserIp("192.168.199.16");
48   - logDO.setUsername("wangkai");
49   - logDO.setCreateTime(buildTime(2021, 3, 6));
50   - logDO.setResult(SUCCESS.getResult());
  36 + // mock 数据
  37 + LoginLogDO loginLogDO = randomPojo(LoginLogDO.class, o -> {
  38 + o.setUserIp("192.168.199.16");
  39 + o.setUsername("wang");
  40 + o.setResult(SUCCESS.getResult());
  41 + o.setCreateTime(buildTime(2021, 3, 6));
51 42 });
52 43 loginLogMapper.insert(loginLogDO);
53   -
54   - // 下面几个都是不匹配的数据
55   - // 登录失败的
56   - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(CAPTCHA_CODE_ERROR.getResult())));
57   - // 不同ip段的
58   - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setUserIp("192.168.128.18")));
59   - // 不同username
60   - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setUsername("yunai")));
61   - // 构造一个早期时间 2021-02-06 00:00:00
62   - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setCreateTime(buildTime(2021, 2, 6))));
63   -
64   -
  44 + // 测试 status 不匹配
  45 + loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setResult(CAPTCHA_CODE_ERROR.getResult())));
  46 + // 测试 ip 不匹配
  47 + loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setUserIp("192.168.128.18")));
  48 + // 测试 username 不匹配
  49 + loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setUsername("yunai")));
  50 + // 测试 createTime 不匹配
  51 + loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setCreateTime(buildTime(2021, 2, 6))));
65 52 // 构造调用参数
66 53 LoginLogPageReqVO reqVO = new LoginLogPageReqVO();
67   - reqVO.setUsername("wangkai");
  54 + reqVO.setUsername("wang");
68 55 reqVO.setUserIp("192.168.199");
69 56 reqVO.setStatus(true);
70   - reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021, 3, 5),
71   - buildTime(2021, 3, 7)}));
  57 + reqVO.setCreateTime(buildBetweenTime(2021, 3, 5, 2021, 3, 7));
72 58  
73   - // 调用service方法
  59 + // 调用
74 60 PageResult<LoginLogDO> pageResult = loginLogService.getLoginLogPage(reqVO);
75   -
76 61 // 断言,只查到了一条符合条件的
77 62 assertEquals(1, pageResult.getTotal());
78 63 assertEquals(1, pageResult.getList().size());
... ... @@ -81,62 +66,45 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest {
81 66  
82 67 @Test
83 68 public void testGetLoginLogList() {
84   - // 构造测试数据
85   -
86   - // 登录成功的
87   - LoginLogDO loginLogDO = RandomUtils.randomPojo(LoginLogDO.class, logDO -> {
88   - logDO.setLogType(RandomUtil.randomEle(cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum.values()).getType());
89   - logDO.setTraceId(TracerUtils.getTraceId());
90   - logDO.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue());
91   -
92   - logDO.setUserIp("192.168.111.16");
93   - logDO.setUsername("wangxiaokai");
94   - logDO.setCreateTime(buildTime(2021, 3, 6));
95   - logDO.setResult(SUCCESS.getResult());
  69 + // mock 数据
  70 + LoginLogDO loginLogDO = randomPojo(LoginLogDO.class, o -> {
  71 + o.setUserIp("192.168.199.16");
  72 + o.setUsername("wang");
  73 + o.setResult(SUCCESS.getResult());
  74 + o.setCreateTime(buildTime(2021, 3, 6));
96 75 });
97 76 loginLogMapper.insert(loginLogDO);
98   -
99   - // 下面几个都是不匹配的数据
100   - // 登录失败的
101   - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setResult(CAPTCHA_CODE_ERROR.getResult())));
102   - // 不同ip段的
103   - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setUserIp("192.168.128.18")));
104   - // 不同username
105   - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setUsername("yunai")));
106   - // 构造一个早期时间 2021-02-06 00:00:00
107   - loginLogMapper.insert(ObjectUtils.cloneIgnoreId(loginLogDO, logDO -> logDO.setCreateTime(buildTime(2021, 2, 6))));
108   -
  77 + // 测试 status 不匹配
  78 + loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setResult(CAPTCHA_CODE_ERROR.getResult())));
  79 + // 测试 ip 不匹配
  80 + loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setUserIp("192.168.128.18")));
  81 + // 测试 username 不匹配
  82 + loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setUsername("yunai")));
  83 + // 测试 createTime 不匹配
  84 + loginLogMapper.insert(cloneIgnoreId(loginLogDO, o -> o.setCreateTime(buildTime(2021, 2, 6))));
109 85 // 构造调用参数
110 86 LoginLogExportReqVO reqVO = new LoginLogExportReqVO();
111   - reqVO.setUsername("wangxiaokai");
112   - reqVO.setUserIp("192.168.111");
  87 + reqVO.setUsername("wang");
  88 + reqVO.setUserIp("192.168.199");
113 89 reqVO.setStatus(true);
114   - reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021, 3, 5),
115   - buildTime(2021, 3, 7)}));
  90 + reqVO.setCreateTime(buildBetweenTime(2021, 3, 5, 2021, 3, 7));
116 91  
117 92 // 调用service方法
118   - List<LoginLogDO> loginLogList = loginLogService.getLoginLogList(reqVO);
119   -
  93 + List<LoginLogDO> list = loginLogService.getLoginLogList(reqVO);
120 94 // 断言
121   - assertEquals(1, loginLogList.size());
122   - assertPojoEquals(loginLogDO, loginLogList.get(0));
  95 + assertEquals(1, list.size());
  96 + assertPojoEquals(loginLogDO, list.get(0));
123 97 }
124 98  
125 99 @Test
126 100 public void testCreateLoginLog() {
127   - LoginLogCreateReqDTO reqDTO = RandomUtils.randomPojo(LoginLogCreateReqDTO.class, vo -> {
128   - // 指定随机的范围,避免超出范围入库失败
129   - vo.setUserType(randomEle(UserTypeEnum.values()).getValue());
130   - vo.setLogType(randomEle(LoginLogTypeEnum.values()).getType());
131   - vo.setResult(randomEle(values()).getResult());
132   - vo.setTraceId(TracerUtils.getTraceId());
133   - });
  101 + LoginLogCreateReqDTO reqDTO = randomPojo(LoginLogCreateReqDTO.class);
134 102  
135 103 // 调用
136 104 loginLogService.createLoginLog(reqDTO);
137   - // 断言,忽略基本字段
138   - LoginLogDO sysLoginLogDO = loginLogMapper.selectOne(null);
139   - assertPojoEquals(reqDTO, sysLoginLogDO);
  105 + // 断言
  106 + LoginLogDO loginLogDO = loginLogMapper.selectOne(null);
  107 + assertPojoEquals(reqDTO, loginLogDO);
140 108 }
141 109  
142 110 }
... ...