| 
					
				 | 
			
			
				@@ -1,32 +1,32 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package cn.iocoder.yudao.module.pay.service.channel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.iocoder.yudao.framework.common.pojo.PageResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxPayClientConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.pay.controller.admin.channel.vo.PayChannelCreateReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.iocoder.yudao.module.pay.controller.admin.channel.vo.PayChannelPageReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.pay.controller.admin.channel.vo.PayChannelUpdateReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.pay.dal.dataobject.channel.PayChannelDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.pay.dal.mysql.channel.PayChannelMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.junit.jupiter.api.BeforeEach; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.junit.jupiter.api.Test; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.boot.test.mock.mockito.MockBean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.context.annotation.Import; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.annotation.Resource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.validation.Validator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.time.LocalDateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Collections; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.CHANNEL_EXIST_SAME_CHANNEL_ERROR; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.CHANNEL_NOT_EXISTS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static org.junit.jupiter.api.Assertions.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,109 +46,62 @@ public class PayChannelServiceTest extends BaseDbUnitTest { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @MockBean 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private Validator validator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void testCreateWechatVersion2Channel_success() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        WxPayClientConfig v2Config = getV2Config(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PayChannelCreateReqVO reqVO = randomPojo(PayChannelCreateReqVO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setCode(PayChannelEnum.WX_PUB.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(JSON.toJSONString(v2Config)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Long channelId = channelService.createChannel(reqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 断言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertNotNull(channelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 校验记录的属性是否正确 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PayChannelDO channel = channelMapper.selectById(channelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(reqVO, channel, "config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 关于config 对象应该拿出来重新对比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(v2Config, channel.getConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @BeforeEach 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setUp() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channelService.setChannelCache(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void testCreateWechatVersion3Channel_success() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testCreateChannel_success() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        WxPayClientConfig v3Config = getV3Config(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        WxPayClientConfig config = randomWxPayClientConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PayChannelCreateReqVO reqVO = randomPojo(PayChannelCreateReqVO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setStatus(randomCommonStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             o.setCode(PayChannelEnum.WX_PUB.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(JSON.toJSONString(v3Config)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Long channelId = channelService.createChannel(reqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 断言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertNotNull(channelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 校验记录的属性是否正确 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PayChannelDO channel = channelMapper.selectById(channelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(reqVO, channel, "config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 关于config 对象应该拿出来重新对比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(v3Config, channel.getConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void testCreateAliPayPublicKeyChannel_success() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AlipayPayClientConfig payClientConfig = getPublicKeyConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PayChannelCreateReqVO reqVO = randomPojo(PayChannelCreateReqVO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(JSON.toJSONString(payClientConfig)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setConfig(JsonUtils.toJsonString(config)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Long channelId = channelService.createChannel(reqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 断言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertNotNull(channelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 校验记录的属性是否正确 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PayChannelDO channel = channelMapper.selectById(channelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         assertPojoEquals(reqVO, channel, "config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 关于config 对象应该拿出来重新对比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(payClientConfig, channel.getConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertPojoEquals(config, channel.getConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 校验缓存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertEquals(1, channelService.getChannelCache().size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertEquals(channel, channelService.getChannelCache().get(0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void testCreateAliPayCertificateChannel_success() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testCreateChannel_exists() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // mock 数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayChannelDO dbChannel = randomPojo(PayChannelDO.class, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                o -> o.setConfig(randomWxPayClientConfig())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channelMapper.insert(dbChannel);// @Sql: 先插入出一条存在的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AlipayPayClientConfig payClientConfig = getCertificateConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PayChannelCreateReqVO reqVO = randomPojo(PayChannelCreateReqVO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(JSON.toJSONString(payClientConfig)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setAppId(dbChannel.getAppId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setCode(dbChannel.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Long channelId = channelService.createChannel(reqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 断言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertNotNull(channelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 校验记录的属性是否正确 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PayChannelDO channel = channelMapper.selectById(channelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(reqVO, channel, "config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 关于config 对象应该拿出来重新对比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(payClientConfig, channel.getConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 调用, 并断言异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertServiceException(() -> channelService.createChannel(reqVO), CHANNEL_EXIST_SAME_CHANNEL_ERROR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void testUpdateChannel_success() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // mock 数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AlipayPayClientConfig payClientConfig = getCertificateConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PayChannelDO dbChannel = randomPojo(PayChannelDO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             o.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setConfig(randomAlipayPayClientConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         channelMapper.insert(dbChannel);// @Sql: 先插入出一条存在的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AlipayPayClientConfig payClientPublicKeyConfig = getPublicKeyConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AlipayPayClientConfig config = randomAlipayPayClientConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PayChannelUpdateReqVO reqVO = randomPojo(PayChannelUpdateReqVO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setCode(dbChannel.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(dbChannel.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(JSON.toJSONString(payClientPublicKeyConfig)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             o.setId(dbChannel.getId()); // 设置更新的 ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setStatus(randomCommonStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setConfig(JsonUtils.toJsonString(config)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 调用 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -156,15 +109,17 @@ public class PayChannelServiceTest extends BaseDbUnitTest { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 校验是否更新正确 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PayChannelDO channel = channelMapper.selectById(reqVO.getId()); // 获取最新的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         assertPojoEquals(reqVO, channel, "config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(payClientPublicKeyConfig, channel.getConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertPojoEquals(config, channel.getConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 校验缓存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertEquals(1, channelService.getChannelCache().size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertEquals(channel, channelService.getChannelCache().get(0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void testUpdateChannel_notExists() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AlipayPayClientConfig payClientPublicKeyConfig = getPublicKeyConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AlipayPayClientConfig payClientPublicKeyConfig = randomAlipayPayClientConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PayChannelUpdateReqVO reqVO = randomPojo(PayChannelUpdateReqVO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             o.setConfig(JSON.toJSONString(payClientPublicKeyConfig)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -176,11 +131,9 @@ public class PayChannelServiceTest extends BaseDbUnitTest { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void testDeleteChannel_success() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // mock 数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AlipayPayClientConfig payClientConfig = getCertificateConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PayChannelDO dbChannel = randomPojo(PayChannelDO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             o.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setConfig(randomAlipayPayClientConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         channelMapper.insert(dbChannel);// @Sql: 先插入出一条存在的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 准备参数 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -190,6 +143,8 @@ public class PayChannelServiceTest extends BaseDbUnitTest { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         channelService.deleteChannel(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 校验数据不存在了 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         assertNull(channelMapper.selectById(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 校验缓存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertEquals(0, channelService.getChannelCache().size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Test 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -201,119 +156,80 @@ public class PayChannelServiceTest extends BaseDbUnitTest { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         assertServiceException(() -> channelService.deleteChannel(id), CHANNEL_NOT_EXISTS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Test // TODO 请修改 null 为需要的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void testGetChannelPage() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testGetChannel() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // mock 数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AlipayPayClientConfig payClientConfig = getCertificateConfig(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PayChannelDO dbChannel = randomPojo(PayChannelDO.class, o -> { // 等会查询到 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayChannelDO dbChannel = randomPojo(PayChannelDO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             o.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setRemark("灿灿子的支付渠道"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setFeeRate(0.03); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setAppId(1L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setCreateTime(buildTime(2021,11,20)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setConfig(randomAlipayPayClientConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        channelMapper.insert(dbChannel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 执行拷贝的时候会出现异常,所以在插入后要重置为null 后续在写入新的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        dbChannel.setConfig(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 测试 code 不匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        channelMapper.insert(cloneIgnoreId(dbChannel, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setCode(PayChannelEnum.WX_PUB.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 测试 status 不匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        channelMapper.insert(cloneIgnoreId(dbChannel, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setStatus(CommonStatusEnum.DISABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 测试 remark 不匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        channelMapper.insert(cloneIgnoreId(dbChannel, o ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setRemark("敏敏子的渠道"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 测试 feeRate 不匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        channelMapper.insert(cloneIgnoreId(dbChannel, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setFeeRate(1.23); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 测试 appId 不匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        channelMapper.insert(cloneIgnoreId(dbChannel, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setAppId(2L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 测试 createTime 不匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        channelMapper.insert(cloneIgnoreId(dbChannel, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setConfig(payClientConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            o.setCreateTime(buildTime(2021, 10, 20)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channelMapper.insert(dbChannel);// @Sql: 先插入出一条存在的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PayChannelPageReqVO reqVO = new PayChannelPageReqVO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        reqVO.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        reqVO.setRemark("灿灿子的支付渠道"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        reqVO.setFeeRate(0.03); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        reqVO.setAppId(1L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        reqVO.setConfig(JSON.toJSONString(payClientConfig)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        reqVO.setCreateTime((new LocalDateTime[]{buildTime(2021,11,19),buildTime(2021,11,21)})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long id = dbChannel.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PageResult<PayChannelDO> pageResult = channelService.getChannelPage(reqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 断言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertEquals(1, pageResult.getTotal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertEquals(1, pageResult.getList().size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(dbChannel, pageResult.getList().get(0), "config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assertPojoEquals(payClientConfig, pageResult.getList().get(0).getConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayChannelDO channel = channelService.getChannel(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 校验是否更新正确 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertPojoEquals(dbChannel, channel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public WxPayClientConfig getV2Config() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return new WxPayClientConfig() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAppId("APP00001") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setMchId("MCH00001") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setApiVersion(WxPayClientConfig.API_VERSION_V2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setMchKey("dsa1d5s6a1d6sa16d1sa56d15a61das6") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setApiV3Key("") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setPrivateCertContent("") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setPrivateKeyContent(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testGetChannelListByAppIds() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // mock 数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayChannelDO dbChannel01 = randomPojo(PayChannelDO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setConfig(randomAlipayPayClientConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channelMapper.insert(dbChannel01);// @Sql: 先插入出一条存在的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayChannelDO dbChannel02 = randomPojo(PayChannelDO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setCode(PayChannelEnum.WX_PUB.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setConfig(randomWxPayClientConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channelMapper.insert(dbChannel02);// @Sql: 先插入出一条存在的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long appId = dbChannel01.getAppId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PayChannelDO> channels = channelService.getChannelListByAppIds(Collections.singleton(appId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 校验是否更新正确 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertEquals(1, channels.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertPojoEquals(dbChannel01, channels.get(0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public WxPayClientConfig getV3Config() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return new WxPayClientConfig() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAppId("APP00001") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setMchId("MCH00001") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setApiVersion(WxPayClientConfig.API_VERSION_V3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setMchKey("") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setApiV3Key("sdadasdsadadsa") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setPrivateKeyContent("dsa445das415d15asd16ad156as") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setPrivateCertContent("dsadasd45asd4s5a"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testGetChannelByAppIdAndCode() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // mock 数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayChannelDO dbChannel = randomPojo(PayChannelDO.class, o -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setCode(PayChannelEnum.ALIPAY_APP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o.setConfig(randomAlipayPayClientConfig()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channelMapper.insert(dbChannel);// @Sql: 先插入出一条存在的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 准备参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Long appId = dbChannel.getAppId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String code = dbChannel.getCode();; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PayChannelDO channel = channelService.getChannelByAppIdAndCode(appId, code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 断言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assertPojoEquals(channel, dbChannel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public AlipayPayClientConfig getPublicKeyConfig() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return new AlipayPayClientConfig() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setServerUrl(ALIPAY_SERVER_URL) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAppId("APP00001") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setSignType(AlipayPayClientConfig.SIGN_TYPE_DEFAULT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setMode(AlipayPayClientConfig.MODE_PUBLIC_KEY) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setPrivateKey("13131321312") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAlipayPublicKey("13321321321") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAppCertContent("") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAlipayPublicCertContent("") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setRootCertContent(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public WxPayClientConfig randomWxPayClientConfig() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new WxPayClientConfig() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setAppId(randomString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setMchId(randomString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setApiVersion(WxPayClientConfig.API_VERSION_V2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setMchKey(randomString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public AlipayPayClientConfig getCertificateConfig() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public AlipayPayClientConfig randomAlipayPayClientConfig() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return new AlipayPayClientConfig() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setServerUrl(ALIPAY_SERVER_URL) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAppId("APP00001") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setServerUrl(randomURL()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setAppId(randomString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .setSignType(AlipayPayClientConfig.SIGN_TYPE_DEFAULT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setMode(AlipayPayClientConfig.MODE_CERTIFICATE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setPrivateKey("") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAlipayPublicKey("") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAppCertContent("13321321321sda") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setAlipayPublicCertContent("13321321321aqeqw") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .setRootCertContent("13321321321dsad"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setMode(AlipayPayClientConfig.MODE_PUBLIC_KEY) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setPrivateKey(randomString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setAlipayPublicKey(randomString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |