aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGravatar ks123 <[email protected]>2020-03-04 18:15:54 +0200
committerGravatar ks123 <[email protected]>2020-03-04 18:15:54 +0200
commit98f7a3777152b32bfda24f9d5add938479827c85 (patch)
tree4c148e54236dccaf1fdf4c7b04328c69bdf520f0 /tests
parent(Moderation Utils Tests): Created tests for `has_active_infraction` function (diff)
(Moderation Utils Tests): Created tests for `notify_infraction` function.
Diffstat (limited to 'tests')
-rw-r--r--tests/bot/cogs/moderation/test_utils.py93
1 files changed, 91 insertions, 2 deletions
diff --git a/tests/bot/cogs/moderation/test_utils.py b/tests/bot/cogs/moderation/test_utils.py
index d25fbfcb5..89f853262 100644
--- a/tests/bot/cogs/moderation/test_utils.py
+++ b/tests/bot/cogs/moderation/test_utils.py
@@ -1,8 +1,25 @@
import unittest
from unittest.mock import AsyncMock
-from bot.cogs.moderation.utils import has_active_infraction
-from tests.helpers import MockBot, MockContext, MockMember
+from discord import Embed
+
+from bot.cogs.moderation.utils import has_active_infraction, notify_infraction
+from bot.constants import Colours, Icons
+from tests.helpers import MockBot, MockContext, MockMember, MockUser
+
+RULES_URL = "https://pythondiscord.com/pages/rules"
+APPEAL_EMAIL = "[email protected]"
+
+INFRACTION_TITLE = f"Please review our rules over at {RULES_URL}"
+INFRACTION_APPEAL_FOOTER = f"To appeal this infraction, send an e-mail to {APPEAL_EMAIL}"
+INFRACTION_AUTHOR_NAME = "Infraction information"
+INFRACTION_COLOR = Colours.soft_red
+
+INFRACTION_DESCRIPTION_TEMPLATE = (
+ "\n**Type:** {type}\n"
+ "**Expires:** {expires}\n"
+ "**Reason:** {reason}\n"
+)
class ModerationUtilsTests(unittest.IsolatedAsyncioTestCase):
@@ -11,6 +28,7 @@ class ModerationUtilsTests(unittest.IsolatedAsyncioTestCase):
def setUp(self):
self.bot = MockBot()
self.member = MockMember(id=1234)
+ self.user = MockUser(id=1234)
self.ctx = MockContext(bot=self.bot, author=self.member)
self.bot.api_client.get = AsyncMock()
@@ -36,3 +54,74 @@ class ModerationUtilsTests(unittest.IsolatedAsyncioTestCase):
await has_active_infraction(self.ctx, self.member, "ban"),
"User shouldn't have active infraction"
)
+
+ async def test_notify_infraction(self):
+ """Test does `notify_infraction` create correct embed."""
+ test_cases = [
+ {
+ "args": (self.user, "ban", "2020-02-26 09:20 (23 hours and 59 minutes)"),
+ "expected_output": {
+ "description": INFRACTION_DESCRIPTION_TEMPLATE.format(**{
+ "type": "Ban",
+ "expires": "2020-02-26 09:20 (23 hours and 59 minutes)",
+ "reason": "No reason provided."
+ }),
+ "icon_url": Icons.token_removed,
+ "footer": INFRACTION_APPEAL_FOOTER
+ }
+ },
+ {
+ "args": (self.user, "warning", None, "Test reason."),
+ "expected_output": {
+ "description": INFRACTION_DESCRIPTION_TEMPLATE.format(**{
+ "type": "Warning",
+ "expires": "N/A",
+ "reason": "Test reason."
+ }),
+ "icon_url": Icons.token_removed,
+ "footer": Embed.Empty
+ }
+ },
+ {
+ "args": (self.user, "note", None, None, Icons.defcon_denied),
+ "expected_output": {
+ "description": INFRACTION_DESCRIPTION_TEMPLATE.format(**{
+ "type": "Note",
+ "expires": "N/A",
+ "reason": "No reason provided."
+ }),
+ "icon_url": Icons.defcon_denied,
+ "footer": Embed.Empty
+ }
+ },
+ {
+ "args": (self.user, "mute", "2020-02-26 09:20 (23 hours and 59 minutes)", "Test", Icons.defcon_denied),
+ "expected_output": {
+ "description": INFRACTION_DESCRIPTION_TEMPLATE.format(**{
+ "type": "Mute",
+ "expires": "2020-02-26 09:20 (23 hours and 59 minutes)",
+ "reason": "Test"
+ }),
+ "icon_url": Icons.defcon_denied,
+ "footer": INFRACTION_APPEAL_FOOTER
+ }
+ }
+ ]
+
+ for case in test_cases:
+ args = case["args"]
+ expected = case["expected_output"]
+
+ with self.subTest(args=case["args"], expected=case["expected_output"]):
+ await notify_infraction(*args)
+
+ embed: Embed = self.user.send.call_args[1]["embed"]
+
+ self.assertEqual(embed.title, INFRACTION_TITLE)
+ self.assertEqual(embed.colour.value, INFRACTION_COLOR)
+ self.assertEqual(embed.url, RULES_URL)
+ self.assertEqual(embed.author.name, INFRACTION_AUTHOR_NAME)
+ self.assertEqual(embed.author.url, RULES_URL)
+ self.assertEqual(embed.author.icon_url, expected["icon_url"])
+ self.assertEqual(embed.footer.text, expected["footer"])
+ self.assertEqual(embed.description, expected["description"])