from pathlib import Path from knowledge_base import InMemoryKnowledgeBase, KnowledgePack, KnowledgeRecord, KnowledgeScope from semantic_kernel import index_project def test_knowledge_search_and_coverage(tmp_path: Path): module = tmp_path / "demo_module.bsl" module.write_text("Процедура Проведение()\nКонецПроцедуры\n", encoding="utf-8") snapshot = index_project(tmp_path, project_id="demo") routine = next(node for node in snapshot.nodes if node.name == "Проведение") kb = InMemoryKnowledgeBase() kb.upsert( KnowledgeRecord( record_id="knowledge.1", scope=KnowledgeScope.PROJECT, title="Правила проведения", body="Проверки документа перед записью движений.", tags=["posting"], related_lineages=[routine.lineage_id], ) ) assert kb.search("проведения")[0].record.record_id == "knowledge.1" covered = [item for item in kb.coverage(snapshot) if item.node.lineage_id == routine.lineage_id] assert covered[0].record_count == 1 def test_knowledge_pack_import_adds_pack_metadata(): kb = InMemoryKnowledgeBase() pack = KnowledgePack( pack_id="bsp.core", name="BSP Core", vendor="1C", version="3.1", records=[ KnowledgeRecord( record_id="knowledge.bsp.roles", scope=KnowledgeScope.GLOBAL, title="БСП роли", body="Рекомендации по ролям БСП.", ) ], ) stored = kb.import_pack(pack) assert kb.list_packs() == [stored] record = kb.get("knowledge.bsp.roles") assert record is not None assert "pack:bsp.core" in record.tags assert "vendor:1C" in record.tags assert record.attributes["pack_version"] == "3.1" def test_knowledge_search_matches_pack_attributes_and_lineages(): kb = InMemoryKnowledgeBase() kb.upsert( KnowledgeRecord( record_id="knowledge.vendor.rule", scope=KnowledgeScope.PROJECT, title="Rules", body="Document checks.", related_lineages=["lineage.document.order"], attributes={"vendor": "1C", "pack_id": "bsp.core"}, ) ) by_vendor = kb.search("1C") by_lineage = kb.search("lineage.document.order") assert by_vendor[0].record.record_id == "knowledge.vendor.rule" assert "attributes.vendor" in by_vendor[0].matched_fields assert by_lineage[0].record.record_id == "knowledge.vendor.rule" assert "related_lineages" in by_lineage[0].matched_fields