diff --git a/tests/test_api/test_methods/test_get_url.py b/tests/test_api/test_methods/test_get_url.py index fbdbfa22..3c769ca2 100644 --- a/tests/test_api/test_methods/test_get_url.py +++ b/tests/test_api/test_methods/test_get_url.py @@ -1,85 +1,51 @@ import datetime +from typing import Optional + +import pytest from aiogram.types import Chat, Message + from tests.mocked_bot import MockedBot class TestGetMessageUrl: - def test_method(self, bot: MockedBot): + @pytest.mark.parametrize( + "chat_type,chat_id,chat_username,force_private,expected_result", + [ + ["private", 123456, "username", False, None], + ["group", -123456, "username", False, None], + ["supergroup", -1001234567890, None, False, "https://t.me/c/1234567890/10"], + ["supergroup", -1001234567890, None, True, "https://t.me/c/1234567890/10"], + ["supergroup", -1001234567890, "username", False, "https://t.me/username/10"], + ["supergroup", -1001234567890, "username", True, "https://t.me/c/1234567890/10"], + ["channel", -1001234567890, None, False, "https://t.me/c/1234567890/10"], + ["channel", -1001234567890, None, True, "https://t.me/c/1234567890/10"], + ["channel", -1001234567890, "username", False, "https://t.me/username/10"], + ["channel", -1001234567890, "username", True, "https://t.me/c/1234567890/10"], + # 2 extra cases: 9-digit ID and 11-digit ID (without "-100") + ["supergroup", -100123456789, None, True, "https://t.me/c/123456789/10"], + ["supergroup", -10012345678901, None, True, "https://t.me/c/12345678901/10"], + ], + ) + def test_method( + self, + bot: MockedBot, + chat_type: str, + chat_id: int, + chat_username: Optional[str], + force_private: bool, + expected_result: Optional[str], + ): + + fake_chat = Chat(id=chat_id, username=chat_username, type=chat_type) fake_message_id = 10 - - fake_chat_pm = Chat(id=123456, username="username", type="private") fake_message = Message( message_id=fake_message_id, date=datetime.datetime.now(), text="test", - chat=fake_chat_pm, + chat=fake_chat, ) - # get_url() in PM must return None - assert fake_message.get_url() is None - - # get_url() in basic group must return None - fake_chat_group = Chat(id=-123456, username="username", type="group") - fake_message = Message( - message_id=fake_message_id, - date=datetime.datetime.now(), - text="test", - chat=fake_chat_group, - ) - assert fake_message.get_url() is None - - # get_url() in supergroup without username must return private link - fake_chat_supergroup_no_username = Chat(id=-1001234567890, type="supergroup") - fake_message = Message( - message_id=fake_message_id, - date=datetime.datetime.now(), - text="test", - chat=fake_chat_supergroup_no_username, - ) - assert fake_message.chat.shifted_id == 1234567890 - assert fake_message.get_url() == f"https://t.me/c/1234567890/{fake_message_id}" - - # get_url() in supergroup with username must return link with username or private link - # if force_private set to True - fake_chat_supergroup_username = Chat( - id=-1001234567890, username="username", type="supergroup" - ) - fake_message = Message( - message_id=fake_message_id, - date=datetime.datetime.now(), - text="test", - chat=fake_chat_supergroup_username, - ) - assert fake_message.chat.shifted_id == 1234567890 - assert fake_message.get_url() == f"https://t.me/username/{fake_message_id}" - assert ( - fake_message.get_url(force_private=True) - == f"https://t.me/c/1234567890/{fake_message_id}" - ) - - # get_url() in channel without username must return private link - fake_chat_channel_no_username = Chat(id=-1001234567890, type="channel") - fake_message = Message( - message_id=fake_message_id, - date=datetime.datetime.now(), - text="test", - chat=fake_chat_channel_no_username, - ) - assert fake_message.chat.shifted_id == 1234567890 - assert fake_message.get_url() == f"https://t.me/c/1234567890/{fake_message_id}" - - # get_url() in channel with username must return link with username or private link - # if force_private set to True - fake_chat_channel_username = Chat(id=-1001234567890, username="username", type="channel") - fake_message = Message( - message_id=fake_message_id, - date=datetime.datetime.now(), - text="test", - chat=fake_chat_channel_username, - ) - assert fake_message.chat.shifted_id == 1234567890 - assert fake_message.get_url() == f"https://t.me/username/{fake_message_id}" - assert ( - fake_message.get_url(force_private=True) - == f"https://t.me/c/1234567890/{fake_message_id}" - ) + if expected_result is None: + assert fake_message.get_url(force_private=force_private) is None + else: + assert fake_message.get_url(force_private=force_private) == expected_result