mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-01 02:38:43 +08:00 
			
		
		
		
	完善 SmsSendServiceImpl 单元测试
This commit is contained in:
		| @@ -1,10 +1,6 @@ | ||||
| package cn.iocoder.yudao.module.system.service.sms; | ||||
|  | ||||
| import cn.hutool.core.map.MapUtil; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; | ||||
| import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; | ||||
| import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; | ||||
| import cn.iocoder.yudao.framework.common.core.KeyValue; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | ||||
| @@ -14,6 +10,13 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult; | ||||
| import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO; | ||||
| import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO; | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; | ||||
| import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; | ||||
| import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; | ||||
| import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; | ||||
| import cn.iocoder.yudao.module.system.service.member.MemberService; | ||||
| import cn.iocoder.yudao.module.system.service.user.AdminUserService; | ||||
| import org.assertj.core.util.Lists; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.mockito.InjectMocks; | ||||
| @@ -36,6 +39,10 @@ public class SmsSendServiceTest extends BaseMockitoUnitTest { | ||||
|     @InjectMocks | ||||
|     private SmsSendServiceImpl smsService; | ||||
|  | ||||
|     @Mock | ||||
|     private AdminUserService adminUserService; | ||||
|     @Mock | ||||
|     private MemberService memberService; | ||||
|     @Mock | ||||
|     private SmsChannelService smsChannelService; | ||||
|     @Mock | ||||
| @@ -48,6 +55,84 @@ public class SmsSendServiceTest extends BaseMockitoUnitTest { | ||||
|     @Mock | ||||
|     private SmsClientFactory smsClientFactory; | ||||
|  | ||||
|     @Test | ||||
|     public void testSendSingleSmsToAdmin() { | ||||
|         // 准备参数 | ||||
|         Long userId = randomLongId(); | ||||
|         String templateCode = randomString(); | ||||
|         Map<String, Object> templateParams = MapUtil.<String, Object>builder().put("code", "1234") | ||||
|                 .put("op", "login").build(); | ||||
|         // mock adminUserService 的方法 | ||||
|         AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setMobile("15601691300")); | ||||
|         when(adminUserService.getUser(eq(userId))).thenReturn(user); | ||||
|  | ||||
|         // mock SmsTemplateService 的方法 | ||||
|         SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> { | ||||
|             o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|             o.setContent("验证码为{code}, 操作为{op}"); | ||||
|             o.setParams(Lists.newArrayList("code", "op")); | ||||
|         }); | ||||
|         when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); | ||||
|         String content = randomString(); | ||||
|         when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) | ||||
|                 .thenReturn(content); | ||||
|         // mock SmsChannelService 的方法 | ||||
|         SmsChannelDO smsChannel = randomPojo(SmsChannelDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(smsChannelService.getSmsChannel(eq(template.getChannelId()))).thenReturn(smsChannel); | ||||
|         // mock SmsLogService 的方法 | ||||
|         Long smsLogId = randomLongId(); | ||||
|         when(smsLogService.createSmsLog(eq(user.getMobile()), eq(userId), eq(UserTypeEnum.ADMIN.getValue()), eq(Boolean.TRUE), eq(template), | ||||
|                 eq(content), eq(templateParams))).thenReturn(smsLogId); | ||||
|  | ||||
|         // 调用 | ||||
|         Long resultSmsLogId = smsService.sendSingleSmsToAdmin(null, userId, templateCode, templateParams); | ||||
|         // 断言 | ||||
|         assertEquals(smsLogId, resultSmsLogId); | ||||
|         // 断言调用 | ||||
|         verify(smsProducer).sendSmsSendMessage(eq(smsLogId), eq(user.getMobile()), | ||||
|                 eq(template.getChannelId()), eq(template.getApiTemplateId()), | ||||
|                 eq(Lists.newArrayList(new KeyValue<>("code", "1234"), new KeyValue<>("op", "login")))); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testSendSingleSmsToUser() { | ||||
|         // 准备参数 | ||||
|         Long userId = randomLongId(); | ||||
|         String templateCode = randomString(); | ||||
|         Map<String, Object> templateParams = MapUtil.<String, Object>builder().put("code", "1234") | ||||
|                 .put("op", "login").build(); | ||||
|         // mock adminUserService 的方法 | ||||
|         String mobile = "15601691300"; | ||||
|         when(memberService.getMemberUserMobile(eq(userId))).thenReturn(mobile); | ||||
|  | ||||
|         // mock SmsTemplateService 的方法 | ||||
|         SmsTemplateDO template = randomPojo(SmsTemplateDO.class, o -> { | ||||
|             o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|             o.setContent("验证码为{code}, 操作为{op}"); | ||||
|             o.setParams(Lists.newArrayList("code", "op")); | ||||
|         }); | ||||
|         when(smsTemplateService.getSmsTemplateByCodeFromCache(eq(templateCode))).thenReturn(template); | ||||
|         String content = randomString(); | ||||
|         when(smsTemplateService.formatSmsTemplateContent(eq(template.getContent()), eq(templateParams))) | ||||
|                 .thenReturn(content); | ||||
|         // mock SmsChannelService 的方法 | ||||
|         SmsChannelDO smsChannel = randomPojo(SmsChannelDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); | ||||
|         when(smsChannelService.getSmsChannel(eq(template.getChannelId()))).thenReturn(smsChannel); | ||||
|         // mock SmsLogService 的方法 | ||||
|         Long smsLogId = randomLongId(); | ||||
|         when(smsLogService.createSmsLog(eq(mobile), eq(userId), eq(UserTypeEnum.MEMBER.getValue()), eq(Boolean.TRUE), eq(template), | ||||
|                 eq(content), eq(templateParams))).thenReturn(smsLogId); | ||||
|  | ||||
|         // 调用 | ||||
|         Long resultSmsLogId = smsService.sendSingleSmsToMember(null, userId, templateCode, templateParams); | ||||
|         // 断言 | ||||
|         assertEquals(smsLogId, resultSmsLogId); | ||||
|         // 断言调用 | ||||
|         verify(smsProducer).sendSmsSendMessage(eq(smsLogId), eq(mobile), | ||||
|                 eq(template.getChannelId()), eq(template.getApiTemplateId()), | ||||
|                 eq(Lists.newArrayList(new KeyValue<>("code", "1234"), new KeyValue<>("op", "login")))); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 发送成功,当短信模板开启时 | ||||
|      */ | ||||
| @@ -83,7 +168,7 @@ public class SmsSendServiceTest extends BaseMockitoUnitTest { | ||||
|         // 断言 | ||||
|         assertEquals(smsLogId, resultSmsLogId); | ||||
|         // 断言调用 | ||||
|         verify(smsProducer, times(1)).sendSmsSendMessage(eq(smsLogId), eq(mobile), | ||||
|         verify(smsProducer).sendSmsSendMessage(eq(smsLogId), eq(mobile), | ||||
|                 eq(template.getChannelId()), eq(template.getApiTemplateId()), | ||||
|                 eq(Lists.newArrayList(new KeyValue<>("code", "1234"), new KeyValue<>("op", "login")))); | ||||
|     } | ||||
| @@ -134,7 +219,7 @@ public class SmsSendServiceTest extends BaseMockitoUnitTest { | ||||
|         // mock 方法 | ||||
|  | ||||
|         // 调用,并断言异常 | ||||
|         assertServiceException(() -> smsService.checkSmsTemplateValid(templateCode), | ||||
|         assertServiceException(() -> smsService.validateSmsTemplate(templateCode), | ||||
|                 SMS_SEND_TEMPLATE_NOT_EXISTS); | ||||
|     } | ||||
|  | ||||
| @@ -157,7 +242,7 @@ public class SmsSendServiceTest extends BaseMockitoUnitTest { | ||||
|         // mock 方法 | ||||
|  | ||||
|         // 调用,并断言异常 | ||||
|         assertServiceException(() -> smsService.checkMobile(null), | ||||
|         assertServiceException(() -> smsService.validateMobile(null), | ||||
|                 SMS_SEND_MOBILE_NOT_EXISTS); | ||||
|     } | ||||
|  | ||||
| @@ -177,7 +262,7 @@ public class SmsSendServiceTest extends BaseMockitoUnitTest { | ||||
|         // 调用 | ||||
|         smsService.doSendSms(message); | ||||
|         // 断言 | ||||
|         verify(smsLogService, times(1)).updateSmsSendResult(eq(message.getLogId()), | ||||
|         verify(smsLogService).updateSmsSendResult(eq(message.getLogId()), | ||||
|                 eq(sendResult.getCode()), eq(sendResult.getMsg()), eq(sendResult.getApiCode()), | ||||
|                 eq(sendResult.getApiMsg()), eq(sendResult.getApiRequestId()), eq(sendResult.getData().getSerialNo())); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV