From 39f6fca28e3f78abe48f08e474ec011abb990b36 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 09 九月 2026 10:39:21 +0800
Subject: [PATCH] update

---
 backend/src/test/java/com/tourguide/modules/order/service/HuifuRefundCallbackServiceTest.java |   44 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 44 insertions(+), 0 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 9f93aa2..8457e8c 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
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.tourguide.common.huifu.properties.HuiFuProperties;
+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.mapper.TourOrderMapper;
@@ -39,6 +40,7 @@
         assertThat(first).isTrue();
         assertThat(duplicate).isFalse();
         assertThat(order.getRefundStatus()).isEqualTo(RefundStatus.REFUNDED.getCode());
+        assertThat(order.getStatus()).isEqualTo(OrderStatus.REFUNDED.getCode());
         assertThat(order.getRefundTime()).isNotNull();
         verify(orderMapper).updateById(order);
     }
@@ -69,11 +71,53 @@
         verify(orderMapper, never()).updateById(order);
     }
 
+    @Test
+    void nestedSuccessCallbackShouldCompleteOrder() {
+        TourOrder order = refundingOrder();
+        when(orderMapper.selectByRefundOrderNoForUpdate("RF001")).thenReturn(order);
+        JSONObject data = successBody();
+        JSONObject body = new JSONObject();
+        body.put("data", data);
+
+        assertThat(callbackService.handle(body)).isTrue();
+        assertThat(order.getStatus()).isEqualTo(OrderStatus.REFUNDED.getCode());
+    }
+
+    @Test
+    void partialSuccessCallbackShouldKeepRefundingBalance() {
+        TourOrder order = refundingOrder();
+        order.setRefundAmount(new BigDecimal("20.00"));
+        when(orderMapper.selectByRefundOrderNoForUpdate("RF001")).thenReturn(order);
+        JSONObject body = successBody();
+        body.put("ord_amt", "20.00");
+
+        assertThat(callbackService.handle(body)).isTrue();
+        assertThat(order.getRefundedAmount()).isEqualByComparingTo("20.00");
+        assertThat(order.getRefundStatus()).isEqualTo(RefundStatus.PARTIAL.getCode());
+        assertThat(order.getStatus()).isEqualTo(OrderStatus.CANCELLED.getCode());
+    }
+
+    @Test
+    void followUpSuccessCallbackShouldCompleteRemainingRefund() {
+        TourOrder order = refundingOrder();
+        order.setRefundAmount(new BigDecimal("16.00"));
+        order.setRefundedAmount(new BigDecimal("20.00"));
+        when(orderMapper.selectByRefundOrderNoForUpdate("RF001")).thenReturn(order);
+        JSONObject body = successBody();
+        body.put("ord_amt", "16.00");
+
+        assertThat(callbackService.handle(body)).isTrue();
+        assertThat(order.getRefundedAmount()).isEqualByComparingTo("36.00");
+        assertThat(order.getRefundStatus()).isEqualTo(RefundStatus.REFUNDED.getCode());
+        assertThat(order.getStatus()).isEqualTo(OrderStatus.REFUNDED.getCode());
+    }
+
     private TourOrder refundingOrder() {
         TourOrder order = new TourOrder();
         order.setRefundOrderNo("RF001");
         order.setRefundStatus(RefundStatus.REFUNDING.getCode());
         order.setRefundAmount(new BigDecimal("36.00"));
+        order.setPaymentAmount(new BigDecimal("36.00"));
         return order;
     }
 

--
Gitblit v1.7.1