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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
import pytest
from unittest.mock import AsyncMock, patch, MagicMock
import sqlite3
from tests.conftest import MockApplicationContext
@pytest.fixture
def trigger_cog(bot):
with patch('cogs.trigger.get_connection') as mock_conn:
mock_conn.return_value.__enter__ = MagicMock(return_value=MagicMock())
mock_conn.return_value.__exit__ = MagicMock(return_value=False)
from cogs.trigger import Trigger
cog = Trigger(bot)
return cog
@pytest.fixture
def mock_db_connection():
with patch('cogs.trigger.get_connection') as mock_get_conn:
mock_conn = MagicMock()
mock_cursor = MagicMock()
mock_conn.cursor.return_value = mock_cursor
mock_get_conn.return_value.__enter__ = MagicMock(return_value=mock_conn)
mock_get_conn.return_value.__exit__ = MagicMock(return_value=False)
yield mock_conn, mock_cursor
@pytest.mark.asyncio
async def test_trigger_create_command(trigger_cog, mock_channel, mock_guild, bot, mock_db_connection):
ctx = MockApplicationContext(bot=bot, channel=mock_channel, guild=mock_guild)
mock_conn, mock_cursor = mock_db_connection
mock_cursor.fetchone.return_value = None
with patch('cogs.trigger.get_connection') as mock_get_conn:
mock_conn = MagicMock()
mock_cursor = MagicMock()
mock_conn.cursor.return_value = mock_cursor
mock_get_conn.return_value.__enter__ = MagicMock(return_value=mock_conn)
mock_get_conn.return_value.__exit__ = MagicMock(return_value=False)
with patch.object(ctx, 'respond', new_callable=AsyncMock) as mock_respond:
await trigger_cog.create.callback(trigger_cog, ctx, name="test_trigger")
mock_respond.assert_called_once_with("trigger added")
@pytest.mark.asyncio
async def test_trigger_add_command(trigger_cog, mock_channel, mock_guild, bot, mock_db_connection):
ctx = MockApplicationContext(bot=bot, channel=mock_channel, guild=mock_guild)
with patch('cogs.trigger.get_connection') as mock_get_conn:
mock_conn = MagicMock()
mock_cursor = MagicMock()
mock_cursor.fetchone.return_value = (1,) # trigger exists
mock_conn.cursor.return_value = mock_cursor
mock_get_conn.return_value.__enter__ = MagicMock(return_value=mock_conn)
mock_get_conn.return_value.__exit__ = MagicMock(return_value=False)
with patch.object(ctx, 'respond', new_callable=AsyncMock) as mock_respond:
await trigger_cog.add.callback(trigger_cog, ctx, name="test_trigger", trigger="hello", response="Hi there!")
mock_respond.assert_called_once_with("trigger updated")
@pytest.mark.asyncio
async def test_trigger_add_command_not_found(trigger_cog, mock_channel, mock_guild, bot, mock_db_connection):
ctx = MockApplicationContext(bot=bot, channel=mock_channel, guild=mock_guild)
with patch('cogs.trigger.get_connection') as mock_get_conn:
mock_conn = MagicMock()
mock_cursor = MagicMock()
mock_cursor.fetchone.return_value = None # trigger not found
mock_conn.cursor.return_value = mock_cursor
mock_get_conn.return_value.__enter__ = MagicMock(return_value=mock_conn)
mock_get_conn.return_value.__exit__ = MagicMock(return_value=False)
with patch.object(ctx, 'respond', new_callable=AsyncMock) as mock_respond:
await trigger_cog.add.callback(trigger_cog, ctx, name="nonexistent", trigger="hello", response="Hi")
mock_respond.assert_called_once_with("Trigger not found.")
@pytest.mark.asyncio
async def test_trigger_delete_command(trigger_cog, mock_channel, mock_guild, bot, mock_db_connection):
ctx = MockApplicationContext(bot=bot, channel=mock_channel, guild=mock_guild)
with patch('cogs.trigger.get_connection') as mock_get_conn:
mock_conn = MagicMock()
mock_cursor = MagicMock()
mock_cursor.fetchone.return_value = (1,) # trigger exists
mock_conn.cursor.return_value = mock_cursor
mock_get_conn.return_value.__enter__ = MagicMock(return_value=mock_conn)
mock_get_conn.return_value.__exit__ = MagicMock(return_value=False)
with patch.object(ctx, 'respond', new_callable=AsyncMock) as mock_respond:
await trigger_cog.delete.callback(trigger_cog, ctx, name="test_trigger")
mock_respond.assert_called_once_with("trigger deleted")
@pytest.mark.asyncio
async def test_trigger_help_command(trigger_cog, mock_channel, mock_guild, bot):
ctx = MockApplicationContext(bot=bot, channel=mock_channel, guild=mock_guild)
with patch.object(ctx, 'respond', new_callable=AsyncMock) as mock_respond:
await trigger_cog.help.callback(trigger_cog, ctx)
mock_respond.assert_called_once()
args = mock_respond.call_args
assert "Trigger create" in str(args)
|