package com.tourguide.modules.order.service;
|
|
import com.tourguide.modules.operation.dto.PlatformSettingsResponse;
|
import com.tourguide.modules.operation.service.PlatformSettingsService;
|
import com.tourguide.modules.order.entity.TourOrder;
|
import com.tourguide.modules.user.entity.GuideTeam;
|
import com.tourguide.modules.user.entity.GuideUser;
|
import com.tourguide.modules.user.mapper.GuideTeamMapper;
|
import com.tourguide.modules.user.service.GuideUserService;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
|
import java.math.BigDecimal;
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.when;
|
|
class GuideOrderEarningSnapshotServiceTest {
|
private GuideTeamMapper teamMapper;
|
private PlatformSettingsService settingsService;
|
private GuideOrderEarningSnapshotService service;
|
|
@BeforeEach
|
void setUp() {
|
teamMapper = mock(GuideTeamMapper.class);
|
settingsService = mock(PlatformSettingsService.class);
|
service = new GuideOrderEarningSnapshotService(
|
mock(GuideUserService.class), teamMapper, settingsService);
|
}
|
|
@Test
|
void shouldUsePlatformCommissionForPersonalGuide() {
|
PlatformSettingsResponse settings = new PlatformSettingsResponse();
|
settings.setCommissionRate(new BigDecimal("15.00"));
|
when(settingsService.getSettings()).thenReturn(settings);
|
GuideUser guide = new GuideUser();
|
TourOrder order = paidOrder("100.00");
|
|
service.apply(order, guide);
|
|
assertThat(order.getCommissionSource()).isEqualTo("PERSONAL");
|
assertThat(order.getCommissionTeamId()).isNull();
|
assertThat(order.getCommissionRate()).isEqualByComparingTo("15.00");
|
assertThat(order.getGuideEarningAmount()).isEqualByComparingTo("85.00");
|
}
|
|
@Test
|
void shouldUseTeamCommissionForTeamGuide() {
|
GuideUser guide = new GuideUser();
|
guide.setTeamId(6L);
|
GuideTeam team = new GuideTeam();
|
team.setId(6L);
|
team.setStatus(1);
|
team.setCommissionRatio(new BigDecimal("20.00"));
|
when(teamMapper.selectById(6L)).thenReturn(team);
|
TourOrder order = paidOrder("100.00");
|
|
service.apply(order, guide);
|
|
assertThat(order.getCommissionSource()).isEqualTo("TEAM");
|
assertThat(order.getCommissionTeamId()).isEqualTo(6L);
|
assertThat(order.getCommissionRate()).isEqualByComparingTo("20.00");
|
assertThat(order.getGuideEarningAmount()).isEqualByComparingTo("80.00");
|
}
|
|
private TourOrder paidOrder(String amount) {
|
TourOrder order = new TourOrder();
|
order.setAmount(new BigDecimal(amount));
|
order.setPaymentAmount(new BigDecimal(amount));
|
return order;
|
}
|
}
|