Some checks failed
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / tests (push) Has been cancelled
121 lines
3.1 KiB
Python
121 lines
3.1 KiB
Python
import pytest
|
|
|
|
from src.services import knowledge_service as knowledge_service_module
|
|
from src.services.knowledge_service import KnowledgeService
|
|
|
|
|
|
class _BrokenDbContext:
|
|
async def __aenter__(self):
|
|
raise RuntimeError("db pool exhausted")
|
|
|
|
async def __aexit__(self, exc_type, exc, tb):
|
|
return False
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_knowledge_list_entries_fails_soft_when_readback_breaks(monkeypatch) -> None:
|
|
monkeypatch.setattr(
|
|
knowledge_service_module,
|
|
"get_db_context",
|
|
lambda: _BrokenDbContext(),
|
|
)
|
|
service = KnowledgeService.__new__(KnowledgeService)
|
|
|
|
response = await service.list_entries(limit=50)
|
|
|
|
assert response.items == []
|
|
assert response.total == 0
|
|
assert [row.category for row in response.categories] == [
|
|
"project",
|
|
"product",
|
|
"website",
|
|
"service",
|
|
"package",
|
|
"tool",
|
|
"log",
|
|
"alert",
|
|
"playbook",
|
|
"rag",
|
|
"mcp",
|
|
"schedule",
|
|
"general",
|
|
]
|
|
assert all(row.count == 0 for row in response.categories)
|
|
assert [row.key for row in response.asset_taxonomy] == [
|
|
"project",
|
|
"product",
|
|
"website",
|
|
"service",
|
|
"package",
|
|
"tool",
|
|
"log",
|
|
"alert",
|
|
"playbook",
|
|
"rag",
|
|
"mcp",
|
|
"schedule",
|
|
]
|
|
assert all(row.count == 0 for row in response.asset_taxonomy)
|
|
assert response.readback_status == "degraded"
|
|
assert response.operator_stage == "knowledge_readback_degraded_ai_controlled_repair"
|
|
assert response.next_step == "queue_ai_controlled_km_readback_retry_tagging_and_connector_verifier"
|
|
assert response.writes_on_read is False
|
|
assert response.manual_review_required is False
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_knowledge_categories_fails_soft_when_readback_breaks(monkeypatch) -> None:
|
|
monkeypatch.setattr(
|
|
knowledge_service_module,
|
|
"get_db_context",
|
|
lambda: _BrokenDbContext(),
|
|
)
|
|
service = KnowledgeService.__new__(KnowledgeService)
|
|
|
|
categories = await service.get_categories()
|
|
|
|
assert [row.category for row in categories] == [
|
|
"project",
|
|
"product",
|
|
"website",
|
|
"service",
|
|
"package",
|
|
"tool",
|
|
"log",
|
|
"alert",
|
|
"playbook",
|
|
"rag",
|
|
"mcp",
|
|
"schedule",
|
|
"general",
|
|
]
|
|
assert all(row.count == 0 for row in categories)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_knowledge_asset_taxonomy_fails_soft_when_readback_breaks(monkeypatch) -> None:
|
|
monkeypatch.setattr(
|
|
knowledge_service_module,
|
|
"get_db_context",
|
|
lambda: _BrokenDbContext(),
|
|
)
|
|
service = KnowledgeService.__new__(KnowledgeService)
|
|
|
|
taxonomy = await service.get_asset_taxonomy()
|
|
|
|
assert [row.key for row in taxonomy] == [
|
|
"project",
|
|
"product",
|
|
"website",
|
|
"service",
|
|
"package",
|
|
"tool",
|
|
"log",
|
|
"alert",
|
|
"playbook",
|
|
"rag",
|
|
"mcp",
|
|
"schedule",
|
|
]
|
|
assert all(row.count == 0 for row in taxonomy)
|