1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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);
    }
}