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));
|
}
|
}
|