From cbb019283a9b5776ffcb7f86093421551bfc0bdc Mon Sep 17 00:00:00 2001 From: Gabben Date: Fri, 28 Jun 2019 14:35:49 +0500 Subject: [PATCH] ChatMember update Deprecated methods removed Added new RESTRICTED status is_chat_member method has been updated: user could be restricted but remain a member. Added tests for chat_member --- aiogram/types/chat_member.py | 39 +++++-------------- tests/types/test_chat_member.py | 68 +++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 29 deletions(-) create mode 100644 tests/types/test_chat_member.py diff --git a/aiogram/types/chat_member.py b/aiogram/types/chat_member.py index 12789462..288b6d76 100644 --- a/aiogram/types/chat_member.py +++ b/aiogram/types/chat_member.py @@ -1,5 +1,6 @@ import datetime import warnings +from typing import Optional from . import base from . import fields @@ -31,19 +32,13 @@ class ChatMember(base.TelegramObject): can_send_other_messages: base.Boolean = fields.Field() can_add_web_page_previews: base.Boolean = fields.Field() - def is_admin(self): - warnings.warn('`is_admin` method deprecated due to updates in Bot API 4.2. ' - 'This method renamed to `is_chat_admin` and will be available until aiogram 2.3', - DeprecationWarning, stacklevel=2) - return self.is_chat_admin() + def is_chat_admin(self) -> bool: + return ChatMemberStatus.is_chat_admin(self.status) - def is_chat_admin(self): - return ChatMemberStatus.is_admin(self.status) + def is_chat_member(self) -> bool: + return ChatMemberStatus.is_chat_member(self.status, self.is_member) - def is_chat_member(self): - return ChatMemberStatus.is_member(self.status) - - def __int__(self): + def __int__(self) -> int: return self.user.id @@ -51,33 +46,19 @@ class ChatMemberStatus(helper.Helper): """ Chat member status """ - mode = helper.HelperMode.lowercase CREATOR = helper.Item() # creator ADMINISTRATOR = helper.Item() # administrator MEMBER = helper.Item() # member + RESTRICTED = helper.Item() # restricted LEFT = helper.Item() # left KICKED = helper.Item() # kicked @classmethod - def is_admin(cls, role): - warnings.warn('`is_admin` method deprecated due to updates in Bot API 4.2. ' - 'This method renamed to `is_chat_admin` and will be available until aiogram 2.3', - DeprecationWarning, stacklevel=2) - return cls.is_chat_admin(role) - - @classmethod - def is_member(cls, role): - warnings.warn('`is_member` method deprecated due to updates in Bot API 4.2. ' - 'This method renamed to `is_chat_member` and will be available until aiogram 2.3', - DeprecationWarning, stacklevel=2) - return cls.is_chat_member(role) - - @classmethod - def is_chat_admin(cls, role): + def is_chat_admin(cls, role: str) -> bool: return role in [cls.ADMINISTRATOR, cls.CREATOR] @classmethod - def is_chat_member(cls, role): - return role in [cls.MEMBER, cls.ADMINISTRATOR, cls.CREATOR] + def is_chat_member(cls, role: str, is_member: Optional[bool] = None) -> bool: + return (role == cls.RESTRICTED and is_member is True) or role in [cls.MEMBER, cls.ADMINISTRATOR, cls.CREATOR] diff --git a/tests/types/test_chat_member.py b/tests/types/test_chat_member.py new file mode 100644 index 00000000..62fad60f --- /dev/null +++ b/tests/types/test_chat_member.py @@ -0,0 +1,68 @@ +from aiogram import types +from .dataset import CHAT_MEMBER + +chat_member = types.ChatMember(**CHAT_MEMBER) + + +def test_export(): + exported = chat_member.to_python() + assert isinstance(exported, dict) + assert exported == CHAT_MEMBER + + +def test_user(): + assert isinstance(chat_member.user, types.User) + + +def test_status(): + assert isinstance(chat_member.status, str) + assert chat_member.status == CHAT_MEMBER['status'] + + +def test_privileges(): + assert isinstance(chat_member.can_be_edited, bool) + assert chat_member.can_be_edited == CHAT_MEMBER['can_be_edited'] + + assert isinstance(chat_member.can_change_info, bool) + assert chat_member.can_change_info == CHAT_MEMBER['can_change_info'] + + assert isinstance(chat_member.can_delete_messages, bool) + assert chat_member.can_delete_messages == CHAT_MEMBER['can_delete_messages'] + + assert isinstance(chat_member.can_invite_users, bool) + assert chat_member.can_invite_users == CHAT_MEMBER['can_invite_users'] + + assert isinstance(chat_member.can_restrict_members, bool) + assert chat_member.can_restrict_members == CHAT_MEMBER['can_restrict_members'] + + assert isinstance(chat_member.can_pin_messages, bool) + assert chat_member.can_pin_messages == CHAT_MEMBER['can_pin_messages'] + + assert isinstance(chat_member.can_promote_members, bool) + assert chat_member.can_promote_members == CHAT_MEMBER['can_promote_members'] + + +def test_int(): + assert int(chat_member) == chat_member.user.id + assert isinstance(int(chat_member), int) + + +def test_chat_member_status(): + assert types.ChatMemberStatus.CREATOR == 'creator' + assert types.ChatMemberStatus.ADMINISTRATOR == 'administrator' + assert types.ChatMemberStatus.MEMBER == 'member' + assert types.ChatMemberStatus.RESTRICTED == 'restricted' + assert types.ChatMemberStatus.LEFT == 'left' + assert types.ChatMemberStatus.KICKED == 'kicked' + + +def test_chat_member_status_filters(): + assert types.ChatMemberStatus.is_chat_admin(chat_member.status) + assert types.ChatMemberStatus.is_chat_member(chat_member.status) + assert types.ChatMemberStatus.is_chat_member(types.ChatMemberStatus.RESTRICTED, True) + assert not types.ChatMemberStatus.is_chat_member(types.ChatMemberStatus.RESTRICTED, False) + + +def test_chat_member_filters(): + assert chat_member.is_chat_admin() + assert chat_member.is_chat_member()