|
@@ -3,8 +3,10 @@ package com.etotem.cfc.service;
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
|
|
|
+import static org.junit.jupiter.api.Assertions.assertNull;
|
|
|
import static org.mockito.Mockito.times;
|
|
import static org.mockito.Mockito.times;
|
|
|
import static org.mockito.Mockito.verify;
|
|
import static org.mockito.Mockito.verify;
|
|
|
|
|
+import static org.mockito.Mockito.when;
|
|
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Field;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
@@ -18,6 +20,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
|
|
|
|
|
import com.etotem.cfc.common.HmacSignUtil;
|
|
import com.etotem.cfc.common.HmacSignUtil;
|
|
|
import com.etotem.cfc.dto.VirtualPayParamsDTO;
|
|
import com.etotem.cfc.dto.VirtualPayParamsDTO;
|
|
|
|
|
+import com.etotem.cfc.entity.PaymentOrder;
|
|
|
import com.etotem.cfc.entity.VirtualGoodsConfig;
|
|
import com.etotem.cfc.entity.VirtualGoodsConfig;
|
|
|
|
|
|
|
|
@ExtendWith(MockitoExtension.class)
|
|
@ExtendWith(MockitoExtension.class)
|
|
@@ -26,6 +29,12 @@ class VirtualPayServiceTest {
|
|
|
@Mock
|
|
@Mock
|
|
|
private AssessmentOrderService assessmentOrderService;
|
|
private AssessmentOrderService assessmentOrderService;
|
|
|
|
|
|
|
|
|
|
+ @Mock
|
|
|
|
|
+ private MembershipService membershipService;
|
|
|
|
|
+
|
|
|
|
|
+ @Mock
|
|
|
|
|
+ private VirtualGoodsConfigService virtualGoodsConfigService;
|
|
|
|
|
+
|
|
|
@InjectMocks
|
|
@InjectMocks
|
|
|
private VirtualPayService virtualPayService;
|
|
private VirtualPayService virtualPayService;
|
|
|
|
|
|
|
@@ -126,6 +135,61 @@ class VirtualPayServiceTest {
|
|
|
assertEquals(HmacSignUtil.hmacSha256Hex("test_app_key", "requestVirtualPayment&" + expectedSignData), dto.getSign());
|
|
assertEquals(HmacSignUtil.hmacSha256Hex("test_app_key", "requestVirtualPayment&" + expectedSignData), dto.getSign());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void handleDeliverNotify_membershipPrefixRoutesToProcessPaymentCallback() {
|
|
|
|
|
+ Map<String, Object> payload = new HashMap<>();
|
|
|
|
|
+ payload.put("OutTradeNo", "ORD20260802001");
|
|
|
|
|
+ payload.put("TransactionId", "WX1234567890");
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Object> result = virtualPayService.handleDeliverNotify(payload);
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(0, result.get("ErrCode"));
|
|
|
|
|
+ assertEquals("success", result.get("ErrMsg"));
|
|
|
|
|
+ verify(membershipService, times(1)).processPaymentCallback("ORD20260802001", "WX1234567890", "virtual");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void generateMembershipPayParams_returnsDtoForConfiguredLevel() throws Exception {
|
|
|
|
|
+ setField("appid", "wx5ba8038ef16fb245");
|
|
|
|
|
+ setField("appKey", "test_app_key");
|
|
|
|
|
+ setField("mchId", "1703255039");
|
|
|
|
|
+ setField("env", 0);
|
|
|
|
|
+
|
|
|
|
|
+ PaymentOrder order = new PaymentOrder();
|
|
|
|
|
+ order.setOrderNo("ORD20260802001");
|
|
|
|
|
+ order.setLevelCode("FAMILY");
|
|
|
|
|
+ order.setAmount(131400);
|
|
|
|
|
+ order.setStatus("pending");
|
|
|
|
|
+ when(membershipService.getByOrderNo("ORD20260802001")).thenReturn(order);
|
|
|
|
|
+
|
|
|
|
|
+ VirtualGoodsConfig config = new VirtualGoodsConfig();
|
|
|
|
|
+ config.setProductId("offer_m1");
|
|
|
|
|
+ config.setGoodsName("家庭会员年卡");
|
|
|
|
|
+ when(virtualGoodsConfigService.getEnabled("MEMBERSHIP", "FAMILY")).thenReturn(config);
|
|
|
|
|
+
|
|
|
|
|
+ VirtualPayParamsDTO dto = virtualPayService.generateMembershipPayParams("ORD20260802001", "test_session_key");
|
|
|
|
|
+
|
|
|
|
|
+ assertNotNull(dto);
|
|
|
|
|
+ assertEquals("ORD20260802001", dto.getOrderInfo().get("out_trade_no"));
|
|
|
|
|
+ assertEquals(131400, dto.getOrderInfo().get("total_fee"));
|
|
|
|
|
+ assertEquals("membership:FAMILY", dto.getOrderInfo().get("attach"));
|
|
|
|
|
+ assertEquals("offer_m1", dto.getOrderInfo().get("offerId"));
|
|
|
|
|
+ assertEquals("家庭会员年卡", dto.getOrderInfo().get("product_info"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void generateMembershipPayParams_returnsNullWhenConfigMissing() {
|
|
|
|
|
+ PaymentOrder order = new PaymentOrder();
|
|
|
|
|
+ order.setOrderNo("ORD20260802002");
|
|
|
|
|
+ order.setLevelCode("PREMIUM");
|
|
|
|
|
+ order.setAmount(1316800);
|
|
|
|
|
+ order.setStatus("pending");
|
|
|
|
|
+ when(membershipService.getByOrderNo("ORD20260802002")).thenReturn(order);
|
|
|
|
|
+ when(virtualGoodsConfigService.getEnabled("MEMBERSHIP", "PREMIUM")).thenReturn(null);
|
|
|
|
|
+
|
|
|
|
|
+ assertNull(virtualPayService.generateMembershipPayParams("ORD20260802002", "test_session_key"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void setField(String name, Object value) throws Exception {
|
|
private void setField(String name, Object value) throws Exception {
|
|
|
Field field = VirtualPayService.class.getDeclaredField(name);
|
|
Field field = VirtualPayService.class.getDeclaredField(name);
|
|
|
field.setAccessible(true);
|
|
field.setAccessible(true);
|