| | |
| | | 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.*; |
| | | |
| | |
| | | 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)); |
| | |
| | | } |
| | | @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)); |