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/MiniTourOrderCommandServiceTest.java | 138 +++++++++++++++++++++++++++++----------------
1 files changed, 88 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..217825a 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,93 @@
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());
+ assertThat(order.getCancelledAt()).isNotNull();
+ verify(orderRefundService).requestRefund(order);
+ verify(notificationService).notifyVisitorCancelledOrder(order);
+ }
+
+ private MiniOrderCreateRequest prepareCreateOrder() {
MiniUser visitor = new MiniUser();
visitor.setId(7L);
visitor.setNickname("游客");
@@ -89,6 +172,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 +186,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