From 4f6f15b818704079ff2e4e4719b798f48d68a335 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 11 九月 2026 13:52:19 +0800
Subject: [PATCH] update

---
 backend/src/test/java/com/tourguide/modules/order/service/HuifuRefundCallbackServiceTest.java |   49 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/backend/src/test/java/com/tourguide/modules/order/service/HuifuRefundCallbackServiceTest.java b/backend/src/test/java/com/tourguide/modules/order/service/HuifuRefundCallbackServiceTest.java
index 8457e8c..ce4f145 100644
--- a/backend/src/test/java/com/tourguide/modules/order/service/HuifuRefundCallbackServiceTest.java
+++ b/backend/src/test/java/com/tourguide/modules/order/service/HuifuRefundCallbackServiceTest.java
@@ -5,7 +5,9 @@
 import com.tourguide.modules.order.domain.OrderStatus;
 import com.tourguide.modules.order.domain.RefundStatus;
 import com.tourguide.modules.order.entity.TourOrder;
+import com.tourguide.modules.order.entity.TourOrderRefund;
 import com.tourguide.modules.order.mapper.TourOrderMapper;
+import com.tourguide.modules.order.mapper.TourOrderRefundMapper;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -20,13 +22,16 @@
 class HuifuRefundCallbackServiceTest {
     private TourOrderMapper orderMapper;
     private HuifuRefundCallbackService callbackService;
+    private GuideSessionTransitionService sessionTransitionService;
 
     @BeforeEach
     void setUp() {
         HuiFuProperties properties = new HuiFuProperties();
         properties.setHuifuId("merchant-1");
         orderMapper = mock(TourOrderMapper.class);
-        callbackService = new HuifuRefundCallbackService(properties, orderMapper);
+        sessionTransitionService = mock(GuideSessionTransitionService.class);
+        callbackService = new HuifuRefundCallbackService(properties, orderMapper, null, null,
+                sessionTransitionService);
     }
 
     @Test
@@ -98,6 +103,19 @@
     }
 
     @Test
+    void pendingMeetingSuccessCallbackShouldRestoreGuideSession() {
+        TourOrder order = refundingOrder();
+        order.setStatus(OrderStatus.PENDING_MEETING.getCode());
+        order.setGuideId(8L);
+        order.setReceivingSessionId(18L);
+        when(orderMapper.selectByRefundOrderNoForUpdate("RF001")).thenReturn(order);
+
+        assertThat(callbackService.handle(successBody())).isTrue();
+
+        verify(sessionTransitionService).restoreAfterOrderCancellation(order);
+    }
+
+    @Test
     void followUpSuccessCallbackShouldCompleteRemainingRefund() {
         TourOrder order = refundingOrder();
         order.setRefundAmount(new BigDecimal("16.00"));
@@ -112,6 +130,35 @@
         assertThat(order.getStatus()).isEqualTo(OrderStatus.REFUNDED.getCode());
     }
 
+    @Test
+    void partialSuccessShouldCompleteOnlyTheMatchedRefundRecord() {
+        TourOrderRefundMapper refundMapper = mock(TourOrderRefundMapper.class);
+        callbackService = new HuifuRefundCallbackService(properties(), orderMapper, refundMapper);
+        TourOrder order = refundingOrder();
+        order.setId(99L);
+        TourOrderRefund record = new TourOrderRefund();
+        record.setOrderId(99L);
+        record.setRefundOrderNo("RF001");
+        record.setRefundAmount(new BigDecimal("20.00"));
+        record.setRefundStatus(RefundStatus.REFUNDING.getCode());
+        when(refundMapper.selectByRefundOrderNoForUpdate("RF001")).thenReturn(record);
+        when(orderMapper.selectForUpdate(99L)).thenReturn(order);
+        JSONObject body = successBody();
+        body.put("ord_amt", "20.00");
+
+        assertThat(callbackService.handle(body)).isTrue();
+
+        assertThat(order.getRefundStatus()).isEqualTo(RefundStatus.PARTIAL.getCode());
+        assertThat(record.getRefundStatus()).isEqualTo(RefundStatus.REFUNDED.getCode());
+        verify(refundMapper).updateById(record);
+    }
+
+    private HuiFuProperties properties() {
+        HuiFuProperties properties = new HuiFuProperties();
+        properties.setHuifuId("merchant-1");
+        return properties;
+    }
+
     private TourOrder refundingOrder() {
         TourOrder order = new TourOrder();
         order.setRefundOrderNo("RF001");

--
Gitblit v1.7.1