diff --git a/aiogram/api/types/chat_member.py b/aiogram/api/types/chat_member.py index 593a86fb..967d35f6 100644 --- a/aiogram/api/types/chat_member.py +++ b/aiogram/api/types/chat_member.py @@ -3,8 +3,9 @@ from __future__ import annotations import datetime from typing import TYPE_CHECKING, Optional, Union -from .base import TelegramObject from ...utils import helper +from ...utils.helper import HelperMode, Item +from .base import TelegramObject if TYPE_CHECKING: # pragma: no cover from .user import User @@ -73,18 +74,24 @@ class ChatMember(TelegramObject): @property def is_chat_member(self) -> bool: - return self.status not in {ChatMemberStatus.LEFT, ChatMemberStatus.KICKED} + return self.status in { + ChatMemberStatus.CREATOR, + ChatMemberStatus.MEMBER, + ChatMemberStatus.ADMINISTRATOR, + ChatMemberStatus.RESTRICTED, + } 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 + mode = HelperMode.lowercase + + CREATOR = Item() + ADMINISTRATOR = Item() + MEMBER = Item() + RESTRICTED = Item() + LEFT = Item() + KICKED = Item() diff --git a/tests/test_api/test_types/test_chat_member.py b/tests/test_api/test_types/test_chat_member.py index e5706e5e..6f08dc69 100644 --- a/tests/test_api/test_types/test_chat_member.py +++ b/tests/test_api/test_types/test_chat_member.py @@ -2,33 +2,39 @@ import pytest from aiogram.api.types import ChatMember, User -user = User(id=42, is_bot=False, first_name="User", last_name=None) - class TestChatMember: + def setup(self): + self.__user = User(id=42, is_bot=False, first_name="User", last_name=None) + @pytest.mark.parametrize( - "status,result", + "status, expected_status", [ ["administrator", True], ["creator", True], - ["member", False] - ] + ["member", False], + ["restricted", False], + ["kicked", False], + ["left", False], + ["durov", False], # not a valid status value, method should return False + ], ) - def test_is_chat_admin(self, status: str, result: bool): - chat_member = ChatMember(user=user, status=status) - assert chat_member.is_chat_admin == result + def test_is_chat_admin(self, status: str, expected_status: bool): + chat_member = ChatMember(user=self.__user, status=status) + assert chat_member.is_chat_admin == expected_status @pytest.mark.parametrize( - "status,result", + "status, expected_status", [ ["administrator", True], ["creator", True], ["member", True], ["restricted", True], ["kicked", False], - ["left", False] - ] + ["left", False], + ["onotole", False], # not a valid status value, method should return False + ], ) - def test_is_chat_member(self, status: str, result: bool): - chat_member = ChatMember(user=user, status=status) - assert chat_member.is_chat_member == result + def test_is_chat_member(self, status: str, expected_status: bool): + chat_member = ChatMember(user=self.__user, status=status) + assert chat_member.is_chat_member == expected_status