* Rework middlewares, separate management to `MiddlewareManager` class

* Rework middlewares

* Added changes description for redis

* Added changes description for redis

* Fixed tests with Redis // aioredis replacement

* Changed msg.<html/md>_text attributes behaviour

* Added changelog for spoilers

* Added possibility to get command magic result as handler arguments
This commit is contained in:
Alex Root Junior 2022-04-16 19:07:32 +03:00 committed by GitHub
parent 930bca0876
commit 286cf39c8a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
51 changed files with 1380 additions and 804 deletions

View file

@ -215,11 +215,11 @@ class TestBaseSession:
return await make_request(bot, method)
session = CustomSession()
assert not session.middlewares
assert not session.middleware._middlewares
session.middleware(my_middleware)
assert my_middleware in session.middlewares
assert len(session.middlewares) == 1
assert my_middleware in session.middleware
assert len(session.middleware) == 1
async def test_use_middleware(self, bot: MockedBot):
flag_before = False

View file

@ -0,0 +1,45 @@
from aiogram import Bot
from aiogram.client.session.middlewares.base import (
BaseRequestMiddleware,
NextRequestMiddlewareType,
)
from aiogram.client.session.middlewares.manager import RequestMiddlewareManager
from aiogram.methods import Response, TelegramMethod
from aiogram.types import TelegramObject
class TestMiddlewareManager:
async def test_register(self):
manager = RequestMiddlewareManager()
@manager
async def middleware(handler, event, data):
await handler(event, data)
assert middleware in manager._middlewares
manager.unregister(middleware)
assert middleware not in manager._middlewares
async def test_wrap_middlewares(self):
manager = RequestMiddlewareManager()
class MyMiddleware(BaseRequestMiddleware):
async def __call__(
self,
make_request: NextRequestMiddlewareType,
bot: Bot,
method: TelegramMethod[TelegramObject],
) -> Response[TelegramObject]:
return await make_request(bot, method)
manager.register(MyMiddleware())
@manager()
@manager
async def middleware(make_request, bot, method):
return await make_request(bot, method)
async def target_call(bot, method, timeout: int = None):
return timeout
assert await manager.wrap_middlewares(target_call, timeout=42)(None, None) == 42

View file

@ -641,13 +641,15 @@ class TestMessage:
assert method.message_id == message.message_id
@pytest.mark.parametrize(
"text,entities,correct",
"text,entities,mode,expected_value",
[
["test", [MessageEntity(type="bold", offset=0, length=4)], True],
["", [], False],
["test", [MessageEntity(type="bold", offset=0, length=4)], "html", "<b>test</b>"],
["test", [MessageEntity(type="bold", offset=0, length=4)], "md", "*test*"],
["", [], "html", ""],
["", [], "md", ""],
],
)
def test_html_text(self, text, entities, correct):
def test_html_text(self, text, entities, mode, expected_value):
message = Message(
message_id=42,
chat=Chat(id=42, type="private"),
@ -655,11 +657,4 @@ class TestMessage:
text=text,
entities=entities,
)
if correct:
assert message.html_text
assert message.md_text
else:
with pytest.raises(TypeError):
assert message.html_text
with pytest.raises(TypeError):
assert message.md_text
assert getattr(message, f"{mode}_text") == expected_value