aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGravatar Ibrahim <[email protected]>2023-02-23 04:08:57 +0530
committerGravatar Ibrahim <[email protected]>2023-02-23 04:08:57 +0530
commit9b98dfe78bb226e26a8d9cb6e8a0e8f8504286dd (patch)
tree52421a5cb94ec9be286e84ea08169fe0d3e307ae /tests
parentMerge branch 'main' into migration/tag (diff)
Implement all reviews
+ Remove commented code + Remove unecessarily syncting the bot + Handle direct tag commads + 3.10 type hinting in concerned functions + Add `MockInteractionMessage` + Fix tests for `try_get_tag`
Diffstat (limited to 'tests')
-rw-r--r--tests/bot/exts/backend/test_error_handler.py50
-rw-r--r--tests/helpers.py11
2 files changed, 35 insertions, 26 deletions
diff --git a/tests/bot/exts/backend/test_error_handler.py b/tests/bot/exts/backend/test_error_handler.py
index 83bc3c4a1..14e7a4125 100644
--- a/tests/bot/exts/backend/test_error_handler.py
+++ b/tests/bot/exts/backend/test_error_handler.py
@@ -9,7 +9,7 @@ from bot.exts.backend import error_handler
from bot.exts.info.tags import Tags
from bot.exts.moderation.silence import Silence
from bot.utils.checks import InWhitelistCheckFailure
-from tests.helpers import MockBot, MockContext, MockGuild, MockInteraction, MockRole, MockTextChannel, MockVoiceChannel
+from tests.helpers import MockBot, MockContext, MockGuild, MockRole, MockTextChannel, MockVoiceChannel
class ErrorHandlerTests(unittest.IsolatedAsyncioTestCase):
@@ -331,65 +331,65 @@ class TryGetTagTests(unittest.IsolatedAsyncioTestCase):
def setUp(self):
self.bot = MockBot()
- self.interaction = MockInteraction()
+ self.ctx = MockContext()
self.tag = Tags(self.bot)
self.cog = error_handler.ErrorHandler(self.bot)
- self.bot.get_command.return_value = self.tag.get_command
+ self.bot.get_cog.return_value = self.tag
async def test_try_get_tag_get_command(self):
"""Should call `Bot.get_command` with `tags get` argument."""
- self.bot.get_command.reset_mock()
- await self.cog.try_get_tag(self.interaction)
- self.bot.get_command.assert_called_once_with("tags get")
+ self.bot.get_cog.reset_mock()
+ await self.cog.try_get_tag(self.ctx)
+ self.bot.get_cog.assert_called_once_with("Tags")
async def test_try_get_tag_invoked_from_error_handler(self):
- """`self.interaction` should have `invoked_from_error_handler` `True`."""
- self.interaction.invoked_from_error_handler = False
- await self.cog.try_get_tag(self.interaction)
- self.assertTrue(self.interaction.invoked_from_error_handler)
+ """`self.ctx` should have `invoked_from_error_handler` `True`."""
+ self.ctx.invoked_from_error_handler = False
+ await self.cog.try_get_tag(self.ctx)
+ self.assertTrue(self.ctx.invoked_from_error_handler)
async def test_try_get_tag_no_permissions(self):
"""Test how to handle checks failing."""
self.tag.get_command.can_run = AsyncMock(return_value=False)
- self.interaction.invoked_with = "foo"
- self.assertIsNone(await self.cog.try_get_tag(self.interaction, AsyncMock(return_value=False)))
+ self.ctx.invoked_with = "foo"
+ self.assertIsNone(await self.cog.try_get_tag(self.ctx, AsyncMock(return_value=False)))
async def test_try_get_tag_command_error(self):
"""Should call `on_command_error` when `CommandError` raised."""
err = errors.CommandError()
self.tag.get_command.can_run = AsyncMock(side_effect=err)
self.cog.on_command_error = AsyncMock()
- self.assertIsNone(await self.cog.try_get_tag(self.interaction, AsyncMock(side_effect=err)))
- self.cog.on_command_error.assert_awaited_once_with(self.interaction, err)
+ self.assertIsNone(await self.cog.try_get_tag(self.ctx, AsyncMock(side_effect=err)))
+ self.cog.on_command_error.assert_awaited_once_with(self.ctx, err)
async def test_dont_call_suggestion_tag_sent(self):
"""Should never call command suggestion if tag is already sent."""
- self.interaction.message = MagicMock(content="foo")
- self.interaction.invoke = AsyncMock(return_value=True)
+ self.ctx.message = MagicMock(content="foo")
+ self.tag.get_command_ctx = AsyncMock(return_value=True)
self.cog.send_command_suggestion = AsyncMock()
- await self.cog.try_get_tag(self.interaction, AsyncMock())
+ await self.cog.try_get_tag(self.ctx)
self.cog.send_command_suggestion.assert_not_awaited()
@patch("bot.exts.backend.error_handler.MODERATION_ROLES", new=[1234])
async def test_dont_call_suggestion_if_user_mod(self):
"""Should not call command suggestion if user is a mod."""
- self.interaction.invoked_with = "foo"
- self.interaction.invoke = AsyncMock(return_value=False)
- self.interaction.user.roles = [MockRole(id=1234)]
+ self.ctx.invoked_with = "foo"
+ self.ctx.invoke = AsyncMock(return_value=False)
+ self.ctx.author.roles = [MockRole(id=1234)]
self.cog.send_command_suggestion = AsyncMock()
- await self.cog.try_get_tag(self.interaction, AsyncMock())
+ await self.cog.try_get_tag(self.ctx)
self.cog.send_command_suggestion.assert_not_awaited()
async def test_call_suggestion(self):
"""Should call command suggestion if user is not a mod."""
- self.interaction.invoked_with = "foo"
- self.interaction.invoke = AsyncMock(return_value=False)
+ self.ctx.invoked_with = "foo"
+ self.ctx.invoke = AsyncMock(return_value=False)
self.cog.send_command_suggestion = AsyncMock()
- await self.cog.try_get_tag(self.interaction, AsyncMock())
- self.cog.send_command_suggestion.assert_awaited_once_with(self.interaction, "foo")
+ await self.cog.try_get_tag(self.ctx)
+ self.cog.send_command_suggestion.assert_awaited_once_with(self.ctx, "foo")
class IndividualErrorHandlerTests(unittest.IsolatedAsyncioTestCase):
diff --git a/tests/helpers.py b/tests/helpers.py
index 2d20b4d07..0d955b521 100644
--- a/tests/helpers.py
+++ b/tests/helpers.py
@@ -486,7 +486,6 @@ class MockInteraction(CustomMockMixin, unittest.mock.MagicMock):
Instances of this class will follow the specifications of `discord.Interaction`
instances. For more information, see the `MockGuild` docstring.
"""
- # spec_set = context_instance
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
@@ -550,6 +549,16 @@ class MockMessage(CustomMockMixin, unittest.mock.MagicMock):
self.channel = kwargs.get('channel', MockTextChannel())
+class MockInteractionMessage(MockMessage):
+ """
+ A MagicMock subclass to mock InteractionMessage objects.
+
+ Instances of this class will follow the specifications of `discord.InteractionMessage` instances. For more
+ information, see the `MockGuild` docstring.
+ """
+ pass
+
+
emoji_data = {'require_colons': True, 'managed': True, 'id': 1, 'name': 'hyperlemon'}
emoji_instance = discord.Emoji(guild=MockGuild(), state=unittest.mock.MagicMock(), data=emoji_data)