aboutsummaryrefslogtreecommitdiffstats
path: root/tests/cogs/test_assistant.py
blob: 9a33232f18d8707ab61f650007b7e135366d962d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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)