aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2020-08-17 15:58:31 -0700
committerGravatar MarkKoz <[email protected]>2020-08-17 15:58:31 -0700
commit3ec17dac3fe8e00f34489a5e3dd927bec39e91e6 (patch)
tree695644381df428efffd8f9aa0ecfb83dd9e27c09 /tests
parentSilence tests: fix test_unsilence_private_removed_notifier (diff)
Silence tests: fix tests for _unsilence
Add a fixture to set up mocks for a successful `unsilence` call. This reduces code redundancy.
Diffstat (limited to 'tests')
-rw-r--r--tests/bot/cogs/moderation/test_silence.py75
1 files changed, 45 insertions, 30 deletions
diff --git a/tests/bot/cogs/moderation/test_silence.py b/tests/bot/cogs/moderation/test_silence.py
index b21f5f61a..ff32e9a05 100644
--- a/tests/bot/cogs/moderation/test_silence.py
+++ b/tests/bot/cogs/moderation/test_silence.py
@@ -1,6 +1,6 @@
import unittest
from unittest import mock
-from unittest.mock import MagicMock, Mock
+from unittest.mock import Mock
from discord import PermissionOverwrite
@@ -81,6 +81,18 @@ class SilenceTests(unittest.IsolatedAsyncioTestCase):
self.ctx = MockContext()
self.cog._verified_role = None
+ def unsilence_fixture(self) -> MockTextChannel:
+ """Setup mocks for a successful `_unsilence` call. Return the mocked channel."""
+ overwrite_json = '{"send_messages": true, "add_reactions": null}'
+ self.cog.muted_channel_perms.get.return_value = overwrite_json
+
+ # stream=True just to have at least one other overwrite not be the default value.
+ channel = MockTextChannel()
+ overwrite = PermissionOverwrite(stream=True, send_messages=False, add_reactions=False)
+ channel.overwrites_for.return_value = overwrite
+
+ return channel
+
async def test_init_cog_got_guild(self):
"""Bot got guild after it became available."""
await self.cog._init_cog()
@@ -223,47 +235,50 @@ class SilenceTests(unittest.IsolatedAsyncioTestCase):
@mock.patch.object(Silence, "notifier", create=True)
async def test_unsilence_private_unsilenced_channel(self, _):
- """Channel had `send_message` permissions restored"""
- perm_overwrite = MagicMock(send_messages=False)
- channel = MockTextChannel(overwrites_for=Mock(return_value=perm_overwrite))
- self.assertTrue(await self.cog._unsilence(channel))
- channel.set_permissions.assert_called_once()
- self.assertIsNone(channel.set_permissions.call_args.kwargs['send_messages'])
+ """Channel had `send_message` permissions restored."""
+ channel = self.unsilence_fixture()
+ overwrite = channel.overwrites_for.return_value
+
+ await self.cog._unsilence(channel)
+ channel.set_permissions.assert_awaited_once_with(
+ self.cog._verified_role, overwrite=overwrite
+ )
+
+ # Recall that these values are determined by the fixture.
+ self.assertTrue(overwrite.send_messages)
+ self.assertIsNone(overwrite.add_reactions)
@mock.patch.object(Silence, "notifier", create=True)
async def test_unsilence_private_removed_notifier(self, notifier):
"""Channel was removed from `notifier` on unsilence."""
- overwrite_json = '{"send_messages": true, "add_reactions": null}'
- self.cog.muted_channel_perms.get.return_value = overwrite_json
- channel = MockTextChannel()
- channel.overwrites_for.return_value = PermissionOverwrite()
-
+ channel = self.unsilence_fixture()
await self.cog._unsilence(channel)
notifier.remove_channel.assert_called_once_with(channel)
@mock.patch.object(Silence, "notifier", create=True)
async def test_unsilence_private_removed_muted_channel(self, _):
- """Channel was removed from `muted_channels` on unsilence."""
- perm_overwrite = MagicMock(send_messages=False)
- channel = MockTextChannel(overwrites_for=Mock(return_value=perm_overwrite))
- with mock.patch.object(self.cog, "muted_channels") as muted_channels:
- await self.cog._unsilence(channel)
- muted_channels.discard.assert_called_once_with(channel)
+ """Channel was removed from overwrites cache on unsilence."""
+ channel = self.unsilence_fixture()
+ await self.cog._unsilence(channel)
+ self.cog.muted_channel_perms.delete.assert_awaited_once_with(channel.id)
@mock.patch.object(Silence, "notifier", create=True)
- async def test_unsilence_private_preserves_permissions(self, _):
- """Previous permissions were preserved when channel was unsilenced."""
- channel = MockTextChannel()
- # Set up mock channel permission state.
- mock_permissions = PermissionOverwrite(send_messages=False)
- mock_permissions_dict = dict(mock_permissions)
- channel.overwrites_for.return_value = mock_permissions
+ async def test_unsilence_private_preserves_other_overwrites(self, _):
+ """Channel's other unrelated overwrites were not changed when it was unsilenced."""
+ channel = self.unsilence_fixture()
+ overwrite = channel.overwrites_for.return_value
+
+ prev_overwrite_dict = dict(overwrite)
await self.cog._unsilence(channel)
- new_permissions = channel.set_permissions.call_args.kwargs
- # Remove 'send_messages' key because it got changed in the method.
- del new_permissions['send_messages']
- del mock_permissions_dict['send_messages']
- self.assertDictEqual(mock_permissions_dict, new_permissions)
+ new_overwrite_dict = dict(overwrite)
+
+ # Remove 'send_messages' & 'add_reactions' keys because they were changed by the method.
+ del prev_overwrite_dict['send_messages']
+ del prev_overwrite_dict['add_reactions']
+ del new_overwrite_dict['send_messages']
+ del new_overwrite_dict['add_reactions']
+
+ self.assertDictEqual(prev_overwrite_dict, new_overwrite_dict)
def test_cog_unload_cancels_tasks(self):
"""All scheduled tasks should be cancelled."""