package cn.iocoder.yudao.module.mes.service.qc.ncr;
|
|
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.mysql.qc.ncr.MesQcPurchaseReturnMapper;
|
import cn.iocoder.yudao.module.mes.dal.mysql.qc.ncr.MesQcPurchaseConcessionMapper;
|
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.wm.MesWmArrivalNoticeStatusEnum;
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import org.junit.jupiter.api.Test;
|
import org.mockito.ArgumentCaptor;
|
import org.springframework.test.util.ReflectionTestUtils;
|
import java.math.BigDecimal;
|
import java.util.List;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.mockito.ArgumentMatchers.*;
|
import static org.mockito.Mockito.*;
|
|
class MesQcArrivalDispositionServiceTest {
|
@Test void partialReturnEnablesOnlyQualifiedQuantityAndFullReturnFinishes() {
|
var service = new MesQcArrivalDispositionService();
|
var notices = mock(MesWmArrivalNoticeMapper.class);
|
var lines = mock(MesWmArrivalNoticeLineMapper.class);
|
var returns = mock(MesQcPurchaseReturnMapper.class);
|
ReflectionTestUtils.setField(service, "arrivalNoticeMapper", notices);
|
ReflectionTestUtils.setField(service, "lineMapper", lines);
|
ReflectionTestUtils.setField(service, "returnMapper", returns);
|
ReflectionTestUtils.setField(service, "concessionMapper", mock(MesQcPurchaseConcessionMapper.class));
|
when(notices.selectOne(any(Wrapper.class))).thenReturn(new MesWmArrivalNoticeDO().setId(1L)
|
.setStatus(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus()));
|
var line = new MesWmArrivalNoticeLineDO().setId(2L).setIqcId(3L).setIqcCheckFlag(true)
|
.setIqcCheckResult(2).setArrivalQuantity(BigDecimal.TEN).setQualifiedQuantity(BigDecimal.valueOf(7));
|
when(lines.selectListByNoticeId(1L)).thenReturn(List.of(line));
|
service.refresh(1L);
|
verify(notices, never()).updateById(any(MesWmArrivalNoticeDO.class));
|
when(returns.selectConfirmedByIqcId(3L)).thenReturn(new MesQcPurchaseReturnDO().setNoticeLineId(2L));
|
service.refresh(1L);
|
var changed = ArgumentCaptor.forClass(MesWmArrivalNoticeDO.class);
|
verify(notices).updateById(changed.capture());
|
assertEquals(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus(), changed.getValue().getStatus());
|
line.setQualifiedQuantity(BigDecimal.ZERO);
|
service.refresh(1L);
|
verify(notices, times(2)).updateById(changed.capture());
|
assertEquals(MesWmArrivalNoticeStatusEnum.FINISHED.getStatus(), changed.getValue().getStatus());
|
}
|
}
|