From 857a7364ddb9b10529593c5e9c3578eb95c1da9b Mon Sep 17 00:00:00 2001 From: salmonik Date: Sat, 18 Apr 2026 16:24:42 +0200 Subject: add a test suite Signed-off-by: salmonik --- tests/cogs/test_assistant.py | 66 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 tests/cogs/test_assistant.py (limited to 'tests/cogs/test_assistant.py') diff --git a/tests/cogs/test_assistant.py b/tests/cogs/test_assistant.py new file mode 100644 index 0000000..09c3934 --- /dev/null +++ b/tests/cogs/test_assistant.py @@ -0,0 +1,66 @@ +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) \ No newline at end of file -- cgit v1.2.3