import pytest from unittest.mock import AsyncMock, patch, MagicMock from tests.conftest import MockApplicationContext @pytest.fixture def assistant_cog(): with patch('os.getenv', return_value="test_keyword"): from cogs.assistant import Jarvis mock_bot = MagicMock() mock_bot.user = MagicMock() mock_bot.user.id = 111 cog = Jarvis(mock_bot) return cog def test_assistant_keyword_default(assistant_cog): assert assistant_cog.keyword == "test_keyword" @pytest.mark.asyncio async def test_assistant_on_message_ignored_bot_message(assistant_cog): mock_author = MagicMock() mock_author.id = 456 mock_author.bot = True mock_message = MagicMock() mock_message.author = mock_author with patch.object(assistant_cog, 'assistant', new_callable=AsyncMock) as mock_assistant: await assistant_cog.on_message(mock_message) mock_assistant.assert_not_called() @pytest.mark.asyncio async def test_assistant_on_message_mentions_bot(assistant_cog): mock_message = MagicMock() mock_message.author = MagicMock() mock_message.author.id = 123 mock_mention = MagicMock() mock_mention.id = 111 mock_message.mentions = [mock_mention] mock_message.content = "test" with patch.object(assistant_cog, 'assistant', new_callable=AsyncMock) as mock_assistant: await assistant_cog.on_message(mock_message) mock_assistant.assert_called_once_with(mock_message) @pytest.mark.asyncio async def test_assistant_on_message_keyword_match(assistant_cog): assistant_cog.keyword = "test" mock_message = MagicMock() mock_message.author = MagicMock() mock_message.author.id = 123 mock_message.mentions = [] mock_message.content = "test message with test keyword" with patch.object(assistant_cog, 'assistant', new_callable=AsyncMock) as mock_assistant: await assistant_cog.on_message(mock_message) mock_assistant.assert_called_once_with(mock_message)