76 lines
2.7 KiB
Python
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
|