完善 notify 单元测试
This commit is contained in:
parent
4d42b8834b
commit
bd5706bfa1
@ -13,7 +13,8 @@ import java.util.Map;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 站内信发送 Service 实现类
|
* 站内信发送 Service 实现类
|
||||||
@ -44,13 +45,13 @@ public class NotifySendServiceImpl implements NotifySendService {
|
|||||||
@Override
|
@Override
|
||||||
public Long sendSingleNotify(Long userId, Integer userType, String templateCode, Map<String, Object> templateParams) {
|
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())) {
|
if (Objects.equals(template.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {
|
||||||
log.info("[sendSingleNotify][模版({})已经关闭,无法给用户({}/{})发送]", templateCode, userId, userType);
|
log.info("[sendSingleNotify][模版({})已经关闭,无法给用户({}/{})发送]", templateCode, userId, userType);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 校验参数
|
// 校验参数
|
||||||
checkTemplateParams(template, templateParams);
|
validateTemplateParams(template, templateParams);
|
||||||
|
|
||||||
// 发送站内信
|
// 发送站内信
|
||||||
String content = notifyTemplateService.formatNotifyTemplateContent(template.getContent(), templateParams);
|
String content = notifyTemplateService.formatNotifyTemplateContent(template.getContent(), templateParams);
|
||||||
@ -58,7 +59,7 @@ public class NotifySendServiceImpl implements NotifySendService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public NotifyTemplateDO checkNotifyTemplateValid(String templateCode) {
|
public NotifyTemplateDO validateNotifyTemplate(String templateCode) {
|
||||||
// 获得站内信模板。考虑到效率,从缓存中获取
|
// 获得站内信模板。考虑到效率,从缓存中获取
|
||||||
NotifyTemplateDO template = notifyTemplateService.getNotifyTemplateByCodeFromCache(templateCode);
|
NotifyTemplateDO template = notifyTemplateService.getNotifyTemplateByCodeFromCache(templateCode);
|
||||||
// 站内信模板不存在
|
// 站内信模板不存在
|
||||||
@ -75,7 +76,7 @@ public class NotifySendServiceImpl implements NotifySendService {
|
|||||||
* @param templateParams 参数列表
|
* @param templateParams 参数列表
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public void checkTemplateParams(NotifyTemplateDO template, Map<String, Object> templateParams) {
|
public void validateTemplateParams(NotifyTemplateDO template, Map<String, Object> templateParams) {
|
||||||
template.getParams().forEach(key -> {
|
template.getParams().forEach(key -> {
|
||||||
Object value = templateParams.get(key);
|
Object value = templateParams.get(key);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
|
@ -181,7 +181,7 @@ public class MailTemplateServiceImplTest extends BaseDbUnitTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetTemplate() {
|
public void testGetMailTemplate() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class);
|
MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class);
|
||||||
mailTemplateMapper.insert(dbMailTemplate);
|
mailTemplateMapper.insert(dbMailTemplate);
|
||||||
|
@ -108,6 +108,20 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest {
|
|||||||
assertPojoEquals(dbNotifyMessage, pageResult.getList().get(0));
|
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
|
@Test
|
||||||
public void testGetMyNotifyMessagePage() {
|
public void testGetMyNotifyMessagePage() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
|
@ -33,6 +33,62 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private NotifyMessageService notifyMessageService;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送成功,当短信模板开启时
|
* 发送成功,当短信模板开启时
|
||||||
*/
|
*/
|
||||||
@ -99,7 +155,7 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest {
|
|||||||
// mock 方法
|
// mock 方法
|
||||||
|
|
||||||
// 调用,并断言异常
|
// 调用,并断言异常
|
||||||
assertServiceException(() -> notifySendService.checkNotifyTemplateValid(templateCode),
|
assertServiceException(() -> notifySendService.validateNotifyTemplate(templateCode),
|
||||||
NOTICE_NOT_FOUND);
|
NOTICE_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +168,7 @@ class NotifySendServiceImplTest extends BaseMockitoUnitTest {
|
|||||||
// mock 方法
|
// mock 方法
|
||||||
|
|
||||||
// 调用,并断言异常
|
// 调用,并断言异常
|
||||||
assertServiceException(() -> notifySendService.checkTemplateParams(template, templateParams),
|
assertServiceException(() -> notifySendService.validateTemplateParams(template, templateParams),
|
||||||
NOTIFY_SEND_TEMPLATE_PARAM_MISS, "code");
|
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 org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
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.buildBetweenTime;
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
|
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));
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user