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