package com.tourguide.modules.order.service;
|
|
import com.tourguide.modules.operation.service.PlatformSettingsService;
|
import com.tourguide.modules.order.domain.OrderStatus;
|
import com.tourguide.modules.order.entity.TourOrder;
|
import com.tourguide.modules.order.mapper.TourOrderMapper;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
|
import java.math.BigDecimal;
|
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class OrderAutoRefundServiceTest {
|
private TourOrderMapper orderMapper;
|
private OrderRefundService orderRefundService;
|
private OrderAutoRefundService autoRefundService;
|
|
@BeforeEach
|
void setUp() {
|
orderMapper = mock(TourOrderMapper.class);
|
orderRefundService = mock(OrderRefundService.class);
|
autoRefundService = new OrderAutoRefundService(
|
orderMapper, mock(PlatformSettingsService.class), orderRefundService);
|
}
|
|
@Test
|
void shouldRequestRefundAfterClaimingOrder() {
|
TourOrder order = paidCancelledOrder();
|
when(orderMapper.claimUnacceptedOrderForRefund(9L)).thenReturn(1);
|
when(orderMapper.selectById(9L)).thenReturn(order);
|
|
autoRefundService.refundIfStillUnaccepted(9L);
|
|
verify(orderRefundService).requestRefund(order);
|
}
|
|
@Test
|
void shouldSkipRefundWhenOrderWasAlreadyAccepted() {
|
when(orderMapper.claimUnacceptedOrderForRefund(9L)).thenReturn(0);
|
|
autoRefundService.refundIfStillUnaccepted(9L);
|
|
verify(orderMapper, never()).selectById(9L);
|
verify(orderRefundService, never()).requestRefund(org.mockito.ArgumentMatchers.any());
|
}
|
|
private TourOrder paidCancelledOrder() {
|
TourOrder order = new TourOrder();
|
order.setId(9L);
|
order.setOrderNo("MJ202607290009");
|
order.setStatus(OrderStatus.CANCELLED.getCode());
|
order.setPaymentMethod("WECHAT");
|
order.setPaymentOrderNo("PY202608031700000000000000000001");
|
order.setAmount(new BigDecimal("40.00"));
|
order.setPaymentAmount(new BigDecimal("36.00"));
|
return order;
|
}
|
}
|