Files
awoooi/apps/api/tests/test_channel_hub_grouped_alert_events.py
Your Name 04c7bb1c97
All checks were successful
Code Review / ai-code-review (push) Successful in 10s
CD Pipeline / tests (push) Successful in 1m17s
CD Pipeline / build-and-deploy (push) Successful in 3m51s
CD Pipeline / post-deploy-checks (push) Successful in 1m25s
fix(awooop): store outbound sent timestamp as naive utc
2026-05-13 12:28:04 +08:00

139 lines
4.5 KiB
Python

from __future__ import annotations
from src.services.channel_hub import (
build_grouped_alert_provider_event_id,
build_grouped_alert_run_id,
ensure_completed_shadow_run,
format_grouped_alert_digest_text,
format_grouped_alert_event_content,
record_outbound_message,
)
def test_build_grouped_alert_provider_event_id_is_deterministic() -> None:
event_id = build_grouped_alert_provider_event_id(
"INC-20260507-ABCD12",
"1234567890abcdef" * 4,
)
assert event_id == "alert-group:INC-20260507-ABCD12:1234567890abcdef1234567890abcdef"
assert len(event_id) < 256
def test_build_grouped_alert_run_id_is_stable() -> None:
provider_event_id = build_grouped_alert_provider_event_id(
"INC-20260507-ABCD12",
"1234567890abcdef" * 4,
)
first = build_grouped_alert_run_id("awoooi", provider_event_id)
second = build_grouped_alert_run_id("awoooi", provider_event_id)
other_project = build_grouped_alert_run_id("ewoooc", provider_event_id)
assert first == second
assert first != other_project
def test_format_grouped_alert_event_content_keeps_operator_context() -> None:
content = format_grouped_alert_event_content(
alert_id="INC-20260507-ABCD12",
alertname="DockerContainerRestartSpike",
severity="critical",
namespace="default",
target_resource="sentry-self-hosted-events-consumer-1",
group_key="DockerContainerRestartSpike:default",
count=4,
parent_fingerprint="parent-fp",
fingerprint="child-fp",
)
assert "告警已收斂,不發 Telegram" in content
assert "Alert: DockerContainerRestartSpike" in content
assert "Target: sentry-self-hosted-events-consumer-1" in content
assert "Group Count: 4" in content
assert "Parent Fingerprint: parent-fp" in content
def test_format_grouped_alert_digest_text_is_html_safe() -> None:
content = format_grouped_alert_digest_text(
alertname="Docker<Restart>",
severity="critical",
namespace="default",
target_resource="sentry&snuba",
group_key="Docker<Restart>:default",
count=7,
)
assert "告警已收斂到父卡" in content
assert "Docker&lt;Restart&gt;" in content
assert "sentry&amp;snuba" in content
assert "<b>7</b> 筆同組告警" in content
assert "AwoooP Run 監控" in content
class _FakeResult:
def fetchone(self) -> tuple[str] | None:
return ("created",)
class _FakeSession:
def __init__(self) -> None:
self.statement = ""
self.params = {}
self.statements = []
self.param_sets = []
async def execute(self, statement, params): # noqa: ANN001
self.statement = str(statement)
self.params = params
self.statements.append(str(statement))
self.param_sets.append(params)
return _FakeResult()
async def test_completed_shadow_run_sets_run_state_not_null_defaults() -> None:
session = _FakeSession()
run_id = build_grouped_alert_run_id("awoooi", "provider-event")
inserted = await ensure_completed_shadow_run(
session, # type: ignore[arg-type]
project_id="awoooi",
run_id=run_id,
agent_id="legacy-telegram-gateway",
trigger_type="legacy_outbound",
trigger_ref="12713",
input_payload={"message_type": "final"},
)
assert inserted is True
assert "attempt_count, max_attempts, cost_usd, step_count" in session.statement
assert "0, 3, 0.0000, 0" in session.statement
assert session.params["project_id"] == "awoooi"
assert session.params["run_id"] == run_id
async def test_record_outbound_message_sets_sent_at_for_sent_messages() -> None:
session = _FakeSession()
run_id = build_grouped_alert_run_id("awoooi", "telegram-message-13152")
await record_outbound_message(
session, # type: ignore[arg-type]
project_id="awoooi",
run_id=run_id,
channel_type="telegram",
channel_chat_id="-100123",
message_type="approval_request",
content="ACTION REQUIRED INC-20260513-9B082D",
provider_message_id="13152",
send_status="sent",
triggered_by_state="legacy_gateway",
is_shadow=False,
)
insert_statement = session.statements[-1]
assert "sent_at" in insert_statement
assert ":sent_at" in insert_statement
assert session.param_sets[-1]["send_status"] == "sent"
assert session.param_sets[-1]["sent_at"] is not None
assert session.param_sets[-1]["sent_at"].tzinfo is None