idk what's this (a lot of time ago)

This commit is contained in:
zemf4you 2024-08-22 09:59:38 +07:00
parent 7bd8f64630
commit fa1b891386
187 changed files with 914 additions and 915 deletions

View file

@ -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

View file

@ -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"},

View file

@ -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",