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