diff options
author | 2022-06-14 00:37:07 +0200 | |
---|---|---|
committer | 2022-06-15 00:02:08 +0200 | |
commit | a3b0ffb72a1e72fc3be0e96c7407ddff2ade67c9 (patch) | |
tree | 5b19f75a36102181aaeafe9743f2abfea129483b /tests | |
parent | add typing-extensions (diff) |
Add decorator to block duplicate command invocations in a channel
Diffstat (limited to 'tests')
-rw-r--r-- | tests/botcore/utils/test_cooldown.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/botcore/utils/test_cooldown.py b/tests/botcore/utils/test_cooldown.py new file mode 100644 index 00000000..e7fe0f59 --- /dev/null +++ b/tests/botcore/utils/test_cooldown.py @@ -0,0 +1,48 @@ +import unittest +from unittest.mock import patch + +from botcore.utils.cooldown import _ArgsTuple, _CommandCooldownManager + + +def create_argument_tuple(*args, **kwargs) -> _ArgsTuple: + return (*args, *kwargs.items()) + + +class CommandCooldownManagerTests(unittest.IsolatedAsyncioTestCase): + test_call_args = ( + create_argument_tuple(0), + create_argument_tuple(a=0), + create_argument_tuple([]), + create_argument_tuple(a=[]), + create_argument_tuple(1, 2, 3, a=4, b=5, c=6), + create_argument_tuple([1], [2], [3], a=[4], b=[5], c=[6]), + create_argument_tuple([1], 2, [3], a=4, b=[5], c=6), + ) + + async def asyncSetUp(self): + self.cooldown_manager = _CommandCooldownManager(cooldown_duration=5) + + def test_no_cooldown_on_unset(self): + for call_args in self.test_call_args: + with self.subTest(arguments_tuple=call_args, channel=0): + self.assertFalse(self.cooldown_manager.is_on_cooldown(0, call_args)) + + for call_args in self.test_call_args: + with self.subTest(arguments_tuple=call_args, channel=1): + self.assertFalse(self.cooldown_manager.is_on_cooldown(1, call_args)) + + @patch("time.monotonic") + def test_cooldown_is_set(self, monotonic): + monotonic.side_effect = lambda: 0 + for call_args in self.test_call_args: + with self.subTest(arguments_tuple=call_args): + self.cooldown_manager.set_cooldown(0, call_args) + self.assertTrue(self.cooldown_manager.is_on_cooldown(0, call_args)) + + @patch("time.monotonic") + def test_cooldown_expires(self, monotonic): + for call_args in self.test_call_args: + monotonic.side_effect = (0, 1000) + with self.subTest(arguments_tuple=call_args): + self.cooldown_manager.set_cooldown(0, call_args) + self.assertFalse(self.cooldown_manager.is_on_cooldown(0, call_args)) |