import importlib.util from pathlib import Path import sys import unittest from unittest.mock import AsyncMock from aiogram.enums import ParseMode from aiogram.exceptions import TelegramBadRequest from aiogram.methods import SendRichMessage from aiogram.types import InputRichMessage MODULE_PATH = Path(__file__).with_name("demo.py") sys.path.insert(0, str(MODULE_PATH.parent)) SPEC = importlib.util.spec_from_file_location("bedolagaformat_demo", MODULE_PATH) assert SPEC is not None and SPEC.loader is not None demo = importlib.util.module_from_spec(SPEC) sys.modules[SPEC.name] = demo SPEC.loader.exec_module(demo) class SentMessage: def __init__(self, message_id: int) -> None: self.message_id = message_id class BedolagaFormatDemoTest(unittest.IsolatedAsyncioTestCase): def test_format_samples_cover_default_and_explicit_modes(self) -> None: samples = demo.format_samples("BEDOLAGA123") self.assertEqual( [sample.parse_mode for sample in samples], [None, ParseMode.MARKDOWN, ParseMode.MARKDOWN_V2], ) self.assertIn("BEDOLAGA123 Default HTML", samples[0].text) self.assertIn("*BEDOLAGA123 Markdown*", samples[1].text) self.assertIn("*BEDOLAGA123 MarkdownV2*", samples[2].text) def test_markdown_v2_escapes_reserved_marker_characters(self) -> None: samples = demo.format_samples("BEDOLAGA-FULL-20260720") self.assertIn(r"BEDOLAGA\-FULL\-20260720", samples[2].text) async def test_send_suite_omits_parse_mode_only_for_default_html(self) -> None: bot = AsyncMock() bot.send_message.side_effect = [SentMessage(11), SentMessage(12), SentMessage(13)] message_ids = await demo.send_format_suite(bot, 1780243200, "BEDOLAGA123") self.assertEqual(message_ids, [11, 12, 13]) calls = bot.send_message.await_args_list self.assertNotIn("parse_mode", calls[0].kwargs) self.assertEqual(calls[1].kwargs["parse_mode"], ParseMode.MARKDOWN) self.assertEqual(calls[2].kwargs["parse_mode"], ParseMode.MARKDOWN_V2) def test_rich_menu_covers_bedolaga_html_and_keyboard(self) -> None: html = demo.rich_menu_html("BEDOLAGA123", include_logo=False) self.assertIn("

BEDOLAGA123 Admin

", html) self.assertIn("", html) self.assertIn("", html) self.assertIn("