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);
|
}
|
}
|
}
|