From 77649c76ec1c3afcb93e9963243d637665b3a307 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 21 八月 2026 16:56:28 +0800
Subject: [PATCH] update

---
 backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java |  137 +++++++++++++++++++++++++++++----------------
 1 files changed, 87 insertions(+), 50 deletions(-)

diff --git a/backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java b/backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java
index 9686cb6..de71e45 100644
--- a/backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java
+++ b/backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java
@@ -6,8 +6,10 @@
 import com.tourguide.modules.operation.mapper.OperationScenicSpotMapper;
 import com.tourguide.modules.operation.mapper.ScenicMeetingPointMapper;
 import com.tourguide.modules.operation.mapper.ScenicPricingMapper;
+import com.tourguide.modules.operation.dto.PlatformSettingsResponse;
 import com.tourguide.modules.operation.service.PlatformSettingsService;
 import com.tourguide.modules.order.domain.OrderStatus;
+import com.tourguide.modules.order.domain.PaymentMethod;
 import com.tourguide.modules.order.dto.MiniOrderCreateRequest;
 import com.tourguide.modules.order.dto.TourOrderResponse;
 import com.tourguide.modules.order.entity.TourOrder;
@@ -42,6 +44,7 @@
     private PlatformSettingsService platformSettingsService;
     private GuideNotificationService notificationService;
     private OrderRefundService orderRefundService;
+    private GuideOrderMatchingService matchingService;
     private MiniTourOrderCommandService commandService;
 
     @BeforeEach
@@ -55,13 +58,92 @@
         platformSettingsService = mock(PlatformSettingsService.class);
         notificationService = mock(GuideNotificationService.class);
         orderRefundService = mock(OrderRefundService.class);
+        matchingService = mock(GuideOrderMatchingService.class);
         commandService = new MiniTourOrderCommandService(
                 orderMapper, miniUserService, scenicSpotMapper, meetingPointMapper, pricingMapper,
-                guideUserMapper, platformSettingsService, notificationService, orderRefundService);
+                guideUserMapper, platformSettingsService, notificationService, orderRefundService,
+                matchingService, false);
     }
 
     @Test
     void createShouldKeepOrderPendingPaymentUntilPaymentSucceeds() {
+        MiniOrderCreateRequest request = prepareCreateOrder();
+
+        TourOrderResponse response = commandService.create(7L, request);
+
+        ArgumentCaptor<TourOrder> captor = ArgumentCaptor.forClass(TourOrder.class);
+        verify(orderMapper).insert(captor.capture());
+        TourOrder order = captor.getValue();
+        assertThat(order.getStatus()).isEqualTo(OrderStatus.PENDING_PAYMENT.getCode());
+        assertThat(order.getPaymentMethod()).isNull();
+        assertThat(order.getPaymentOrderNo()).isNull();
+        assertThat(order.getPaymentAmount()).isNull();
+        assertThat(order.getPaymentTime()).isNull();
+        assertThat(order.getSettlementDays()).isEqualTo(7);
+        assertThat(response.getStatus()).isEqualTo(OrderStatus.PENDING_PAYMENT.getCode());
+        verify(matchingService, never()).match(any());
+    }
+
+    @Test
+    void createShouldRejectVisitorWithUnfinishedOrder() {
+        MiniUser visitor = new MiniUser();
+        visitor.setId(7L);
+        when(miniUserService.findEnabledById(7L)).thenReturn(visitor);
+        when(orderMapper.selectCount(any())).thenReturn(1L);
+
+        assertThatThrownBy(() -> commandService.create(7L, new MiniOrderCreateRequest()))
+                .isInstanceOf(com.tourguide.common.exception.BusinessException.class)
+                .hasMessage("您有一个未完成的订单,请先完成或取消后再下单");
+
+        verify(orderMapper, never()).insert(any(TourOrder.class));
+    }
+
+    @Test
+    void createShouldMarkOrderPaidAndStartMatchingWhenPaymentIsSkipped() {
+        MiniOrderCreateRequest request = prepareCreateOrder();
+        commandService = new MiniTourOrderCommandService(
+                orderMapper, miniUserService, scenicSpotMapper, meetingPointMapper, pricingMapper,
+                guideUserMapper, platformSettingsService, notificationService, orderRefundService,
+                matchingService, true);
+
+        TourOrderResponse response = commandService.create(7L, request);
+
+        ArgumentCaptor<TourOrder> captor = ArgumentCaptor.forClass(TourOrder.class);
+        verify(orderMapper).insert(captor.capture());
+        TourOrder order = captor.getValue();
+        assertThat(order.getStatus()).isEqualTo(OrderStatus.PENDING_ACCEPT.getCode());
+        assertThat(order.getPaymentMethod()).isEqualTo(PaymentMethod.TEMPORARY_BYPASS.getCode());
+        assertThat(order.getPaymentOrderNo()).startsWith("TEMPMJ");
+        assertThat(order.getPaymentAmount()).isEqualByComparingTo("144.00");
+        assertThat(order.getPaymentTime()).isNotNull();
+        assertThat(response.getStatus()).isEqualTo(OrderStatus.PENDING_ACCEPT.getCode());
+        verify(matchingService).match(99L);
+    }
+
+    @Test
+    void cancelPendingMeetingOrderShouldNotifyAssignedGuide() {
+        MiniUser visitor = new MiniUser();
+        visitor.setId(7L);
+        when(miniUserService.findEnabledById(7L)).thenReturn(visitor);
+
+        TourOrder order = new TourOrder();
+        order.setId(99L);
+        order.setOrderNo("MJ202607300001");
+        order.setVisitorId(7L);
+        order.setGuideId(8L);
+        order.setStatus(OrderStatus.PENDING_MEETING.getCode());
+        order.setPaymentTime(LocalDateTime.now());
+        order.setPaymentAmount(new BigDecimal("36.00"));
+        when(orderMapper.selectForUpdate(99L)).thenReturn(order);
+
+        commandService.cancel(7L, 99L);
+
+        assertThat(order.getStatus()).isEqualTo(OrderStatus.CANCELLED.getCode());
+        verify(orderRefundService).requestRefund(order);
+        verify(notificationService).notifyVisitorCancelledOrder(order);
+    }
+
+    private MiniOrderCreateRequest prepareCreateOrder() {
         MiniUser visitor = new MiniUser();
         visitor.setId(7L);
         visitor.setNickname("游客");
@@ -89,6 +171,9 @@
         pricing.setDiscountPrice(new BigDecimal("36.00"));
         pricing.setMaxParticipants(10);
         when(pricingMapper.selectOne(any())).thenReturn(pricing);
+        PlatformSettingsResponse settings = new PlatformSettingsResponse();
+        settings.setSettlementDays(7);
+        when(platformSettingsService.getSettings()).thenReturn(settings);
         doAnswer(invocation -> {
             TourOrder order = invocation.getArgument(0);
             order.setId(99L);
@@ -100,54 +185,6 @@
         request.setMeetingPointId(12L);
         request.setServicePackageId(13L);
         request.setPeopleCount(4);
-
-        TourOrderResponse response = commandService.create(7L, request);
-
-        ArgumentCaptor<TourOrder> captor = ArgumentCaptor.forClass(TourOrder.class);
-        verify(orderMapper).insert(captor.capture());
-        TourOrder order = captor.getValue();
-        assertThat(order.getStatus()).isEqualTo(OrderStatus.PENDING_PAYMENT.getCode());
-        assertThat(order.getPaymentMethod()).isNull();
-        assertThat(order.getPaymentOrderNo()).isNull();
-        assertThat(order.getPaymentAmount()).isNull();
-        assertThat(order.getPaymentTime()).isNull();
-        assertThat(response.getStatus()).isEqualTo(OrderStatus.PENDING_PAYMENT.getCode());
-    }
-
-    @Test
-    void createShouldRejectVisitorWithUnfinishedOrder() {
-        MiniUser visitor = new MiniUser();
-        visitor.setId(7L);
-        when(miniUserService.findEnabledById(7L)).thenReturn(visitor);
-        when(orderMapper.selectCount(any())).thenReturn(1L);
-
-        assertThatThrownBy(() -> commandService.create(7L, new MiniOrderCreateRequest()))
-                .isInstanceOf(com.tourguide.common.exception.BusinessException.class)
-                .hasMessage("您有一个未完成的订单,请先完成或取消后再下单");
-
-        verify(orderMapper, never()).insert(any(TourOrder.class));
-    }
-
-    @Test
-    void cancelPendingMeetingOrderShouldNotifyAssignedGuide() {
-        MiniUser visitor = new MiniUser();
-        visitor.setId(7L);
-        when(miniUserService.findEnabledById(7L)).thenReturn(visitor);
-
-        TourOrder order = new TourOrder();
-        order.setId(99L);
-        order.setOrderNo("MJ202607300001");
-        order.setVisitorId(7L);
-        order.setGuideId(8L);
-        order.setStatus(OrderStatus.PENDING_MEETING.getCode());
-        order.setPaymentTime(LocalDateTime.now());
-        order.setPaymentAmount(new BigDecimal("36.00"));
-        when(orderMapper.selectForUpdate(99L)).thenReturn(order);
-
-        commandService.cancel(7L, 99L);
-
-        assertThat(order.getStatus()).isEqualTo(OrderStatus.CANCELLED.getCode());
-        verify(orderRefundService).requestRefund(order);
-        verify(notificationService).notifyVisitorCancelledOrder(order);
+        return request;
     }
 }

--
Gitblit v1.7.1