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/OrderRefundServiceTest.java |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/backend/src/test/java/com/tourguide/modules/order/service/OrderRefundServiceTest.java b/backend/src/test/java/com/tourguide/modules/order/service/OrderRefundServiceTest.java
index 5c9fc17..8091f9d 100644
--- a/backend/src/test/java/com/tourguide/modules/order/service/OrderRefundServiceTest.java
+++ b/backend/src/test/java/com/tourguide/modules/order/service/OrderRefundServiceTest.java
@@ -4,16 +4,20 @@
 import com.tourguide.modules.order.domain.RefundStatus;
 import com.tourguide.modules.order.domain.PaymentMethod;
 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 com.tourguide.modules.order.payment.PaymentRefundGateway;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
@@ -126,6 +130,25 @@
     }
 
     @Test
+    void eachSuccessfulLocalRefundShouldCreateAnIndependentCompletedRecord() {
+        TourOrderRefundMapper refundMapper = mock(TourOrderRefundMapper.class);
+        refundService = new OrderRefundService(orderMapper, refundGateway, refundMapper);
+        TourOrder order = paidOrder();
+        order.setPaymentMethod(PaymentMethod.TEMPORARY_BYPASS.getCode());
+
+        assertThat(refundService.requestRefund(order, new BigDecimal("20.00"))).isTrue();
+        assertThat(refundService.requestRefund(order, new BigDecimal("16.00"))).isTrue();
+
+        ArgumentCaptor<TourOrderRefund> insertCaptor = ArgumentCaptor.forClass(TourOrderRefund.class);
+        verify(refundMapper, times(2)).insert(insertCaptor.capture());
+        assertThat(insertCaptor.getAllValues()).extracting(TourOrderRefund::getRefundAmount)
+                .containsExactly(new BigDecimal("20.00"), new BigDecimal("16.00"));
+        verify(refundMapper, times(2)).updateById(any(TourOrderRefund.class));
+        assertThat(insertCaptor.getAllValues()).extracting(TourOrderRefund::getRefundStatus)
+                .containsOnly(RefundStatus.REFUNDED.getCode());
+    }
+
+    @Test
     void refundShouldRejectAmountAboveRemainingBalance() {
         TourOrder order = paidOrder();
         order.setRefundedAmount(new BigDecimal("20.00"));

--
Gitblit v1.7.1