package cn.iocoder.yudao.module.mes.service.wm.productsales;
|
|
import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLineSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeLineDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesLineMapper;
|
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
|
import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService;
|
import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
|
import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderItemRespDTO;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.module.mes.service.wm.salesnotice.MesWmSalesNoticeLineService;
|
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.math.BigDecimal;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.mockito.ArgumentMatchers.*;
|
import static org.mockito.Mockito.*;
|
|
@ExtendWith(MockitoExtension.class)
|
class MesWmProductSalesLineReelTest {
|
@InjectMocks private MesWmProductSalesLineServiceImpl service;
|
@Mock private MesWmProductSalesLineMapper mapper;
|
@Mock private MesWmProductSalesService salesService;
|
@Mock private MesWmSalesNoticeLineService noticeService;
|
@Mock private MesMdmItemService itemService;
|
@Mock private MesQcOqcService oqcService;
|
@Mock private ErpSaleOrderApi saleOrderApi;
|
|
@Test
|
void directSaleRetainsSelectedOrderItem() {
|
var req = new MesWmProductSalesLineSaveReqVO();
|
req.setSalesId(1L);
|
req.setSaleOrderItemId(5L);
|
req.setItemId(3L);
|
req.setQuantity(BigDecimal.ONE);
|
when(salesService.validateProductSalesExistsAndDraft(1L))
|
.thenReturn(MesWmProductSalesDO.builder().id(1L).saleOrderId(4L).build());
|
var item = new ErpSaleOrderItemRespDTO();
|
item.setId(5L);
|
item.setOrderId(4L);
|
item.setProductId(3L);
|
when(saleOrderApi.getSaleOrderItem(5L)).thenReturn(CommonResult.success(item));
|
service.createProductSalesLine(req);
|
var line = ArgumentCaptor.forClass(MesWmProductSalesLineDO.class);
|
verify(mapper).insert(line.capture());
|
assertEquals(5L, line.getValue().getSaleOrderItemId());
|
}
|
|
@Test
|
void directSaleRejectsItemFromAnotherOrder() {
|
var req = new MesWmProductSalesLineSaveReqVO();
|
req.setSalesId(1L);
|
req.setSaleOrderItemId(5L);
|
req.setItemId(3L);
|
req.setQuantity(BigDecimal.ONE);
|
when(salesService.validateProductSalesExistsAndDraft(1L))
|
.thenReturn(MesWmProductSalesDO.builder().id(1L).saleOrderId(4L).build());
|
var item = new ErpSaleOrderItemRespDTO();
|
item.setOrderId(99L);
|
item.setProductId(3L);
|
when(saleOrderApi.getSaleOrderItem(5L)).thenReturn(CommonResult.success(item));
|
assertThrows(RuntimeException.class, () -> service.createProductSalesLine(req));
|
verify(mapper, never()).insert(any(MesWmProductSalesLineDO.class));
|
}
|
|
private MesWmProductSalesLineSaveReqVO request() {
|
var req = new MesWmProductSalesLineSaveReqVO();
|
req.setSalesId(1L);
|
req.setNoticeLineId(2L);
|
req.setItemId(3L);
|
req.setQuantity(BigDecimal.ONE);
|
when(salesService.validateProductSalesExistsAndDraft(1L))
|
.thenReturn(MesWmProductSalesDO.builder().id(1L).noticeId(4L).build());
|
when(noticeService.validateSalesNoticeLineExists(2L, 4L))
|
.thenReturn(MesWmSalesNoticeLineDO.builder().id(2L).itemId(3L)
|
.quantity(BigDecimal.ONE).saleOrderItemId(5L).build());
|
return req;
|
}
|
|
@Test
|
void createRetainsSalesItemForReelGuard() {
|
service.createProductSalesLine(request());
|
var line = ArgumentCaptor.forClass(MesWmProductSalesLineDO.class);
|
verify(mapper).insert(line.capture());
|
assertEquals(5L, line.getValue().getSaleOrderItemId());
|
}
|
|
@Test
|
void enablingInspectionRetainsSalesItemForOqc() {
|
var req = request();
|
req.setId(6L);
|
req.setOqcCheckFlag(true);
|
when(mapper.selectById(6L)).thenReturn(MesWmProductSalesLineDO.builder()
|
.id(6L).salesId(1L).oqcCheckFlag(false).build());
|
when(salesService.getProductSales(1L)).thenReturn(MesWmProductSalesDO.builder().id(1L).build());
|
when(oqcService.createOqcFromProductSales(eq(1L), any(), any(), any())).thenReturn(7L);
|
service.updateProductSalesLine(req);
|
var line = ArgumentCaptor.forClass(MesWmProductSalesLineDO.class);
|
verify(oqcService).createOqcFromProductSales(eq(1L), line.capture(), any(), any());
|
assertEquals(5L, line.getValue().getSaleOrderItemId());
|
}
|
}
|