mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
idk what's this (a lot of time ago)
This commit is contained in:
parent
7bd8f64630
commit
fa1b891386
187 changed files with 914 additions and 915 deletions
|
|
@ -1,68 +1,42 @@
|
|||
import sys
|
||||
|
||||
import pytest
|
||||
from pydantic import ValidationError
|
||||
|
||||
from aiogram.client.default import Default, DefaultBotProperties
|
||||
from aiogram.client.default import DefaultBotProperties
|
||||
from aiogram.default_annotations import DefaultLinkPreviewOptions, DefaultParseMode
|
||||
from aiogram.enums import ParseMode
|
||||
from aiogram.types import LinkPreviewOptions
|
||||
from aiogram.types import LinkPreviewOptions, TelegramObject
|
||||
from tests.mocked_bot import MockedBot
|
||||
|
||||
|
||||
class TestDefault:
|
||||
def test_init(self):
|
||||
default = Default("test")
|
||||
assert default._name == "test"
|
||||
def test_default_validation(self):
|
||||
class TestObject(TelegramObject):
|
||||
parse_mode: DefaultParseMode = None
|
||||
|
||||
def test_name_property(self):
|
||||
default = Default("test")
|
||||
assert default.name == "test"
|
||||
obj1 = TestObject()
|
||||
assert obj1.parse_mode is None
|
||||
obj2 = TestObject(parse_mode=ParseMode.HTML)
|
||||
assert obj2.parse_mode == ParseMode.HTML
|
||||
obj3 = TestObject(parse_mode="HTML")
|
||||
assert obj3.parse_mode == ParseMode.HTML
|
||||
with pytest.raises(ValidationError):
|
||||
TestObject(parse_mode=b"some invalid type")
|
||||
|
||||
def test_str(self):
|
||||
default = Default("test")
|
||||
assert str(default) == "Default('test')"
|
||||
def test_remain_value_after_dump_roundtrip(self):
|
||||
bot = MockedBot(default=DefaultBotProperties())
|
||||
|
||||
def test_repr(self):
|
||||
default = Default("test")
|
||||
assert repr(default) == "<Default('test')>"
|
||||
def test_link_preview_options_defined(self):
|
||||
class TestObject(TelegramObject):
|
||||
options: DefaultLinkPreviewOptions = None
|
||||
|
||||
# won't raise error
|
||||
TestObject(options=LinkPreviewOptions())
|
||||
|
||||
|
||||
class TestDefaultBotProperties:
|
||||
def test_post_init_empty(self):
|
||||
def test_is_empty(self):
|
||||
default_bot_properties = DefaultBotProperties()
|
||||
assert default_bot_properties.is_empty
|
||||
|
||||
assert default_bot_properties.link_preview is None
|
||||
|
||||
def test_post_init_auto_fill_link_preview(self):
|
||||
default_bot_properties = DefaultBotProperties(
|
||||
link_preview_is_disabled=True,
|
||||
link_preview_prefer_small_media=True,
|
||||
link_preview_prefer_large_media=True,
|
||||
link_preview_show_above_text=True,
|
||||
)
|
||||
|
||||
assert default_bot_properties.link_preview == LinkPreviewOptions(
|
||||
is_disabled=True,
|
||||
prefer_small_media=True,
|
||||
prefer_large_media=True,
|
||||
show_above_text=True,
|
||||
)
|
||||
|
||||
def test_getitem(self):
|
||||
default_bot_properties = DefaultBotProperties(
|
||||
parse_mode=ParseMode.HTML,
|
||||
link_preview_is_disabled=True,
|
||||
link_preview_prefer_small_media=True,
|
||||
link_preview_prefer_large_media=True,
|
||||
link_preview_show_above_text=True,
|
||||
)
|
||||
|
||||
assert default_bot_properties["parse_mode"] == ParseMode.HTML
|
||||
assert default_bot_properties["link_preview_is_disabled"] is True
|
||||
assert default_bot_properties["link_preview_prefer_small_media"] is True
|
||||
assert default_bot_properties["link_preview_prefer_large_media"] is True
|
||||
assert default_bot_properties["link_preview_show_above_text"] is True
|
||||
|
||||
@pytest.mark.skipif(sys.version_info < (3, 12), reason="requires python3.11 or higher")
|
||||
def test_dataclass_creation_3_10_plus(self):
|
||||
params = DefaultBotProperties.__dataclass_params__
|
||||
assert params.slots is True
|
||||
assert params.kw_only is True
|
||||
default_bot_properties = DefaultBotProperties(protect_content=True)
|
||||
assert not default_bot_properties.is_empty
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ from aiohttp import ClientError
|
|||
from aresponses import ResponsesMockServer
|
||||
|
||||
from aiogram import Bot
|
||||
from aiogram.client.default import Default
|
||||
from aiogram.client.session import aiohttp
|
||||
from aiogram.client.session.aiohttp import AiohttpSession
|
||||
from aiogram.default_annotations import DefaultParseMode
|
||||
from aiogram.exceptions import TelegramNetworkError
|
||||
from aiogram.methods import TelegramMethod
|
||||
from aiogram.types import (
|
||||
|
|
@ -121,7 +121,7 @@ class TestAiohttpSession:
|
|||
str_: str
|
||||
int_: int
|
||||
bool_: bool
|
||||
unset_: Union[str, Default] = Default("parse_mode")
|
||||
unset_: DefaultParseMode = None
|
||||
null_: None
|
||||
list_: List[str]
|
||||
dict_: Dict[str, Any]
|
||||
|
|
@ -133,7 +133,6 @@ class TestAiohttpSession:
|
|||
str_="value",
|
||||
int_=42,
|
||||
bool_=True,
|
||||
unset_=Default("parse_mode"),
|
||||
null_=None,
|
||||
list_=["foo"],
|
||||
dict_={"bar": "baz"},
|
||||
|
|
|
|||
|
|
@ -1,17 +1,16 @@
|
|||
import datetime
|
||||
import json
|
||||
from typing import Any, AsyncContextManager, AsyncGenerator, Dict, Optional, Union
|
||||
from typing import Any, AsyncContextManager, AsyncGenerator, Dict, Optional
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
import pytest
|
||||
from pytz import utc
|
||||
|
||||
from aiogram import Bot
|
||||
from aiogram.client.default import Default, DefaultBotProperties
|
||||
from aiogram.client.form import form_serialize
|
||||
from aiogram.client.form import serialize_form_value
|
||||
from aiogram.client.session.base import BaseSession, TelegramType
|
||||
from aiogram.client.telegram import PRODUCTION, TelegramAPIServer
|
||||
from aiogram.enums import ChatType, ParseMode, TopicIconColor
|
||||
from aiogram.enums import ChatType, TopicIconColor
|
||||
from aiogram.exceptions import (
|
||||
ClientDecodeError,
|
||||
RestartingTelegram,
|
||||
|
|
@ -27,18 +26,8 @@ from aiogram.exceptions import (
|
|||
TelegramUnauthorizedError,
|
||||
)
|
||||
from aiogram.methods import DeleteMessage, GetMe, TelegramMethod
|
||||
from aiogram.types import (
|
||||
UNSET_PARSE_MODE,
|
||||
DateTime,
|
||||
InputFile,
|
||||
LinkPreviewOptions,
|
||||
User,
|
||||
)
|
||||
from aiogram.types.base import (
|
||||
UNSET_DISABLE_WEB_PAGE_PREVIEW,
|
||||
UNSET_PROTECT_CONTENT,
|
||||
TelegramObject,
|
||||
)
|
||||
from aiogram.types import DateTime, LinkPreviewOptions, User
|
||||
from aiogram.types.base import TelegramObject
|
||||
from tests.mocked_bot import MockedBot
|
||||
|
||||
|
||||
|
|
@ -105,7 +94,6 @@ class TestBaseSession:
|
|||
@pytest.mark.parametrize(
|
||||
"value,result",
|
||||
[
|
||||
[None, ...],
|
||||
["text", "text"],
|
||||
[ChatType.PRIVATE, "private"],
|
||||
[TopicIconColor.RED, "16478047"],
|
||||
|
|
@ -123,56 +111,23 @@ class TestBaseSession:
|
|||
"1494994302",
|
||||
],
|
||||
[LinkPreviewOptions(is_disabled=True), '{"is_disabled":true}'],
|
||||
[Default("parse_mode"), "HTML"],
|
||||
[Default("protect_content"), "true"],
|
||||
[Default("link_preview_is_disabled"), "true"],
|
||||
],
|
||||
)
|
||||
def test_form_serialize(self, value: Any, result: str):
|
||||
bot = MockedBot(
|
||||
default=DefaultBotProperties(
|
||||
parse_mode=ParseMode.HTML,
|
||||
protect_content=True,
|
||||
link_preview_is_disabled=True,
|
||||
)
|
||||
)
|
||||
|
||||
def test_serialize_form_value(self, value: Any, result: str):
|
||||
# TODO: move
|
||||
# pydantic model roundtrip is needed (DateTime has custom serialization, exclude_none=True)
|
||||
field_type = type(value)
|
||||
if issubclass(field_type, (datetime.datetime, datetime.timedelta)):
|
||||
field_type = DateTime
|
||||
elif issubclass(field_type, InputFile):
|
||||
field_type = Union[InputFile, str]
|
||||
elif issubclass(field_type, Default):
|
||||
field_type = Optional[Union[Any, Default]]
|
||||
|
||||
class TestObject(TelegramObject):
|
||||
field: field_type
|
||||
|
||||
obj = TestObject.model_validate({"field": value}, context={"bot": bot})
|
||||
serialized_obj = obj.model_dump(mode="json", exclude_none=True)
|
||||
if value is None:
|
||||
assert "field" not in serialized_obj
|
||||
else:
|
||||
value = serialized_obj["field"]
|
||||
assert form_serialize(value) == result
|
||||
obj = TestObject(field=value)
|
||||
serialized_obj = obj.model_dump(exclude_none=True)
|
||||
value = serialized_obj["field"]
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"default",
|
||||
[
|
||||
UNSET_PARSE_MODE,
|
||||
UNSET_DISABLE_WEB_PAGE_PREVIEW,
|
||||
UNSET_PROTECT_CONTENT,
|
||||
],
|
||||
)
|
||||
def test_default_unset(self, default: Default):
|
||||
bot = MockedBot()
|
||||
|
||||
class TestObject(TelegramObject):
|
||||
field: Optional[Union[Any, Default]]
|
||||
|
||||
obj = TestObject.model_validate({"field": default}, context={"bot": bot})
|
||||
serialized_obj = obj.model_dump(mode="json")
|
||||
assert serialized_obj["field"] is None
|
||||
assert serialize_form_value(value) == result
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"status_code,content,error",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue