mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 20:28:44 +08:00 
			
		
		
		
	增加 sms 的缓存的单元测试
This commit is contained in:
		@@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.permission;
 | 
				
			|||||||
import cn.hutool.core.bean.BeanUtil;
 | 
					import cn.hutool.core.bean.BeanUtil;
 | 
				
			||||||
import cn.hutool.core.lang.Assert;
 | 
					import cn.hutool.core.lang.Assert;
 | 
				
			||||||
import cn.iocoder.dashboard.BaseDbUnitTest;
 | 
					import cn.iocoder.dashboard.BaseDbUnitTest;
 | 
				
			||||||
 | 
					import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuCreateReqVO;
 | 
					import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuCreateReqVO;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuListReqVO;
 | 
					import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuListReqVO;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuUpdateReqVO;
 | 
					import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuUpdateReqVO;
 | 
				
			||||||
@@ -52,18 +53,20 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        SysMenuDO menuDO2 = createMenuDO(MenuTypeEnum.MENU, "xxxx", 0L);
 | 
					        SysMenuDO menuDO2 = createMenuDO(MenuTypeEnum.MENU, "xxxx", 0L);
 | 
				
			||||||
        menuMapper.insert(menuDO2);
 | 
					        menuMapper.insert(menuDO2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //调用
 | 
					        // 调用
 | 
				
			||||||
        sysMenuService.initLocalCache();
 | 
					        sysMenuService.initLocalCache();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 获取代理对象
 | 
					        // 获取代理对象
 | 
				
			||||||
        SysMenuServiceImpl target = (SysMenuServiceImpl) AopTargetUtils.getTarget(sysMenuService);
 | 
					        SysMenuServiceImpl target = (SysMenuServiceImpl) AopTargetUtils.getTarget(sysMenuService);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Map<Long, SysMenuDO> menuCache = (Map<Long, SysMenuDO>) BeanUtil.getFieldValue(target, "menuCache");
 | 
					        Map<Long, SysMenuDO> menuCache =
 | 
				
			||||||
 | 
					                (Map<Long, SysMenuDO>) BeanUtil.getFieldValue(target, "menuCache");
 | 
				
			||||||
        Assert.isTrue(menuCache.size() == 2);
 | 
					        Assert.isTrue(menuCache.size() == 2);
 | 
				
			||||||
        assertPojoEquals(menuDO1, menuCache.get(menuDO1.getId()));
 | 
					        assertPojoEquals(menuDO1, menuCache.get(menuDO1.getId()));
 | 
				
			||||||
        assertPojoEquals(menuDO2, menuCache.get(menuDO2.getId()));
 | 
					        assertPojoEquals(menuDO2, menuCache.get(menuDO2.getId()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Multimap<String, SysMenuDO> permissionMenuCache = (Multimap<String, SysMenuDO>) BeanUtil.getFieldValue(target, "permissionMenuCache");
 | 
					        Multimap<String, SysMenuDO> permissionMenuCache =
 | 
				
			||||||
 | 
					                (Multimap<String, SysMenuDO>) BeanUtil.getFieldValue(target, "permissionMenuCache");
 | 
				
			||||||
        Assert.isTrue(permissionMenuCache.size() == 2);
 | 
					        Assert.isTrue(permissionMenuCache.size() == 2);
 | 
				
			||||||
        assertPojoEquals(menuDO1, permissionMenuCache.get(menuDO1.getPermission()));
 | 
					        assertPojoEquals(menuDO1, permissionMenuCache.get(menuDO1.getPermission()));
 | 
				
			||||||
        assertPojoEquals(menuDO2, permissionMenuCache.get(menuDO2.getPermission()));
 | 
					        assertPojoEquals(menuDO2, permissionMenuCache.get(menuDO2.getPermission()));
 | 
				
			||||||
@@ -184,10 +187,9 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        //断言
 | 
					        //断言
 | 
				
			||||||
        Assert.isTrue(menuDOS.size() == idMenuMap.size());
 | 
					        Assert.isTrue(menuDOS.size() == idMenuMap.size());
 | 
				
			||||||
        menuDOS.stream().forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
 | 
					        menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testGetMenusReqVo_success() {
 | 
					    public void testGetMenusReqVo_success() {
 | 
				
			||||||
        Map<Long, SysMenuDO> idMenuMap = new HashMap<>();
 | 
					        Map<Long, SysMenuDO> idMenuMap = new HashMap<>();
 | 
				
			||||||
@@ -218,7 +220,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        //断言
 | 
					        //断言
 | 
				
			||||||
        Assert.isTrue(menuDOS.size() == idMenuMap.size());
 | 
					        Assert.isTrue(menuDOS.size() == idMenuMap.size());
 | 
				
			||||||
        menuDOS.stream().forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
 | 
					        menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -244,12 +246,12 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        menuDO = createMenuDO(4L, MenuTypeEnum.MENU, "name", 0L, 2);
 | 
					        menuDO = createMenuDO(4L, MenuTypeEnum.MENU, "name", 0L, 2);
 | 
				
			||||||
        mockCacheMap.put(menuDO.getId(), menuDO);
 | 
					        mockCacheMap.put(menuDO.getId(), menuDO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<SysMenuDO> menuDOS = sysMenuService.listMenusFromCache(Arrays.asList(MenuTypeEnum.MENU.getType()), Arrays.asList(1));
 | 
					        List<SysMenuDO> menuDOS = sysMenuService.listMenusFromCache(Collections.singletonList(MenuTypeEnum.MENU.getType()),
 | 
				
			||||||
 | 
					                Collections.singletonList(CommonStatusEnum.DISABLE.getStatus()));
 | 
				
			||||||
        Assert.isTrue(menuDOS.size() == idMenuMap.size());
 | 
					        Assert.isTrue(menuDOS.size() == idMenuMap.size());
 | 
				
			||||||
        menuDOS.stream().forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
 | 
					        menuDOS.forEach(m -> assertPojoEquals(idMenuMap.get(m.getId()), m));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testListMenusFromCache2_success() throws Exception {
 | 
					    public void testListMenusFromCache2_success() throws Exception {
 | 
				
			||||||
        Map<Long, SysMenuDO> mockCacheMap = new HashMap<>();
 | 
					        Map<Long, SysMenuDO> mockCacheMap = new HashMap<>();
 | 
				
			||||||
@@ -306,14 +308,14 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testCheckResource_success(){
 | 
					    public void testCheckResource_success() {
 | 
				
			||||||
        SysMenuDO sonMenu=initParentAndSonMenuDO();
 | 
					        SysMenuDO sonMenu = initParentAndSonMenuDO();
 | 
				
			||||||
        Long parentId=sonMenu.getParentId();
 | 
					        Long parentId = sonMenu.getParentId();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Long otherSonMenuId=randomLongId();
 | 
					        Long otherSonMenuId = randomLongId();
 | 
				
			||||||
        String otherSonMenuName=randomString();
 | 
					        String otherSonMenuName = randomString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        sysMenuService.checkResource(parentId,otherSonMenuName,otherSonMenuId);
 | 
					        sysMenuService.checkResource(parentId, otherSonMenuName, otherSonMenuId);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -324,7 +326,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        Long otherSonMenuId=randomLongId();
 | 
					        Long otherSonMenuId=randomLongId();
 | 
				
			||||||
        String otherSonMenuName=sonMenu.getName(); //相同名称
 | 
					        String otherSonMenuName=sonMenu.getName(); //相同名称
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertServiceException(()->sysMenuService.checkResource(parentId,otherSonMenuName,otherSonMenuId), MENU_NAME_DUPLICATE);
 | 
					        assertServiceException(() -> sysMenuService.checkResource(parentId, otherSonMenuName, otherSonMenuId), MENU_NAME_DUPLICATE);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -361,5 +363,4 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
package cn.iocoder.dashboard.modules.system.service.sms;
 | 
					package cn.iocoder.dashboard.modules.system.service.sms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import cn.hutool.core.bean.BeanUtil;
 | 
				
			||||||
import cn.iocoder.dashboard.BaseDbUnitTest;
 | 
					import cn.iocoder.dashboard.BaseDbUnitTest;
 | 
				
			||||||
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
 | 
					import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
 | 
				
			||||||
import cn.iocoder.dashboard.common.pojo.PageResult;
 | 
					import cn.iocoder.dashboard.common.pojo.PageResult;
 | 
				
			||||||
@@ -9,6 +10,7 @@ import cn.iocoder.dashboard.modules.system.controller.sms.vo.channel.SysSmsChann
 | 
				
			|||||||
import cn.iocoder.dashboard.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO;
 | 
					import cn.iocoder.dashboard.modules.system.controller.sms.vo.channel.SysSmsChannelUpdateReqVO;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO;
 | 
					import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsChannelMapper;
 | 
					import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsChannelMapper;
 | 
				
			||||||
 | 
					import cn.iocoder.dashboard.modules.system.mq.producer.sms.SysSmsProducer;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.service.sms.impl.SysSmsChannelServiceImpl;
 | 
					import cn.iocoder.dashboard.modules.system.service.sms.impl.SysSmsChannelServiceImpl;
 | 
				
			||||||
import cn.iocoder.dashboard.util.collection.ArrayUtils;
 | 
					import cn.iocoder.dashboard.util.collection.ArrayUtils;
 | 
				
			||||||
import cn.iocoder.dashboard.util.object.ObjectUtils;
 | 
					import cn.iocoder.dashboard.util.object.ObjectUtils;
 | 
				
			||||||
@@ -17,18 +19,19 @@ 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.Date;
 | 
				
			||||||
import java.util.function.Consumer;
 | 
					import java.util.function.Consumer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static cn.hutool.core.util.RandomUtil.randomEle;
 | 
					import static cn.hutool.core.util.RandomUtil.randomEle;
 | 
				
			||||||
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN;
 | 
					import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN;
 | 
				
			||||||
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS;
 | 
					import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS;
 | 
				
			||||||
import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
 | 
					import static cn.iocoder.dashboard.util.AssertUtils.*;
 | 
				
			||||||
import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException;
 | 
					 | 
				
			||||||
import static cn.iocoder.dashboard.util.RandomUtils.*;
 | 
					import static cn.iocoder.dashboard.util.RandomUtils.*;
 | 
				
			||||||
import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
 | 
					import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
 | 
				
			||||||
 | 
					import static cn.iocoder.dashboard.util.object.ObjectUtils.max;
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.*;
 | 
					import static org.junit.jupiter.api.Assertions.*;
 | 
				
			||||||
import static org.mockito.ArgumentMatchers.eq;
 | 
					import static org.mockito.ArgumentMatchers.eq;
 | 
				
			||||||
import static org.mockito.Mockito.when;
 | 
					import static org.mockito.Mockito.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
* {@link SysSmsChannelServiceImpl} 的单元测试类
 | 
					* {@link SysSmsChannelServiceImpl} 的单元测试类
 | 
				
			||||||
@@ -41,14 +44,35 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
    @Resource
 | 
					    @Resource
 | 
				
			||||||
    private SysSmsChannelServiceImpl smsChannelService;
 | 
					    private SysSmsChannelServiceImpl smsChannelService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @MockBean
 | 
					 | 
				
			||||||
    private SmsClientFactory smsClientFactory;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Resource
 | 
					    @Resource
 | 
				
			||||||
    private SysSmsChannelMapper smsChannelMapper;
 | 
					    private SysSmsChannelMapper smsChannelMapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @MockBean
 | 
				
			||||||
 | 
					    private SmsClientFactory smsClientFactory;
 | 
				
			||||||
    @MockBean
 | 
					    @MockBean
 | 
				
			||||||
    private SysSmsTemplateService smsTemplateService;
 | 
					    private SysSmsTemplateService smsTemplateService;
 | 
				
			||||||
 | 
					    @MockBean
 | 
				
			||||||
 | 
					    private SysSmsProducer smsProducer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void testInitLocalCache_success() {
 | 
				
			||||||
 | 
					        // mock 数据s
 | 
				
			||||||
 | 
					        SysSmsChannelDO smsChannelDO01 = randomSmsChannelDO();
 | 
				
			||||||
 | 
					        smsChannelMapper.insert(smsChannelDO01);
 | 
				
			||||||
 | 
					        SysSmsChannelDO smsChannelDO02 = randomSmsChannelDO();
 | 
				
			||||||
 | 
					        smsChannelMapper.insert(smsChannelDO02);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 调用
 | 
				
			||||||
 | 
					        smsChannelService.initSmsClients();
 | 
				
			||||||
 | 
					        // 校验 maxUpdateTime 属性
 | 
				
			||||||
 | 
					        Date maxUpdateTime = (Date) BeanUtil.getFieldValue(smsChannelService, "maxUpdateTime");
 | 
				
			||||||
 | 
					        assertEquals(max(smsChannelDO01.getUpdateTime(), smsChannelDO02.getUpdateTime()), maxUpdateTime);
 | 
				
			||||||
 | 
					        // 校验调用
 | 
				
			||||||
 | 
					        verify(smsClientFactory, times(1)).createOrUpdateSmsClient(
 | 
				
			||||||
 | 
					                argThat(properties -> isPojoEquals(smsChannelDO01, properties)));
 | 
				
			||||||
 | 
					        verify(smsClientFactory, times(1)).createOrUpdateSmsClient(
 | 
				
			||||||
 | 
					                argThat(properties -> isPojoEquals(smsChannelDO02, properties)));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testCreateSmsChannel_success() {
 | 
					    public void testCreateSmsChannel_success() {
 | 
				
			||||||
@@ -62,6 +86,8 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        // 校验记录的属性是否正确
 | 
					        // 校验记录的属性是否正确
 | 
				
			||||||
        SysSmsChannelDO smsChannel = smsChannelMapper.selectById(smsChannelId);
 | 
					        SysSmsChannelDO smsChannel = smsChannelMapper.selectById(smsChannelId);
 | 
				
			||||||
        assertPojoEquals(reqVO, smsChannel);
 | 
					        assertPojoEquals(reqVO, smsChannel);
 | 
				
			||||||
 | 
					        // 校验调用
 | 
				
			||||||
 | 
					        verify(smsProducer, times(1)).sendSmsChannelRefreshMessage();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -81,6 +107,8 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        // 校验是否更新正确
 | 
					        // 校验是否更新正确
 | 
				
			||||||
        SysSmsChannelDO smsChannel = smsChannelMapper.selectById(reqVO.getId()); // 获取最新的
 | 
					        SysSmsChannelDO smsChannel = smsChannelMapper.selectById(reqVO.getId()); // 获取最新的
 | 
				
			||||||
        assertPojoEquals(reqVO, smsChannel);
 | 
					        assertPojoEquals(reqVO, smsChannel);
 | 
				
			||||||
 | 
					        // 校验调用
 | 
				
			||||||
 | 
					        verify(smsProducer, times(1)).sendSmsChannelRefreshMessage();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -104,6 +132,8 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        smsChannelService.deleteSmsChannel(id);
 | 
					        smsChannelService.deleteSmsChannel(id);
 | 
				
			||||||
       // 校验数据不存在了
 | 
					       // 校验数据不存在了
 | 
				
			||||||
       assertNull(smsChannelMapper.selectById(id));
 | 
					       assertNull(smsChannelMapper.selectById(id));
 | 
				
			||||||
 | 
					        // 校验调用
 | 
				
			||||||
 | 
					        verify(smsProducer, times(1)).sendSmsChannelRefreshMessage();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,6 +109,7 @@ public class SysSmsLogServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo());
 | 
					        assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
    public void testUpdateSmsReceiveResult() {
 | 
					    public void testUpdateSmsReceiveResult() {
 | 
				
			||||||
        // mock 数据
 | 
					        // mock 数据
 | 
				
			||||||
        SysSmsLogDO dbSmsLog = randomSmsLogDO(
 | 
					        SysSmsLogDO dbSmsLog = randomSmsLogDO(
 | 
				
			||||||
@@ -128,7 +129,7 @@ public class SysSmsLogServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus()
 | 
					        assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus()
 | 
				
			||||||
                : SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus());
 | 
					                : SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus());
 | 
				
			||||||
        assertEquals(receiveTime, dbSmsLog.getReceiveTime());
 | 
					        assertEquals(receiveTime, dbSmsLog.getReceiveTime());
 | 
				
			||||||
        assertEquals(apiReceiveCode, dbSmsLog.getApiSendCode());
 | 
					        assertEquals(apiReceiveCode, dbSmsLog.getApiReceiveCode());
 | 
				
			||||||
        assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg());
 | 
					        assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -233,6 +234,7 @@ public class SysSmsLogServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
            o.setTemplateParams(randomTemplateParams());
 | 
					            o.setTemplateParams(randomTemplateParams());
 | 
				
			||||||
            o.setTemplateType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // 保证 templateType 的范围
 | 
					            o.setTemplateType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // 保证 templateType 的范围
 | 
				
			||||||
            o.setUserType(randomEle(UserTypeEnum.values()).getValue()); // 保证 userType 的范围
 | 
					            o.setUserType(randomEle(UserTypeEnum.values()).getValue()); // 保证 userType 的范围
 | 
				
			||||||
 | 
					            o.setSendStatus(randomEle(SysSmsSendStatusEnum.values()).getStatus()); // 保证 sendStatus 的范围
 | 
				
			||||||
            o.setReceiveStatus(randomEle(SysSmsReceiveStatusEnum.values()).getStatus()); // 保证 receiveStatus 的范围
 | 
					            o.setReceiveStatus(randomEle(SysSmsReceiveStatusEnum.values()).getStatus()); // 保证 receiveStatus 的范围
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        return randomPojo(SysSmsLogDO.class, ArrayUtils.append(consumer, consumers));
 | 
					        return randomPojo(SysSmsLogDO.class, ArrayUtils.append(consumer, consumers));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO;
 | 
				
			|||||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
 | 
					import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsTemplateMapper;
 | 
					import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsTemplateMapper;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsTemplateTypeEnum;
 | 
					import cn.iocoder.dashboard.modules.system.enums.sms.SysSmsTemplateTypeEnum;
 | 
				
			||||||
 | 
					import cn.iocoder.dashboard.modules.system.mq.producer.sms.SysSmsProducer;
 | 
				
			||||||
import cn.iocoder.dashboard.modules.system.service.sms.impl.SysSmsTemplateServiceImpl;
 | 
					import cn.iocoder.dashboard.modules.system.service.sms.impl.SysSmsTemplateServiceImpl;
 | 
				
			||||||
import cn.iocoder.dashboard.util.collection.ArrayUtils;
 | 
					import cn.iocoder.dashboard.util.collection.ArrayUtils;
 | 
				
			||||||
import cn.iocoder.dashboard.util.object.ObjectUtils;
 | 
					import cn.iocoder.dashboard.util.object.ObjectUtils;
 | 
				
			||||||
@@ -25,18 +26,22 @@ 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.Date;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.function.Consumer;
 | 
					import java.util.function.Consumer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static cn.hutool.core.bean.BeanUtil.getFieldValue;
 | 
				
			||||||
import static cn.hutool.core.util.RandomUtil.randomEle;
 | 
					import static cn.hutool.core.util.RandomUtil.randomEle;
 | 
				
			||||||
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*;
 | 
					import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*;
 | 
				
			||||||
import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
 | 
					import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
 | 
				
			||||||
import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException;
 | 
					import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException;
 | 
				
			||||||
import static cn.iocoder.dashboard.util.RandomUtils.*;
 | 
					import static cn.iocoder.dashboard.util.RandomUtils.*;
 | 
				
			||||||
import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
 | 
					import static cn.iocoder.dashboard.util.date.DateUtils.buildTime;
 | 
				
			||||||
 | 
					import static cn.iocoder.dashboard.util.object.ObjectUtils.max;
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.*;
 | 
					import static org.junit.jupiter.api.Assertions.*;
 | 
				
			||||||
import static org.mockito.ArgumentMatchers.eq;
 | 
					import static org.mockito.ArgumentMatchers.eq;
 | 
				
			||||||
import static org.mockito.Mockito.when;
 | 
					import static org.mockito.Mockito.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
* {@link SysSmsTemplateServiceImpl} 的单元测试类
 | 
					* {@link SysSmsTemplateServiceImpl} 的单元测试类
 | 
				
			||||||
@@ -54,11 +59,33 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @MockBean
 | 
					    @MockBean
 | 
				
			||||||
    private SysSmsChannelService smsChannelService;
 | 
					    private SysSmsChannelService smsChannelService;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @MockBean
 | 
					    @MockBean
 | 
				
			||||||
    private SmsClientFactory smsClientFactory;
 | 
					    private SmsClientFactory smsClientFactory;
 | 
				
			||||||
    @MockBean
 | 
					    @MockBean
 | 
				
			||||||
    private SmsClient smsClient;
 | 
					    private SmsClient smsClient;
 | 
				
			||||||
 | 
					    @MockBean
 | 
				
			||||||
 | 
					    private SysSmsProducer smsProducer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    @SuppressWarnings("unchecked")
 | 
				
			||||||
 | 
					    void testInitLocalCache() {
 | 
				
			||||||
 | 
					        // mock 数据
 | 
				
			||||||
 | 
					        SysSmsTemplateDO smsTemplate01 = randomSmsTemplateDO();
 | 
				
			||||||
 | 
					        smsTemplateMapper.insert(smsTemplate01);
 | 
				
			||||||
 | 
					        SysSmsTemplateDO smsTemplate02 = randomSmsTemplateDO();
 | 
				
			||||||
 | 
					        smsTemplateMapper.insert(smsTemplate02);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 调用
 | 
				
			||||||
 | 
					        smsTemplateService.initLocalCache();
 | 
				
			||||||
 | 
					        // 断言 deptCache 缓存
 | 
				
			||||||
 | 
					        Map<String, SysSmsTemplateDO> smsTemplateCache = (Map<String, SysSmsTemplateDO>) getFieldValue(smsTemplateService, "smsTemplateCache");
 | 
				
			||||||
 | 
					        assertEquals(2, smsTemplateCache.size());
 | 
				
			||||||
 | 
					        assertPojoEquals(smsTemplate01, smsTemplateCache.get(smsTemplate01.getCode()));
 | 
				
			||||||
 | 
					        assertPojoEquals(smsTemplate02, smsTemplateCache.get(smsTemplate02.getCode()));
 | 
				
			||||||
 | 
					        // 断言 maxUpdateTime 缓存
 | 
				
			||||||
 | 
					        Date maxUpdateTime = (Date) getFieldValue(smsTemplateService, "maxUpdateTime");
 | 
				
			||||||
 | 
					        assertEquals(max(smsTemplate01.getUpdateTime(), smsTemplate02.getUpdateTime()), maxUpdateTime);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testParseTemplateContentParams() {
 | 
					    public void testParseTemplateContentParams() {
 | 
				
			||||||
@@ -101,6 +128,8 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        assertPojoEquals(reqVO, smsTemplate);
 | 
					        assertPojoEquals(reqVO, smsTemplate);
 | 
				
			||||||
        assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
 | 
					        assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
 | 
				
			||||||
        assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
 | 
					        assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
 | 
				
			||||||
 | 
					        // 校验调用
 | 
				
			||||||
 | 
					        verify(smsProducer, times(1)).sendSmsTemplateRefreshMessage();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -134,6 +163,8 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        assertPojoEquals(reqVO, smsTemplate);
 | 
					        assertPojoEquals(reqVO, smsTemplate);
 | 
				
			||||||
        assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
 | 
					        assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
 | 
				
			||||||
        assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
 | 
					        assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
 | 
				
			||||||
 | 
					        // 校验调用
 | 
				
			||||||
 | 
					        verify(smsProducer, times(1)).sendSmsTemplateRefreshMessage();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -157,6 +188,8 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
        smsTemplateService.deleteSmsTemplate(id);
 | 
					        smsTemplateService.deleteSmsTemplate(id);
 | 
				
			||||||
       // 校验数据不存在了
 | 
					       // 校验数据不存在了
 | 
				
			||||||
       assertNull(smsTemplateMapper.selectById(id));
 | 
					       assertNull(smsTemplateMapper.selectById(id));
 | 
				
			||||||
 | 
					        // 校验调用
 | 
				
			||||||
 | 
					        verify(smsProducer, times(1)).sendSmsTemplateRefreshMessage();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -309,7 +342,7 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testCheckDictDataValueUnique_valueDuplicateForCreate() {
 | 
					    public void testCheckSmsTemplateCodeDuplicate_valueDuplicateForCreate() {
 | 
				
			||||||
        // 准备参数
 | 
					        // 准备参数
 | 
				
			||||||
        String code = randomString();
 | 
					        String code = randomString();
 | 
				
			||||||
        // mock 数据
 | 
					        // mock 数据
 | 
				
			||||||
@@ -317,7 +350,7 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // 调用,校验异常
 | 
					        // 调用,校验异常
 | 
				
			||||||
        assertServiceException(() -> smsTemplateService.checkSmsTemplateCodeDuplicate(null, code),
 | 
					        assertServiceException(() -> smsTemplateService.checkSmsTemplateCodeDuplicate(null, code),
 | 
				
			||||||
                SMS_TEMPLATE_CODE_DUPLICATE);
 | 
					                SMS_TEMPLATE_CODE_DUPLICATE, code);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@@ -330,7 +363,7 @@ public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // 调用,校验异常
 | 
					        // 调用,校验异常
 | 
				
			||||||
        assertServiceException(() -> smsTemplateService.checkSmsTemplateCodeDuplicate(id, code),
 | 
					        assertServiceException(() -> smsTemplateService.checkSmsTemplateCodeDuplicate(id, code),
 | 
				
			||||||
                SMS_TEMPLATE_CODE_DUPLICATE);
 | 
					                SMS_TEMPLATE_CODE_DUPLICATE, code);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // ========== 随机对象 ==========
 | 
					    // ========== 随机对象 ==========
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@ import org.junit.jupiter.api.function.Executable;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.lang.reflect.Field;
 | 
					import java.lang.reflect.Field;
 | 
				
			||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
 | 
					import java.util.Objects;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
 | 
					import static org.junit.jupiter.api.Assertions.assertThrows;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,6 +51,33 @@ public class AssertUtils {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 比对两个对象的属性是否一致
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * 注意,如果 expected 存在的属性,actual 不存在的时候,会进行忽略
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param expected 期望对象
 | 
				
			||||||
 | 
					     * @param actual 实际对象
 | 
				
			||||||
 | 
					     * @param ignoreFields 忽略的属性数组
 | 
				
			||||||
 | 
					     * @return 是否一致
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static boolean isPojoEquals(Object expected, Object actual, String... ignoreFields) {
 | 
				
			||||||
 | 
					        Field[] expectedFields = ReflectUtil.getFields(expected.getClass());
 | 
				
			||||||
 | 
					        return Arrays.stream(expectedFields).allMatch(expectedField -> {
 | 
				
			||||||
 | 
					            // 如果是忽略的属性,则不进行比对
 | 
				
			||||||
 | 
					            if (ArrayUtil.contains(ignoreFields, expectedField.getName())) {
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 忽略不存在的属性
 | 
				
			||||||
 | 
					            Field actualField = ReflectUtil.getField(actual.getClass(), expectedField.getName());
 | 
				
			||||||
 | 
					            if (actualField == null) {
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return Objects.equals(ReflectUtil.getFieldValue(expected, expectedField),
 | 
				
			||||||
 | 
					                    ReflectUtil.getFieldValue(actual, actualField));
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 执行方法,校验抛出的 Service 是否符合条件
 | 
					     * 执行方法,校验抛出的 Service 是否符合条件
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user