mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	支付宝 条码支付 Client 单元测试
This commit is contained in:
		| @@ -0,0 +1,157 @@ | |||||||
|  | package cn.iocoder.yudao.framework.pay.core.client.impl.alipay; | ||||||
|  |  | ||||||
|  | import cn.hutool.core.date.LocalDateTimeUtil; | ||||||
|  | import cn.iocoder.yudao.framework.common.exception.ServiceException; | ||||||
|  | import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO; | ||||||
|  | import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO; | ||||||
|  | import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderDisplayModeEnum; | ||||||
|  | import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderStatusRespEnum; | ||||||
|  | import com.alipay.api.AlipayApiException; | ||||||
|  | import com.alipay.api.domain.AlipayTradePayModel; | ||||||
|  | import com.alipay.api.request.AlipayTradePayRequest; | ||||||
|  | import com.alipay.api.response.AlipayTradePayResponse; | ||||||
|  | import org.junit.jupiter.api.BeforeEach; | ||||||
|  | import org.junit.jupiter.api.DisplayName; | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  | import org.mockito.ArgumentMatcher; | ||||||
|  | import org.mockito.InjectMocks; | ||||||
|  |  | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
|  | import static cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderStatusRespEnum.CLOSED; | ||||||
|  | import static cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderStatusRespEnum.WAITING; | ||||||
|  | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; | ||||||
|  | import static org.junit.jupiter.api.Assertions.*; | ||||||
|  | import static org.mockito.ArgumentMatchers.argThat; | ||||||
|  | import static org.mockito.Mockito.when; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * {@link  AlipayBarPayClient} 单元测试 | ||||||
|  |  * | ||||||
|  |  * @author jason | ||||||
|  |  */ | ||||||
|  | public class AlipayBarPayClientTest extends AbstractAlipayClientTest { | ||||||
|  |  | ||||||
|  |     @InjectMocks | ||||||
|  |     private AlipayBarPayClient client = new AlipayBarPayClient(randomLongId(), config); | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     @BeforeEach | ||||||
|  |     public void setUp() { | ||||||
|  |         setClient(client); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     @DisplayName("支付宝条码支付,非免密码支付下单成功") | ||||||
|  |     public void test_unified_order_success() throws AlipayApiException { | ||||||
|  |         String outTradeNo = randomString(); | ||||||
|  |         String notifyUrl = randomURL(); | ||||||
|  |         Integer price = randomInteger(); | ||||||
|  |         String authCode = randomString(); | ||||||
|  |         // 准备返回对象 | ||||||
|  |         AlipayTradePayResponse response = randomPojo(AlipayTradePayResponse.class, o -> o.setSubCode("")); | ||||||
|  |  | ||||||
|  |         // mock | ||||||
|  |         when(defaultAlipayClient.execute(argThat((ArgumentMatcher<AlipayTradePayRequest>) request -> { | ||||||
|  |             assertInstanceOf(AlipayTradePayModel.class, request.getBizModel()); | ||||||
|  |             assertEquals(notifyUrl, request.getNotifyUrl()); | ||||||
|  |             AlipayTradePayModel model = (AlipayTradePayModel) request.getBizModel(); | ||||||
|  |             assertEquals(outTradeNo, model.getOutTradeNo()); | ||||||
|  |             assertEquals(String.valueOf(price / 100.0), model.getTotalAmount()); | ||||||
|  |             assertEquals(authCode, model.getAuthCode()); | ||||||
|  |             return true; | ||||||
|  |         }))).thenReturn(response); | ||||||
|  |         // 准备请求参数 | ||||||
|  |         PayOrderUnifiedReqDTO reqDTO = buildOrderUnifiedReqDTO(notifyUrl, outTradeNo, price); | ||||||
|  |         // 设置条码 | ||||||
|  |         Map<String, String> extraParam = new HashMap<>(); | ||||||
|  |         extraParam.put("auth_code", authCode); | ||||||
|  |         reqDTO.setChannelExtras(extraParam); | ||||||
|  |         // 下单请求 | ||||||
|  |         PayOrderRespDTO resp = client.unifiedOrder(reqDTO); | ||||||
|  |         // 断言 | ||||||
|  |         assertEquals(WAITING.getStatus(), resp.getStatus()); | ||||||
|  |         assertEquals(PayOrderDisplayModeEnum.BAR_CODE.getMode(), resp.getDisplayMode()); | ||||||
|  |         assertEquals(outTradeNo, resp.getOutTradeNo()); | ||||||
|  |         assertEquals("", resp.getDisplayContent()); | ||||||
|  |         assertSame(response, resp.getRawData()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     @DisplayName("支付宝条码支付,免密码支付下单成功") | ||||||
|  |     public void test_unified_order_code_10000_success() throws AlipayApiException { | ||||||
|  |         String outTradeNo = randomString(); | ||||||
|  |         String channelNo = randomString(); | ||||||
|  |         String channelUserId = randomString(); | ||||||
|  |         Date payTime = randomDate(); | ||||||
|  |         // 准备返回对象 | ||||||
|  |         AlipayTradePayResponse response = randomPojo(AlipayTradePayResponse.class, o -> { | ||||||
|  |             o.setSubCode(""); | ||||||
|  |             o.setCode("10000"); | ||||||
|  |             o.setOutTradeNo(outTradeNo); | ||||||
|  |             o.setTradeNo(channelNo); | ||||||
|  |             o.setBuyerUserId(channelUserId); | ||||||
|  |             o.setGmtPayment(payTime); | ||||||
|  |         }); | ||||||
|  |         // mock | ||||||
|  |         when(defaultAlipayClient.execute(argThat((ArgumentMatcher<AlipayTradePayRequest>) request -> true))) | ||||||
|  |                 .thenReturn(response); | ||||||
|  |         // 准备请求参数 | ||||||
|  |         String authCode = randomString(); | ||||||
|  |         PayOrderUnifiedReqDTO reqDTO = buildOrderUnifiedReqDTO(randomURL(), outTradeNo, randomInteger()); | ||||||
|  |         // 设置条码 | ||||||
|  |         Map<String, String> extraParam = new HashMap<>(); | ||||||
|  |         extraParam.put("auth_code", authCode); | ||||||
|  |         reqDTO.setChannelExtras(extraParam); | ||||||
|  |         // 下单请求 | ||||||
|  |         PayOrderRespDTO resp = client.unifiedOrder(reqDTO); | ||||||
|  |         // 断言 | ||||||
|  |         assertEquals(PayOrderStatusRespEnum.SUCCESS.getStatus(), resp.getStatus()); | ||||||
|  |         assertEquals(outTradeNo, resp.getOutTradeNo()); | ||||||
|  |         assertEquals(channelNo, resp.getChannelOrderNo()); | ||||||
|  |         assertEquals(channelUserId, resp.getChannelUserId()); | ||||||
|  |         assertEquals(LocalDateTimeUtil.of(payTime), resp.getSuccessTime()); | ||||||
|  |         assertSame(response, resp.getRawData()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     @DisplayName("支付宝条码支付,没有传条码") | ||||||
|  |     public void test_unified_order_empty_auth_code() { | ||||||
|  |         PayOrderUnifiedReqDTO reqDTO = buildOrderUnifiedReqDTO(randomURL(), randomString(), randomInteger()); | ||||||
|  |         // 断言 | ||||||
|  |         assertThrows(ServiceException.class, () -> client.unifiedOrder(reqDTO)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     @DisplayName("支付宝条码支付,渠道返回失败") | ||||||
|  |     public void test_unified_order_channel_failed() throws AlipayApiException { | ||||||
|  |         // 准备响应对象 | ||||||
|  |         String subCode = randomString(); | ||||||
|  |         String subMsg = randomString(); | ||||||
|  |         AlipayTradePayResponse response = randomPojo(AlipayTradePayResponse.class, o -> { | ||||||
|  |             o.setSubCode(subCode); | ||||||
|  |             o.setSubMsg(subMsg); | ||||||
|  |         }); | ||||||
|  |         // mock | ||||||
|  |         when(defaultAlipayClient.execute(argThat((ArgumentMatcher<AlipayTradePayRequest>) request -> true))) | ||||||
|  |                 .thenReturn(response); | ||||||
|  |         // 准备请求参数 | ||||||
|  |         String authCode = randomString(); | ||||||
|  |         String outTradeNo = randomString(); | ||||||
|  |         PayOrderUnifiedReqDTO reqDTO = buildOrderUnifiedReqDTO(randomURL(), outTradeNo, randomInteger()); | ||||||
|  |         // 设置条码 | ||||||
|  |         Map<String, String> extraParam = new HashMap<>(); | ||||||
|  |         extraParam.put("auth_code", authCode); | ||||||
|  |         reqDTO.setChannelExtras(extraParam); | ||||||
|  |         // 下单请求 | ||||||
|  |         PayOrderRespDTO resp = client.unifiedOrder(reqDTO); | ||||||
|  |         // 断言 | ||||||
|  |         assertEquals(CLOSED.getStatus(), resp.getStatus()); | ||||||
|  |         assertEquals(subCode, resp.getChannelErrorCode()); | ||||||
|  |         assertEquals(subMsg, resp.getChannelErrorMsg()); | ||||||
|  |         assertSame(response, resp.getRawData()); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -23,6 +23,8 @@ import static org.mockito.ArgumentMatchers.eq; | |||||||
| import static org.mockito.Mockito.when; | import static org.mockito.Mockito.when; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  |  * {@link  AlipayPcPayClient} 单元测试 | ||||||
|  |  * | ||||||
|  * @author jason |  * @author jason | ||||||
|  */ |  */ | ||||||
| public class AlipayPcPayClientTest extends AbstractAlipayClientTest { | public class AlipayPcPayClientTest extends AbstractAlipayClientTest { | ||||||
| @@ -41,15 +43,13 @@ public class AlipayPcPayClientTest extends AbstractAlipayClientTest { | |||||||
|     public void test_unified_order_url_display_mode_success() throws AlipayApiException { |     public void test_unified_order_url_display_mode_success() throws AlipayApiException { | ||||||
|         // 准备返回对象 |         // 准备返回对象 | ||||||
|         String notifyUrl = randomURL(); |         String notifyUrl = randomURL(); | ||||||
|         Integer price = randomInteger(); |         AlipayTradePagePayResponse response = randomPojo(AlipayTradePagePayResponse.class, o -> o.setSubCode("")); | ||||||
|         AlipayTradePagePayResponse response = randomPojo(AlipayTradePagePayResponse.class, o -> { |  | ||||||
|             o.setSubCode(""); |  | ||||||
|         }); |  | ||||||
|         // mock |         // mock | ||||||
|         when(defaultAlipayClient.pageExecute(argThat((ArgumentMatcher<AlipayTradePagePayRequest>) request -> true), |         when(defaultAlipayClient.pageExecute(argThat((ArgumentMatcher<AlipayTradePagePayRequest>) request -> true), | ||||||
|                 eq(Method.GET.name()))).thenReturn(response); |                 eq(Method.GET.name()))).thenReturn(response); | ||||||
|         // 准备请求参数 |         // 准备请求参数 | ||||||
|         String outTradeNo = randomString(); |         String outTradeNo = randomString(); | ||||||
|  |         Integer price = randomInteger(); | ||||||
|         PayOrderUnifiedReqDTO reqDTO = buildOrderUnifiedReqDTO(notifyUrl, outTradeNo, price); |         PayOrderUnifiedReqDTO reqDTO = buildOrderUnifiedReqDTO(notifyUrl, outTradeNo, price); | ||||||
|         // 设置  displayMode 为 null. |         // 设置  displayMode 为 null. | ||||||
|         reqDTO.setDisplayMode(null); |         reqDTO.setDisplayMode(null); | ||||||
| @@ -67,15 +67,13 @@ public class AlipayPcPayClientTest extends AbstractAlipayClientTest { | |||||||
|     public void test_unified_order_form_display_mode_success() throws AlipayApiException { |     public void test_unified_order_form_display_mode_success() throws AlipayApiException { | ||||||
|         // 准备返回对象 |         // 准备返回对象 | ||||||
|         String notifyUrl = randomURL(); |         String notifyUrl = randomURL(); | ||||||
|         Integer price = randomInteger(); |         AlipayTradePagePayResponse response = randomPojo(AlipayTradePagePayResponse.class, o -> o.setSubCode("")); | ||||||
|         AlipayTradePagePayResponse response = randomPojo(AlipayTradePagePayResponse.class, o -> { |  | ||||||
|             o.setSubCode(""); |  | ||||||
|         }); |  | ||||||
|         // mock |         // mock | ||||||
|         when(defaultAlipayClient.pageExecute(argThat((ArgumentMatcher<AlipayTradePagePayRequest>) request -> true), |         when(defaultAlipayClient.pageExecute(argThat((ArgumentMatcher<AlipayTradePagePayRequest>) request -> true), | ||||||
|                 eq(Method.POST.name()))).thenReturn(response); |                 eq(Method.POST.name()))).thenReturn(response); | ||||||
|         // 准备请求参数 |         // 准备请求参数 | ||||||
|         String outTradeNo = randomString(); |         String outTradeNo = randomString(); | ||||||
|  |         Integer price = randomInteger(); | ||||||
|         PayOrderUnifiedReqDTO reqDTO = buildOrderUnifiedReqDTO(notifyUrl, outTradeNo, price); |         PayOrderUnifiedReqDTO reqDTO = buildOrderUnifiedReqDTO(notifyUrl, outTradeNo, price); | ||||||
|         reqDTO.setDisplayMode(PayOrderDisplayModeEnum.FORM.getMode()); |         reqDTO.setDisplayMode(PayOrderDisplayModeEnum.FORM.getMode()); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 jason
					jason