package cn.iocoder.yudao.module.mes.service.pd.knowledge; import cn.iocoder.yudao.module.mes.dal.dataobject.pd.knowledge.KnowledgeDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pd.knowledge.KnowledgeStandardDO; import cn.iocoder.yudao.module.mes.dal.mysql.pd.knowledge.KnowledgeMapper; import cn.iocoder.yudao.module.mes.dal.mysql.pd.knowledge.KnowledgeStandardMapper; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdProductBomDO; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import cn.iocoder.yudao.module.mes.service.md.item.MesMdProductBomService; import com.baomidou.mybatisplus.core.conditions.Wrapper; import org.junit.jupiter.api.Test; import org.springframework.test.util.ReflectionTestUtils; import java.math.BigDecimal; import java.util.List; import java.util.Set; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; class KnowledgeSearchServiceTest { @Test void missingBomReferenceIsNotRecommended() { var knowledgeMapper = mock(KnowledgeMapper.class); var standardMapper = mock(KnowledgeStandardMapper.class); var knowledge = new KnowledgeDO(); knowledge.setId(1L); knowledge.setBomId(501L); knowledge.setMarket("ALL"); when(knowledgeMapper.selectList(any(Wrapper.class))).thenReturn(List.of(knowledge)); when(standardMapper.selectList(any(Wrapper.class))).thenReturn(List.of()); var service = new KnowledgeSearchService(); ReflectionTestUtils.setField(service, "knowledgeMapper", knowledgeMapper); ReflectionTestUtils.setField(service, "standardMapper", standardMapper); assertEquals(List.of(), service.match(new KnowledgeMatch.Request(null, null, null, null, Set.of()))); } @Test void productBomMatchesByComponentRatherThanBomLineId() { var knowledgeMapper = mock(KnowledgeMapper.class); var standardMapper = mock(KnowledgeStandardMapper.class); var itemService = mock(MesMdItemService.class); var bomService = mock(MesMdProductBomService.class); var knowledge = new KnowledgeDO(); knowledge.setId(1L); knowledge.setProductItemId(42L); knowledge.setBomId(70L); knowledge.setMarket("ALL"); var candidate = new MesMdProductBomDO().setId(502L).setItemId(42L).setBomItemId(70L).setStatus(0); when(knowledgeMapper.selectList(any(Wrapper.class))).thenReturn(List.of(knowledge)); when(standardMapper.selectList(any(Wrapper.class))).thenReturn(List.of()); when(bomService.getProductBomListByItemId(42L)).thenReturn(List.of(candidate)); var service = new KnowledgeSearchService(); ReflectionTestUtils.setField(service, "knowledgeMapper", knowledgeMapper); ReflectionTestUtils.setField(service, "standardMapper", standardMapper); ReflectionTestUtils.setField(service, "itemService", itemService); ReflectionTestUtils.setField(service, "bomService", bomService); assertEquals(List.of(1L), service.match(new KnowledgeMatch.Request(42L, null, null, null, Set.of())) .stream().map(KnowledgeDO::getId).toList()); org.junit.jupiter.api.Assertions.assertThrows(RuntimeException.class, () -> service.match(new KnowledgeMatch.Request(42L, 71L, null, null, Set.of()))); candidate.setBomItemId(71L); assertEquals(List.of(), service.match(new KnowledgeMatch.Request(42L, null, null, null, Set.of()))); } @Test void joinsStandardsToTheRightKnowledgeRecord() { var knowledgeMapper = mock(KnowledgeMapper.class); var standardMapper = mock(KnowledgeStandardMapper.class); var first = new KnowledgeDO(); first.setId(1L); first.setMarket("ALL"); var second = new KnowledgeDO(); second.setId(2L); second.setMarket("ALL"); var standard = new KnowledgeStandardDO(); standard.setKnowledgeId(2L); standard.setStandardCode("IEC-1"); when(knowledgeMapper.selectList(any(Wrapper.class))).thenReturn(List.of(first, second)); when(standardMapper.selectList(any(Wrapper.class))).thenReturn(List.of(standard)); var service = new KnowledgeSearchService(); ReflectionTestUtils.setField(service, "knowledgeMapper", knowledgeMapper); ReflectionTestUtils.setField(service, "standardMapper", standardMapper); var result = service.match(new KnowledgeMatch.Request(null, null, BigDecimal.ONE, null, Set.of("IEC-1"))); assertEquals(List.of(2L), result.stream().map(KnowledgeDO::getId).toList()); } @Test void noKnowledgeDoesNotQueryStandards() { var knowledgeMapper = mock(KnowledgeMapper.class); var standardMapper = mock(KnowledgeStandardMapper.class); when(knowledgeMapper.selectList(any(Wrapper.class))).thenReturn(List.of()); var service = new KnowledgeSearchService(); ReflectionTestUtils.setField(service, "knowledgeMapper", knowledgeMapper); ReflectionTestUtils.setField(service, "standardMapper", standardMapper); assertEquals(List.of(), service.match(new KnowledgeMatch.Request(null, null, null, null, Set.of()))); verifyNoInteractions(standardMapper); } }