liujie
2026-09-15 ad491191ab50a259da548863d805c57d8a95d083
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package com.tourguide.modules.order.service;
 
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tourguide.modules.order.entity.TourOrder;
import com.tourguide.modules.order.mapper.TourOrderMapper;
import com.tourguide.modules.review.entity.OrderReview;
import com.tourguide.modules.review.mapper.OrderReviewMapper;
import org.apache.ibatis.builder.MapperBuilderAssistant;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
 
import java.util.Collections;
 
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
 
class MiniTourOrderServiceTest {
    private TourOrderMapper orderMapper;
    private OrderReviewMapper reviewMapper;
    private MiniTourOrderService orderService;
 
    @BeforeEach
    void setUp() {
        initializeTableInfo();
        orderMapper = mock(TourOrderMapper.class);
        reviewMapper = mock(OrderReviewMapper.class);
        orderService = new MiniTourOrderService(orderMapper, reviewMapper);
    }
 
    @Test
    void reviewedOrderQueryShouldOnlyIncludeVisibleReviews() {
        TourOrder order = new TourOrder();
        order.setId(1L);
        order.setVisitorId(7L);
        order.setStatus("COMPLETED");
        Page<TourOrder> page = new Page<>(1, 10);
        page.setRecords(Collections.singletonList(order));
        page.setTotal(1);
        when(orderMapper.selectPage(any(Page.class), any())).thenReturn(page);
        when(reviewMapper.selectList(any())).thenReturn(Collections.emptyList());
 
        orderService.page(7L, "completed", 1, 10);
 
        ArgumentCaptor<LambdaQueryWrapper<OrderReview>> queryCaptor = ArgumentCaptor.forClass(LambdaQueryWrapper.class);
        verify(reviewMapper).selectList(queryCaptor.capture());
        assertThat(queryCaptor.getValue().getSqlSegment()).contains("status");
    }
 
    @Test
    void pendingGuideTabShouldOnlyIncludeOrdersWaitingForMeeting() {
        Page<TourOrder> page = new Page<>(1, 10);
        page.setRecords(Collections.emptyList());
        when(orderMapper.selectPage(any(Page.class), any())).thenReturn(page);
 
        orderService.page(7L, "pendingGuide", 1, 10);
 
        ArgumentCaptor<LambdaQueryWrapper<TourOrder>> queryCaptor = ArgumentCaptor.forClass(LambdaQueryWrapper.class);
        verify(orderMapper).selectPage(any(Page.class), queryCaptor.capture());
        assertThat(queryCaptor.getValue().getSqlSegment())
                .contains("status =")
                .doesNotContain(" IN ");
    }
 
    private static void initializeTableInfo() {
        if (TableInfoHelper.getTableInfo(TourOrder.class) == null) {
            TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), TourOrder.class);
        }
        if (TableInfoHelper.getTableInfo(OrderReview.class) == null) {
            TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), OrderReview.class);
        }
    }
}