async def test_take_action(self, format_log_message, logger, mod_log_property): """Should delete the message and send a mod log.""" cog = TokenRemover(self.bot) mod_log = mock.create_autospec(ModLog, spec_set=True, instance=True) token = mock.create_autospec(Token, spec_set=True, instance=True) log_msg = "testing123" mod_log_property.return_value = mod_log format_log_message.return_value = log_msg await cog.take_action(self.msg, token) self.msg.delete.assert_called_once_with() self.msg.channel.send.assert_called_once_with( token_remover.DELETION_MESSAGE_TEMPLATE.format( mention=self.msg.author.mention)) format_log_message.assert_called_once_with(self.msg, token) logger.debug.assert_called_with(log_msg) self.bot.stats.incr.assert_called_once_with("tokens.removed_tokens") mod_log.ignore.assert_called_once_with(constants.Event.message_delete, self.msg.id) mod_log.send_log_message.assert_called_once_with( icon_url=constants.Icons.token_removed, colour=Colour(constants.Colours.soft_red), title="Token removed!", text=log_msg, thumbnail=self.msg.author.avatar_url_as.return_value, channel_id=constants.Channels.mod_alerts)
async def test_on_message_ignores_dms_bots(self, find_token_in_message): """Shouldn't parse a message if it is a DM or authored by a bot.""" cog = TokenRemover(self.bot) dm_msg = MockMessage(guild=None) bot_msg = MockMessage(author=MagicMock(bot=True)) for msg in (dm_msg, bot_msg): await cog.on_message(msg) find_token_in_message.assert_not_called()
def setUp(self): """Adds the cog, a bot, and a message to the instance for usage in tests.""" self.bot = MockBot() self.cog = TokenRemover(bot=self.bot) self.msg = MockMessage(id=555, content="hello world") self.msg.channel.mention = "#lemonade-stand" self.msg.author.__str__ = MagicMock(return_value=self.msg.author.name) self.msg.author.avatar_url_as.return_value = "picture-lemon.png"
async def test_on_message_skips_missing_token(self, find_token_in_message, take_action): """Shouldn't take action if a valid token isn't found when a message is sent.""" cog = TokenRemover(self.bot) find_token_in_message.return_value = False await cog.on_message(self.msg) find_token_in_message.assert_called_once_with(self.msg) take_action.assert_not_awaited()
async def test_on_message_takes_action(self, find_token_in_message, take_action): """Should take action if a valid token is found when a message is sent.""" cog = TokenRemover(self.bot) found_token = "foobar" find_token_in_message.return_value = found_token await cog.on_message(self.msg) find_token_in_message.assert_called_once_with(self.msg) take_action.assert_awaited_once_with(cog, self.msg, found_token)
async def test_take_action_delete_failure(self, mod_log_property): """Shouldn't send any messages if the token message can't be deleted.""" cog = TokenRemover(self.bot) mod_log_property.return_value = mock.create_autospec(ModLog, spec_set=True, instance=True) self.msg.delete.side_effect = NotFound(MagicMock(), MagicMock()) token = mock.create_autospec(Token, spec_set=True, instance=True) await cog.take_action(self.msg, token) self.msg.delete.assert_called_once_with() self.msg.channel.send.assert_not_awaited()
def setUp(self): """Adds the cog, a bot, and a message to the instance for usage in tests.""" self.bot = MockBot() self.bot.get_cog.return_value = MagicMock() self.bot.get_cog.return_value.send_log_message = AsyncMock() self.cog = TokenRemover(bot=self.bot) self.msg = MockMessage(id=555, content='') self.msg.author.__str__ = MagicMock() self.msg.author.__str__.return_value = 'lemon' self.msg.author.bot = False self.msg.author.avatar_url_as.return_value = 'picture-lemon.png' self.msg.author.id = 42 self.msg.author.mention = '@lemon' self.msg.channel.mention = "#lemonade-stand"
def token_remover(): bot = MagicMock() bot.get_cog.return_value = MagicMock() bot.get_cog.return_value.send_log_message = AsyncMock() return TokenRemover(bot=bot)