diff options
| -rw-r--r-- | bot/exts/filters/filtering.py | 4 | ||||
| -rw-r--r-- | tests/bot/exts/filters/test_filtering.py | 40 | 
2 files changed, 40 insertions, 4 deletions
| diff --git a/bot/exts/filters/filtering.py b/bot/exts/filters/filtering.py index 022b4ab02..f05b1d00b 100644 --- a/bot/exts/filters/filtering.py +++ b/bot/exts/filters/filtering.py @@ -496,10 +496,6 @@ class Filtering(Cog):          text = self.clean_input(text) -        # Make sure it's not a URL -        if URL_RE.search(text): -            return False, None -          watchlist_patterns = self._get_filterlist_items('filter_token', allowed=False)          for pattern in watchlist_patterns:              match = re.search(pattern, text, flags=re.IGNORECASE) diff --git a/tests/bot/exts/filters/test_filtering.py b/tests/bot/exts/filters/test_filtering.py new file mode 100644 index 000000000..8ae59c1f1 --- /dev/null +++ b/tests/bot/exts/filters/test_filtering.py @@ -0,0 +1,40 @@ +import unittest +from unittest.mock import patch + +from bot.exts.filters import filtering +from tests.helpers import MockBot, autospec + + +class FilteringCogTests(unittest.IsolatedAsyncioTestCase): +    """Tests the `Filtering` cog.""" + +    def setUp(self): +        """Instantiate the bot and cog.""" +        self.bot = MockBot() +        with patch("bot.utils.scheduling.create_task", new=lambda task, **_: task.close()): +            self.cog = filtering.Filtering(self.bot) + +    @autospec(filtering.Filtering, "_get_filterlist_items", pass_mocks=False, return_value=["TOKEN"]) +    async def test_token_filter(self): +        """Ensure that a filter token is correctly detected in a message.""" +        messages = { +            "": False, +            "no matches": False, +            "TOKEN": True, + +            # See advisory https://github.com/python-discord/bot/security/advisories/GHSA-j8c3-8x46-8pp6 +            "https://google.com TOKEN": True, +            "https://google.com something else": False, +        } + +        for message, match in messages.items(): +            with self.subTest(input=message, match=match): +                result, _ = await self.cog._has_watch_regex_match(message) + +                self.assertEqual( +                    match, +                    bool(result), +                    msg=f"Hit was {'expected' if match else 'not expected'} for this input." +                ) +                if result: +                    self.assertEqual("TOKEN", result.group()) | 
