aboutsummaryrefslogtreecommitdiffstats
path: root/tests/rules/test_attachments.py
diff options
context:
space:
mode:
authorGravatar Johannes Christ <[email protected]>2019-09-15 17:18:00 +0200
committerGravatar Johannes Christ <[email protected]>2019-09-18 23:14:09 +0200
commit7f70a4eb064458b56892c046a34cce598a2053e2 (patch)
tree1262411194cbf68549bb01947025964852262e09 /tests/rules/test_attachments.py
parentMerge pull request #438 from python-discord/hemlock-infraction-date-humanization (diff)
Add tests for `bot.rules.attachments`.
This also fixes an issue with the `attachments` rule not respecting the most recent message sent by a user.
Diffstat (limited to 'tests/rules/test_attachments.py')
-rw-r--r--tests/rules/test_attachments.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/rules/test_attachments.py b/tests/rules/test_attachments.py
new file mode 100644
index 000000000..6f025b3cb
--- /dev/null
+++ b/tests/rules/test_attachments.py
@@ -0,0 +1,52 @@
+import asyncio
+from dataclasses import dataclass
+from typing import Any, List
+
+import pytest
+
+from bot.rules import attachments
+
+
+# Using `MagicMock` sadly doesn't work for this usecase
+# since it's __eq__ compares the MagicMock's ID. We just
+# want to compare the actual attributes we set.
+@dataclass
+class FakeMessage:
+ author: str
+ attachments: List[Any]
+
+
+def msg(total_attachments: int):
+ return FakeMessage(author='lemon', attachments=list(range(total_attachments)))
+
+
+ 'messages',
+ (
+ (msg(0), msg(0), msg(0)),
+ (msg(2), msg(2)),
+ (msg(0),),
+ )
+)
+def test_allows_messages_without_too_many_attachments(messages):
+ last_message, *recent_messages = messages
+ coro = attachments.apply(last_message, recent_messages, {'max': 5})
+ assert asyncio.run(coro) is None
+
+
+ ('messages', 'relevant_messages', 'total'),
+ (
+ ((msg(4), msg(0), msg(6)), [msg(4), msg(6)], 10),
+ ((msg(6),), [msg(6)], 6),
+ ((msg(1),) * 6, [msg(1)] * 6, 6),
+ )
+)
+def test_disallows_messages_with_too_many_attachments(messages, relevant_messages, total):
+ last_message, *recent_messages = messages
+ coro = attachments.apply(last_message, recent_messages, {'max': 5})
+ assert asyncio.run(coro) == (
+ f"sent {total} attachments in 5s",
+ ('lemon',),
+ relevant_messages
+ )