Add async starboard DB tests with mocked pool
This commit is contained in:
parent
69ea586674
commit
9f26c0dab8
95
tests/test_starboard_db.py
Normal file
95
tests/test_starboard_db.py
Normal file
@ -0,0 +1,95 @@
|
||||
"""Tests for starboard database helper functions."""
|
||||
|
||||
# pylint: disable=wrong-import-position
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Ensure project root is on sys.path
|
||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
import pytest # pylint: disable=import-error
|
||||
|
||||
import settings_manager # pylint: disable=import-error
|
||||
|
||||
|
||||
class DummyBot:
|
||||
"""Simple container for a pg_pool mock."""
|
||||
|
||||
def __init__(self, pg_pool):
|
||||
self.pg_pool = pg_pool
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_starboard_entry():
|
||||
"""Verify create_starboard_entry executes expected queries."""
|
||||
|
||||
conn = AsyncMock()
|
||||
acquire_cm = AsyncMock()
|
||||
acquire_cm.__aenter__.return_value = conn
|
||||
acquire_cm.__aexit__.return_value = None
|
||||
|
||||
pg_pool = AsyncMock()
|
||||
pg_pool.acquire.return_value = acquire_cm
|
||||
|
||||
bot = DummyBot(pg_pool)
|
||||
with patch.object(settings_manager, "get_bot_instance", return_value=bot):
|
||||
result = await settings_manager.create_starboard_entry(
|
||||
guild_id=1,
|
||||
original_message_id=2,
|
||||
original_channel_id=3,
|
||||
starboard_message_id=4,
|
||||
author_id=5,
|
||||
star_count=6,
|
||||
)
|
||||
|
||||
assert result is True
|
||||
pg_pool.acquire.assert_called_once()
|
||||
assert conn.execute.await_count == 2
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_update_starboard_entry():
|
||||
"""Verify update_starboard_entry updates star count."""
|
||||
|
||||
conn = AsyncMock()
|
||||
pg_pool = AsyncMock()
|
||||
pg_pool.acquire = AsyncMock(return_value=conn)
|
||||
pg_pool.release = AsyncMock()
|
||||
|
||||
bot = DummyBot(pg_pool)
|
||||
with patch.object(settings_manager, "get_bot_instance", return_value=bot):
|
||||
result = await settings_manager.update_starboard_entry(
|
||||
guild_id=1, original_message_id=2, star_count=3
|
||||
)
|
||||
|
||||
assert result is True
|
||||
pg_pool.acquire.assert_called_once()
|
||||
conn.execute.assert_awaited_once()
|
||||
pg_pool.release.assert_called_once_with(conn)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_starboard_entry():
|
||||
"""Verify get_starboard_entry fetches the row and returns a dict."""
|
||||
|
||||
entry_data = {"guild_id": 1, "original_message_id": 2}
|
||||
conn = AsyncMock()
|
||||
conn.fetchrow = AsyncMock(return_value=entry_data)
|
||||
|
||||
acquire_cm = AsyncMock()
|
||||
acquire_cm.__aenter__.return_value = conn
|
||||
acquire_cm.__aexit__.return_value = None
|
||||
|
||||
pg_pool = AsyncMock()
|
||||
pg_pool.acquire.return_value = acquire_cm
|
||||
|
||||
bot = DummyBot(pg_pool)
|
||||
with patch.object(settings_manager, "get_bot_instance", return_value=bot):
|
||||
result = await settings_manager.get_starboard_entry(1, 2)
|
||||
|
||||
assert result == entry_data
|
||||
pg_pool.acquire.assert_called_once()
|
||||
conn.fetchrow.assert_awaited_once()
|
Loading…
x
Reference in New Issue
Block a user