aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGravatar B0nes <[email protected]>2025-06-29 16:12:44 +0100
committerGravatar B0nes <[email protected]>2025-06-30 23:16:42 +0100
commita15262df0c63027591a13e0024d2000986ae7c85 (patch)
tree5f53a7e7765d1fa879dfc3bcfa4928bb5356724d /tests
parentFix 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.py45
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()