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.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 org.junit.jupiter.api.Test;
|
import org.springframework.test.util.ReflectionTestUtils;
|
import java.util.List;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.mockito.Mockito.*;
|
|
class KnowledgeWriteServiceTest {
|
@Test
|
void bomMustBelongToSelectedProduct() {
|
var mapper = mock(KnowledgeMapper.class);
|
var items = mock(MesMdItemService.class);
|
var boms = mock(MesMdProductBomService.class);
|
when(boms.getProductBomListByItemId(42L)).thenReturn(java.util.List.of(new MesMdProductBomDO().setId(8L).setItemId(99L).setBomItemId(7L).setStatus(0)));
|
var service = new KnowledgeWriteService();
|
ReflectionTestUtils.setField(service, "knowledgeMapper", mapper);
|
ReflectionTestUtils.setField(service, "itemService", items);
|
ReflectionTestUtils.setField(service, "bomService", boms);
|
var input = new KnowledgeWriteService.SaveRequest(); input.setCode("KN-BOM"); input.setName("测试");
|
input.setMarket("ALL"); input.setProductItemId(42L); input.setBomId(7L);
|
assertThrows(RuntimeException.class, () -> service.create(input));
|
verifyNoInteractions(mapper);
|
}
|
|
@Test
|
void referenceRequiresBothKnowledgeAndRoute() {
|
var mapper = mock(KnowledgeMapper.class);
|
var service = new KnowledgeWriteService();
|
ReflectionTestUtils.setField(service, "knowledgeMapper", mapper);
|
assertThrows(RuntimeException.class, () -> service.referenceRoute(1L, null));
|
verifyNoInteractions(mapper);
|
}
|
|
@Test
|
void emptyResourceCapabilityIsRejectedBeforeWriting() {
|
var mapper = mock(KnowledgeMapper.class);
|
var service = new KnowledgeWriteService();
|
ReflectionTestUtils.setField(service, "knowledgeMapper", mapper);
|
var input = new KnowledgeWriteService.SaveRequest();
|
input.setCode("KN-2"); input.setName("测试知识"); input.setMarket("ALL");
|
var resource = new KnowledgeWriteService.ResourceInput(); resource.setResourceType("OTHER");
|
resource.setCapabilityDescription(" "); input.setResources(List.of(resource));
|
assertThrows(RuntimeException.class, () -> service.create(input));
|
verifyNoInteractions(mapper);
|
}
|
|
@Test
|
void revisionRequiresPublishedSource() {
|
var mapper = mock(KnowledgeMapper.class);
|
var draft = new KnowledgeDO(); draft.setId(7L); draft.setStatus(0);
|
when(mapper.selectById(7L)).thenReturn(draft);
|
var service = new KnowledgeWriteService();
|
ReflectionTestUtils.setField(service, "knowledgeMapper", mapper);
|
assertThrows(RuntimeException.class, () -> service.revise(7L));
|
verify(mapper, never()).insert(any(KnowledgeDO.class));
|
}
|
|
@Test
|
void invalidMarketIsRejectedBeforeWriting() {
|
var mapper = mock(KnowledgeMapper.class);
|
var service = new KnowledgeWriteService();
|
ReflectionTestUtils.setField(service, "knowledgeMapper", mapper);
|
var input = new KnowledgeWriteService.SaveRequest();
|
input.setCode("KN-1"); input.setName("测试知识");
|
assertThrows(RuntimeException.class, () -> service.create(input));
|
verifyNoInteractions(mapper);
|
}
|
|
@Test
|
void publishedVersionCannotBeEdited() {
|
var mapper = mock(KnowledgeMapper.class);
|
var standards = mock(KnowledgeStandardMapper.class);
|
var existing = new KnowledgeDO(); existing.setId(9L); existing.setStatus(1);
|
when(mapper.selectById(9L)).thenReturn(existing);
|
var service = new KnowledgeWriteService();
|
ReflectionTestUtils.setField(service, "knowledgeMapper", mapper);
|
ReflectionTestUtils.setField(service, "standardMapper", standards);
|
var input = new KnowledgeWriteService.SaveRequest();
|
input.setId(9L);
|
assertThrows(RuntimeException.class, () -> service.update(input));
|
verifyNoInteractions(standards);
|
}
|
}
|