package cn.iocoder.yudao.module.mes.service.wm.productsales;
|
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
|
import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderItemRespDTO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.*;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesMapper;
|
import cn.iocoder.yudao.module.mes.enums.wm.MesWmProductSalesStatusEnum;
|
import cn.iocoder.yudao.module.mes.service.wm.stockreserve.MesWmStockReserveService;
|
import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
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.mockito.Mockito.*;
|
|
@ExtendWith(MockitoExtension.class)
|
class MesWmProductSalesOrderWritebackTest {
|
@InjectMocks private MesWmProductSalesServiceImpl service;
|
@Mock private MesWmProductSalesMapper mapper;
|
@Mock private MesWmProductSalesLineService lines;
|
@Mock private MesWmProductSalesDetailService details;
|
@Mock private MesWmStockReserveService reserves;
|
@Mock private MesWmTransactionService transactions;
|
@Mock private MesWmSalesReelGuard reelGuard;
|
@Mock private ErpSaleOrderApi orders;
|
|
@Test void completedSaleWritesQuantityToSelectedOrderItem() {
|
when(mapper.selectById(1L)).thenReturn(MesWmProductSalesDO.builder().id(1L).code("TEST")
|
.status(MesWmProductSalesStatusEnum.APPROVED.getStatus()).build());
|
var line = MesWmProductSalesLineDO.builder().id(2L).salesId(1L).saleOrderItemId(3L)
|
.quantity(BigDecimal.ONE).build();
|
when(lines.getProductSalesLineListBySalesId(1L)).thenReturn(List.of(line));
|
when(lines.getProductSalesLine(2L)).thenReturn(line);
|
when(details.getProductSalesDetailListBySalesId(1L)).thenReturn(List.of(
|
MesWmProductSalesDetailDO.builder().lineId(2L).batchId(5L).quantity(BigDecimal.ONE).build()));
|
var item = new ErpSaleOrderItemRespDTO();
|
item.setOrderId(4L);
|
when(orders.getSaleOrderItem(3L)).thenReturn(CommonResult.success(item));
|
service.finishProductSales(1L);
|
verify(orders).updateOrderItemOutCount(3L, BigDecimal.ONE);
|
verify(orders).updateOrderOutStatus(4L);
|
verify(reelGuard).validate(line, 5L);
|
}
|
}
|