fix(governance): link events to dispatch history
This commit is contained in:
@@ -33,6 +33,7 @@ from src.models.governance import (
|
||||
)
|
||||
from src.services.governance_query_service import (
|
||||
_extract_remediation,
|
||||
_merge_dispatch_ids,
|
||||
_query_dispatch_table,
|
||||
_to_governance_event,
|
||||
)
|
||||
@@ -221,6 +222,42 @@ class TestEventsReadSideNormalization:
|
||||
assert event.remediation == "補齊 SLO emitter"
|
||||
assert event.impact == "SLO metrics missing"
|
||||
|
||||
def test_governance_event_uses_db_dispatch_ids_first(self):
|
||||
"""events read model 應以 dispatch table ids 補齊 detail/history 鏈路。"""
|
||||
row = type("Row", (), {
|
||||
"id": "evt-001",
|
||||
"event_type": "knowledge_degradation",
|
||||
"triggered_at": NOW,
|
||||
"resolved": False,
|
||||
"resolved_at": None,
|
||||
"details": {
|
||||
"message": "KM stale",
|
||||
"dispatch_ids": ["legacy-dispatch"],
|
||||
},
|
||||
})()
|
||||
|
||||
event = _to_governance_event(row, dispatch_ids=["db-dispatch", "legacy-dispatch"])
|
||||
|
||||
assert event.dispatch_ids == ["db-dispatch", "legacy-dispatch"]
|
||||
|
||||
def test_merge_dispatch_ids_deduplicates_and_preserves_db_priority(self):
|
||||
"""DB truth-first,legacy payload 只作 fallback。"""
|
||||
assert _merge_dispatch_ids(
|
||||
["db-2", "db-1"],
|
||||
["db-1", "legacy-1", None],
|
||||
) == ["db-2", "db-1", "legacy-1"]
|
||||
|
||||
def test_events_query_joins_dispatch_table_for_history_buttons(self):
|
||||
"""events endpoint 不可只讀 details.dispatch_ids,必須查 dispatch table。"""
|
||||
import inspect
|
||||
from src.services import governance_query_service
|
||||
|
||||
source = inspect.getsource(governance_query_service._load_dispatch_ids_for_events)
|
||||
|
||||
assert "FROM governance_remediation_dispatch d" in source
|
||||
assert "d.governance_event_id IN :event_ids" in source
|
||||
assert "ORDER BY d.dispatched_at DESC" in source
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# 3. queue endpoint graceful fallback
|
||||
|
||||
Reference in New Issue
Block a user