feat(H): H-SRC/H-CITE — knowledge source adapter (wiki/dms/mail/communication), evidence references with deep-links and workstream blocks, 23 tests passing

This commit is contained in:
Agent Zero
2026-08-18 11:59:39 +02:00
parent 396fdf3c9a
commit e09e33e225
2 changed files with 365 additions and 0 deletions
+106
View File
@@ -169,3 +169,109 @@ class TestWikiServices:
assert _slugify("Hello World") == "hello-world"
assert _slugify("Überblick") == "ueberblick"
assert _slugify("Test Article 123") == "test-article-123"
# ─── H-SRC: Knowledge Source Adapter ─────────────────────────────────────────
class TestKnowledgeSourceAdapter:
"""Test the knowledge source adapter (H-SRC)."""
def test_available_sources(self):
"""All 4 knowledge source types are registered."""
from app.ai.knowledge_sources import get_available_sources
sources = get_available_sources()
types = {s["type"] for s in sources}
assert types == {"wiki", "dms", "mail", "communication"}
def test_get_source_config_wiki(self):
"""Wiki source config is correct."""
from app.ai.knowledge_sources import get_source_config
config = get_source_config("wiki")
assert config is not None
assert config["text_field"] == "content"
assert config["title_field"] == "title"
assert config["status_filter"] == {"status": "published"}
def test_get_source_config_unknown(self):
"""Unknown source type returns None."""
from app.ai.knowledge_sources import get_source_config
assert get_source_config("nonexistent") is None
# ─── H-CITE: Evidence References ─────────────────────────────────────────────
class TestEvidenceReferences:
"""Test the evidence reference builder (H-CITE)."""
def test_evidence_reference_to_dict(self):
"""EvidenceReference serializes to dict correctly."""
from app.ai.knowledge_sources import EvidenceReference
ref = EvidenceReference(
source_type="wiki",
source_id="abc-123",
title="Test Article",
url="/wiki/articles/abc-123",
snippet="This is a test snippet",
confidence=0.95,
)
d = ref.to_dict()
assert d["source_type"] == "wiki"
assert d["source_id"] == "abc-123"
assert d["title"] == "Test Article"
assert d["confidence"] == 0.95
def test_evidence_reference_to_workstream_block(self):
"""EvidenceReference converts to workstream block."""
from app.ai.knowledge_sources import EvidenceReference
ref = EvidenceReference(
source_type="dms",
source_id="file-123",
title="Document.pdf",
url="/dms/files/file-123",
snippet="Important content here",
)
block = ref.to_workstream_block()
assert block["type"] == "evidence_card"
assert block["source_type"] == "dms"
assert block["title"] == "Document.pdf"
def test_build_evidence_references_from_results(self):
"""build_evidence_references creates refs from search results."""
from app.ai.knowledge_sources import build_evidence_references
results = [
{"source_type": "wiki", "source_id": str(uuid.uuid4()), "title": "Article 1", "score": 0.9, "snippet": "Snippet 1"},
{"source_type": "dms", "source_id": str(uuid.uuid4()), "title": "Doc 2", "score": 0.7, "snippet": "Snippet 2"},
{"source_type": "mail", "source_id": str(uuid.uuid4()), "title": "Mail 3", "score": 0.95, "snippet": "Snippet 3"},
]
refs = build_evidence_references(results)
assert len(refs) == 3
# Sorted by confidence descending
assert refs[0].confidence == 0.95
assert refs[1].confidence == 0.9
assert refs[2].confidence == 0.7
def test_build_evidence_references_max_results(self):
"""build_evidence_references respects max_results."""
from app.ai.knowledge_sources import build_evidence_references
results = [
{"source_type": "wiki", "source_id": str(uuid.uuid4()), "title": f"Article {i}", "score": 0.5}
for i in range(10)
]
refs = build_evidence_references(results, max_results=3)
assert len(refs) == 3
def test_build_evidence_references_empty(self):
"""build_evidence_references handles empty results."""
from app.ai.knowledge_sources import build_evidence_references
refs = build_evidence_references([])
assert refs == []