云
2026-10-29 0a2206a53d5889b6095f4819c263be858d86ca91
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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);
    }
}