| | |
| | | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | private TourOrderMapper orderMapper; |
| | | private HuifuRefundCallbackService callbackService; |
| | | private GuideSessionTransitionService sessionTransitionService; |
| | | private GuideBalanceSettlementService balanceSettlementService; |
| | | |
| | | @BeforeEach |
| | | void setUp() { |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | @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()); |