mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-12 10:11:52 +00:00
Add missing shortcuts, new enums, reworked old stuff (#1070)
* Render shortcuts * Render docs * Added enumerations * Added docs * Use enums, removed Helper * Bump butcher * Added InputMediaType enum * Added MaskPositionPoint, InlineQueryResultType enums * Update texts * Added StickerType enum * Cover tests * Update docs * Fixed imports * Re-enabled all pre-commit hooks
This commit is contained in:
parent
3438d2446d
commit
3ea73fbbbd
370 changed files with 19735 additions and 8380 deletions
|
|
@ -1,7 +1,7 @@
|
|||
import pytest
|
||||
|
||||
from aiogram.enums import ChatAction
|
||||
from aiogram.methods import Request, SendChatAction
|
||||
from aiogram.types import ChatAction
|
||||
from tests.mocked_bot import MockedBot
|
||||
|
||||
pytestmark = pytest.mark.asyncio
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ from typing import Optional
|
|||
|
||||
from pytest import mark, param
|
||||
|
||||
from aiogram.types import Chat
|
||||
from aiogram.enums import ChatAction
|
||||
from aiogram.types import BufferedInputFile, Chat, ChatPermissions
|
||||
|
||||
|
||||
class TestChat:
|
||||
|
|
@ -20,6 +21,172 @@ class TestChat:
|
|||
assert method.chat_id == chat.id
|
||||
assert method.sender_chat_id == -1337
|
||||
|
||||
def test_get_administrators(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.get_administrators()
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_delete_message(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.delete_message(message_id=1)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_revoke_invite_link(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.revoke_invite_link(invite_link="test")
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_edit_invite_link(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.edit_invite_link(invite_link="test", name="test")
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_create_invite_link(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.create_invite_link(name="test")
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_export_invite_link(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.export_invite_link()
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_do(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.do(ChatAction.TYPING)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_delete_sticker_set(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.delete_sticker_set()
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_set_sticker_set(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.set_sticker_set(sticker_set_name="test")
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_get_member(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.get_member(user_id=42)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_get_member_count(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.get_member_count()
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_leave(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.leave()
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_unpin_all_messages(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.unpin_all_messages()
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_unpin_message(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.unpin_message()
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_pin_message(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.pin_message(message_id=1)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_set_administrator_custom_title(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.set_administrator_custom_title(user_id=1, custom_title="test")
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_set_permissions(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.set_permissions(
|
||||
permissions=ChatPermissions(
|
||||
can_send_messages=True,
|
||||
)
|
||||
)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_promote(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.promote(
|
||||
user_id=42,
|
||||
can_manage_chat=True,
|
||||
)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_restrict(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.restrict(
|
||||
user_id=42,
|
||||
permissions=ChatPermissions(
|
||||
can_send_messages=True,
|
||||
),
|
||||
)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_unban(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.unban(
|
||||
user_id=42,
|
||||
)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_ban(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.ban(
|
||||
user_id=42,
|
||||
)
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_set_description(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.set_description(description="test")
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_set_title(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.set_title(title="test")
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_delete_photo(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.delete_photo(description="test")
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
def test_set_photo(self):
|
||||
chat = Chat(id=-42, type="supergroup")
|
||||
|
||||
method = chat.set_photo(photo=BufferedInputFile(b"PNG", filename="photo.png"))
|
||||
assert method.chat_id == chat.id
|
||||
|
||||
@mark.parametrize(
|
||||
"first,last,title,chat_type,result",
|
||||
[
|
||||
|
|
|
|||
32
tests/test_api/test_types/test_sticker.py
Normal file
32
tests/test_api/test_types/test_sticker.py
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
from aiogram.enums import StickerType
|
||||
from aiogram.types import Sticker
|
||||
|
||||
|
||||
class TestSticker:
|
||||
def test_get_profile_photos(self):
|
||||
sticker = Sticker(
|
||||
file_id="test",
|
||||
file_unique_id="test",
|
||||
type=StickerType.REGULAR,
|
||||
width=100,
|
||||
height=100,
|
||||
is_animated=False,
|
||||
is_video=False,
|
||||
)
|
||||
|
||||
method = sticker.set_position_in_set(position=1)
|
||||
assert method.sticker == sticker.file_id
|
||||
|
||||
def test_delete_from_set(self):
|
||||
sticker = Sticker(
|
||||
file_id="test",
|
||||
file_unique_id="test",
|
||||
type=StickerType.REGULAR,
|
||||
width=100,
|
||||
height=100,
|
||||
is_animated=False,
|
||||
is_video=False,
|
||||
)
|
||||
|
||||
method = sticker.delete_from_set()
|
||||
assert method.sticker == sticker.file_id
|
||||
|
|
@ -50,3 +50,9 @@ class TestUser:
|
|||
user = User(id=42, is_bot=False, first_name=first, last_name=last)
|
||||
assert user.mention_html() == f'<a href="tg://user?id=42">{user.full_name}</a>'
|
||||
assert user.mention_html(name=name) == f'<a href="tg://user?id=42">{name}</a>'
|
||||
|
||||
def test_get_profile_photos(self):
|
||||
user = User(id=42, is_bot=False, first_name="Test", last_name="User")
|
||||
|
||||
method = user.get_profile_photos(description="test")
|
||||
assert method.user_id == user.id
|
||||
|
|
|
|||
|
|
@ -1,181 +0,0 @@
|
|||
import pytest
|
||||
|
||||
from aiogram.utils.helper import Default, Helper, HelperMode, Item, ListItem, OrderedHelper
|
||||
|
||||
|
||||
class TestHelper:
|
||||
def test_items_all(self):
|
||||
class MyHelper(Helper):
|
||||
A = Item()
|
||||
B = Item()
|
||||
C = Item()
|
||||
D = Item()
|
||||
|
||||
assert set(MyHelper.all()) == {"A", "B", "C", "D"}
|
||||
|
||||
def test_listed_items_all(self):
|
||||
class MyHelper(Helper):
|
||||
A = ListItem()
|
||||
B = ListItem()
|
||||
C = ListItem()
|
||||
D = ListItem()
|
||||
|
||||
assert set(MyHelper.all()) == {"A", "B", "C", "D"}
|
||||
|
||||
def test_listed_items_combinations(self):
|
||||
class MyHelper(Helper):
|
||||
A = ListItem()
|
||||
B = ListItem()
|
||||
C = ListItem()
|
||||
D = ListItem()
|
||||
|
||||
assert (MyHelper.A | MyHelper.B) == ["A", "B"]
|
||||
assert (MyHelper.C & MyHelper.D) == ["C", "D"]
|
||||
assert MyHelper.A.add(MyHelper.D) == ["A", "D"]
|
||||
assert MyHelper.B + MyHelper.D == ["B", "D"]
|
||||
|
||||
def test_wrong_name(self):
|
||||
with pytest.raises(RuntimeError):
|
||||
|
||||
class MyHelper(Helper):
|
||||
kaboom = Item()
|
||||
|
||||
def test_not_a_helper_subclass(self):
|
||||
with pytest.raises(RuntimeError):
|
||||
|
||||
class NotAHelperSubclass:
|
||||
A = Item()
|
||||
|
||||
|
||||
class TestHelperMode:
|
||||
def test_helper_mode_all(self):
|
||||
assert set(HelperMode.all()) == {
|
||||
"SCREAMING_SNAKE_CASE",
|
||||
"lowerCamelCase",
|
||||
"CamelCase",
|
||||
"snake_case",
|
||||
"lowercase",
|
||||
}
|
||||
|
||||
def test_screaming_snake_case(self):
|
||||
class MyHelper(Helper):
|
||||
mode = HelperMode.SCREAMING_SNAKE_CASE
|
||||
|
||||
FOO = Item()
|
||||
BAR_BAZ = Item()
|
||||
|
||||
assert MyHelper.FOO == "FOO"
|
||||
assert MyHelper.BAR_BAZ == "BAR_BAZ"
|
||||
|
||||
def test_lower_camel_case(self):
|
||||
class MyHelper(Helper):
|
||||
mode = HelperMode.lowerCamelCase
|
||||
|
||||
FOO = Item()
|
||||
BAR_BAZ = Item()
|
||||
|
||||
assert MyHelper.FOO == "foo"
|
||||
assert MyHelper.BAR_BAZ == "barBaz"
|
||||
|
||||
def test_camel_case(self):
|
||||
class MyHelper(Helper):
|
||||
mode = HelperMode.CamelCase
|
||||
|
||||
FOO = Item()
|
||||
BAR_BAZ = Item()
|
||||
|
||||
assert MyHelper.FOO == "Foo"
|
||||
assert MyHelper.BAR_BAZ == "BarBaz"
|
||||
|
||||
def test_snake_case(self):
|
||||
class MyHelper(Helper):
|
||||
mode = HelperMode.snake_case
|
||||
|
||||
FOO = Item()
|
||||
BAR_BAZ = Item()
|
||||
|
||||
assert MyHelper.FOO == "foo"
|
||||
assert MyHelper.BAR_BAZ == "bar_baz"
|
||||
|
||||
def test_lowercase(self):
|
||||
class MyHelper(Helper):
|
||||
mode = HelperMode.lowercase
|
||||
|
||||
FOO = Item()
|
||||
BAR_BAZ = Item()
|
||||
|
||||
assert MyHelper.FOO == "foo"
|
||||
assert MyHelper.BAR_BAZ == "barbaz"
|
||||
|
||||
def test_extended_converters(self):
|
||||
assert HelperMode.apply("test_text", mode=HelperMode.SCREAMING_SNAKE_CASE) == "TEST_TEXT"
|
||||
assert HelperMode.apply("TestText", mode=HelperMode.SCREAMING_SNAKE_CASE) == "TEST_TEXT"
|
||||
assert HelperMode.apply("test_text", mode=HelperMode.snake_case) == "test_text"
|
||||
assert HelperMode.apply("foo", mode=lambda m: m.upper()) == "FOO"
|
||||
|
||||
|
||||
class TestOrderedHelper:
|
||||
def test_items_are_ordered(self):
|
||||
class MyOrderedHelper(OrderedHelper):
|
||||
A = Item()
|
||||
D = Item()
|
||||
C = Item()
|
||||
B = Item()
|
||||
|
||||
assert MyOrderedHelper.all() == ["A", "D", "C", "B"]
|
||||
|
||||
def test_list_items_are_ordered(self):
|
||||
class MyOrderedHelper(OrderedHelper):
|
||||
A = ListItem()
|
||||
D = ListItem()
|
||||
C = ListItem()
|
||||
B = ListItem()
|
||||
|
||||
assert MyOrderedHelper.all() == ["A", "D", "C", "B"]
|
||||
|
||||
|
||||
class TestDefaultDescriptor:
|
||||
def test_descriptor_fs(self):
|
||||
obj = type("ClassA", (), {})()
|
||||
default_x_val = "some_x"
|
||||
x = Default(default_x_val)
|
||||
|
||||
# we can omit owner, usually it's just obj.__class__
|
||||
assert x.__get__(instance=obj, owner=None) == default_x_val
|
||||
assert x.__get__(instance=obj, owner=obj.__class__) == default_x_val
|
||||
|
||||
new_x_val = "new_x"
|
||||
assert x.__set__(instance=obj, value=new_x_val) is None
|
||||
|
||||
with pytest.raises(AttributeError) as exc:
|
||||
x.__set__(instance=obj.__class__, value="will never be set")
|
||||
assert "Instance cannot be class or None" in str(exc.value)
|
||||
|
||||
assert x.__get__(instance=obj, owner=obj.__class__) == new_x_val
|
||||
|
||||
with pytest.raises(AttributeError) as exc:
|
||||
x.__delete__(instance=obj.__class__)
|
||||
assert "Instance cannot be class or None" in str(exc.value)
|
||||
|
||||
x.__delete__(instance=obj)
|
||||
assert x.__get__(instance=obj, owner=obj.__class__) == default_x_val
|
||||
|
||||
def test_init(self):
|
||||
class A:
|
||||
x = Default(fget=lambda a_inst: "nothing")
|
||||
|
||||
assert isinstance(A.__dict__["x"], Default)
|
||||
|
||||
a = A()
|
||||
assert a.x == "nothing"
|
||||
|
||||
x = Default("x")
|
||||
assert x.__get__(None, None) == "x"
|
||||
assert x.fget(None) == x.__get__(None, None)
|
||||
|
||||
def test_nullability(self):
|
||||
class A:
|
||||
x = Default(default=None, fget=None)
|
||||
|
||||
assert A.x is None
|
||||
assert A().x is None
|
||||
Loading…
Add table
Add a link
Reference in a new issue