Files
awoooi/apps/api/tests/test_telegram_gateway_polling_handoff.py
Your Name 9e1b15dabf
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
fix(telegram): sync rejected polling callbacks
2026-05-18 00:03:52 +08:00

55 lines
1.5 KiB
Python

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",
}]