diff --git a/aiogram/dispatcher/middlewares.py b/aiogram/dispatcher/middlewares.py index cbe55220..fa002c88 100644 --- a/aiogram/dispatcher/middlewares.py +++ b/aiogram/dispatcher/middlewares.py @@ -117,11 +117,12 @@ class LifetimeControllerMiddleware(BaseMiddleware): if self._skip_actions is None: self._skip_actions = [] if self.skip_patterns: - self._skip_actions.extend([ - f"pre_process_{item}", - f"process_{item}", - f"post_process_{item}", - ]) + for item in self.skip_patterns: + self._skip_actions.extend([ + f"pre_process_{item}", + f"process_{item}", + f"post_process_{item}", + ]) return self._skip_actions async def pre_process(self, obj, data, *args): diff --git a/tests/test_dispatcher/test_middlewares/test_lifetimecontroller.py b/tests/test_dispatcher/test_middlewares/test_lifetimecontroller.py new file mode 100644 index 00000000..b4519a9b --- /dev/null +++ b/tests/test_dispatcher/test_middlewares/test_lifetimecontroller.py @@ -0,0 +1,53 @@ +from unittest.mock import AsyncMock + +import pytest +from aiogram.dispatcher.middlewares import LifetimeControllerMiddleware + +pytestmark = pytest.mark.asyncio + + +async def test_no_skip(): + class Middleware(LifetimeControllerMiddleware): + pre_process = AsyncMock() + post_process = AsyncMock() + + m = Middleware() + await m.trigger("pre_process_update_xxx", [1, 2, 3]) + m.pre_process.assert_called_once_with(1, 3, 2) + m.post_process.assert_not_called() + await m.trigger("post_process_update_xxx", [1, 2, 3]) + m.pre_process.reset_mock() + m.pre_process.assert_not_called() + m.post_process.assert_called_once_with(1, 3, 2) + + +async def test_skip_prefix(): + class Middleware(LifetimeControllerMiddleware): + skip_patterns = ["update"] + pre_process = AsyncMock() + post_process = AsyncMock() + + m = Middleware() + await m.trigger("pre_process_update_xxx", [1, 2, 3]) + m.pre_process.assert_called_once_with(1, 3, 2) + m.post_process.assert_not_called() + await m.trigger("post_process_update_xxx", [1, 2, 3]) + m.pre_process.reset_mock() + m.pre_process.assert_not_called() + m.post_process.assert_called_once_with(1, 3, 2) + + +async def test_skip(): + class Middleware(LifetimeControllerMiddleware): + skip_patterns = ["update_xxx"] + pre_process = AsyncMock() + post_process = AsyncMock() + + m = Middleware() + await m.trigger("pre_process_update_xxx", [1, 2, 3]) + m.pre_process.assert_not_called() + m.post_process.assert_not_called() + await m.trigger("post_process_update_xxx", [1, 2, 3]) + m.pre_process.reset_mock() + m.pre_process.assert_not_called() + m.post_process.assert_not_called()