fix(telegram): sync rejected polling callbacks
All checks were successful
Code Review / ai-code-review (push) Successful in 11s
CD Pipeline / tests (push) Successful in 1m40s
CD Pipeline / build-and-deploy (push) Successful in 3m31s
CD Pipeline / post-deploy-checks (push) Successful in 1m36s

This commit is contained in:
Your Name
2026-05-18 00:03:52 +08:00
parent 06f64c6ddd
commit 9e1b15dabf
2 changed files with 75 additions and 0 deletions

View File

@@ -7171,6 +7171,27 @@ class TelegramGateway:
username=username,
execution_triggered=False,
)
try:
from src.services.incident_approval_service import (
get_incident_approval_service,
)
await get_incident_approval_service().on_approval_status_change(
approval_id=str(approval_uuid),
new_status="rejected",
)
logger.info(
"telegram_rejection_incident_synced_via_polling",
approval_id=str(approval_uuid),
incident_id=getattr(approval, "incident_id", None),
)
except Exception as _sync_e:
logger.warning(
"telegram_rejection_incident_sync_failed_via_polling",
approval_id=str(approval_uuid),
incident_id=getattr(approval, "incident_id", None),
error=str(_sync_e),
)
elif action == "tune":
logger.info(

View File

@@ -0,0 +1,54 @@
from types import SimpleNamespace
from unittest.mock import AsyncMock
from uuid import UUID
import pytest
from src.models.approval import ApprovalStatus
from src.services.telegram_gateway import TelegramGateway
@pytest.mark.asyncio
async def test_polling_reject_syncs_incident_state(monkeypatch):
approval_id = UUID("44444444-4444-4444-4444-444444444444")
approval = SimpleNamespace(
id=approval_id,
status=ApprovalStatus.REJECTED,
incident_id="INC-20260513-POLLREJ",
)
sync_calls: list[dict] = []
class _FakeApprovalService:
async def reject_approval(self, **_kwargs):
return approval, "Approval rejected"
class _FakeIncidentApprovalService:
async def on_approval_status_change(self, **kwargs):
sync_calls.append(kwargs)
monkeypatch.setattr(
"src.services.approval_db.get_approval_service",
lambda: _FakeApprovalService(),
)
monkeypatch.setattr(
"src.services.incident_approval_service.get_incident_approval_service",
lambda: _FakeIncidentApprovalService(),
)
monkeypatch.setattr(
TelegramGateway,
"_notify_approval_result",
AsyncMock(return_value=None),
)
await TelegramGateway()._execute_approval_action(
action="reject",
approval_id=str(approval_id),
user_id=42,
username="ops",
message_id=99,
)
assert sync_calls == [{
"approval_id": str(approval_id),
"new_status": "rejected",
}]