Browse Source

完成短信日志的单元测试

YunaiV 3 years ago
parent
commit
172c06b638

+ 103 - 8
src/test/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsLogServiceTest.java

@@ -1,11 +1,14 @@
 package cn.iocoder.dashboard.modules.system.service.sms;
 
+import cn.hutool.core.map.MapUtil;
 import cn.iocoder.dashboard.BaseDbUnitTest;
 import cn.iocoder.dashboard.common.enums.UserTypeEnum;
+import cn.iocoder.dashboard.common.pojo.CommonResult;
 import cn.iocoder.dashboard.common.pojo.PageResult;
 import cn.iocoder.dashboard.modules.system.controller.sms.vo.log.SysSmsLogExportReqVO;
 import cn.iocoder.dashboard.modules.system.controller.sms.vo.log.SysSmsLogPageReqVO;
 import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsLogDO;
+import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
 import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsLogMapper;
 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsReceiveStatusEnum;
 import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsSendStatusEnum;
@@ -17,16 +20,17 @@ import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.Import;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.function.Consumer;
 
+import static cn.hutool.core.util.RandomUtil.randomBoolean;
 import static cn.hutool.core.util.RandomUtil.randomEle;
 import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
-import static cn.iocoder.dashboard.util.RandomUtils.randomPojo;
-import static cn.iocoder.dashboard.util.RandomUtils.randomString;
+import static cn.iocoder.dashboard.util.RandomUtils.*;
 import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
 * {@link SysSmsLogServiceImpl} 的单元测试类
@@ -42,7 +46,93 @@ public class SysSmsLogServiceTest extends BaseDbUnitTest {
     @Resource
     private SysSmsLogMapper smsLogMapper;
 
-    @Test // TODO 请修改 null 为需要的值
+    @Test
+    public void testCreateSmsLog() {
+        // 准备参数
+        String mobile = randomString();
+        Long userId = randomLongId();
+        Integer userType = randomEle(UserTypeEnum.values()).getValue();
+        Boolean isSend = randomBoolean();
+        SysSmsTemplateDO templateDO = randomPojo(SysSmsTemplateDO.class,
+                o -> o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()));
+        String templateContent = randomString();
+        Map<String, Object> templateParams = randomTemplateParams();
+        // mock 方法
+
+        // 调用
+        Long logId = smsLogService.createSmsLog(mobile, userId, userType, isSend,
+                templateDO, templateContent, templateParams);
+        // 断言
+        SysSmsLogDO logDO = smsLogMapper.selectById(logId);
+        assertEquals(isSend ? SysSmsSendStatusEnum.INIT.getStatus() : SysSmsSendStatusEnum.IGNORE.getStatus(),
+                logDO.getSendStatus());
+        assertEquals(mobile, logDO.getMobile());
+        assertEquals(userType, logDO.getUserType());
+        assertEquals(userId, logDO.getUserId());
+        assertEquals(templateDO.getId(), logDO.getTemplateId());
+        assertEquals(templateDO.getCode(), logDO.getTemplateCode());
+        assertEquals(templateDO.getType(), logDO.getTemplateType());
+        assertEquals(templateDO.getChannelId(), logDO.getChannelId());
+        assertEquals(templateDO.getChannelCode(), logDO.getChannelCode());
+        assertEquals(templateContent, logDO.getTemplateContent());
+        assertEquals(templateParams, logDO.getTemplateParams());
+        assertEquals(SysSmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus());
+    }
+
+    @Test
+    public void testUpdateSmsSendResult() {
+        // mock 数据
+        SysSmsLogDO dbSmsLog = randomSmsLogDO(
+                o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus()));
+        smsLogMapper.insert(dbSmsLog);
+        // 准备参数
+        Long id = dbSmsLog.getId();
+        Integer sendCode = randomInteger();
+        String sendMsg = randomString();
+        String apiSendCode = randomString();
+        String apiSendMsg = randomString();
+        String apiRequestId = randomString();
+        String apiSerialNo = randomString();
+
+        // 调用
+        smsLogService.updateSmsSendResult(id, sendCode, sendMsg,
+                apiSendCode, apiSendMsg, apiRequestId, apiSerialNo);
+        // 断言
+        dbSmsLog = smsLogMapper.selectById(id);
+        assertEquals(CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS.getStatus()
+                : SysSmsSendStatusEnum.FAILURE.getStatus(), dbSmsLog.getSendStatus());
+        assertNotNull(dbSmsLog.getSendTime());
+        assertEquals(sendMsg, dbSmsLog.getSendMsg());
+        assertEquals(apiSendCode, dbSmsLog.getApiSendCode());
+        assertEquals(apiSendMsg, dbSmsLog.getApiSendMsg());
+        assertEquals(apiRequestId, dbSmsLog.getApiRequestId());
+        assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo());
+    }
+
+    public void testUpdateSmsReceiveResult() {
+        // mock 数据
+        SysSmsLogDO dbSmsLog = randomSmsLogDO(
+                o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()));
+        smsLogMapper.insert(dbSmsLog);
+        // 准备参数
+        Long id = dbSmsLog.getId();
+        Boolean success = randomBoolean();
+        Date receiveTime = randomDate();
+        String apiReceiveCode = randomString();
+        String apiReceiveMsg = randomString();
+
+        // 调用
+        smsLogService.updateSmsReceiveResult(id, success, receiveTime, apiReceiveCode, apiReceiveMsg);
+        // 断言
+        dbSmsLog = smsLogMapper.selectById(id);
+        assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus()
+                : SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus());
+        assertEquals(receiveTime, dbSmsLog.getReceiveTime());
+        assertEquals(apiReceiveCode, dbSmsLog.getApiSendCode());
+        assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg());
+    }
+
+    @Test
     public void testGetSmsLogPage() {
        // mock 数据
        SysSmsLogDO dbSmsLog = randomSmsLogDO(o -> { // 等会查询到
@@ -140,12 +230,17 @@ public class SysSmsLogServiceTest extends BaseDbUnitTest {
     @SafeVarargs
     private static SysSmsLogDO randomSmsLogDO(Consumer<SysSmsLogDO>... consumers) {
         Consumer<SysSmsLogDO> consumer = (o) -> {
-            o.setTemplateParams(new HashMap<>());
-            o.getTemplateParams().put(randomString(), randomString());
-            o.getTemplateParams().put(randomString(), randomString());
+            o.setTemplateParams(randomTemplateParams());
             o.setTemplateType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // 保证 templateType 的范围
             o.setUserType(randomEle(UserTypeEnum.values()).getValue()); // 保证 userType 的范围
+            o.setReceiveStatus(randomEle(SysSmsReceiveStatusEnum.values()).getStatus()); // 保证 receiveStatus 的范围
         };
         return randomPojo(SysSmsLogDO.class, ArrayUtils.append(consumer, consumers));
     }
+
+
+    private static Map<String, Object> randomTemplateParams() {
+        return MapUtil.<String, Object>builder().put(randomString(), randomString())
+                .put(randomString(), randomString()).build();
+    }
 }