from __future__ import annotations from src.services.telegram_gateway import ( _outbound_source_envelope, _sanitize_telegram_error, ) def test_telegram_gateway_sanitizes_bot_token_url() -> None: raw = "Client error for https://api.telegram.org/bot123456:SECRET/sendMessage" sanitized = _sanitize_telegram_error(raw) assert "SECRET" not in sanitized assert "bot" in sanitized def test_outbound_source_envelope_keeps_replay_context_without_raw_payload() -> None: payload = { "chat_id": "-100123", "text": ( "ACTION REQUIRED INC-20260513-9B082D " "7f858956 token " "1234567890:abcdefghijklmnopqrstuvwxyzABCDEFGH" ), "parse_mode": "HTML", "reply_markup": { "inline_keyboard": [ [ {"text": "批准", "callback_data": "approve:approval-id-secret"}, {"text": "詳情", "callback_data": "details:approval-id-secret"}, ] ] }, } envelope = _outbound_source_envelope("sendMessage", payload) assert envelope["adapter"] == "legacy_telegram_gateway" assert envelope["method"] == "sendMessage" assert envelope["payload_sha256"] assert envelope["payload_keys"] == ["chat_id", "parse_mode", "reply_markup", "text"] assert envelope["parse_mode"] == "HTML" assert envelope["reply_markup"]["button_count"] == 2 assert envelope["reply_markup"]["buttons"][0]["callback_prefix"] == "approve" assert envelope["reply_markup"]["buttons"][1]["callback_prefix"] == "details" assert envelope["source_refs"]["incident_ids"] == ["INC-20260513-9B082D"] assert envelope["source_refs"]["code_refs"] == ["7f858956"] assert "approval-id-secret" not in str(envelope) assert "1234567890:" not in str(envelope) assert "ACTION REQUIRED" not in str(envelope)