liu
2 天以前 a67dab8161c7428aa7cbd6f9051dd5ae77af4ed8
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package cn.iocoder.yudao.module.erp.service.sale;
 
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOrderItemMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOrderMapper;
import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mdm.enums.MdmItemTypeEnum;
import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
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.util.List;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
 
@ExtendWith(MockitoExtension.class)
class ErpSaleOrderServiceImplTest {
 
    @Mock
    private ErpSaleOrderMapper saleOrderMapper;
    @Mock
    private ErpSaleOrderItemMapper saleOrderItemMapper;
    @Mock
    private MdmItemApi mdmItemApi;
    @Mock
    private MesProMpsApi mpsApi;
 
    @InjectMocks
    private ErpSaleOrderServiceImpl saleOrderService;
 
    @Test
    void updateSaleOrderStatus_materialItem_shouldApproveWithoutCreatingMps() {
        Long orderId = 1L;
        Long itemId = 10L;
        Long materialId = 20L;
        ErpSaleOrderDO order = ErpSaleOrderDO.builder()
                .id(orderId)
                .status(ErpAuditStatus.PROCESS.getStatus())
                .build();
        ErpSaleOrderItemDO orderItem = ErpSaleOrderItemDO.builder()
                .id(itemId)
                .orderId(orderId)
                .productId(materialId)
                .needProduction(1)
                .build();
        MdmItemRespDTO material = new MdmItemRespDTO();
        material.setId(materialId);
        material.setItemType(MdmItemTypeEnum.MATERIAL.getType());
 
        when(saleOrderMapper.selectById(orderId)).thenReturn(order);
        when(saleOrderMapper.updateByIdAndStatus(eq(orderId), eq(ErpAuditStatus.PROCESS.getStatus()),
                any(ErpSaleOrderDO.class))).thenReturn(1);
        when(saleOrderItemMapper.selectListByOrderId(orderId)).thenReturn(List.of(orderItem));
        when(mdmItemApi.getItem(materialId)).thenReturn(CommonResult.success(material));
 
        saleOrderService.updateSaleOrderStatus(orderId, ErpAuditStatus.APPROVE.getStatus());
 
        ArgumentCaptor<ErpSaleOrderItemDO> itemCaptor = ArgumentCaptor.forClass(ErpSaleOrderItemDO.class);
        verify(saleOrderItemMapper).updateById(itemCaptor.capture());
        assertEquals(itemId, itemCaptor.getValue().getId());
        assertEquals(0, itemCaptor.getValue().getNeedProduction());
        verify(mpsApi, never()).createMps(any());
    }
 
}