云
4 天以前 f02d0df2f1dfc7a8b775cf50d45375e57628a5ef
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
package cn.iocoder.yudao.module.mes.service.qc.ncr;
 
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.iqc.MesQcIqcDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ncr.MesQcNcrDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.iqc.MesQcIqcMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.arrivalnotice.MesWmArrivalNoticeLineMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.arrivalnotice.MesWmArrivalNoticeMapper;
import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum;
import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmArrivalNoticeStatusEnum;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.math.BigDecimal;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
 
class MesQcNcrPurchaseSourceValidatorTest {
    @Test void verifiesAllSourceLinksAndQuantities() {
        var validator = new MesQcNcrPurchaseSourceValidator();
        var iqcs = mock(MesQcIqcMapper.class);
        var notices = mock(MesWmArrivalNoticeMapper.class);
        var lines = mock(MesWmArrivalNoticeLineMapper.class);
        ReflectionTestUtils.setField(validator, "iqcMapper", iqcs);
        ReflectionTestUtils.setField(validator, "arrivalNoticeMapper", notices);
        ReflectionTestUtils.setField(validator, "lineMapper", lines);
        var ncr = new MesQcNcrDO().setQcType(MesQcTypeEnum.IQC.getType()).setQcId(1L)
                .setItemId(4L).setUnqualifiedQuantity(BigDecimal.TEN);
        var iqc = new MesQcIqcDO().setId(1L).setSourceDocType(MesBizTypeConstants.WM_ARRIVAL_NOTICE)
                .setSourceDocId(2L).setSourceLineId(3L).setItemId(4L)
                .setUnqualifiedQuantity(BigDecimal.TEN).setCheckQuantity(BigDecimal.valueOf(100))
                .setStatus(MesQcStatusEnum.FINISHED.getStatus());
        var notice = new MesWmArrivalNoticeDO().setId(2L).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus());
        var line = new MesWmArrivalNoticeLineDO().setId(3L).setNoticeId(2L).setIqcId(1L)
                .setItemId(4L).setArrivalQuantity(BigDecimal.valueOf(100));
        when(iqcs.selectOne(any(Wrapper.class))).thenReturn(iqc);
        when(notices.selectOne(any(Wrapper.class))).thenReturn(notice);
        when(lines.selectOne(any(Wrapper.class))).thenReturn(line);
        assertDoesNotThrow(() -> validator.validate(ncr));
        line.setIqcId(9L);
        assertThrows(ServiceException.class, () -> validator.validate(ncr));
        line.setIqcId(1L).setArrivalQuantity(BigDecimal.valueOf(101));
        assertThrows(ServiceException.class, () -> validator.validate(ncr));
    }
}