|
|
@@ -48,6 +48,7 @@ class OnMessageTest(unittest.IsolatedAsyncioTestCase):
|
|
|
message.channel.id = CHANNEL_ID
|
|
|
message.author.bot = from_bot
|
|
|
message.mentions = [self.bot.user] # « Répondre » avec ping
|
|
|
+ message.raw_mentions = [] # pas de <@id> dans le texte
|
|
|
await ChatBot.on_message(self.bot, message)
|
|
|
|
|
|
async def test_bot_loop_stopped(self):
|
|
|
@@ -74,5 +75,50 @@ class OnMessageTest(unittest.IsolatedAsyncioTestCase):
|
|
|
self.assertEqual(self.bot.handle_main_channel.await_count, MAX_BOT_REPLIES + 1)
|
|
|
|
|
|
|
|
|
+class MentionLogTest(unittest.IsolatedAsyncioTestCase):
|
|
|
+ """Journal de diagnostic : un bot qui écrit <@id> du bot, avec ou sans mention transmise par Discord."""
|
|
|
+
|
|
|
+ def setUp(self):
|
|
|
+ self.bot = mock.Mock()
|
|
|
+ self.bot.settings.channel_id = CHANNEL_ID
|
|
|
+ self.bot.home_guild_id.return_value = HOME
|
|
|
+ self.bot._bot_streaks = BotStreaks()
|
|
|
+ self.bot.handle_main_channel = mock.AsyncMock()
|
|
|
+ self.bot.register_members = mock.AsyncMock()
|
|
|
+ self.bot.replies_to_me = mock.AsyncMock(return_value=False)
|
|
|
+
|
|
|
+ async def receive(self, listed: bool) -> None:
|
|
|
+ message = mock.Mock(guild=mock.Mock(id=HOME), webhook_id=None, type=discord.MessageType.default,
|
|
|
+ created_at=START)
|
|
|
+ message.channel.id = CHANNEL_ID
|
|
|
+ message.author.bot = True
|
|
|
+ message.mentions = [self.bot.user] if listed else []
|
|
|
+ message.raw_mentions = [self.bot.user.id]
|
|
|
+ await ChatBot.on_message(self.bot, message)
|
|
|
+
|
|
|
+ async def test_mention_missing_from_discord_list(self):
|
|
|
+ with self.assertLogs("chatbot.discord", "INFO") as logs:
|
|
|
+ await self.receive(listed=False)
|
|
|
+ self.assertIn("mention absente de la liste de Discord, message ignoré", logs.output[0])
|
|
|
+ self.bot.handle_main_channel.assert_not_awaited()
|
|
|
+
|
|
|
+ async def test_mention_listed(self):
|
|
|
+ with self.assertLogs("chatbot.discord", "INFO") as logs:
|
|
|
+ await self.receive(listed=True)
|
|
|
+ self.assertIn("mention transmise par Discord", logs.output[0])
|
|
|
+ self.bot.handle_main_channel.assert_awaited_once()
|
|
|
+
|
|
|
+ async def test_no_log_without_mention_in_text(self):
|
|
|
+ # « Répondre » à un message du bot, sans <@id> dans le texte : rien de plus dans le journal.
|
|
|
+ message = mock.Mock(guild=mock.Mock(id=HOME), webhook_id=None, type=discord.MessageType.reply,
|
|
|
+ created_at=START, mentions=[], raw_mentions=[])
|
|
|
+ message.channel.id = CHANNEL_ID
|
|
|
+ message.author.bot = True
|
|
|
+ self.bot.replies_to_me.return_value = True
|
|
|
+ with self.assertNoLogs("chatbot.discord", "INFO"):
|
|
|
+ await ChatBot.on_message(self.bot, message)
|
|
|
+ self.bot.handle_main_channel.assert_awaited_once()
|
|
|
+
|
|
|
+
|
|
|
if __name__ == "__main__":
|
|
|
unittest.main()
|