mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-12 10:11:52 +00:00
Global filters for router (#644)
* Bump version * Added more comments * Cover registering global filters * Reformat code * Add more tests * Rework event propagation to routers mechanism. Fixed compatibility with Python 3.10 syntax (match keyword) * Fixed tests * Fixed coverage Co-authored-by: evgfilim1 <evgfilim1@yandex.ru>
This commit is contained in:
parent
a70ecb767f
commit
4f2cc75951
13 changed files with 176 additions and 31 deletions
|
|
@ -4,7 +4,7 @@ from typing import Any, Awaitable, Callable, Dict, NoReturn, Union
|
|||
|
||||
import pytest
|
||||
|
||||
from aiogram.dispatcher.event.bases import SkipHandler
|
||||
from aiogram.dispatcher.event.bases import REJECTED, SkipHandler
|
||||
from aiogram.dispatcher.event.handler import HandlerObject
|
||||
from aiogram.dispatcher.event.telegram import TelegramEventObserver
|
||||
from aiogram.dispatcher.filters.base import BaseFilter
|
||||
|
|
@ -233,3 +233,48 @@ class TestTelegramEventObserver:
|
|||
assert my_middleware3 in middlewares
|
||||
|
||||
assert middlewares == [my_middleware1, my_middleware2, my_middleware3]
|
||||
|
||||
def test_register_global_filters(self):
|
||||
router = Router(use_builtin_filters=False)
|
||||
assert isinstance(router.message._handler.filters, list)
|
||||
assert not router.message._handler.filters
|
||||
|
||||
my_filter = MyFilter1(test="pass")
|
||||
router.message.filter(my_filter)
|
||||
|
||||
assert len(router.message._handler.filters) == 1
|
||||
assert router.message._handler.filters[0].callback is my_filter
|
||||
|
||||
router.message._handler.filters = None
|
||||
router.message.filter(my_filter)
|
||||
assert len(router.message._handler.filters) == 1
|
||||
assert router.message._handler.filters[0].callback is my_filter
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_global_filter(self):
|
||||
r1 = Router()
|
||||
r2 = Router()
|
||||
|
||||
async def handler(evt):
|
||||
return evt
|
||||
|
||||
r1.message.filter(lambda evt: False)
|
||||
r1.message.register(handler)
|
||||
r2.message.register(handler)
|
||||
|
||||
assert await r1.message.trigger(None) is REJECTED
|
||||
assert await r2.message.trigger(None) is None
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_global_filter_in_nested_router(self):
|
||||
r1 = Router()
|
||||
r2 = Router()
|
||||
|
||||
async def handler(evt):
|
||||
return evt
|
||||
|
||||
r1.include_router(r2)
|
||||
r1.message.filter(lambda evt: False)
|
||||
r2.message.register(handler)
|
||||
|
||||
assert await r1.message.trigger(None) is REJECTED
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue