package com.tourguide.modules.user.service;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.tourguide.common.api.PageResponse;
|
import com.tourguide.modules.order.dto.VisitorOrderStatRow;
|
import com.tourguide.modules.order.mapper.TourOrderMapper;
|
import com.tourguide.modules.review.dto.VisitorReviewStatRow;
|
import com.tourguide.modules.review.mapper.OrderReviewMapper;
|
import com.tourguide.modules.user.dto.MiniUserDetailResponse;
|
import com.tourguide.modules.user.dto.MiniUserResponse;
|
import com.tourguide.modules.user.entity.MiniUser;
|
import com.tourguide.modules.user.mapper.MiniUserMapper;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
|
import java.math.BigDecimal;
|
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.when;
|
|
class MiniUserServiceStatsTest {
|
private MiniUserMapper userMapper;
|
private TourOrderMapper orderMapper;
|
private OrderReviewMapper reviewMapper;
|
private MiniUserService userService;
|
|
@BeforeEach
|
void setUp() {
|
userMapper = mock(MiniUserMapper.class);
|
orderMapper = mock(TourOrderMapper.class);
|
reviewMapper = mock(OrderReviewMapper.class);
|
userService = new MiniUserService(userMapper, orderMapper, reviewMapper);
|
}
|
|
@Test
|
void pageShouldReturnVisitorOrderCount() {
|
MiniUser user = miniUser(7L);
|
Page<MiniUser> page = new Page<MiniUser>(1, 10);
|
page.setRecords(Collections.singletonList(user));
|
page.setTotal(1L);
|
when(userMapper.selectPage(any(), any())).thenReturn(page);
|
when(orderMapper.selectVisitorOrderStats(any())).thenReturn(Collections.singletonList(orderStat(7L, 1L)));
|
when(reviewMapper.selectVisitorReviewStats(any())).thenReturn(Collections.emptyList());
|
|
PageResponse<MiniUserResponse> response = userService.page(1, 10, null, null, null, null);
|
|
assertThat(response.getRecords()).hasSize(1);
|
assertThat(response.getRecords().get(0).getOrderCount()).isEqualTo(1L);
|
}
|
|
@Test
|
void detailShouldReturnVisitorConsumptionStats() {
|
MiniUser user = miniUser(7L);
|
when(userMapper.selectById(7L)).thenReturn(user);
|
when(orderMapper.selectVisitorOrderStats(any())).thenReturn(Collections.singletonList(orderStat(7L, 1L)));
|
when(reviewMapper.selectVisitorReviewStats(any())).thenReturn(Collections.singletonList(reviewStat(7L, 2L)));
|
|
MiniUserDetailResponse response = userService.detail(7L);
|
|
assertThat(response.getOrderCount()).isEqualTo(1L);
|
assertThat(response.getTotalConsumption()).isEqualByComparingTo("36.00");
|
assertThat(response.getReviewCount()).isEqualTo(2L);
|
}
|
|
private MiniUser miniUser(Long id) {
|
MiniUser user = new MiniUser();
|
user.setId(id);
|
user.setUsername("mini_" + id);
|
user.setNickname("Visitor " + id);
|
user.setStatus(1);
|
return user;
|
}
|
|
private VisitorOrderStatRow orderStat(Long visitorId, Long orderCount) {
|
VisitorOrderStatRow row = new VisitorOrderStatRow();
|
row.setVisitorId(visitorId);
|
row.setOrderCount(orderCount);
|
row.setTotalConsumption(new BigDecimal("36.00"));
|
return row;
|
}
|
|
private VisitorReviewStatRow reviewStat(Long visitorId, Long reviewCount) {
|
VisitorReviewStatRow row = new VisitorReviewStatRow();
|
row.setVisitorId(visitorId);
|
row.setReviewCount(reviewCount);
|
return row;
|
}
|
}
|