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