diff options
author | 2020-02-23 15:42:20 -0800 | |
---|---|---|
committer | 2020-02-23 15:42:20 -0800 | |
commit | c81a4d401ea434e98b0a1ece51d3d10f1a3ad226 (patch) | |
tree | 1fe8caf0ae751cfe94a71fcf02ffbbfda5bd8812 /tests/base.py | |
parent | Merge pull request #749 from python-discord/reminder-enhancements (diff) | |
parent | Merge remote-tracking branch 'origin/master' into bug/backend/b704/ready-miss... (diff) |
Merge pull request #711 from python-discord/bug/backend/b704/ready-missing-cache
Prevent the role syncer from wiping the database table during API latency
Diffstat (limited to 'tests/base.py')
-rw-r--r-- | tests/base.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/base.py b/tests/base.py index 029a249ed..88693f382 100644 --- a/tests/base.py +++ b/tests/base.py @@ -1,6 +1,12 @@ import logging import unittest from contextlib import contextmanager +from typing import Dict + +import discord +from discord.ext import commands + +from tests import helpers class _CaptureLogHandler(logging.Handler): @@ -65,3 +71,31 @@ class LoggingTestCase(unittest.TestCase): standard_message = self._truncateMessage(base_message, record_message) msg = self._formatMessage(msg, standard_message) self.fail(msg) + + +class CommandTestCase(unittest.TestCase): + """TestCase with additional assertions that are useful for testing Discord commands.""" + + @helpers.async_test + async def assertHasPermissionsCheck( + self, + cmd: commands.Command, + permissions: Dict[str, bool], + ) -> None: + """ + Test that `cmd` raises a `MissingPermissions` exception if author lacks `permissions`. + + Every permission in `permissions` is expected to be reported as missing. In other words, do + not include permissions which should not raise an exception along with those which should. + """ + # Invert permission values because it's more intuitive to pass to this assertion the same + # permissions as those given to the check decorator. + permissions = {k: not v for k, v in permissions.items()} + + ctx = helpers.MockContext() + ctx.channel.permissions_for.return_value = discord.Permissions(**permissions) + + with self.assertRaises(commands.MissingPermissions) as cm: + await cmd.can_run(ctx) + + self.assertCountEqual(permissions.keys(), cm.exception.missing_perms) |