From ab9264e2c9033651e1dcd8a12ce2576bd1e5c67e Mon Sep 17 00:00:00 2001 From: birdi Date: Tue, 23 Jul 2019 00:43:14 +0300 Subject: [PATCH 1/2] Add tests which fall because empty string isn't a correct match string --- tests/test_filters.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/tests/test_filters.py b/tests/test_filters.py index f68b7c44..da530910 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -7,7 +7,12 @@ 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), + [('', '', True), + ('', 'exAmple_string', True), + ('', '', False), + ('', 'exAmple_string', False), + + ('example_string', 'example_string', True), ('example_string', 'exAmple_string', True), ('exAmple_string', 'example_string', True), @@ -52,7 +57,12 @@ class TestTextFilter: @pytest.mark.asyncio @pytest.mark.parametrize("test_postfix, test_text, ignore_case", - [('example_string', 'example_string', True), + [('', '', True), + ('', 'exAmple_string', True), + ('', '', False), + ('', 'exAmple_string', False), + + ('example_string', 'example_string', True), ('example_string', 'exAmple_string', True), ('exAmple_string', 'example_string', True), @@ -97,7 +107,12 @@ class TestTextFilter: @pytest.mark.asyncio @pytest.mark.parametrize("test_string, test_text, ignore_case", - [('example_string', 'example_string', True), + [('', '', True), + ('', 'exAmple_string', True), + ('', '', False), + ('', 'exAmple_string', False), + + ('example_string', 'example_string', True), ('example_string', 'exAmple_string', True), ('exAmple_string', 'example_string', True), @@ -142,7 +157,12 @@ class TestTextFilter: @pytest.mark.asyncio @pytest.mark.parametrize("test_filter_text, test_text, ignore_case", - [('example_string', 'example_string', True), + [('', '', True), + ('', 'exAmple_string', True), + ('', '', False), + ('', 'exAmple_string', False), + + ('example_string', 'example_string', True), ('example_string', 'exAmple_string', True), ('exAmple_string', 'example_string', True), From 974f19a614242a1a61a5594813f881e9b82957b8 Mon Sep 17 00:00:00 2001 From: birdi Date: Tue, 23 Jul 2019 00:49:26 +0300 Subject: [PATCH 2/2] Fix empty match string in text filter --- aiogram/dispatcher/filters/builtin.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/aiogram/dispatcher/filters/builtin.py b/aiogram/dispatcher/filters/builtin.py index 9826c63b..15cd73dd 100644 --- a/aiogram/dispatcher/filters/builtin.py +++ b/aiogram/dispatcher/filters/builtin.py @@ -221,13 +221,13 @@ class Text(Filter): :param ignore_case: case insensitive """ # Only one mode can be used. check it. - check = sum(map(bool, (equals, contains, startswith, endswith))) + check = sum(map(lambda s: s is not None, (equals, contains, startswith, endswith))) if check > 1: args = "' and '".join([arg[0] for arg in [('equals', equals), ('contains', contains), ('startswith', startswith), ('endswith', endswith) - ] if arg[1]]) + ] if arg[1] is not None]) raise ValueError(f"Arguments '{args}' cannot be used together.") elif check == 0: raise ValueError(f"No one mode is specified!") @@ -266,22 +266,22 @@ class Text(Filter): if self.ignore_case: text = text.lower() - if self.equals: + if self.equals is not None: self.equals = str(self.equals) if self.ignore_case: self.equals = self.equals.lower() return text == self.equals - elif self.contains: + elif self.contains is not None: self.contains = str(self.contains) if self.ignore_case: self.contains = self.contains.lower() return self.contains in text - elif self.startswith: + elif self.startswith is not None: self.startswith = str(self.startswith) if self.ignore_case: self.startswith = self.startswith.lower() return text.startswith(self.startswith) - elif self.endswith: + elif self.endswith is not None: self.endswith = str(self.endswith) if self.ignore_case: self.endswith = self.endswith.lower()