"""Tests for the gateway /debug command.""" from unittest.mock import patch import pytest from gateway.config import GatewayConfig, Platform from gateway.platforms.base import MessageEvent from gateway.session import SessionSource def _make_event(text="/debug", platform=Platform.TELEGRAM, user_id="12345", chat_id="67890"): source = SessionSource( platform=platform, user_id=user_id, chat_id=chat_id, user_name="testuser", ) return MessageEvent(text=text, source=source) def _make_runner(): from gateway.run import GatewayRunner runner = object.__new__(GatewayRunner) runner.config = GatewayConfig() runner.adapters = {} return runner class TestHandleDebugCommand: @pytest.mark.asyncio async def test_debug_sweeps_expired_pastes_before_upload(self): runner = _make_runner() event = _make_event() with patch("hermes_cli.debug._sweep_expired_pastes", return_value=(0, 0)) as mock_sweep, \ patch("hermes_cli.debug._capture_dump", return_value="dump"), \ patch("hermes_cli.debug.collect_debug_report", return_value="report"), \ patch("hermes_cli.debug.upload_to_pastebin", return_value="https://paste.rs/report"), \ patch("hermes_cli.debug._schedule_auto_delete"): result = await runner._handle_debug_command(event) mock_sweep.assert_called_once() assert "https://paste.rs/report" in result @pytest.mark.asyncio async def test_debug_survives_sweep_failure(self): runner = _make_runner() event = _make_event() with patch("hermes_cli.debug._sweep_expired_pastes", side_effect=RuntimeError("offline")), \ patch("hermes_cli.debug._capture_dump", return_value="dump"), \ patch("hermes_cli.debug.collect_debug_report", return_value="report"), \ patch("hermes_cli.debug.upload_to_pastebin", return_value="https://paste.rs/report"), \ patch("hermes_cli.debug._schedule_auto_delete"): result = await runner._handle_debug_command(event) assert "https://paste.rs/report" in result