aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/bot/cogs/test_security.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/bot/cogs/test_security.py b/tests/bot/cogs/test_security.py
new file mode 100644
index 000000000..efa7a50b1
--- /dev/null
+++ b/tests/bot/cogs/test_security.py
@@ -0,0 +1,59 @@
+import logging
+import unittest
+from unittest.mock import MagicMock
+
+from discord.ext.commands import NoPrivateMessage
+
+from bot.cogs import security
+from tests.helpers import MockBot, MockContext
+
+
+class SecurityCogTests(unittest.TestCase):
+ """Tests the `Security` cog."""
+
+ def setUp(self):
+ """Attach an instance of the cog to the class for tests."""
+ self.bot = MockBot()
+ self.cog = security.Security(self.bot)
+ self.ctx = MockContext()
+
+ def test_check_additions(self):
+ """The cog should add its checks after initialization."""
+ self.bot.check.assert_any_call(self.cog.check_on_guild)
+ self.bot.check.assert_any_call(self.cog.check_not_bot)
+
+ def test_check_not_bot_returns_false_for_humans(self):
+ """The bot check should return `True` when invoked with human authors."""
+ self.ctx.author.bot = False
+ self.assertTrue(self.cog.check_not_bot(self.ctx))
+
+ def test_check_not_bot_returns_true_for_robots(self):
+ """The bot check should return `False` when invoked with robotic authors."""
+ self.ctx.author.bot = True
+ self.assertFalse(self.cog.check_not_bot(self.ctx))
+
+ def test_check_on_guild_raises_when_outside_of_guild(self):
+ """When invoked outside of a guild, `check_on_guild` should cause an error."""
+ self.ctx.guild = None
+
+ with self.assertRaises(NoPrivateMessage, msg="This command cannot be used in private messages."):
+ self.cog.check_on_guild(self.ctx)
+
+ def test_check_on_guild_returns_true_inside_of_guild(self):
+ """When invoked inside of a guild, `check_on_guild` should return `True`."""
+ self.ctx.guild = "lemon's lemonade stand"
+ self.assertTrue(self.cog.check_on_guild(self.ctx))
+
+
+class SecurityCogLoadTests(unittest.TestCase):
+ """Tests loading the `Security` cog."""
+
+ def test_security_cog_load(self):
+ """Cog loading logs a message at `INFO` level."""
+ bot = MagicMock()
+ with self.assertLogs(logger='bot.cogs.security', level=logging.INFO) as cm:
+ security.setup(bot)
+ bot.add_cog.assert_called_once()
+
+ [line] = cm.output
+ self.assertIn("Cog loaded: Security", line)