dengzedong
2024-12-19 85b2001c0ec2f1adc598db3bf47ad457dcca7074
提交 | 用户 | 时间
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 }