云
4 天以前 ac2e2b5af3726ee64dc37c3ebf26989a0346f22a
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
package cn.iocoder.yudao.module.mes.service.qc.ipqc;
 
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productproduce.MesWmProductProduceLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.ipqc.MesQcIpqcMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.pro.feedback.MesProFeedbackMapper;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.productproduce.MesWmProductProduceLineMapper;
import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
 
import java.math.BigDecimal;
 
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
 
class MesQcIpqcQuantityGuardTest {
    @Test
    void rejectsPartialAndOverInspectionBeforeChangingStatus() {
        var service = new MesQcIpqcServiceImpl();
        var mapper = mock(MesQcIpqcMapper.class);
        var lines = mock(MesWmProductProduceLineMapper.class);
        var feedback = mock(MesProFeedbackMapper.class);
        ReflectionTestUtils.setField(service, "ipqcMapper", mapper);
        ReflectionTestUtils.setField(service, "produceLineMapper", lines);
        ReflectionTestUtils.setField(service, "feedbackMapper", feedback);
        when(feedback.selectOne(any(com.baomidou.mybatisplus.core.conditions.Wrapper.class))).thenReturn(new MesProFeedbackDO());
        ReflectionTestUtils.setField(service, "indicatorResultService", mock(MesQcIndicatorResultService.class));
        var ipqc = new MesQcIpqcDO().setId(1L).setStatus(MesQcStatusEnum.DRAFT.getStatus())
                .setCheckResult(1).setSourceDocType(MesBizTypeConstants.PRO_FEEDBACK)
                .setSourceDocId(2L).setSourceLineId(3L).setCheckQuantity(BigDecimal.valueOf(8))
                .setQualifiedQuantity(BigDecimal.valueOf(7)).setUnqualifiedQuantity(BigDecimal.ONE);
        when(mapper.selectByIdForUpdate(1L)).thenReturn(ipqc);
        when(mapper.selectById(1L)).thenReturn(ipqc);
        when(lines.selectByIdForUpdate(3L)).thenReturn(MesWmProductProduceLineDO.builder()
                .feedbackId(2L).qualityStatus(MesWmQualityStatusEnum.PENDING.getStatus())
                .quantity(BigDecimal.TEN).build());
 
        var error = assertThrows(ServiceException.class, () -> service.finishIpqc(1L));
        assertEquals(QC_IPQC_SOURCE_QUANTITY_INVALID.getCode(), error.getCode());
        verify(mapper, never()).updateById(any(MesQcIpqcDO.class));
 
        ipqc.setCheckQuantity(BigDecimal.valueOf(11)).setQualifiedQuantity(BigDecimal.TEN);
        error = assertThrows(ServiceException.class, () -> service.finishIpqc(1L));
        assertEquals(QC_IPQC_SOURCE_QUANTITY_INVALID.getCode(), error.getCode());
        verify(mapper, never()).updateById(any(MesQcIpqcDO.class));
    }
}