云
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
51
52
53
54
55
56
57
58
59
60
61
62
63
package cn.iocoder.yudao.module.mes.service.qc.ncr;
 
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.module.mes.controller.admin.qc.ncr.vo.MesQcNcrDisposeReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineSaveReqVO;
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.wm.arrivalnotice.MesWmArrivalNoticeDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeLineDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.ncr.MesQcPurchaseConcessionMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.ncr.MesQcPurchaseReturnMapper;
import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptService;
import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptLineService;
import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptDetailService;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
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 MesQcPurchaseConcessionServiceTest {
    @Test void postsOnlyConcessionThroughPurchaseReceiptAndPreventsDuplicateReturn() {
        var service = new MesQcPurchaseConcessionService();
        var validator = mock(MesQcNcrPurchaseSourceValidator.class);
        var concessions = mock(MesQcPurchaseConcessionMapper.class);
        var returns = mock(MesQcPurchaseReturnMapper.class);
        var receipts = mock(MesWmItemReceiptService.class);
        var lines = mock(MesWmItemReceiptLineService.class);
        var details = mock(MesWmItemReceiptDetailService.class);
        var arrival = mock(MesQcArrivalDispositionService.class);
        ReflectionTestUtils.setField(service, "validator", validator);
        ReflectionTestUtils.setField(service, "concessionMapper", concessions);
        ReflectionTestUtils.setField(service, "returnMapper", returns);
        ReflectionTestUtils.setField(service, "receipts", receipts);
        ReflectionTestUtils.setField(service, "lines", lines);
        ReflectionTestUtils.setField(service, "details", details);
        ReflectionTestUtils.setField(service, "arrivalDispositionService", arrival);
        var ncr = new MesQcNcrDO().setId(1L).setCode("NCR1").setQcId(2L).setItemId(3L).setUnqualifiedQuantity(BigDecimal.TEN);
        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(new MesQcIqcDO(), notice, line));
        when(receipts.createItemReceipt(any())).thenReturn(9L);
        when(lines.createItemReceiptLine(any())).thenReturn(10L);
        when(lines.getItemReceiptLine(10L)).thenReturn(new MesWmItemReceiptLineDO().setId(10L));
        var request = new MesQcNcrDisposeReqVO();
        request.setDisposition(4); request.setWarehouseId(11L); request.setLocationId(12L); request.setAreaId(13L);
        var result = service.dispose(ncr, request);
        assertEquals(9L, result.getDocId());
        var lineRequest = ArgumentCaptor.forClass(MesWmItemReceiptLineSaveReqVO.class);
        verify(lines).createItemReceiptLine(lineRequest.capture());
        assertEquals(BigDecimal.TEN, lineRequest.getValue().getReceivedQuantity());
        assertNull(lineRequest.getValue().getArrivalNoticeLineId());
        verify(receipts).finishItemReceipt(9L);
        verify(arrival).refresh(4L);
        when(returns.selectByIqcId(2L)).thenReturn(new MesQcPurchaseReturnDO());
        assertThrows(ServiceException.class, () -> service.dispose(ncr, request));
        verify(receipts, times(1)).createItemReceipt(any());
    }
}