fix(api): tolerate legacy incident outcomes
This commit is contained in:
@@ -23,6 +23,7 @@ from src.services.incident_service import (
|
||||
IncidentService,
|
||||
normalize_status,
|
||||
parse_decision_chain,
|
||||
parse_incident_outcome,
|
||||
)
|
||||
|
||||
|
||||
@@ -107,6 +108,11 @@ def test_parse_decision_chain_skips_legacy_list_payload() -> None:
|
||||
assert parse_decision_chain([{"stage": "router"}], "INC-LEGACY-CHAIN") is None
|
||||
|
||||
|
||||
def test_parse_incident_outcome_skips_legacy_string_payload() -> None:
|
||||
"""舊資料 outcome 可能是字串;不應阻斷 incident hydrate / resolve。"""
|
||||
assert parse_incident_outcome("resolved", "INC-LEGACY-OUTCOME") is None
|
||||
|
||||
|
||||
def test_record_to_incident_tolerates_legacy_decision_chain_list() -> None:
|
||||
"""DB fallback 必須能讀回舊 incident,即使 decision_chain 不是新 schema。"""
|
||||
now = datetime.now(UTC)
|
||||
@@ -134,3 +140,32 @@ def test_record_to_incident_tolerates_legacy_decision_chain_list() -> None:
|
||||
assert incident.incident_id == "INC-LEGACY-CHAIN"
|
||||
assert incident.status == IncidentStatus.INVESTIGATING
|
||||
assert incident.decision_chain is None
|
||||
|
||||
|
||||
def test_record_to_incident_tolerates_legacy_outcome_string() -> None:
|
||||
"""DB fallback 必須能讀回舊 incident,即使 outcome 不是新 schema。"""
|
||||
now = datetime.now(UTC)
|
||||
record = SimpleNamespace(
|
||||
incident_id="INC-LEGACY-OUTCOME",
|
||||
status="INVESTIGATING",
|
||||
severity="P2",
|
||||
signals=[],
|
||||
affected_services=[],
|
||||
decision_chain=None,
|
||||
proposal_ids=[],
|
||||
outcome="resolved",
|
||||
created_at=now,
|
||||
updated_at=now,
|
||||
resolved_at=None,
|
||||
closed_at=None,
|
||||
ttl_days=7,
|
||||
vectorized=False,
|
||||
notification_type="TYPE-3",
|
||||
alert_category="host_resource",
|
||||
)
|
||||
|
||||
incident = IncidentService()._record_to_incident(record)
|
||||
|
||||
assert incident.incident_id == "INC-LEGACY-OUTCOME"
|
||||
assert incident.status == IncidentStatus.INVESTIGATING
|
||||
assert incident.outcome is None
|
||||
|
||||
Reference in New Issue
Block a user