import pytest from gateway.config import GatewayConfig, Platform, PlatformConfig from gateway.platforms.base import MessageEvent from gateway.run import GatewayRunner from gateway.session import SessionSource def _make_runner(config: GatewayConfig) -> GatewayRunner: runner = object.__new__(GatewayRunner) runner.config = config runner.adapters = {} runner._model = "openai/gpt-4.1-mini" runner._base_url = None return runner @pytest.mark.asyncio async def test_preprocess_prefixes_sender_for_shared_non_thread_group_session(): runner = _make_runner( GatewayConfig( platforms={ Platform.TELEGRAM: PlatformConfig(enabled=True, token="fake"), }, group_sessions_per_user=False, ) ) source = SessionSource( platform=Platform.TELEGRAM, chat_id="-1002285219667", chat_name="Test Group", chat_type="group", user_name="Alice", ) event = MessageEvent(text="hello", source=source) result = await runner._prepare_inbound_message_text( event=event, source=source, history=[], ) assert result == "[Alice] hello" @pytest.mark.asyncio async def test_preprocess_keeps_plain_text_for_default_group_sessions(): runner = _make_runner( GatewayConfig( platforms={ Platform.TELEGRAM: PlatformConfig(enabled=True, token="fake"), }, ) ) source = SessionSource( platform=Platform.TELEGRAM, chat_id="-1002285219667", chat_name="Test Group", chat_type="group", user_name="Alice", ) event = MessageEvent(text="hello", source=source) result = await runner._prepare_inbound_message_text( event=event, source=source, history=[], ) assert result == "hello" @pytest.mark.asyncio async def test_preprocess_includes_slack_author_mention_for_shared_thread(): """Shared Slack threads expose the current author's verifiable user ID next to the display name so 'mention me again' requests can bind the mention to the CURRENT speaker (#17916).""" runner = _make_runner( GatewayConfig( platforms={ Platform.SLACK: PlatformConfig(enabled=True, token="fake"), }, ) ) source = SessionSource( platform=Platform.SLACK, chat_id="C123", chat_name="team-channel", chat_type="group", user_id="U123", user_name="Alice", thread_id="171.000", ) event = MessageEvent(text="mention me again", source=source) result = await runner._prepare_inbound_message_text( event=event, source=source, history=[], ) assert result == "[Alice | Slack user <@U123>] mention me again" @pytest.mark.asyncio async def test_preprocess_slack_shared_thread_without_user_id_keeps_name_only(): """No user_id on the source → fall back to the plain name prefix.""" runner = _make_runner( GatewayConfig( platforms={ Platform.SLACK: PlatformConfig(enabled=True, token="fake"), }, ) ) source = SessionSource( platform=Platform.SLACK, chat_id="C123", chat_name="team-channel", chat_type="group", user_name="Alice", thread_id="171.000", ) event = MessageEvent(text="hello", source=source) result = await runner._prepare_inbound_message_text( event=event, source=source, history=[], ) assert result == "[Alice] hello"