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