Commit 4a40771057bf80e5260f0e139c0c569f5ab27d0b

Authored by YunaiV
1 parent fbbcd271

短信模板的单元测试

src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
@@ -82,8 +82,15 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { @@ -82,8 +82,15 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService {
82 public void updateSmsTemplate(SysSmsTemplateUpdateReqVO updateReqVO) { 82 public void updateSmsTemplate(SysSmsTemplateUpdateReqVO updateReqVO) {
83 // 校验存在 83 // 校验存在
84 this.validateSmsTemplateExists(updateReqVO.getId()); 84 this.validateSmsTemplateExists(updateReqVO.getId());
  85 + // 校验短信渠道
  86 + SysSmsChannelDO channelDO = checkSmsChannel(updateReqVO.getChannelId());
  87 + // 校验短信编码是否重复
  88 + checkSmsTemplateCodeDuplicate(updateReqVO.getId(), updateReqVO.getCode());
  89 +
85 // 更新 90 // 更新
86 SysSmsTemplateDO updateObj = SysSmsTemplateConvert.INSTANCE.convert(updateReqVO); 91 SysSmsTemplateDO updateObj = SysSmsTemplateConvert.INSTANCE.convert(updateReqVO);
  92 + updateObj.setParams(parseTemplateContentParams(updateObj.getContent()));
  93 + updateObj.setChannelCode(channelDO.getCode());
87 smsTemplateMapper.updateById(updateObj); 94 smsTemplateMapper.updateById(updateObj);
88 } 95 }
89 96
@@ -121,7 +128,8 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { @@ -121,7 +128,8 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService {
121 return smsTemplateMapper.selectList(exportReqVO); 128 return smsTemplateMapper.selectList(exportReqVO);
122 } 129 }
123 130
124 - private SysSmsChannelDO checkSmsChannel(Long channelId) { 131 + @VisibleForTesting
  132 + public SysSmsChannelDO checkSmsChannel(Long channelId) {
125 SysSmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId); 133 SysSmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId);
126 if (channelDO == null) { 134 if (channelDO == null) {
127 throw exception(SMS_CHANNEL_NOT_EXISTS); 135 throw exception(SMS_CHANNEL_NOT_EXISTS);
@@ -132,7 +140,8 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { @@ -132,7 +140,8 @@ public class SysSmsTemplateServiceImpl implements SysSmsTemplateService {
132 return channelDO; 140 return channelDO;
133 } 141 }
134 142
135 - private void checkSmsTemplateCodeDuplicate(Long id, String code) { 143 + @VisibleForTesting
  144 + public void checkSmsTemplateCodeDuplicate(Long id, String code) {
136 SysSmsTemplateDO template = smsTemplateMapper.selectByCode(code); 145 SysSmsTemplateDO template = smsTemplateMapper.selectByCode(code);
137 if (template == null) { 146 if (template == null) {
138 return; 147 return;
src/test/java/cn/iocoder/dashboard/modules/system/service/permission/SysMenuServiceTest.java
@@ -12,7 +12,6 @@ import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum; @@ -12,7 +12,6 @@ import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum;
12 import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysMenuProducer; 12 import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysMenuProducer;
13 import cn.iocoder.dashboard.modules.system.service.permission.impl.SysMenuServiceImpl; 13 import cn.iocoder.dashboard.modules.system.service.permission.impl.SysMenuServiceImpl;
14 import cn.iocoder.dashboard.util.AopTargetUtils; 14 import cn.iocoder.dashboard.util.AopTargetUtils;
15 -import cn.iocoder.dashboard.util.AssertUtils;  
16 import cn.iocoder.dashboard.util.RandomUtils; 15 import cn.iocoder.dashboard.util.RandomUtils;
17 import cn.iocoder.dashboard.util.object.ObjectUtils; 16 import cn.iocoder.dashboard.util.object.ObjectUtils;
18 import com.google.common.collect.Multimap; 17 import com.google.common.collect.Multimap;
@@ -22,7 +21,6 @@ import org.springframework.boot.test.mock.mockito.MockBean; @@ -22,7 +21,6 @@ import org.springframework.boot.test.mock.mockito.MockBean;
22 import org.springframework.context.annotation.Import; 21 import org.springframework.context.annotation.Import;
23 22
24 import javax.annotation.Resource; 23 import javax.annotation.Resource;
25 -  
26 import java.util.*; 24 import java.util.*;
27 25
28 import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; 26 import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*;
@@ -273,10 +271,10 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @@ -273,10 +271,10 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
273 menuDO = createMenuDO(4L, MenuTypeEnum.MENU, "name", 0L, 2); 271 menuDO = createMenuDO(4L, MenuTypeEnum.MENU, "name", 0L, 2);
274 mockCacheMap.put(menuDO.getId(), menuDO); 272 mockCacheMap.put(menuDO.getId(), menuDO);
275 273
276 - List<SysMenuDO> menuDOS = sysMenuService.listMenusFromCache(Arrays.asList(1L),  
277 - Arrays.asList(MenuTypeEnum.MENU.getType()), Arrays.asList(1)); 274 + List<SysMenuDO> menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(1L),
  275 + Collections.singletonList(MenuTypeEnum.MENU.getType()), Collections.singletonList(1));
278 Assert.isTrue(menuDOS.size() == idMenuMap.size()); 276 Assert.isTrue(menuDOS.size() == idMenuMap.size());
279 - menuDOS.stream().forEach(menu -> assertPojoEquals(idMenuMap.get(menu.getId()), menu)); 277 + menuDOS.forEach(menu -> assertPojoEquals(idMenuMap.get(menu.getId()), menu));
280 } 278 }
281 279
282 @Test 280 @Test
@@ -354,14 +352,13 @@ public class SysMenuServiceTest extends BaseDbUnitTest { @@ -354,14 +352,13 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
354 } 352 }
355 353
356 private SysMenuDO createMenuDO(Long id, MenuTypeEnum typeEnum, String menuName, Long parentId, Integer status) { 354 private SysMenuDO createMenuDO(Long id, MenuTypeEnum typeEnum, String menuName, Long parentId, Integer status) {
357 - SysMenuDO sonMenuDO = RandomUtils.randomPojo(SysMenuDO.class, o -> { 355 + return RandomUtils.randomPojo(SysMenuDO.class, o -> {
358 o.setId(id); 356 o.setId(id);
359 o.setParentId(parentId); 357 o.setParentId(parentId);
360 o.setType(typeEnum.getType()); 358 o.setType(typeEnum.getType());
361 o.setStatus(status); 359 o.setStatus(status);
362 o.setName(menuName); 360 o.setName(menuName);
363 }); 361 });
364 - return sonMenuDO;  
365 } 362 }
366 363
367 364
src/test/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsTemplateServiceTest.java
@@ -3,10 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.sms; @@ -3,10 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.sms;
3 import cn.iocoder.dashboard.BaseDbUnitTest; 3 import cn.iocoder.dashboard.BaseDbUnitTest;
4 import cn.iocoder.dashboard.common.enums.CommonStatusEnum; 4 import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
5 import cn.iocoder.dashboard.common.pojo.PageResult; 5 import cn.iocoder.dashboard.common.pojo.PageResult;
6 -import cn.iocoder.dashboard.modules.system.controller.sms.vo.template.SysSmsTemplateCreateReqVO;  
7 -import cn.iocoder.dashboard.modules.system.controller.sms.vo.template.SysSmsTemplateExportReqVO;  
8 -import cn.iocoder.dashboard.modules.system.controller.sms.vo.template.SysSmsTemplatePageReqVO;  
9 -import cn.iocoder.dashboard.modules.system.controller.sms.vo.template.SysSmsTemplateUpdateReqVO; 6 +import cn.iocoder.dashboard.modules.system.controller.sms.vo.template.*;
10 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO; 7 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO;
11 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; 8 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
12 import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsTemplateMapper; 9 import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsTemplateMapper;
@@ -24,11 +21,11 @@ import java.util.List; @@ -24,11 +21,11 @@ import java.util.List;
24 import java.util.function.Consumer; 21 import java.util.function.Consumer;
25 22
26 import static cn.hutool.core.util.RandomUtil.randomEle; 23 import static cn.hutool.core.util.RandomUtil.randomEle;
27 -import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.SMS_TEMPLATE_NOT_EXISTS; 24 +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*;
28 import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; 25 import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
29 import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; 26 import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException;
30 -import static cn.iocoder.dashboard.util.RandomUtils.randomLongId;  
31 -import static cn.iocoder.dashboard.util.RandomUtils.randomPojo; 27 +import static cn.iocoder.dashboard.util.RandomUtils.*;
  28 +import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
32 import static org.junit.jupiter.api.Assertions.*; 29 import static org.junit.jupiter.api.Assertions.*;
33 import static org.mockito.ArgumentMatchers.eq; 30 import static org.mockito.ArgumentMatchers.eq;
34 import static org.mockito.Mockito.when; 31 import static org.mockito.Mockito.when;
@@ -91,18 +88,29 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { @@ -91,18 +88,29 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
91 @Test 88 @Test
92 public void testUpdateSmsTemplate_success() { 89 public void testUpdateSmsTemplate_success() {
93 // mock 数据 90 // mock 数据
94 - SysSmsTemplateDO dbSmsTemplate = randomPojo(SysSmsTemplateDO.class); 91 + SysSmsTemplateDO dbSmsTemplate = randomSmsTemplateDO();
95 smsTemplateMapper.insert(dbSmsTemplate);// @Sql: 先插入出一条存在的数据 92 smsTemplateMapper.insert(dbSmsTemplate);// @Sql: 先插入出一条存在的数据
96 // 准备参数 93 // 准备参数
97 SysSmsTemplateUpdateReqVO reqVO = randomPojo(SysSmsTemplateUpdateReqVO.class, o -> { 94 SysSmsTemplateUpdateReqVO reqVO = randomPojo(SysSmsTemplateUpdateReqVO.class, o -> {
98 o.setId(dbSmsTemplate.getId()); // 设置更新的 ID 95 o.setId(dbSmsTemplate.getId()); // 设置更新的 ID
  96 + o.setContent("正在进行登录操作{operation},您的验证码是{code}");
  97 + o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
  98 + o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // 保证 type 的泛微
  99 + });
  100 + // mock 方法
  101 + SysSmsChannelDO channelDO = randomPojo(SysSmsChannelDO.class, o -> {
  102 + o.setId(reqVO.getChannelId());
  103 + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 保证 status 开启,创建必须处于这个状态
99 }); 104 });
  105 + when(smsChannelService.getSmsChannel(eq(channelDO.getId()))).thenReturn(channelDO);
100 106
101 // 调用 107 // 调用
102 smsTemplateService.updateSmsTemplate(reqVO); 108 smsTemplateService.updateSmsTemplate(reqVO);
103 // 校验是否更新正确 109 // 校验是否更新正确
104 SysSmsTemplateDO smsTemplate = smsTemplateMapper.selectById(reqVO.getId()); // 获取最新的 110 SysSmsTemplateDO smsTemplate = smsTemplateMapper.selectById(reqVO.getId()); // 获取最新的
105 assertPojoEquals(reqVO, smsTemplate); 111 assertPojoEquals(reqVO, smsTemplate);
  112 + assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
  113 + assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
106 } 114 }
107 115
108 @Test 116 @Test
@@ -137,43 +145,43 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { @@ -137,43 +145,43 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
137 assertServiceException(() -> smsTemplateService.deleteSmsTemplate(id), SMS_TEMPLATE_NOT_EXISTS); 145 assertServiceException(() -> smsTemplateService.deleteSmsTemplate(id), SMS_TEMPLATE_NOT_EXISTS);
138 } 146 }
139 147
140 - @Test // TODO 请修改 null 为需要的值 148 + @Test
141 public void testGetSmsTemplatePage() { 149 public void testGetSmsTemplatePage() {
142 // mock 数据 150 // mock 数据
143 SysSmsTemplateDO dbSmsTemplate = randomPojo(SysSmsTemplateDO.class, o -> { // 等会查询到 151 SysSmsTemplateDO dbSmsTemplate = randomPojo(SysSmsTemplateDO.class, o -> { // 等会查询到
144 - o.setType(null);  
145 - o.setStatus(null);  
146 - o.setCode(null);  
147 - o.setContent(null);  
148 - o.setApiTemplateId(null);  
149 - o.setChannelId(null);  
150 - o.setCreateTime(null); 152 + o.setType(SysSmsTemplateTypeEnum.PROMOTION.getType());
  153 + o.setStatus(CommonStatusEnum.ENABLE.getStatus());
  154 + o.setCode("yudaoyuanma");
  155 + o.setContent("芋道源码");
  156 + o.setApiTemplateId("yunai");
  157 + o.setChannelId(1L);
  158 + o.setCreateTime(buildTime(2021, 11, 11));
151 }); 159 });
152 smsTemplateMapper.insert(dbSmsTemplate); 160 smsTemplateMapper.insert(dbSmsTemplate);
153 // 测试 type 不匹配 161 // 测试 type 不匹配
154 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setType(null))); 162 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setType(SysSmsTemplateTypeEnum.VERIFICATION_CODE.getType())));
155 // 测试 status 不匹配 163 // 测试 status 不匹配
156 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setStatus(null))); 164 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
157 // 测试 code 不匹配 165 // 测试 code 不匹配
158 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setCode(null))); 166 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setCode("yuanma")));
159 // 测试 content 不匹配 167 // 测试 content 不匹配
160 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setContent(null))); 168 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setContent("源码")));
161 // 测试 apiTemplateId 不匹配 169 // 测试 apiTemplateId 不匹配
162 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setApiTemplateId(null))); 170 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setApiTemplateId("nai")));
163 // 测试 channelId 不匹配 171 // 测试 channelId 不匹配
164 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setChannelId(null))); 172 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setChannelId(2L)));
165 // 测试 createTime 不匹配 173 // 测试 createTime 不匹配
166 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setCreateTime(null))); 174 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setCreateTime(buildTime(2021, 12, 12))));
167 // 准备参数 175 // 准备参数
168 SysSmsTemplatePageReqVO reqVO = new SysSmsTemplatePageReqVO(); 176 SysSmsTemplatePageReqVO reqVO = new SysSmsTemplatePageReqVO();
169 - reqVO.setType(null);  
170 - reqVO.setStatus(null);  
171 - reqVO.setCode(null);  
172 - reqVO.setContent(null);  
173 - reqVO.setApiTemplateId(null);  
174 - reqVO.setChannelId(null);  
175 - reqVO.setBeginCreateTime(null);  
176 - reqVO.setEndCreateTime(null); 177 + reqVO.setType(SysSmsTemplateTypeEnum.PROMOTION.getType());
  178 + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
  179 + reqVO.setCode("yudao");
  180 + reqVO.setContent("芋道");
  181 + reqVO.setApiTemplateId("yu");
  182 + reqVO.setChannelId(1L);
  183 + reqVO.setBeginCreateTime(buildTime(2021, 11, 1));
  184 + reqVO.setEndCreateTime(buildTime(2021, 12, 1));
177 185
178 // 调用 186 // 调用
179 PageResult<SysSmsTemplateDO> pageResult = smsTemplateService.getSmsTemplatePage(reqVO); 187 PageResult<SysSmsTemplateDO> pageResult = smsTemplateService.getSmsTemplatePage(reqVO);
@@ -183,43 +191,43 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { @@ -183,43 +191,43 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
183 assertPojoEquals(dbSmsTemplate, pageResult.getList().get(0)); 191 assertPojoEquals(dbSmsTemplate, pageResult.getList().get(0));
184 } 192 }
185 193
186 - @Test // TODO 请修改 null 为需要的值 194 + @Test
187 public void testGetSmsTemplateList() { 195 public void testGetSmsTemplateList() {
188 - // mock 数据  
189 - SysSmsTemplateDO dbSmsTemplate = randomPojo(SysSmsTemplateDO.class, o -> { // 等会查询到  
190 - o.setType(null);  
191 - o.setStatus(null);  
192 - o.setCode(null);  
193 - o.setContent(null);  
194 - o.setApiTemplateId(null);  
195 - o.setChannelId(null);  
196 - o.setCreateTime(null);  
197 - });  
198 - smsTemplateMapper.insert(dbSmsTemplate);  
199 - // 测试 type 不匹配  
200 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setType(null)));  
201 - // 测试 status 不匹配  
202 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setStatus(null)));  
203 - // 测试 code 不匹配  
204 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setCode(null)));  
205 - // 测试 content 不匹配  
206 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setContent(null)));  
207 - // 测试 apiTemplateId 不匹配  
208 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setApiTemplateId(null)));  
209 - // 测试 channelId 不匹配  
210 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setChannelId(null)));  
211 - // 测试 createTime 不匹配  
212 - smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setCreateTime(null)));  
213 - // 准备参数  
214 - SysSmsTemplateExportReqVO reqVO = new SysSmsTemplateExportReqVO();  
215 - reqVO.setType(null);  
216 - reqVO.setStatus(null);  
217 - reqVO.setCode(null);  
218 - reqVO.setContent(null);  
219 - reqVO.setApiTemplateId(null);  
220 - reqVO.setChannelId(null);  
221 - reqVO.setBeginCreateTime(null);  
222 - reqVO.setEndCreateTime(null); 196 + // mock 数据
  197 + SysSmsTemplateDO dbSmsTemplate = randomPojo(SysSmsTemplateDO.class, o -> { // 等会查询到
  198 + o.setType(SysSmsTemplateTypeEnum.PROMOTION.getType());
  199 + o.setStatus(CommonStatusEnum.ENABLE.getStatus());
  200 + o.setCode("yudaoyuanma");
  201 + o.setContent("芋道源码");
  202 + o.setApiTemplateId("yunai");
  203 + o.setChannelId(1L);
  204 + o.setCreateTime(buildTime(2021, 11, 11));
  205 + });
  206 + smsTemplateMapper.insert(dbSmsTemplate);
  207 + // 测试 type 不匹配
  208 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setType(SysSmsTemplateTypeEnum.VERIFICATION_CODE.getType())));
  209 + // 测试 status 不匹配
  210 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
  211 + // 测试 code 不匹配
  212 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setCode("yuanma")));
  213 + // 测试 content 不匹配
  214 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setContent("源码")));
  215 + // 测试 apiTemplateId 不匹配
  216 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setApiTemplateId("nai")));
  217 + // 测试 channelId 不匹配
  218 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setChannelId(2L)));
  219 + // 测试 createTime 不匹配
  220 + smsTemplateMapper.insert(ObjectUtils.clone(dbSmsTemplate, o -> o.setCreateTime(buildTime(2021, 12, 12))));
  221 + // 准备参数
  222 + SysSmsTemplateExportReqVO reqVO = new SysSmsTemplateExportReqVO();
  223 + reqVO.setType(SysSmsTemplateTypeEnum.PROMOTION.getType());
  224 + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
  225 + reqVO.setCode("yudao");
  226 + reqVO.setContent("芋道");
  227 + reqVO.setApiTemplateId("yu");
  228 + reqVO.setChannelId(1L);
  229 + reqVO.setBeginCreateTime(buildTime(2021, 11, 1));
  230 + reqVO.setEndCreateTime(buildTime(2021, 12, 1));
223 231
224 // 调用 232 // 调用
225 List<SysSmsTemplateDO> list = smsTemplateService.getSmsTemplateList(reqVO); 233 List<SysSmsTemplateDO> list = smsTemplateService.getSmsTemplateList(reqVO);
@@ -228,6 +236,82 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest { @@ -228,6 +236,82 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
228 assertPojoEquals(dbSmsTemplate, list.get(0)); 236 assertPojoEquals(dbSmsTemplate, list.get(0));
229 } 237 }
230 238
  239 + @Test
  240 + public void testCheckSmsChannel_success() {
  241 + // 准备参数
  242 + Long channelId = randomLongId();
  243 + // mock 方法
  244 + SysSmsChannelDO channelDO = randomPojo(SysSmsChannelDO.class, o -> {
  245 + o.setId(channelId);
  246 + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 保证 status 开启,创建必须处于这个状态
  247 + });
  248 + when(smsChannelService.getSmsChannel(eq(channelId))).thenReturn(channelDO);
  249 +
  250 + // 调用
  251 + SysSmsChannelDO returnChannelDO = smsTemplateService.checkSmsChannel(channelId);
  252 + // 断言
  253 + assertPojoEquals(returnChannelDO, channelDO);
  254 + }
  255 +
  256 + @Test
  257 + public void testCheckSmsChannel_notExists() {
  258 + // 准备参数
  259 + Long channelId = randomLongId();
  260 +
  261 + // 调用,校验异常
  262 + assertServiceException(() -> smsTemplateService.checkSmsChannel(channelId),
  263 + SMS_CHANNEL_NOT_EXISTS);
  264 + }
  265 +
  266 + @Test
  267 + public void testCheckSmsChannel_disable() {
  268 + // 准备参数
  269 + Long channelId = randomLongId();
  270 + // mock 方法
  271 + SysSmsChannelDO channelDO = randomPojo(SysSmsChannelDO.class, o -> {
  272 + o.setId(channelId);
  273 + o.setStatus(CommonStatusEnum.DISABLE.getStatus()); // 保证 status 禁用,触发失败
  274 + });
  275 + when(smsChannelService.getSmsChannel(eq(channelId))).thenReturn(channelDO);
  276 +
  277 + // 调用,校验异常
  278 + assertServiceException(() -> smsTemplateService.checkSmsChannel(channelId),
  279 + SMS_CHANNEL_DISABLE);
  280 + }
  281 +
  282 + @Test
  283 + public void testCheckDictDataValueUnique_success() {
  284 + // 调用,成功
  285 + smsTemplateService.checkSmsTemplateCodeDuplicate(randomLongId(), randomString());
  286 + }
  287 +
  288 + @Test
  289 + public void testCheckDictDataValueUnique_valueDuplicateForCreate() {
  290 + // 准备参数
  291 + String code = randomString();
  292 + // mock 数据
  293 + smsTemplateMapper.insert(randomSmsTemplateDO(o -> o.setCode(code)));
  294 +
  295 + // 调用,校验异常
  296 + assertServiceException(() -> smsTemplateService.checkSmsTemplateCodeDuplicate(null, code),
  297 + SMS_TEMPLATE_CODE_DUPLICATE);
  298 + }
  299 +
  300 + @Test
  301 + public void testCheckDictDataValueUnique_valueDuplicateForUpdate() {
  302 + // 准备参数
  303 + Long id = randomLongId();
  304 + String code = randomString();
  305 + // mock 数据
  306 + smsTemplateMapper.insert(randomSmsTemplateDO(o -> o.setCode(code)));
  307 +
  308 + // 调用,校验异常
  309 + assertServiceException(() -> smsTemplateService.checkSmsTemplateCodeDuplicate(id, code),
  310 + SMS_TEMPLATE_CODE_DUPLICATE);
  311 + }
  312 +
  313 + // ========== 随机对象 ==========
  314 +
231 @SafeVarargs 315 @SafeVarargs
232 private static SysSmsTemplateDO randomSmsTemplateDO(Consumer<SysSmsTemplateDO>... consumers) { 316 private static SysSmsTemplateDO randomSmsTemplateDO(Consumer<SysSmsTemplateDO>... consumers) {
233 Consumer<SysSmsTemplateDO> consumer = (o) -> { 317 Consumer<SysSmsTemplateDO> consumer = (o) -> {
src/test/resources/sql/clean.sql
@@ -20,3 +20,4 @@ DELETE FROM &quot;sys_login_log&quot;; @@ -20,3 +20,4 @@ DELETE FROM &quot;sys_login_log&quot;;
20 DELETE FROM "sys_operate_log"; 20 DELETE FROM "sys_operate_log";
21 DELETE FROM "sys_user"; 21 DELETE FROM "sys_user";
22 DELETE FROM "sys_sms_channel"; 22 DELETE FROM "sys_sms_channel";
  23 +DELETE FROM "sys_sms_template";