云
2026-10-28 dd637406e18a7afbf08d323c6ece913fe545b7ad
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
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());
    }
}