From 0c9c83765295c9421adfb191d58dff81e2cffd42 Mon Sep 17 00:00:00 2001 From: birdi Date: Thu, 18 Jul 2019 20:52:41 +0300 Subject: [PATCH 1/3] Add tests for text filter --- tests/test_filters.py | 177 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 tests/test_filters.py diff --git a/tests/test_filters.py b/tests/test_filters.py new file mode 100644 index 00000000..a2095306 --- /dev/null +++ b/tests/test_filters.py @@ -0,0 +1,177 @@ +import pytest + +from aiogram.dispatcher.filters import Text +from aiogram.types import Message, CallbackQuery, InlineQuery, Poll + + +class TestTextFilter: + @pytest.mark.asyncio + @pytest.mark.parametrize("test_prefix, test_text, ignore_case", + [('example_string', 'example_string', True), + ('example_string', 'exAmple_string', True), + ('exAmple_string', 'example_string', True), + + ('example_string', 'example_string', False), + ('example_string', 'exAmple_string', False), + ('exAmple_string', 'example_string', False), + + ('example_string', 'example_string_dsf', True), + ('example_string', 'example_striNG_dsf', True), + ('example_striNG', 'example_string_dsf', True), + + ('example_string', 'example_string_dsf', False), + ('example_string', 'example_striNG_dsf', False), + ('example_striNG', 'example_string_dsf', False), + + ('example_string', 'not_example_string', True), + ('example_string', 'not_eXample_string', True), + ('EXample_string', 'not_example_string', True), + + ('example_string', 'not_example_string', False), + ('example_string', 'not_eXample_string', False), + ('EXample_string', 'not_example_string', False), + ]) + async def test_startswith(self, test_prefix, test_text, ignore_case): + test_filter = Text(startswith=test_prefix, ignore_case=ignore_case) + + async def check(obj): + result = await test_filter.check(obj) + if ignore_case: + _test_prefix = test_prefix.lower() + _test_text = test_text.lower() + else: + _test_prefix = test_prefix + _test_text = test_text + + return result is _test_text.startswith(_test_prefix) + + assert await check(Message(text=test_text)) + assert await check(CallbackQuery(data=test_text)) + assert await check(InlineQuery(query=test_text)) + assert await check(Poll(question=test_text)) + + @pytest.mark.asyncio + @pytest.mark.parametrize("test_postfix, test_text, ignore_case", + [('example_string', 'example_string', True), + ('example_string', 'exAmple_string', True), + ('exAmple_string', 'example_string', True), + + ('example_string', 'example_string', False), + ('example_string', 'exAmple_string', False), + ('exAmple_string', 'example_string', False), + + ('example_string', 'example_string_dsf', True), + ('example_string', 'example_striNG_dsf', True), + ('example_striNG', 'example_string_dsf', True), + + ('example_string', 'example_string_dsf', False), + ('example_string', 'example_striNG_dsf', False), + ('example_striNG', 'example_string_dsf', False), + + ('example_string', 'not_example_string', True), + ('example_string', 'not_eXample_string', True), + ('EXample_string', 'not_eXample_string', True), + + ('example_string', 'not_example_string', False), + ('example_string', 'not_eXample_string', False), + ('EXample_string', 'not_example_string', False), + ]) + async def test_endswith(self, test_postfix, test_text, ignore_case): + test_filter = Text(endswith=test_postfix, ignore_case=ignore_case) + + async def check(obj): + result = await test_filter.check(obj) + if ignore_case: + _test_postfix = test_postfix.lower() + _test_text = test_text.lower() + else: + _test_postfix = test_postfix + _test_text = test_text + + return result is _test_text.endswith(_test_postfix) + + assert await check(Message(text=test_text)) + assert await check(CallbackQuery(data=test_text)) + assert await check(InlineQuery(query=test_text)) + assert await check(Poll(question=test_text)) + + @pytest.mark.asyncio + @pytest.mark.parametrize("test_string, test_text, ignore_case", + [('example_string', 'example_string', True), + ('example_string', 'exAmple_string', True), + ('exAmple_string', 'example_string', True), + + ('example_string', 'example_string', False), + ('example_string', 'exAmple_string', False), + ('exAmple_string', 'example_string', False), + + ('example_string', 'example_string_dsf', True), + ('example_string', 'example_striNG_dsf', True), + ('example_striNG', 'example_string_dsf', True), + + ('example_string', 'example_string_dsf', False), + ('example_string', 'example_striNG_dsf', False), + ('example_striNG', 'example_string_dsf', False), + + ('example_string', 'not_example_strin', True), + ('example_string', 'not_eXample_strin', True), + ('EXample_string', 'not_eXample_strin', True), + + ('example_string', 'not_example_strin', False), + ('example_string', 'not_eXample_strin', False), + ('EXample_string', 'not_example_strin', False), + ]) + async def test_contains(self, test_string, test_text, ignore_case): + test_filter = Text(endswith=test_string, ignore_case=ignore_case) + + async def check(obj): + result = await test_filter.check(obj) + if ignore_case: + _test_string = test_string.lower() + _test_text = test_text.lower() + else: + _test_string = test_string + _test_text = test_text + + return result is (_test_string in _test_text) + + assert await check(Message(text=test_text)) + assert await check(CallbackQuery(data=test_text)) + assert await check(InlineQuery(query=test_text)) + assert await check(Poll(question=test_text)) + + @pytest.mark.asyncio + @pytest.mark.parametrize("test_filter_text, test_text, ignore_case", + [('example_string', 'example_string', True), + ('example_string', 'exAmple_string', True), + ('exAmple_string', 'example_string', True), + + ('example_string', 'example_string', False), + ('example_string', 'exAmple_string', False), + ('exAmple_string', 'example_string', False), + + ('example_string', 'not_example_string', True), + ('example_string', 'not_eXample_string', True), + ('EXample_string', 'not_eXample_string', True), + + ('example_string', 'not_example_string', False), + ('example_string', 'not_eXample_string', False), + ('EXample_string', 'not_example_string', False), + ]) + async def test_equals_string(self, test_filter_text, test_text, ignore_case): + test_filter = Text(equals=test_filter_text) + + async def check(obj): + result = await test_filter.check(obj) + if ignore_case: + _test_filter_text = test_filter_text.lower() + _test_text = test_text.lower() + else: + _test_filter_text = test_filter_text + _test_text = test_text + return result is (_test_text == _test_filter_text) + + assert await check(Message(text=test_text)) + assert await check(CallbackQuery(data=test_text)) + assert await check(InlineQuery(query=test_text)) + assert await check(Poll(question=test_text)) From 46e5c7a3d000b50cea743af94d7b274be5f29ddf Mon Sep 17 00:00:00 2001 From: birdi Date: Thu, 18 Jul 2019 22:57:59 +0300 Subject: [PATCH 2/3] Add ignore_case to equals test --- tests/test_filters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_filters.py b/tests/test_filters.py index a2095306..153c31f6 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -159,7 +159,7 @@ class TestTextFilter: ('EXample_string', 'not_example_string', False), ]) async def test_equals_string(self, test_filter_text, test_text, ignore_case): - test_filter = Text(equals=test_filter_text) + test_filter = Text(equals=test_filter_text, ignore_case=ignore_case) async def check(obj): result = await test_filter.check(obj) From c982fd54ccb4182556b28f9bd6e27a65c9fe348f Mon Sep 17 00:00:00 2001 From: birdi Date: Thu, 18 Jul 2019 23:02:03 +0300 Subject: [PATCH 3/3] Fix contains test --- tests/test_filters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_filters.py b/tests/test_filters.py index 153c31f6..f68b7c44 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -122,7 +122,7 @@ class TestTextFilter: ('EXample_string', 'not_example_strin', False), ]) async def test_contains(self, test_string, test_text, ignore_case): - test_filter = Text(endswith=test_string, ignore_case=ignore_case) + test_filter = Text(contains=test_string, ignore_case=ignore_case) async def check(obj): result = await test_filter.check(obj)