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());
|
}
|
|
}
|