diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/cogs/__init__.py | 0 | ||||
| -rw-r--r-- | tests/cogs/test_security.py | 59 | 
2 files changed, 59 insertions, 0 deletions
| diff --git a/tests/cogs/__init__.py b/tests/cogs/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/cogs/__init__.py diff --git a/tests/cogs/test_security.py b/tests/cogs/test_security.py new file mode 100644 index 000000000..6c646ae70 --- /dev/null +++ b/tests/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 + + +class SecurityCogTests(unittest.TestCase): +    """Tests the `Security` cog.""" + +    def setUp(self): +        """Attach an instance of the cog to the class for tests.""" +        self.bot = MagicMock() +        self.cog = security.Security(self.bot) +        self.ctx = MagicMock() +        self.ctx.author = MagicMock() + +    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) | 
