Ver código fonte

完善 notify 单元测试

YunaiV 2 anos atrás
pai
commit
2ba4dec0da

+ 4 - 4
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 {
     @Override
     public Long sendSingleNotify(Long userId, Integer userType, String templateCode, Map<String, Object> templateParams) {
         // 校验模版
-        NotifyTemplateDO template = checkNotifyTemplateValid(templateCode);
+        NotifyTemplateDO template = validateNotifyTemplate(templateCode);
         if (Objects.equals(template.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {
             log.info("[sendSingleNotify][模版({})已经关闭,无法给用户({}/{})发送]", templateCode, userId, userType);
             return null;
         }
         // 校验参数
-        checkTemplateParams(template, templateParams);
+        validateTemplateParams(template, templateParams);
 
         // 发送站内信
         String content = notifyTemplateService.formatNotifyTemplateContent(template.getContent(), templateParams);
@@ -58,7 +58,7 @@ public class NotifySendServiceImpl implements NotifySendService {
     }
 
     @VisibleForTesting
-    public NotifyTemplateDO checkNotifyTemplateValid(String templateCode) {
+    public NotifyTemplateDO validateNotifyTemplate(String templateCode) {
         // 获得站内信模板。考虑到效率,从缓存中获取
         NotifyTemplateDO template = notifyTemplateService.getNotifyTemplateByCodeFromCache(templateCode);
         // 站内信模板不存在
@@ -75,7 +75,7 @@ public class NotifySendServiceImpl implements NotifySendService {
      * @param templateParams 参数列表
      */
     @VisibleForTesting
-    public void checkTemplateParams(NotifyTemplateDO template, Map<String, Object> templateParams) {
+    public void validateTemplateParams(NotifyTemplateDO template, Map<String, Object> templateParams) {
         template.getParams().forEach(key -> {
             Object value = templateParams.get(key);
             if (value == null) {

+ 1 - 1
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 {
     }
 
     @Test
-    public void testGetTemplate() {
+    public void testGetMailTemplate() {
         // mock 数据
         MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class);
         mailTemplateMapper.insert(dbMailTemplate);

+ 14 - 0
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java

@@ -108,6 +108,20 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest {
        assertPojoEquals(dbNotifyMessage, pageResult.getList().get(0));
     }
 
+    @Test
+    public void testGetNotifyMessage() {
+        // mock 数据
+        NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class,
+                o -> o.setTemplateParams(randomTemplateParams()));
+        notifyMessageMapper.insert(dbNotifyMessage);
+        // 准备参数
+        Long id = dbNotifyMessage.getId();
+
+        // 调用
+        NotifyMessageDO notifyMessage = notifyMessageService.getNotifyMessage(id);
+        assertPojoEquals(dbNotifyMessage, notifyMessage);
+    }
+
     @Test
     public void testGetMyNotifyMessagePage() {
         // mock 数据

+ 60 - 5
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;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
-import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
-import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO;
 import org.assertj.core.util.Lists;
 import org.junit.jupiter.api.Test;
@@ -18,7 +16,8 @@ import java.util.Map;
 import static cn.hutool.core.util.RandomUtil.randomEle;
 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTIFY_SEND_TEMPLATE_PARAM_MISS;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.mockito.ArgumentMatchers.eq;
@@ -34,6 +33,62 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest {
     @Mock
     private NotifyMessageService notifyMessageService;
 
+    @Test
+    public void testSendSingleNotifyToAdmin() {
+        // 准备参数
+        Long userId = randomLongId();
+        String templateCode = randomString();
+        Map<String, Object> templateParams = MapUtil.<String, Object>builder().put("code", "1234")
+                .put("op", "login").build();
+        // mock NotifyTemplateService 的方法
+        NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, o -> {
+            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
+            o.setContent("验证码为{code}, 操作为{op}");
+            o.setParams(Lists.newArrayList("code", "op"));
+        });
+        when(notifyTemplateService.getNotifyTemplateByCodeFromCache(eq(templateCode))).thenReturn(template);
+        String content = randomString();
+        when(notifyTemplateService.formatNotifyTemplateContent(eq(template.getContent()), eq(templateParams)))
+                .thenReturn(content);
+        // mock NotifyMessageService 的方法
+        Long messageId = randomLongId();
+        when(notifyMessageService.createNotifyMessage(eq(userId), eq(UserTypeEnum.ADMIN.getValue()),
+                eq(template), eq(content), eq(templateParams))).thenReturn(messageId);
+
+        // 调用
+        Long resultMessageId = notifySendService.sendSingleNotifyToAdmin(userId, templateCode, templateParams);
+        // 断言
+        assertEquals(messageId, resultMessageId);
+    }
+
+    @Test
+    public void testSendSingleNotifyToMember() {
+        // 准备参数
+        Long userId = randomLongId();
+        String templateCode = randomString();
+        Map<String, Object> templateParams = MapUtil.<String, Object>builder().put("code", "1234")
+                .put("op", "login").build();
+        // mock NotifyTemplateService 的方法
+        NotifyTemplateDO template = randomPojo(NotifyTemplateDO.class, o -> {
+            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
+            o.setContent("验证码为{code}, 操作为{op}");
+            o.setParams(Lists.newArrayList("code", "op"));
+        });
+        when(notifyTemplateService.getNotifyTemplateByCodeFromCache(eq(templateCode))).thenReturn(template);
+        String content = randomString();
+        when(notifyTemplateService.formatNotifyTemplateContent(eq(template.getContent()), eq(templateParams)))
+                .thenReturn(content);
+        // mock NotifyMessageService 的方法
+        Long messageId = randomLongId();
+        when(notifyMessageService.createNotifyMessage(eq(userId), eq(UserTypeEnum.MEMBER.getValue()),
+                eq(template), eq(content), eq(templateParams))).thenReturn(messageId);
+
+        // 调用
+        Long resultMessageId = notifySendService.sendSingleNotifyToMember(userId, templateCode, templateParams);
+        // 断言
+        assertEquals(messageId, resultMessageId);
+    }
+
     /**
      * 发送成功,当短信模板开启时
      */
@@ -100,7 +155,7 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest {
         // mock 方法
 
         // 调用,并断言异常
-        assertServiceException(() -> notifySendService.checkNotifyTemplateValid(templateCode),
+        assertServiceException(() -> notifySendService.validateNotifyTemplate(templateCode),
                 NOTICE_NOT_FOUND);
     }
 
@@ -113,7 +168,7 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest {
         // mock 方法
 
         // 调用,并断言异常
-        assertServiceException(() -> notifySendService.checkTemplateParams(template, templateParams),
+        assertServiceException(() -> notifySendService.validateTemplateParams(template, templateParams),
                 NOTIFY_SEND_TEMPLATE_PARAM_MISS, "code");
     }
 

+ 42 - 0
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;
 import org.springframework.context.annotation.Import;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
 
 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
@@ -143,4 +145,44 @@ public class NotifyTemplateServiceImplTest extends BaseDbUnitTest {
        assertPojoEquals(dbNotifyTemplate, pageResult.getList().get(0));
     }
 
+    @Test
+    public void testGetNotifyTemplate() {
+        // mock 数据
+        NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class);
+        notifyTemplateMapper.insert(dbNotifyTemplate);
+        // 准备参数
+        Long id = dbNotifyTemplate.getId();
+
+        // 调用
+        NotifyTemplateDO notifyTemplate = notifyTemplateService.getNotifyTemplate(id);
+        // 断言
+        assertPojoEquals(dbNotifyTemplate, notifyTemplate);
+    }
+
+    @Test
+    public void testGetNotifyTemplateByCodeFromCache() {
+        // mock 数据
+        NotifyTemplateDO dbNotifyTemplate = randomPojo(NotifyTemplateDO.class);
+        notifyTemplateMapper.insert(dbNotifyTemplate);
+        notifyTemplateService.initLocalCache();
+        // 准备参数
+        String code = dbNotifyTemplate.getCode();
+
+        // 调用
+        NotifyTemplateDO notifyTemplate = notifyTemplateService.getNotifyTemplateByCodeFromCache(code);
+        // 断言
+        assertPojoEquals(dbNotifyTemplate, notifyTemplate);
+    }
+    
+    @Test
+    public void testFormatNotifyTemplateContent() {
+        // 准备参数
+        Map<String, Object> params = new HashMap<>();
+        params.put("name", "小红");
+        params.put("what", "饭");
+
+        // 调用,并断言
+        assertEquals("小红,你好,饭吃了吗?",
+                notifyTemplateService.formatNotifyTemplateContent("{name},你好,{what}吃了吗?", params));
+    }
 }