| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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()); |
| | | } |
| | | |
| | | } |