package cn.iocoder.yudao.module.mes.service.wm.salesnotice;
|
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
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.controller.admin.wm.salesnotice.vo.line.MesWmSalesNoticeLineSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeLineDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.salesnotice.MesWmSalesNoticeLineMapper;
|
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
|
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 static cn.iocoder.yudao.module.mes.enums.wm.MesWmSalesNoticeStatusEnum.PREPARE;
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.Mockito.*;
|
|
@ExtendWith(MockitoExtension.class)
|
class MesWmSalesNoticeLineReelTest {
|
@InjectMocks private MesWmSalesNoticeLineServiceImpl service;
|
@Mock private MesWmSalesNoticeService noticeService;
|
@Mock private MesWmSalesNoticeLineMapper mapper;
|
@Mock private ErpSaleOrderApi saleOrderApi;
|
@Mock private MesMdmItemService itemService;
|
|
private MesWmSalesNoticeLineSaveReqVO request() {
|
var req = new MesWmSalesNoticeLineSaveReqVO();
|
req.setNoticeId(1L);
|
req.setItemId(3L);
|
when(noticeService.getSalesNotice(1L)).thenReturn(MesWmSalesNoticeDO.builder()
|
.id(1L).saleOrderId(2L).status(PREPARE.getStatus()).build());
|
return req;
|
}
|
|
@Test
|
void linkedNoticeRequiresExplicitSalesItem() {
|
var req = request();
|
assertThrows(ServiceException.class, () -> service.createSalesNoticeLine(req));
|
verifyNoInteractions(saleOrderApi);
|
}
|
|
@Test
|
void linkedNoticeRequiresMatchingOrderAndProduct() {
|
var req = request();
|
req.setSaleOrderItemId(4L);
|
var item = new ErpSaleOrderItemRespDTO();
|
item.setOrderId(2L);
|
item.setProductId(99L);
|
when(saleOrderApi.getSaleOrderItem(4L)).thenReturn(CommonResult.success(item));
|
assertThrows(ServiceException.class, () -> service.createSalesNoticeLine(req));
|
item.setProductId(3L);
|
service.createSalesNoticeLine(req);
|
var saved = ArgumentCaptor.forClass(MesWmSalesNoticeLineDO.class);
|
verify(mapper).insert(saved.capture());
|
assertEquals(4L, saved.getValue().getSaleOrderItemId());
|
}
|
}
|