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