55 lines
1.5 KiB
Python
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",
|
|
}]
|