/ tests / gateway / test_debug_command.py
test_debug_command.py
 1  """Tests for the gateway /debug command."""
 2  
 3  from unittest.mock import patch
 4  
 5  import pytest
 6  
 7  from gateway.config import GatewayConfig, Platform
 8  from gateway.platforms.base import MessageEvent
 9  from gateway.session import SessionSource
10  
11  
12  def _make_event(text="/debug", platform=Platform.TELEGRAM,
13                  user_id="12345", chat_id="67890"):
14      source = SessionSource(
15          platform=platform,
16          user_id=user_id,
17          chat_id=chat_id,
18          user_name="testuser",
19      )
20      return MessageEvent(text=text, source=source)
21  
22  
23  def _make_runner():
24      from gateway.run import GatewayRunner
25  
26      runner = object.__new__(GatewayRunner)
27      runner.config = GatewayConfig()
28      runner.adapters = {}
29      return runner
30  
31  
32  class TestHandleDebugCommand:
33      @pytest.mark.asyncio
34      async def test_debug_sweeps_expired_pastes_before_upload(self):
35          runner = _make_runner()
36          event = _make_event()
37  
38          with patch("hermes_cli.debug._sweep_expired_pastes", return_value=(0, 0)) as mock_sweep, \
39               patch("hermes_cli.debug._capture_dump", return_value="dump"), \
40               patch("hermes_cli.debug.collect_debug_report", return_value="report"), \
41               patch("hermes_cli.debug.upload_to_pastebin", return_value="https://paste.rs/report"), \
42               patch("hermes_cli.debug._schedule_auto_delete"):
43              result = await runner._handle_debug_command(event)
44  
45          mock_sweep.assert_called_once()
46          assert "https://paste.rs/report" in result
47  
48      @pytest.mark.asyncio
49      async def test_debug_survives_sweep_failure(self):
50          runner = _make_runner()
51          event = _make_event()
52  
53          with patch("hermes_cli.debug._sweep_expired_pastes", side_effect=RuntimeError("offline")), \
54               patch("hermes_cli.debug._capture_dump", return_value="dump"), \
55               patch("hermes_cli.debug.collect_debug_report", return_value="report"), \
56               patch("hermes_cli.debug.upload_to_pastebin", return_value="https://paste.rs/report"), \
57               patch("hermes_cli.debug._schedule_auto_delete"):
58              result = await runner._handle_debug_command(event)
59  
60          assert "https://paste.rs/report" in result