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,7 +47,7 @@ public class RandomUtils {
47 } 47 }
48 // 如果是 type、status 结尾的字段,返回 tinyint 范围 48 // 如果是 type、status 结尾的字段,返回 tinyint 范围
49 if (StrUtil.endWithAnyIgnoreCase(attributeMetadata.getAttributeName(), 49 if (StrUtil.endWithAnyIgnoreCase(attributeMetadata.getAttributeName(),
50 - "type", "status", "category", "scope")) { 50 + "type", "status", "category", "scope", "result")) {
51 return RandomUtil.randomInt(0, TINYINT_MAX + 1); 51 return RandomUtil.randomInt(0, TINYINT_MAX + 1);
52 } 52 }
53 return RandomUtil.randomInt(); 53 return RandomUtil.randomInt();
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/logger/LoginLogServiceImplTest.java
1 package cn.iocoder.yudao.module.system.service.logger; 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 import cn.iocoder.yudao.framework.common.pojo.PageResult; 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 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 4 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
9 -import cn.iocoder.yudao.framework.test.core.util.RandomUtils;  
10 import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; 5 import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO;
11 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO; 6 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
12 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; 7 import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
13 import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO; 8 import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
14 import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper; 9 import cn.iocoder.yudao.module.system.dal.mysql.logger.LoginLogMapper;
15 -import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;  
16 import org.junit.jupiter.api.Test; 10 import org.junit.jupiter.api.Test;
17 import org.springframework.context.annotation.Import; 11 import org.springframework.context.annotation.Import;
18 12
19 import javax.annotation.Resource; 13 import javax.annotation.Resource;
20 -import java.time.LocalDateTime;  
21 import java.util.List; 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 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; 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 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; 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 import static org.junit.jupiter.api.Assertions.assertEquals; 23 import static org.junit.jupiter.api.Assertions.assertEquals;
28 24
29 @Import(LoginLogServiceImpl.class) 25 @Import(LoginLogServiceImpl.class)
@@ -37,42 +33,31 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { @@ -37,42 +33,31 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest {
37 33
38 @Test 34 @Test
39 public void testGetLoginLogPage() { 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 loginLogMapper.insert(loginLogDO); 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 LoginLogPageReqVO reqVO = new LoginLogPageReqVO(); 53 LoginLogPageReqVO reqVO = new LoginLogPageReqVO();
67 - reqVO.setUsername("wangkai"); 54 + reqVO.setUsername("wang");
68 reqVO.setUserIp("192.168.199"); 55 reqVO.setUserIp("192.168.199");
69 reqVO.setStatus(true); 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 PageResult<LoginLogDO> pageResult = loginLogService.getLoginLogPage(reqVO); 60 PageResult<LoginLogDO> pageResult = loginLogService.getLoginLogPage(reqVO);
75 -  
76 // 断言,只查到了一条符合条件的 61 // 断言,只查到了一条符合条件的
77 assertEquals(1, pageResult.getTotal()); 62 assertEquals(1, pageResult.getTotal());
78 assertEquals(1, pageResult.getList().size()); 63 assertEquals(1, pageResult.getList().size());
@@ -81,62 +66,45 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest { @@ -81,62 +66,45 @@ public class LoginLogServiceImplTest extends BaseDbUnitTest {
81 66
82 @Test 67 @Test
83 public void testGetLoginLogList() { 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 loginLogMapper.insert(loginLogDO); 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 LoginLogExportReqVO reqVO = new LoginLogExportReqVO(); 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 reqVO.setStatus(true); 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 // 调用service方法 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 @Test 99 @Test
126 public void testCreateLoginLog() { 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 loginLogService.createLoginLog(reqDTO); 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 }