Files
2026-05-16 19:03:49 +03:00

76 lines
2.7 KiB
Python

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