云
2 天以前 87733eb3623593da247c051593d64b8ff9e1d3a4
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/seedquality/SeedQualityScanTest.java
@@ -6,10 +6,13 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.seedquality.MesQcSeedQualityDO;
import cn.iocoder.yudao.module.mes.dal.mysql.pro.bagcode.MesProBagCodeMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.seedquality.MesQcSeedQualityMapper;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.qc.seedquality.MesQcSeedIndicatorRangeService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.util.Collections;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@@ -17,11 +20,19 @@
    private final MesQcSeedQualityServiceImpl service = new MesQcSeedQualityServiceImpl();
    private final MesProBagCodeMapper bags = mock(MesProBagCodeMapper.class);
    private final MesQcSeedQualityMapper qualities = mock(MesQcSeedQualityMapper.class);
    @BeforeEach void setup() { ReflectionTestUtils.setField(service,"bagCodeMapper",bags); ReflectionTestUtils.setField(service,"qualityMapper",qualities); }
    private final MesMdmItemService items = mock(MesMdmItemService.class);
    private final MesQcSeedIndicatorRangeService ranges = mock(MesQcSeedIndicatorRangeService.class);
    @BeforeEach void setup() {
        ReflectionTestUtils.setField(service,"bagCodeMapper",bags);
        ReflectionTestUtils.setField(service,"qualityMapper",qualities);
        ReflectionTestUtils.setField(service,"mdmItemService",items);
        ReflectionTestUtils.setField(service,"rangeService",ranges);
        when(ranges.getEffectiveRanges(any())).thenReturn(List.of());
    }
    private MesProBagCodeDO bag() { return new MesProBagCodeDO().setId(1L).setCode("TRACE").setBusinessCode("BUSINESS").setStatus(20).setInboundEventId(9L).setBatchCode("BATCH"); }
    @Test void businessScanReturnsCanonicalCodeAndPreviousResultWithoutWrites() {
        when(bags.selectByScanCode("BUSINESS")).thenReturn(bag());
        when(qualities.selectByCode("TRACE")).thenReturn(MesQcSeedQualityDO.builder().id(2L).result(1).build());
        when(qualities.selectListByCode("TRACE")).thenReturn(List.of(MesQcSeedQualityDO.builder().id(2L).result(1).build()));
        var result = service.resolveScan("BUSINESS");
        assertEquals("TRACE",result.get("code"));assertEquals(2L,result.get("qualityId"));assertEquals(true,result.get("inbound"));
        verify(qualities,never()).insert(any(MesQcSeedQualityDO.class));
@@ -33,14 +44,14 @@
    }
    @Test void duplicateQualityIsRejectedAfterLockingSameBagForBothCodes() {
        when(bags.selectByScanCodeForUpdate("BUSINESS")).thenReturn(bag());
        var req = new MesQcSeedQualitySubmitReqVO();req.setCode("BUSINESS");
        when(qualities.selectByCodeForUpdate("TRACE")).thenReturn(MesQcSeedQualityDO.builder().id(2L).result(1).build());
        var req = new MesQcSeedQualitySubmitReqVO();req.setCode("BUSINESS");req.setQcLine(1);
        when(qualities.selectListByCodeForUpdate("TRACE")).thenReturn(List.of(MesQcSeedQualityDO.builder().id(2L).result(1).build()));
        req.setIndicators(Collections.nCopies(4,new MesQcSeedQualitySubmitReqVO.Indicator()));
        assertThrows(IllegalArgumentException.class,()->service.submit(req));
        verify(qualities).selectByCodeForUpdate("TRACE");verify(qualities,never()).insert(any(MesQcSeedQualityDO.class));
        verify(qualities).selectListByCodeForUpdate("TRACE");verify(qualities,never()).insert(any(MesQcSeedQualityDO.class));
    }
    @Test void unenteredAndCanceledBagsCannotSubmit() {
        var req = new MesQcSeedQualitySubmitReqVO();req.setCode("BUSINESS");req.setIndicators(Collections.nCopies(4,new MesQcSeedQualitySubmitReqVO.Indicator()));
        var req = new MesQcSeedQualitySubmitReqVO();req.setCode("BUSINESS");req.setQcLine(1);req.setIndicators(Collections.nCopies(4,new MesQcSeedQualitySubmitReqVO.Indicator()));
        when(bags.selectByScanCodeForUpdate("BUSINESS")).thenReturn(bag().setInboundEventId(null));
        assertThrows(IllegalArgumentException.class,()->service.submit(req));
        when(bags.selectByScanCodeForUpdate("BUSINESS")).thenReturn(bag().setStatus(30));