diff options
| author | 2019-11-14 20:33:12 +0100 | |
|---|---|---|
| committer | 2019-11-14 20:33:12 +0100 | |
| commit | 01731a8873f13cc8a85d08147941ffba7284cf20 (patch) | |
| tree | 531f69166ebe19de112fb3d4fdc958bb337a30b9 /tests | |
| parent | Hold recent_messages in a list to respect type hint, set config in setUp (diff) | |
Make complex test cases namedtuples, recognize between various authors, pass config to subTest
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/bot/rules/test_attachments.py | 55 | 
1 files changed, 43 insertions, 12 deletions
| diff --git a/tests/bot/rules/test_attachments.py b/tests/bot/rules/test_attachments.py index fa6b63654..d8d1b341f 100644 --- a/tests/bot/rules/test_attachments.py +++ b/tests/bot/rules/test_attachments.py @@ -1,12 +1,19 @@  import unittest +from typing import List, NamedTuple, Tuple  from bot.rules import attachments  from tests.helpers import MockMessage, async_test -def msg(total_attachments: int) -> MockMessage: +class Case(NamedTuple): +    recent_messages: List[MockMessage] +    culprit: Tuple[str] +    total_attachments: int + + +def msg(author: str, total_attachments: int) -> MockMessage:      """Builds a message with `total_attachments` attachments.""" -    return MockMessage(author='lemon', attachments=list(range(total_attachments))) +    return MockMessage(author=author, attachments=list(range(total_attachments)))  class AttachmentRuleTests(unittest.TestCase): @@ -19,9 +26,9 @@ class AttachmentRuleTests(unittest.TestCase):      async def test_allows_messages_without_too_many_attachments(self):          """Messages without too many attachments are allowed as-is."""          cases = ( -            [msg(0), msg(0), msg(0)], -            [msg(2), msg(2)], -            [msg(0)], +            [msg("bob", 0), msg("bob", 0), msg("bob", 0)], +            [msg("bob", 2), msg("bob", 2)], +            [msg("bob", 2), msg("alice", 2), msg("bob", 2)],          )          for recent_messages in cases: @@ -29,7 +36,8 @@ class AttachmentRuleTests(unittest.TestCase):              with self.subTest(                  last_message=last_message, -                recent_messages=recent_messages +                recent_messages=recent_messages, +                config=self.config              ):                  self.assertIsNone(                      await attachments.apply(last_message, recent_messages, self.config) @@ -39,12 +47,29 @@ class AttachmentRuleTests(unittest.TestCase):      async def test_disallows_messages_with_too_many_attachments(self):          """Messages with too many attachments trigger the rule."""          cases = ( -            ([msg(4), msg(0), msg(6)], 10), -            ([msg(6)], 6), -            ([msg(1)] * 6, 6), +            Case( +                [msg("bob", 4), msg("bob", 0), msg("bob", 6)], +                ("bob",), +                10 +            ), +            Case( +                [msg("bob", 4), msg("alice", 6), msg("bob", 2)], +                ("bob",), +                6 +            ), +            Case( +                [msg("alice", 6)], +                ("alice",), +                6 +            ), +            ( +                [msg("alice", 1) for _ in range(6)], +                ("alice",), +                6 +            ),          ) -        for recent_messages, total in cases: +        for recent_messages, culprit, total_attachments in cases:              last_message = recent_messages[0]              relevant_messages = tuple(                  msg @@ -59,9 +84,15 @@ class AttachmentRuleTests(unittest.TestCase):                  last_message=last_message,                  recent_messages=recent_messages,                  relevant_messages=relevant_messages, -                total=total +                total_attachments=total_attachments, +                config=self.config              ): +                desired_output = ( +                    f"sent {total_attachments} attachments in {self.config['max']}s", +                    culprit, +                    relevant_messages +                )                  self.assertEqual(                      await attachments.apply(last_message, recent_messages, self.config), -                    (f"sent {total} attachments in 5s", ('lemon',), relevant_messages) +                    desired_output                  ) | 
