diff --git a/poetry.lock b/poetry.lock index ca646b19..d5f77452 100644 --- a/poetry.lock +++ b/poetry.lock @@ -946,7 +946,7 @@ fast = ["uvloop"] proxy = ["aiohttp-socks"] [metadata] -content-hash = "cd83723d922c4c0a645ef6f9f78447f83f2c1a933be928f8174ef897970acb2a" +content-hash = "57137b60a539ba01e8df533db976e2f3eadec37e717cbefbe775dc021a8c2714" python-versions = "^3.7" [metadata.files] @@ -1183,6 +1183,11 @@ markupsafe = [ {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, ] mccabe = [ diff --git a/pyproject.toml b/pyproject.toml index 5e1812bb..c7808c11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -66,6 +66,7 @@ lxml = "^4.4" ipython = "^7.10" markdown-include = "^0.5.1" aiohttp-socks = "^0.3.4" +packaging = "^20.3" [tool.poetry.extras] fast = ["uvloop"] diff --git a/tests/deprecated.py b/tests/deprecated.py new file mode 100644 index 00000000..53d65cf7 --- /dev/null +++ b/tests/deprecated.py @@ -0,0 +1,26 @@ +from contextlib import contextmanager +from typing import Type + +import pytest +from packaging import version + +import aiogram + + +@contextmanager +def check_deprecated( + max_version: str, exception: Type[Exception], warning: Type[Warning] = DeprecationWarning, +) -> None: + """ + Should be used for modules that are being deprecated or already removed from aiogram + """ + + parsed_max_version = version.parse(max_version) + current_version = version.parse(aiogram.__version__) + + if parsed_max_version <= current_version: + with pytest.raises(exception): + yield + else: + with pytest.warns(warning, match=max_version): + yield diff --git a/tests/test_dispatcher/test_deprecated.py b/tests/test_dispatcher/test_deprecated.py index 63c2b4de..fa451a99 100644 --- a/tests/test_dispatcher/test_deprecated.py +++ b/tests/test_dispatcher/test_deprecated.py @@ -2,6 +2,7 @@ import pytest from aiogram.dispatcher.event.observer import TelegramEventObserver from aiogram.dispatcher.router import Router +from tests.deprecated import check_deprecated OBSERVERS = { "callback_query", @@ -19,28 +20,13 @@ OBSERVERS = { "update", } +DEPRECATED_OBSERVERS = {observer + "_handler" for observer in OBSERVERS} -def test_deprecated_handlers_name(): - from aiogram import __version__ - - major, minor = map(int, __version__.split(".")[:-1]) - - if minor >= 2 and major >= 3: # version >=3.2.* - do_assert = pytest.raises(AttributeError) - else: # for versions <=3.2.* (we don't care if major is lesser than `3`) - do_assert = pytest.warns(DeprecationWarning) +@pytest.mark.parametrize("observer_name", DEPRECATED_OBSERVERS) +def test_deprecated_handlers_name(observer_name: str): router = Router() - with do_assert: - for decor in OBSERVERS: - getattr(router, decor + "_handler") - - assert all( - isinstance(getattr(router, handler + "_handler"), TelegramEventObserver) - for handler in OBSERVERS - ) - - assert all( - isinstance(getattr(router, handler), TelegramEventObserver) for handler in OBSERVERS - ) + with check_deprecated("3.2", exception=AttributeError): + observer = getattr(router, observer_name) + isinstance(observer, TelegramEventObserver)