Commit 2ba4dec0da5ec18d8bd1302863f422ef54550d3b
1 parent
62dc3296
完善 notify 单元测试
Showing
5 changed files
with
121 additions
and
10 deletions
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImpl.java
| ... | ... | @@ -44,13 +44,13 @@ public class NotifySendServiceImpl implements NotifySendService { |
| 44 | 44 | @Override |
| 45 | 45 | public Long sendSingleNotify(Long userId, Integer userType, String templateCode, Map<String, Object> templateParams) { |
| 46 | 46 | // 校验模版 |
| 47 | - NotifyTemplateDO template = checkNotifyTemplateValid(templateCode); | |
| 47 | + NotifyTemplateDO template = validateNotifyTemplate(templateCode); | |
| 48 | 48 | if (Objects.equals(template.getStatus(), CommonStatusEnum.DISABLE.getStatus())) { |
| 49 | 49 | log.info("[sendSingleNotify][模版({})已经关闭,无法给用户({}/{})发送]", templateCode, userId, userType); |
| 50 | 50 | return null; |
| 51 | 51 | } |
| 52 | 52 | // 校验参数 |
| 53 | - checkTemplateParams(template, templateParams); | |
| 53 | + validateTemplateParams(template, templateParams); | |
| 54 | 54 | |
| 55 | 55 | // 发送站内信 |
| 56 | 56 | String content = notifyTemplateService.formatNotifyTemplateContent(template.getContent(), templateParams); |
| ... | ... | @@ -58,7 +58,7 @@ public class NotifySendServiceImpl implements NotifySendService { |
| 58 | 58 | } |
| 59 | 59 | |
| 60 | 60 | @VisibleForTesting |
| 61 | - public NotifyTemplateDO checkNotifyTemplateValid(String templateCode) { | |
| 61 | + public NotifyTemplateDO validateNotifyTemplate(String templateCode) { | |
| 62 | 62 | // 获得站内信模板。考虑到效率,从缓存中获取 |
| 63 | 63 | NotifyTemplateDO template = notifyTemplateService.getNotifyTemplateByCodeFromCache(templateCode); |
| 64 | 64 | // 站内信模板不存在 |
| ... | ... | @@ -75,7 +75,7 @@ public class NotifySendServiceImpl implements NotifySendService { |
| 75 | 75 | * @param templateParams 参数列表 |
| 76 | 76 | */ |
| 77 | 77 | @VisibleForTesting |
| 78 | - public void checkTemplateParams(NotifyTemplateDO template, Map<String, Object> templateParams) { | |
| 78 | + public void validateTemplateParams(NotifyTemplateDO template, Map<String, Object> templateParams) { | |
| 79 | 79 | template.getParams().forEach(key -> { |
| 80 | 80 | Object value = templateParams.get(key); |
| 81 | 81 | if (value == null) { | ... | ... |
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImplTest.java
| ... | ... | @@ -181,7 +181,7 @@ public class MailTemplateServiceImplTest extends BaseDbUnitTest { |
| 181 | 181 | } |
| 182 | 182 | |
| 183 | 183 | @Test |
| 184 | - public void testGetTemplate() { | |
| 184 | + public void testGetMailTemplate() { | |
| 185 | 185 | // mock 数据 |
| 186 | 186 | MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class); |
| 187 | 187 | mailTemplateMapper.insert(dbMailTemplate); | ... | ... |
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java
| ... | ... | @@ -109,6 +109,20 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest { |
| 109 | 109 | } |
| 110 | 110 | |
| 111 | 111 | @Test |
| 112 | + public void testGetNotifyMessage() { | |
| 113 | + // mock 数据 | |
| 114 | + NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, | |
| 115 | + o -> o.setTemplateParams(randomTemplateParams())); | |
| 116 | + notifyMessageMapper.insert(dbNotifyMessage); | |
| 117 | + // 准备参数 | |
| 118 | + Long id = dbNotifyMessage.getId(); | |
| 119 | + | |
| 120 | + // 调用 | |
| 121 | + NotifyMessageDO notifyMessage = notifyMessageService.getNotifyMessage(id); | |
| 122 | + assertPojoEquals(dbNotifyMessage, notifyMessage); | |
| 123 | + } | |
| 124 | + | |
| 125 | + @Test | |
| 112 | 126 | public void testGetMyNotifyMessagePage() { |
| 113 | 127 | // mock 数据 |
| 114 | 128 | NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 | ... | ... |
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImplTest.java
| ... | ... | @@ -4,8 +4,6 @@ import cn.hutool.core.map.MapUtil; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; |
| 6 | 6 | import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; |
| 7 | -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; | |
| 8 | -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; | |
| 9 | 7 | import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; |
| 10 | 8 | import org.assertj.core.util.Lists; |
| 11 | 9 | import org.junit.jupiter.api.Test; |
| ... | ... | @@ -18,7 +16,8 @@ import java.util.Map; |
| 18 | 16 | import static cn.hutool.core.util.RandomUtil.randomEle; |
| 19 | 17 | import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; |
| 20 | 18 | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; |
| 21 | -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; | |
| 19 | +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; | |
| 20 | +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTIFY_SEND_TEMPLATE_PARAM_MISS; | |
| 22 | 21 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 23 | 22 | import static org.junit.jupiter.api.Assertions.assertNull; |
| 24 | 23 | import static org.mockito.ArgumentMatchers.eq; |
| ... | ... | @@ -34,6 +33,62 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest { |
| 34 | 33 | @Mock |
| 35 | 34 | private NotifyMessageService notifyMessageService; |
| 36 | 35 | |
| 36 | + @Test | |
| 37 | + public void testSendSingleNotifyToAdmin() { | |
| 38 | + // 准备参数 | |
| 39 | + Long userId = randomLongId(); | |
| 40 | + String templateCode = randomString(); | |
| 41 | + Map<String, Object> templateParams = MapUtil.<String, Object>builder().put("code", "1234") | |
| 42 | + .put("op", "login").build(); | |
| 43 | + // mock NotifyTemplateService 的方法 | |
| 44 | + NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, o -> { | |
| 45 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 46 | + o.setContent("验证码为{code}, 操作为{op}"); | |
| 47 | + o.setParams(Lists.newArrayList("code", "op")); | |
| 48 | + }); | |
| 49 | + when(notifyTemplateService.getNotifyTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); | |
| 50 | + String content = randomString(); | |
| 51 | + when(notifyTemplateService.formatNotifyTemplateContent(eq(template.getContent()), eq(templateParams))) | |
| 52 | + .thenReturn(content); | |
| 53 | + // mock NotifyMessageService 的方法 | |
| 54 | + Long messageId = randomLongId(); | |
| 55 | + when(notifyMessageService.createNotifyMessage(eq(userId), eq(UserTypeEnum.ADMIN.getValue()), | |
| 56 | + eq(template), eq(content), eq(templateParams))).thenReturn(messageId); | |
| 57 | + | |
| 58 | + // 调用 | |
| 59 | + Long resultMessageId = notifySendService.sendSingleNotifyToAdmin(userId, templateCode, templateParams); | |
| 60 | + // 断言 | |
| 61 | + assertEquals(messageId, resultMessageId); | |
| 62 | + } | |
| 63 | + | |
| 64 | + @Test | |
| 65 | + public void testSendSingleNotifyToMember() { | |
| 66 | + // 准备参数 | |
| 67 | + Long userId = randomLongId(); | |
| 68 | + String templateCode = randomString(); | |
| 69 | + Map<String, Object> templateParams = MapUtil.<String, Object>builder().put("code", "1234") | |
| 70 | + .put("op", "login").build(); | |
| 71 | + // mock NotifyTemplateService 的方法 | |
| 72 | + NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, o -> { | |
| 73 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 74 | + o.setContent("验证码为{code}, 操作为{op}"); | |
| 75 | + o.setParams(Lists.newArrayList("code", "op")); | |
| 76 | + }); | |
| 77 | + when(notifyTemplateService.getNotifyTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); | |
| 78 | + String content = randomString(); | |
| 79 | + when(notifyTemplateService.formatNotifyTemplateContent(eq(template.getContent()), eq(templateParams))) | |
| 80 | + .thenReturn(content); | |
| 81 | + // mock NotifyMessageService 的方法 | |
| 82 | + Long messageId = randomLongId(); | |
| 83 | + when(notifyMessageService.createNotifyMessage(eq(userId), eq(UserTypeEnum.MEMBER.getValue()), | |
| 84 | + eq(template), eq(content), eq(templateParams))).thenReturn(messageId); | |
| 85 | + | |
| 86 | + // 调用 | |
| 87 | + Long resultMessageId = notifySendService.sendSingleNotifyToMember(userId, templateCode, templateParams); | |
| 88 | + // 断言 | |
| 89 | + assertEquals(messageId, resultMessageId); | |
| 90 | + } | |
| 91 | + | |
| 37 | 92 | /** |
| 38 | 93 | * 发送成功,当短信模板开启时 |
| 39 | 94 | */ |
| ... | ... | @@ -100,7 +155,7 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest { |
| 100 | 155 | // mock 方法 |
| 101 | 156 | |
| 102 | 157 | // 调用,并断言异常 |
| 103 | - assertServiceException(() -> notifySendService.checkNotifyTemplateValid(templateCode), | |
| 158 | + assertServiceException(() -> notifySendService.validateNotifyTemplate(templateCode), | |
| 104 | 159 | NOTICE_NOT_FOUND); |
| 105 | 160 | } |
| 106 | 161 | |
| ... | ... | @@ -113,7 +168,7 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest { |
| 113 | 168 | // mock 方法 |
| 114 | 169 | |
| 115 | 170 | // 调用,并断言异常 |
| 116 | - assertServiceException(() -> notifySendService.checkTemplateParams(template, templateParams), | |
| 171 | + assertServiceException(() -> notifySendService.validateTemplateParams(template, templateParams), | |
| 117 | 172 | NOTIFY_SEND_TEMPLATE_PARAM_MISS, "code"); |
| 118 | 173 | } |
| 119 | 174 | ... | ... |
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyTemplateServiceImplTest.java
| ... | ... | @@ -14,6 +14,8 @@ import org.springframework.boot.test.mock.mockito.MockBean; |
| 14 | 14 | import org.springframework.context.annotation.Import; |
| 15 | 15 | |
| 16 | 16 | import javax.annotation.Resource; |
| 17 | +import java.util.HashMap; | |
| 18 | +import java.util.Map; | |
| 17 | 19 | |
| 18 | 20 | import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; |
| 19 | 21 | import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; |
| ... | ... | @@ -143,4 +145,44 @@ public class NotifyTemplateServiceImplTest extends BaseDbUnitTest { |
| 143 | 145 | assertPojoEquals(dbNotifyTemplate, pageResult.getList().get(0)); |
| 144 | 146 | } |
| 145 | 147 | |
| 148 | + @Test | |
| 149 | + public void testGetNotifyTemplate() { | |
| 150 | + // mock 数据 | |
| 151 | + NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class); | |
| 152 | + notifyTemplateMapper.insert(dbNotifyTemplate); | |
| 153 | + // 准备参数 | |
| 154 | + Long id = dbNotifyTemplate.getId(); | |
| 155 | + | |
| 156 | + // 调用 | |
| 157 | + NotifyTemplateDO notifyTemplate = notifyTemplateService.getNotifyTemplate(id); | |
| 158 | + // 断言 | |
| 159 | + assertPojoEquals(dbNotifyTemplate, notifyTemplate); | |
| 160 | + } | |
| 161 | + | |
| 162 | + @Test | |
| 163 | + public void testGetNotifyTemplateByCodeFromCache() { | |
| 164 | + // mock 数据 | |
| 165 | + NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class); | |
| 166 | + notifyTemplateMapper.insert(dbNotifyTemplate); | |
| 167 | + notifyTemplateService.initLocalCache(); | |
| 168 | + // 准备参数 | |
| 169 | + String code = dbNotifyTemplate.getCode(); | |
| 170 | + | |
| 171 | + // 调用 | |
| 172 | + NotifyTemplateDO notifyTemplate = notifyTemplateService.getNotifyTemplateByCodeFromCache(code); | |
| 173 | + // 断言 | |
| 174 | + assertPojoEquals(dbNotifyTemplate, notifyTemplate); | |
| 175 | + } | |
| 176 | + | |
| 177 | + @Test | |
| 178 | + public void testFormatNotifyTemplateContent() { | |
| 179 | + // 准备参数 | |
| 180 | + Map<String, Object> params = new HashMap<>(); | |
| 181 | + params.put("name", "小红"); | |
| 182 | + params.put("what", "饭"); | |
| 183 | + | |
| 184 | + // 调用,并断言 | |
| 185 | + assertEquals("小红,你好,饭吃了吗?", | |
| 186 | + notifyTemplateService.formatNotifyTemplateContent("{name},你好,{what}吃了吗?", params)); | |
| 187 | + } | |
| 146 | 188 | } | ... | ... |