package cn.iocoder.yudao.module.mes.service.wm.returnsales;
|
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDetailDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesMapper;
|
import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
|
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
|
import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
|
import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.mockito.ArgumentCaptor;
|
import org.mockito.InjectMocks;
|
import org.mockito.Mock;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
import java.math.BigDecimal;
|
import java.util.List;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.ArgumentMatchers.*;
|
import static org.mockito.Mockito.*;
|
|
@ExtendWith(MockitoExtension.class)
|
class MesWmReturnSalesStockTest {
|
@InjectMocks private MesWmReturnSalesServiceImpl service;
|
@Mock private MesWmReturnSalesMapper mapper;
|
@Mock private MesWmReturnSalesLineService lineService;
|
@Mock private MesWmReturnSalesDetailService detailService;
|
@Mock private MesMdmItemService itemService;
|
@Mock private MesWmTransactionService transactionService;
|
|
private void setup(BigDecimal quantity) {
|
when(mapper.selectById(1L)).thenReturn(MesWmReturnSalesDO.builder().id(1L).code("TEST")
|
.status(MesWmReturnSalesStatusEnum.APPROVED.getStatus()).build());
|
when(lineService.getReturnSalesLineListByReturnId(1L)).thenReturn(List.of(
|
MesWmReturnSalesLineDO.builder().id(2L).itemId(3L).quantity(BigDecimal.ONE).build()));
|
when(detailService.getReturnSalesDetailListByReturnId(1L)).thenReturn(List.of(
|
MesWmReturnSalesDetailDO.builder().lineId(2L).itemId(3L).quantity(quantity)
|
.batchId(4L).batchCode("TEST-BATCH").warehouseId(5L).build()));
|
}
|
|
@Test void rejectsExcessStocking() {
|
setup(BigDecimal.TWO);
|
when(itemService.validateItemExistsAndEnable(3L)).thenReturn(MesMdmItemDO.builder().code("TEST").name("test").build());
|
assertThrows(ServiceException.class, () -> service.stockReturnSales(1L));
|
verifyNoInteractions(transactionService);
|
}
|
|
@Test void preservesBatchOnStockTransaction() {
|
setup(BigDecimal.ONE);
|
service.stockReturnSales(1L);
|
ArgumentCaptor<List<MesWmTransactionSaveReqDTO>> captor = ArgumentCaptor.forClass(List.class);
|
verify(transactionService).createTransactionList(captor.capture());
|
assertEquals(4L, captor.getValue().get(0).getBatchId());
|
assertEquals("TEST-BATCH", captor.getValue().get(0).getBatchCode());
|
assertEquals(BigDecimal.ONE, captor.getValue().get(0).getQuantity());
|
}
|
}
|