diff options
author | 2025-06-29 16:12:44 +0100 | |
---|---|---|
committer | 2025-06-30 23:16:42 +0100 | |
commit | a15262df0c63027591a13e0024d2000986ae7c85 (patch) | |
tree | 5f53a7e7765d1fa879dfc3bcfa4928bb5356724d /tests | |
parent | Fix bug in test causing channel edit to not be recognised (diff) |
Refactor slowmode command to use Duration converter; Combine redis caches into one object; update and tidy related tests.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/bot/exts/moderation/test_slowmode.py | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/tests/bot/exts/moderation/test_slowmode.py b/tests/bot/exts/moderation/test_slowmode.py index 3d816e144..d88ffd784 100644 --- a/tests/bot/exts/moderation/test_slowmode.py +++ b/tests/bot/exts/moderation/test_slowmode.py @@ -98,9 +98,11 @@ class SlowmodeTests(RedisTestCase): ) @mock.patch("bot.exts.moderation.slowmode.datetime") - async def test_set_slowmode_with_duration(self, mock_datetime) -> None: - """Set slowmode with a duration""" - mock_datetime.now.return_value = datetime.datetime(2025, 6, 2, 12, 0, 0, tzinfo=datetime.UTC) + async def test_set_slowmode_with_expiry(self, mock_datetime) -> None: + """Set slowmode with an expiry""" + fixed_datetime = datetime.datetime(2025, 6, 2, 12, 0, 0, tzinfo=datetime.UTC) + mock_datetime.now.return_value = fixed_datetime + test_cases = ( ("python-general", 6, 6000, f"{Emojis.check_mark} The slowmode delay for #python-general is now 6 seconds" " and expires in <t:1748871600:R>."), @@ -109,11 +111,11 @@ class SlowmodeTests(RedisTestCase): ("changelog", 12, 7200, f"{Emojis.check_mark} The slowmode delay for #changelog is now 12 seconds and" " expires in <t:1748872800:R>.") ) - for channel_name, seconds, duration, result_msg in test_cases: + for channel_name, seconds, expiry, result_msg in test_cases: with self.subTest( channel_mention=channel_name, seconds=seconds, - duration=duration, + expiry=expiry, result_msg=result_msg ): text_channel = MockTextChannel(name=channel_name, slowmode_delay=0) @@ -122,28 +124,27 @@ class SlowmodeTests(RedisTestCase): self.ctx, text_channel, relativedelta(seconds=seconds), - duration=relativedelta(seconds=duration) + fixed_datetime + relativedelta(seconds=expiry) ) text_channel.edit.assert_awaited_once_with(slowmode_delay=float(seconds)) self.ctx.send.assert_called_once_with(result_msg) self.ctx.reset_mock() - @mock.patch("bot.exts.moderation.slowmode.datetime", wraps=datetime.datetime) - async def test_callback_scheduled(self, mock_datetime, ): + async def test_callback_scheduled(self): """Schedule slowmode to be reverted""" - mock_now = datetime.datetime(2025, 6, 2, 12, 0, 0, tzinfo=datetime.UTC) - mock_datetime.now.return_value = mock_now self.cog.scheduler=mock.MagicMock(wraps=self.cog.scheduler) text_channel = MockTextChannel(name="python-general", slowmode_delay=2, id=123) + expiry = datetime.datetime.now(tz=datetime.UTC) + relativedelta(seconds=10) await self.cog.set_slowmode( self.cog, self.ctx, text_channel, relativedelta(seconds=4), - relativedelta(seconds=10)) + expiry + ) - args = (mock_now+relativedelta(seconds=10), text_channel.id, mock.ANY) + args = (expiry, text_channel.id, mock.ANY) self.cog.scheduler.schedule_at.assert_called_once_with(*args) async def test_revert_slowmode_callback(self) -> None: @@ -151,7 +152,11 @@ class SlowmodeTests(RedisTestCase): text_channel = MockTextChannel(name="python-general", slowmode_delay=2, id=123) self.bot.get_channel = mock.MagicMock(return_value=text_channel) await self.cog.set_slowmode( - self.cog, self.ctx, text_channel, relativedelta(seconds=4), relativedelta(seconds=10) + self.cog, + self.ctx, + text_channel, + relativedelta(seconds=4), + datetime.datetime.now(tz=datetime.UTC) + relativedelta(seconds=10) ) await self.cog._revert_slowmode(text_channel.id) text_channel.edit.assert_awaited_with(slowmode_delay=2) @@ -177,23 +182,19 @@ class SlowmodeTests(RedisTestCase): self.cog._reschedule.assert_called() - @mock.patch("bot.exts.moderation.slowmode.datetime", wraps=datetime.datetime) - async def test_reschedules_slowmodes(self, mock_datetime) -> None: + async def test_reschedules_slowmodes(self) -> None: """Slowmodes are loaded from cache at cog reload and scheduled to be reverted.""" - mock_datetime.now.return_value = datetime.datetime(2025, 6, 2, 12, 0, 0, tzinfo=datetime.UTC) - mock_now = datetime.datetime(2025, 6, 2, 12, 0, 0, tzinfo=datetime.UTC) + now = datetime.datetime.now(tz=datetime.UTC) channels = {} slowmodes = ( - (123, (mock_now - datetime.timedelta(10)).timestamp(), 2), # expiration in the past - (456, (mock_now + datetime.timedelta(20)).timestamp(), 4), # expiration in the future + (123, (now - datetime.timedelta(minutes=10)), 2), # expiration in the past + (456, (now + datetime.timedelta(minutes=20)), 4), # expiration in the future ) - for channel_id, expiration_datetime, delay in slowmodes: channel = MockTextChannel(slowmode_delay=delay, id=channel_id) channels[channel_id] = channel - await self.cog.slowmode_expiration_cache.set(channel_id, expiration_datetime) - await self.cog.original_slowmode_cache.set(channel_id, delay) + await self.cog.slowmode_cache.set(channel_id, f"{delay}, {expiration_datetime}") self.bot.get_channel = mock.MagicMock(side_effect=lambda channel_id: channels.get(channel_id)) await self.cog.cog_unload() |