"""Regression coverage for partial Telegram overflow delivery.""" from types import SimpleNamespace from unittest.mock import AsyncMock, MagicMock import pytest from gateway.config import PlatformConfig from gateway.platforms.base import SendResult from plugins.platforms.telegram.adapter import TelegramAdapter from gateway.stream_consumer import GatewayStreamConsumer def _message(message_id: int | str) -> SimpleNamespace: return SimpleNamespace(message_id=message_id) @pytest.fixture def telegram_adapter() -> TelegramAdapter: adapter = TelegramAdapter(PlatformConfig(enabled=True, token="fake-token")) adapter._bot = MagicMock() object.__setattr__(adapter, "MAX_MESSAGE_LENGTH", 160) return adapter @pytest.mark.asyncio async def test_edit_overflow_split_reports_later_partial_failure_after_some_continuations_land(telegram_adapter): """Partial metadata tracks the last delivered continuation before failure.""" content = "word " * 120 telegram_adapter._bot.edit_message_text = AsyncMock(return_value=True) telegram_adapter._bot.send_message = AsyncMock( side_effect=[ _message(202), RuntimeError("telegram send failed"), RuntimeError("telegram send failed"), ] ) result = await telegram_adapter._edit_overflow_split( "12345", "201", content, finalize=False, metadata={"thread_id": "77"} ) assert result.success is False assert result.message_id == "202" assert result.raw_response["partial_overflow"] is True assert result.raw_response["delivered_chunks"] == 2 assert result.raw_response["last_message_id"] == "202" assert result.continuation_message_ids == ("202",)