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