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.qc.ncr.MesQcPurchaseReturnDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ncr.MesQcPurchaseConcessionDO;
|
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.ncr.MesQcPurchaseReturnMapper;
|
import cn.iocoder.yudao.module.mes.dal.mysql.qc.ncr.MesQcPurchaseConcessionMapper;
|
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.any;
|
import static org.mockito.Mockito.*;
|
|
class MesQcPurchaseReturnServiceTest {
|
@Test void createsTraceableWaitingDocumentAndRequiresWarehouseConfirmation() {
|
var service = new MesQcPurchaseReturnService();
|
var validator = mock(MesQcNcrPurchaseSourceValidator.class);
|
var mapper = mock(MesQcPurchaseReturnMapper.class);
|
var concessions = mock(MesQcPurchaseConcessionMapper.class);
|
ReflectionTestUtils.setField(service, "sourceValidator", validator);
|
ReflectionTestUtils.setField(service, "mapper", mapper);
|
ReflectionTestUtils.setField(service, "concessionMapper", concessions);
|
var ncr = new MesQcNcrDO().setId(1L).setQcId(2L).setItemId(3L).setUnqualifiedQuantity(BigDecimal.TEN);
|
var iqc = new MesQcIqcDO().setId(2L).setVendorBatch("B1");
|
var notice = new MesWmArrivalNoticeDO().setId(4L).setVendorId(5L).setPurchaseOrderId(6L);
|
var line = new MesWmArrivalNoticeLineDO().setId(7L).setPurchaseOrderItemId(8L);
|
when(validator.validate(ncr)).thenReturn(new MesQcNcrPurchaseSourceValidator.Source(iqc, notice, line));
|
var doc = service.createForNcr(ncr);
|
assertEquals(0, doc.getStatus());
|
assertEquals(8L, doc.getPurchaseOrderItemId());
|
assertEquals(BigDecimal.TEN, doc.getQuantity());
|
verify(mapper).insert(any(MesQcPurchaseReturnDO.class));
|
when(mapper.selectByNcrId(1L)).thenReturn(doc);
|
assertThrows(ServiceException.class, () -> service.createForNcr(ncr));
|
assertThrows(ServiceException.class, () -> service.validateConfirmed(1L));
|
doc.setStatus(1);
|
assertDoesNotThrow(() -> service.validateConfirmed(1L));
|
when(mapper.selectByNcrId(1L)).thenReturn(null);
|
when(concessions.selectByIqcId(2L)).thenReturn(new MesQcPurchaseConcessionDO());
|
assertThrows(ServiceException.class, () -> service.createForNcr(ncr));
|
verify(mapper, times(1)).insert(any(MesQcPurchaseReturnDO.class));
|
}
|
}
|