mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 18:49:06 +08:00 
			
		
		
		
	完善 notify 单元测试
This commit is contained in:
		| @ -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) { | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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 数据 | ||||
|  | ||||
| @ -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"); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -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)); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV