liujie
2026-09-14 82a8bc62d5b9d5d607f6952329952b17eda2f0a0
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.finance.service.GuideBalanceSettlementService;
import com.tourguide.modules.order.domain.OrderStatus;
import com.tourguide.modules.order.domain.RefundStatus;
import com.tourguide.modules.order.entity.TourOrder;
@@ -12,6 +13,7 @@
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -23,6 +25,7 @@
    private TourOrderMapper orderMapper;
    private HuifuRefundCallbackService callbackService;
    private GuideSessionTransitionService sessionTransitionService;
    private GuideBalanceSettlementService balanceSettlementService;
    @BeforeEach
    void setUp() {
@@ -30,7 +33,9 @@
        properties.setHuifuId("merchant-1");
        orderMapper = mock(TourOrderMapper.class);
        sessionTransitionService = mock(GuideSessionTransitionService.class);
        callbackService = new HuifuRefundCallbackService(properties, orderMapper, null, null,
        balanceSettlementService = mock(GuideBalanceSettlementService.class);
        callbackService = new HuifuRefundCallbackService(properties, orderMapper, null,
                balanceSettlementService,
                sessionTransitionService);
    }
@@ -103,6 +108,25 @@
    }
    @Test
    void successCallbackShouldReverseSettledGuideEarning() {
        TourOrder order = refundingOrder();
        order.setGuideId(8L);
        order.setAmount(new BigDecimal("100.00"));
        order.setPaymentAmount(new BigDecimal("100.00"));
        order.setGuideEarningAmount(new BigDecimal("90.00"));
        order.setSettledAt(LocalDateTime.of(2026, 8, 2, 12, 0));
        when(orderMapper.selectByRefundOrderNoForUpdate("RF001")).thenReturn(order);
        JSONObject body = successBody();
        body.put("ord_amt", "36.00");
        assertThat(callbackService.handle(body)).isTrue();
        verify(balanceSettlementService).reverseRefund(order, BigDecimal.ZERO,
                new BigDecimal("36.00"));
    }
    @Test
    void pendingMeetingSuccessCallbackShouldRestoreGuideSession() {
        TourOrder order = refundingOrder();
        order.setStatus(OrderStatus.PENDING_MEETING.getCode());