提交 | 用户 | 时间
|
e7c126
|
1 |
package com.iailab.module.infra.service.config; |
H |
2 |
|
|
3 |
import com.iailab.framework.common.pojo.PageResult; |
|
4 |
import com.iailab.framework.common.util.collection.ArrayUtils; |
|
5 |
import com.iailab.framework.test.core.ut.BaseDbUnitTest; |
|
6 |
import com.iailab.framework.test.core.util.RandomUtils; |
|
7 |
import com.iailab.module.infra.controller.admin.config.vo.ConfigPageReqVO; |
|
8 |
import com.iailab.module.infra.controller.admin.config.vo.ConfigSaveReqVO; |
|
9 |
import com.iailab.module.infra.dal.dataobject.config.ConfigDO; |
|
10 |
import com.iailab.module.infra.dal.mysql.config.ConfigMapper; |
|
11 |
import com.iailab.module.infra.enums.config.ConfigTypeEnum; |
|
12 |
import org.junit.jupiter.api.Test; |
|
13 |
import org.springframework.context.annotation.Import; |
|
14 |
|
|
15 |
import javax.annotation.Resource; |
|
16 |
import java.util.function.Consumer; |
|
17 |
|
|
18 |
import static cn.hutool.core.util.RandomUtil.randomEle; |
|
19 |
import static com.iailab.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; |
|
20 |
import static com.iailab.framework.common.util.date.LocalDateTimeUtils.buildTime; |
|
21 |
import static com.iailab.framework.common.util.object.ObjectUtils.cloneIgnoreId; |
|
22 |
import static com.iailab.framework.test.core.util.AssertUtils.assertPojoEquals; |
|
23 |
import static com.iailab.framework.test.core.util.AssertUtils.assertServiceException; |
|
24 |
import static com.iailab.framework.test.core.util.RandomUtils.*; |
|
25 |
import static com.iailab.module.infra.enums.ErrorCodeConstants.*; |
|
26 |
import static org.junit.jupiter.api.Assertions.*; |
|
27 |
|
|
28 |
@Import(ConfigServiceImpl.class) |
|
29 |
public class ConfigServiceImplTest extends BaseDbUnitTest { |
|
30 |
|
|
31 |
@Resource |
|
32 |
private ConfigServiceImpl configService; |
|
33 |
|
|
34 |
@Resource |
|
35 |
private ConfigMapper configMapper; |
|
36 |
|
|
37 |
@Test |
|
38 |
public void testCreateConfig_success() { |
|
39 |
// 准备参数 |
|
40 |
ConfigSaveReqVO reqVO = randomPojo(ConfigSaveReqVO.class) |
|
41 |
.setId(null); // 防止 id 被赋值,导致唯一性校验失败 |
|
42 |
|
|
43 |
// 调用 |
|
44 |
Long configId = configService.createConfig(reqVO); |
|
45 |
// 断言 |
|
46 |
assertNotNull(configId); |
|
47 |
// 校验记录的属性是否正确 |
|
48 |
ConfigDO config = configMapper.selectById(configId); |
|
49 |
assertPojoEquals(reqVO, config, "id"); |
|
50 |
assertEquals(ConfigTypeEnum.CUSTOM.getType(), config.getType()); |
|
51 |
} |
|
52 |
|
|
53 |
@Test |
|
54 |
public void testUpdateConfig_success() { |
|
55 |
// mock 数据 |
|
56 |
ConfigDO dbConfig = randomConfigDO(); |
|
57 |
configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 |
|
58 |
// 准备参数 |
|
59 |
ConfigSaveReqVO reqVO = randomPojo(ConfigSaveReqVO.class, o -> { |
|
60 |
o.setId(dbConfig.getId()); // 设置更新的 ID |
|
61 |
}); |
|
62 |
|
|
63 |
// 调用 |
|
64 |
configService.updateConfig(reqVO); |
|
65 |
// 校验是否更新正确 |
|
66 |
ConfigDO config = configMapper.selectById(reqVO.getId()); // 获取最新的 |
|
67 |
assertPojoEquals(reqVO, config); |
|
68 |
} |
|
69 |
|
|
70 |
@Test |
|
71 |
public void testDeleteConfig_success() { |
|
72 |
// mock 数据 |
|
73 |
ConfigDO dbConfig = randomConfigDO(o -> { |
|
74 |
o.setType(ConfigTypeEnum.CUSTOM.getType()); // 只能删除 CUSTOM 类型 |
|
75 |
}); |
|
76 |
configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 |
|
77 |
// 准备参数 |
|
78 |
Long id = dbConfig.getId(); |
|
79 |
|
|
80 |
// 调用 |
|
81 |
configService.deleteConfig(id); |
|
82 |
// 校验数据不存在了 |
|
83 |
assertNull(configMapper.selectById(id)); |
|
84 |
} |
|
85 |
|
|
86 |
@Test |
|
87 |
public void testDeleteConfig_canNotDeleteSystemType() { |
|
88 |
// mock 数据 |
|
89 |
ConfigDO dbConfig = randomConfigDO(o -> { |
|
90 |
o.setType(ConfigTypeEnum.SYSTEM.getType()); // SYSTEM 不允许删除 |
|
91 |
}); |
|
92 |
configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 |
|
93 |
// 准备参数 |
|
94 |
Long id = dbConfig.getId(); |
|
95 |
|
|
96 |
// 调用, 并断言异常 |
|
97 |
assertServiceException(() -> configService.deleteConfig(id), CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); |
|
98 |
} |
|
99 |
|
|
100 |
@Test |
|
101 |
public void testValidateConfigExists_success() { |
|
102 |
// mock 数据 |
|
103 |
ConfigDO dbConfigDO = randomConfigDO(); |
|
104 |
configMapper.insert(dbConfigDO);// @Sql: 先插入出一条存在的数据 |
|
105 |
|
|
106 |
// 调用成功 |
|
107 |
configService.validateConfigExists(dbConfigDO.getId()); |
|
108 |
} |
|
109 |
|
|
110 |
@Test |
|
111 |
public void testValidateConfigExist_notExists() { |
|
112 |
assertServiceException(() -> configService.validateConfigExists(randomLongId()), CONFIG_NOT_EXISTS); |
|
113 |
} |
|
114 |
|
|
115 |
@Test |
|
116 |
public void testValidateConfigKeyUnique_success() { |
|
117 |
// 调用,成功 |
|
118 |
configService.validateConfigKeyUnique(randomLongId(), randomString()); |
|
119 |
} |
|
120 |
|
|
121 |
@Test |
|
122 |
public void testValidateConfigKeyUnique_keyDuplicateForCreate() { |
|
123 |
// 准备参数 |
|
124 |
String key = randomString(); |
|
125 |
// mock 数据 |
|
126 |
configMapper.insert(randomConfigDO(o -> o.setConfigKey(key))); |
|
127 |
|
|
128 |
// 调用,校验异常 |
|
129 |
assertServiceException(() -> configService.validateConfigKeyUnique(null, key), |
|
130 |
CONFIG_KEY_DUPLICATE); |
|
131 |
} |
|
132 |
|
|
133 |
@Test |
|
134 |
public void testValidateConfigKeyUnique_keyDuplicateForUpdate() { |
|
135 |
// 准备参数 |
|
136 |
Long id = randomLongId(); |
|
137 |
String key = randomString(); |
|
138 |
// mock 数据 |
|
139 |
configMapper.insert(randomConfigDO(o -> o.setConfigKey(key))); |
|
140 |
|
|
141 |
// 调用,校验异常 |
|
142 |
assertServiceException(() -> configService.validateConfigKeyUnique(id, key), |
|
143 |
CONFIG_KEY_DUPLICATE); |
|
144 |
} |
|
145 |
|
|
146 |
@Test |
|
147 |
public void testGetConfigPage() { |
|
148 |
// mock 数据 |
|
149 |
ConfigDO dbConfig = randomConfigDO(o -> { // 等会查询到 |
|
150 |
o.setName("iailab"); |
|
151 |
o.setConfigKey("yunai"); |
|
152 |
o.setType(ConfigTypeEnum.SYSTEM.getType()); |
|
153 |
o.setCreateTime(buildTime(2021, 2, 1)); |
|
154 |
}); |
|
155 |
configMapper.insert(dbConfig); |
|
156 |
// 测试 name 不匹配 |
|
157 |
configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setName("土豆"))); |
|
158 |
// 测试 key 不匹配 |
|
159 |
configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setConfigKey("tudou"))); |
|
160 |
// 测试 type 不匹配 |
|
161 |
configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setType(ConfigTypeEnum.CUSTOM.getType()))); |
|
162 |
// 测试 createTime 不匹配 |
|
163 |
configMapper.insert(cloneIgnoreId(dbConfig, o -> o.setCreateTime(buildTime(2021, 1, 1)))); |
|
164 |
// 准备参数 |
|
165 |
ConfigPageReqVO reqVO = new ConfigPageReqVO(); |
|
166 |
reqVO.setName("艿"); |
|
167 |
reqVO.setKey("nai"); |
|
168 |
reqVO.setType(ConfigTypeEnum.SYSTEM.getType()); |
|
169 |
reqVO.setCreateTime(buildBetweenTime(2021, 1, 15, 2021, 2, 15)); |
|
170 |
|
|
171 |
// 调用 |
|
172 |
PageResult<ConfigDO> pageResult = configService.getConfigPage(reqVO); |
|
173 |
// 断言 |
|
174 |
assertEquals(1, pageResult.getTotal()); |
|
175 |
assertEquals(1, pageResult.getList().size()); |
|
176 |
assertPojoEquals(dbConfig, pageResult.getList().get(0)); |
|
177 |
} |
|
178 |
|
|
179 |
@Test |
|
180 |
public void testGetConfig() { |
|
181 |
// mock 数据 |
|
182 |
ConfigDO dbConfig = randomConfigDO(); |
|
183 |
configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 |
|
184 |
// 准备参数 |
|
185 |
Long id = dbConfig.getId(); |
|
186 |
|
|
187 |
// 调用 |
|
188 |
ConfigDO config = configService.getConfig(id); |
|
189 |
// 断言 |
|
190 |
assertNotNull(config); |
|
191 |
assertPojoEquals(dbConfig, config); |
|
192 |
} |
|
193 |
|
|
194 |
@Test |
|
195 |
public void testGetConfigByKey() { |
|
196 |
// mock 数据 |
|
197 |
ConfigDO dbConfig = randomConfigDO(); |
|
198 |
configMapper.insert(dbConfig);// @Sql: 先插入出一条存在的数据 |
|
199 |
// 准备参数 |
|
200 |
String key = dbConfig.getConfigKey(); |
|
201 |
|
|
202 |
// 调用 |
|
203 |
ConfigDO config = configService.getConfigByKey(key); |
|
204 |
// 断言 |
|
205 |
assertNotNull(config); |
|
206 |
assertPojoEquals(dbConfig, config); |
|
207 |
} |
|
208 |
|
|
209 |
// ========== 随机对象 ========== |
|
210 |
|
|
211 |
@SafeVarargs |
|
212 |
private static ConfigDO randomConfigDO(Consumer<ConfigDO>... consumers) { |
|
213 |
Consumer<ConfigDO> consumer = (o) -> { |
|
214 |
o.setType(randomEle(ConfigTypeEnum.values()).getType()); // 保证 key 的范围 |
|
215 |
}; |
|
216 |
return RandomUtils.randomPojo(ConfigDO.class, ArrayUtils.append(consumer, consumers)); |
|
217 |
} |
|
218 |
|
|
219 |
} |