package com.ruoyi.order.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.web.domain.AjaxResult;
|
import com.ruoyi.common.security.service.TokenService;
|
import com.ruoyi.order.api.model.TChargingOrder;
|
import com.ruoyi.payment.api.feignClient.IcbcPaymentClient;
|
import com.ruoyi.payment.api.vo.IcbcPaymentResp;
|
import com.ruoyi.system.api.model.LoginUserApplet;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.test.util.ReflectionTestUtils;
|
|
import java.util.Map;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class TChargingOrderPaymentConfirmationTest {
|
private static final String ORDER_CODE = "CD202607160001";
|
private static final String BANK_ORDER_ID = "231011990056000012345";
|
|
private TChargingOrderServiceImpl service;
|
private IcbcPaymentClient icbcPaymentClient;
|
|
@BeforeEach
|
void setUp() {
|
service = spy(new TChargingOrderServiceImpl());
|
TokenService tokenService = mock(TokenService.class);
|
icbcPaymentClient = mock(IcbcPaymentClient.class);
|
LoginUserApplet loginUser = new LoginUserApplet();
|
loginUser.setUserId(88L);
|
when(tokenService.getLoginUserApplet()).thenReturn(loginUser);
|
ReflectionTestUtils.setField(service, "tokenService", tokenService);
|
ReflectionTestUtils.setField(service, "icbcPaymentClient", icbcPaymentClient);
|
}
|
|
@Test
|
@SuppressWarnings("unchecked")
|
void paidBankOrderActivelyRunsBusinessCallback() {
|
TChargingOrder order = pendingIcbcOrder();
|
doReturn(order).when(service).getOne(any(Wrapper.class));
|
IcbcPaymentResp payment = bankPayment("0");
|
when(icbcPaymentClient.query(ORDER_CODE)).thenReturn(R.ok(payment));
|
doReturn(AjaxResult.success()).when(service)
|
.chargingOrderCallback(1, ORDER_CODE, BANK_ORDER_ID, "1");
|
|
AjaxResult result = service.confirmIcbcPayment(ORDER_CODE);
|
|
Map<String, Object> data = (Map<String, Object>) result.get("data");
|
assertEquals(200, result.get("code"));
|
assertTrue((Boolean) data.get("confirmed"));
|
verify(service).chargingOrderCallback(1, ORDER_CODE, BANK_ORDER_ID, "1");
|
}
|
|
@Test
|
@SuppressWarnings("unchecked")
|
void pendingBankOrderReturnsUnconfirmedWithoutRunningCallback() {
|
doReturn(pendingIcbcOrder()).when(service).getOne(any(Wrapper.class));
|
when(icbcPaymentClient.query(ORDER_CODE)).thenReturn(R.ok(bankPayment("1")));
|
|
AjaxResult result = service.confirmIcbcPayment(ORDER_CODE);
|
|
Map<String, Object> data = (Map<String, Object>) result.get("data");
|
assertEquals(200, result.get("code"));
|
assertFalse((Boolean) data.get("confirmed"));
|
verify(service, never()).chargingOrderCallback(eq(1), eq(ORDER_CODE), any(), eq("1"));
|
}
|
|
private TChargingOrder pendingIcbcOrder() {
|
TChargingOrder order = new TChargingOrder();
|
order.setCode(ORDER_CODE);
|
order.setAppUserId(88L);
|
order.setSourceName("ICBC");
|
order.setRechargePaymentStatus(1);
|
order.setDelFlag(false);
|
return order;
|
}
|
|
private IcbcPaymentResp bankPayment(String payStatus) {
|
IcbcPaymentResp payment = new IcbcPaymentResp();
|
payment.setOrderId(ORDER_CODE);
|
payment.setTradeNo(BANK_ORDER_ID);
|
payment.setStatus(payStatus);
|
payment.setRawResponse("{\"returnCode\":0,\"pay_status\":\"" + payStatus
|
+ "\",\"out_trade_no\":\"" + ORDER_CODE + "\",\"order_id\":\"" + BANK_ORDER_ID + "\"}");
|
return payment;
|
}
|
}
|