aiogram/tests/test_utils/test_chat_member.py
Alex Root Junior f68c24d620
Added support for Telegram Bot API 9.5 (#1780)
* Update API methods and types for Telegram Bot API 9.5

* Draft: follow-up for Bot API 9.5 (#1780) (#1781)

* Add set_chat_member_tag shortcut coverage

* Add set_member_tag shortcut tests and align decoration expectations

* Fix follow-up test coverage for sender_tag and can_edit_tag

* Add changelog fragment for PR 1781

* Align changelog with base PR #1780

* Expand 1780 changelog to cover base and follow-up scope

* Treat sender_tag as metadata, not message content type

---------

Co-authored-by: Latand <latand@users.noreply.github.com>
Co-authored-by: Codex Agent <codex@openclaw.local>

* Add tests for date_time formatting with Unix time and datetime objects

* Update changelog with Telegram Bot API 9.5 changes

---------

Co-authored-by: Kostiantyn Kriuchkov <36363097+Latand@users.noreply.github.com>
Co-authored-by: Latand <latand@users.noreply.github.com>
Co-authored-by: Codex Agent <codex@openclaw.local>
2026-03-03 01:19:11 +02:00

95 lines
2.3 KiB
Python

from datetime import datetime
import pytest
from aiogram.types import (
ChatMember,
ChatMemberAdministrator,
ChatMemberBanned,
ChatMemberLeft,
ChatMemberMember,
ChatMemberOwner,
ChatMemberRestricted,
User,
)
from aiogram.utils.chat_member import ChatMemberAdapter
USER = User(
id=42,
first_name="John Doe",
is_bot=False,
).model_dump()
CHAT_MEMBER_ADMINISTRATOR = ChatMemberAdministrator(
user=USER,
can_be_edited=False,
can_manage_chat=True,
can_change_info=True,
can_delete_messages=True,
can_invite_users=True,
can_restrict_members=True,
can_pin_messages=True,
can_manage_topics=False,
can_promote_members=False,
can_manage_video_chats=True,
can_post_stories=True,
can_edit_stories=True,
can_delete_stories=True,
is_anonymous=False,
can_manage_voice_chats=False,
).model_dump()
CHAT_MEMBER_BANNED = ChatMemberBanned(
user=USER,
until_date=datetime.now(),
).model_dump()
CHAT_MEMBER_LEFT = ChatMemberLeft(
user=USER,
).model_dump()
CHAT_MEMBER_MEMBER = ChatMemberMember(
user=USER,
).model_dump()
CHAT_MEMBER_OWNER = ChatMemberOwner(
user=USER,
is_anonymous=True,
).model_dump()
CHAT_MEMBER_RESTRICTED = ChatMemberRestricted(
user=USER,
is_member=True,
can_send_messages=False,
can_send_audios=False,
can_send_documents=False,
can_send_photos=False,
can_send_videos=False,
can_send_video_notes=False,
can_send_voice_notes=False,
can_send_polls=False,
can_send_other_messages=False,
can_add_web_page_previews=False,
can_edit_tag=False,
can_change_info=False,
can_invite_users=False,
can_pin_messages=False,
can_manage_topics=False,
until_date=datetime.now(),
).model_dump()
@pytest.mark.parametrize(
("data", "resolved_type"),
[
(CHAT_MEMBER_ADMINISTRATOR, ChatMemberAdministrator),
(CHAT_MEMBER_BANNED, ChatMemberBanned),
(CHAT_MEMBER_LEFT, ChatMemberLeft),
(CHAT_MEMBER_MEMBER, ChatMemberMember),
(CHAT_MEMBER_OWNER, ChatMemberOwner),
(CHAT_MEMBER_RESTRICTED, ChatMemberRestricted),
],
)
def test_chat_member_resolution(data: dict, resolved_type: type[ChatMember]) -> None:
chat_member = ChatMemberAdapter.validate_python(data)
assert isinstance(chat_member, resolved_type)