Files
hermes-agent/tests/gateway/test_telegram_reply_quote.py
T
kshitijk4poor c1693d7dcc refactor: remove 27 duplicate _ensure_telegram_mock() copies from gateway tests
tests/gateway/conftest.py already installs a comprehensive telegram mock
at collection time (line 330), before any test module's imports run.
The per-file copies were fully redundant — each was a simpler subset
(plain strings, setdefault, fewer error classes) of the conftest version
(which uses _fake_str_enum for PTB-faithful StrEnum semantics, sys.modules
overwrite to win over partial/broken imports, and a full error hierarchy
including BadRequest, Forbidden, RetryAfter, Conflict, InvalidToken).

Removed: function def + module-level call + now-unused imports (sys,
MagicMock where no longer referenced) + dangling comment blocks that
referenced the deleted mock, in 27 test files.
Left untouched: tests/gateway/conftest.py (canonical source) and
tests/e2e/conftest.py (separate conftest tree that may run in isolation).

Found by /simplify-code review of PR #90560.
2026-08-21 16:25:24 +05:30

75 lines
2.2 KiB
Python

"""Tests for Telegram native partial-quote handling in _build_message_event.
When a Telegram user replies using Telegram's native quote feature to
select only part of a prior message, the adapter must use ``message.quote.text``
(the user-selected substring) rather than ``message.reply_to_message.text``
(the entire replied-to message). Otherwise the agent receives the full prior
message as ``reply_to_text``, which can cause it to act on unrelated
actionable-looking text the user did not quote (#22619).
"""
from types import SimpleNamespace
from gateway.config import PlatformConfig
from plugins.platforms.telegram.adapter import TelegramAdapter # noqa: E402
def _make_adapter():
return TelegramAdapter(PlatformConfig(enabled=True, token="***", extra={}))
def _make_message(
text="follow-up",
reply_to_text=None,
reply_to_caption=None,
reply_to_id=42,
quote_text=None,
):
chat = SimpleNamespace(id=111, type="private", title=None, full_name="Alice")
user = SimpleNamespace(id=42, full_name="Alice")
reply_to_message = None
if reply_to_text is not None or reply_to_caption is not None:
reply_to_message = SimpleNamespace(
message_id=reply_to_id,
text=reply_to_text,
caption=reply_to_caption,
)
quote = None
if quote_text is not None:
quote = SimpleNamespace(text=quote_text)
return SimpleNamespace(
chat=chat,
from_user=user,
text=text,
message_thread_id=None,
message_id=1001,
reply_to_message=reply_to_message,
quote=quote,
date=None,
forum_topic_created=None,
)
def test_native_partial_quote_used_as_reply_to_text():
"""When ``message.quote`` is present, prefer the selected substring."""
from gateway.platforms.base import MessageType
adapter = _make_adapter()
msg = _make_message(
text="mark this one as done",
reply_to_text=(
"Briefing:\n- Item A: deploy fix\n- Item B: rotate keys\n- Item C: update docs"
),
quote_text="Item B: rotate keys",
)
event = adapter._build_message_event(msg, MessageType.TEXT)
assert event.reply_to_text == "Item B: rotate keys"
assert event.reply_to_message_id == "42"