Various test fixes

This commit is contained in:
2026-08-17 11:35:40 -04:00
parent 2c61a04bcc
commit 5518f07234
10 changed files with 126 additions and 37 deletions
+1 -1
View File
@@ -504,7 +504,7 @@ _chat_db: ChatDatabase | None = None
def get_database() -> ChatDatabase:
"""Get or create the global database instance."""
global _chat_db # noqa: PLW0603
global _chat_db
if _chat_db is None:
_chat_db = ChatDatabase()
return _chat_db
+2 -1
View File
@@ -7,7 +7,8 @@ Allows custom endpoints for each of the above supported functions.
from __future__ import annotations
import json
from typing import TYPE_CHECKING, Awaitable, Callable, cast
from collections.abc import Awaitable, Callable
from typing import TYPE_CHECKING, cast
import openai
import requests
+2 -2
View File
@@ -13,7 +13,6 @@ from discord import Message
from discord.ext import commands
from vibe_bot import llama_wrapper, tts
from vibe_bot.tts import DEFAULT_LANG
from vibe_bot.config import (
CHAT_ENDPOINT,
CHAT_ENDPOINT_KEY,
@@ -35,6 +34,7 @@ from vibe_bot.config import (
)
from vibe_bot.database import CustomBotManager, get_database
from vibe_bot.tools import get_channel_members, get_channel_members_impl
from vibe_bot.tts import DEFAULT_LANG
if TYPE_CHECKING:
from discord.ext.commands import Bot
@@ -771,7 +771,7 @@ async def retcon(ctx: CommandsContext[Bot], *, message: str) -> None:
for discord_image in ctx.message.attachments:
image_url = discord_image.url
try:
response = requests.get(image_url, timeout=30)
response = requests.get(image_url, timeout=30) # noqa: ASYNC210
image_data = response.content
except requests.RequestException as e:
logger.warning("Failed to download image from %s: %s", image_url, e)
+29 -25
View File
@@ -103,7 +103,7 @@ def custom_bot_manager(temp_db_path: str) -> CustomBotManager:
from vibe_bot.database import CustomBotManager
manager = CustomBotManager(db_path=temp_db_path)
return manager # noqa: RET504
return manager
@pytest.fixture
@@ -123,16 +123,16 @@ def mock_kokoro_tts() -> Generator[dict[str, Any]]:
return_value=mock_kokoro_instance,
),
patch("vibe_bot.tts.chunk_text", mock_chunk),
patch("vibe_bot.tts.process_chunk_sequential", mock_process),
):
with patch("vibe_bot.tts.process_chunk_sequential", mock_process):
yield {
"Kokoro": mock_kokoro,
"chunk_text": mock_chunk,
"process_chunk_sequential": mock_process,
"kokoro_instance": mock_kokoro_instance,
"mock_samples": mock_samples,
"mock_sr": 24000,
}
yield {
"Kokoro": mock_kokoro,
"chunk_text": mock_chunk,
"process_chunk_sequential": mock_process,
"kokoro_instance": mock_kokoro_instance,
"mock_samples": mock_samples,
"mock_sr": 24000,
}
@pytest.fixture
@@ -148,18 +148,20 @@ def mock_discord() -> Generator[dict[str, MagicMock]]:
mock_bot_instance.user.name = "test-bot"
mock_bot_instance.user.id = "123456789"
with patch("vibe_bot.main.discord") as mock_discord_module:
with patch("vibe_bot.main.commands", MagicMock()):
with patch("vibe_bot.main.commands.Bot", mock_bot_class):
mock_bot_class.return_value = mock_bot_instance
mock_discord_module.Intents = mock_intents
mock_discord_module.Message = MagicMock
mock_discord_module.File = MagicMock
yield {
"Intents": mock_intents,
"Bot": mock_bot_class,
"bot_instance": mock_bot_instance,
}
with (
patch("vibe_bot.main.discord") as mock_discord_module,
patch("vibe_bot.main.commands", MagicMock()),
patch("vibe_bot.main.commands.Bot", mock_bot_class),
):
mock_bot_class.return_value = mock_bot_instance
mock_discord_module.Intents = mock_intents
mock_discord_module.Message = MagicMock
mock_discord_module.File = MagicMock
yield {
"Intents": mock_intents,
"Bot": mock_bot_class,
"bot_instance": mock_bot_instance,
}
@pytest.fixture
@@ -167,9 +169,11 @@ def mock_tts_engine() -> Generator[MagicMock]:
"""Provide a mock TTSEngine."""
mock_engine = MagicMock()
mock_engine.generate_audio.return_value = MagicMock()
with patch("vibe_bot.main.tts_engine", mock_engine):
with patch("vibe_bot.main.tts.TTSEngine", return_value=mock_engine):
yield mock_engine
with (
patch("vibe_bot.main.tts_engine", mock_engine),
patch("vibe_bot.main.tts.TTSEngine", return_value=mock_engine),
):
yield mock_engine
@pytest.fixture
+2 -2
View File
@@ -68,7 +68,7 @@ assert vibe_bot.config.TTS_SPEED == 1.0
print("OK")
"""
result = subprocess.run( # noqa: PLW1510, S603
result = subprocess.run( # noqa: PLW1510
[sys.executable, "-c", code],
capture_output=True,
text=True,
@@ -99,7 +99,7 @@ except Exception as e:
print(f"OTHER: {{type(e).__name__}}: {{e}}")
"""
result = subprocess.run( # noqa: PLW1510, S603
result = subprocess.run( # noqa: PLW1510
[sys.executable, "-c", code],
capture_output=True,
text=True,
+3 -3
View File
@@ -2,6 +2,7 @@
from __future__ import annotations
from datetime import UTC
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
@@ -44,8 +45,8 @@ def mock_ctx_with_member() -> MagicMock:
ctx.author.activities = [mock_activity]
from datetime import datetime
ctx.author.joined_at = datetime(2024, 1, 15)
ctx.author.created_at = datetime(2023, 6, 1)
ctx.author.joined_at = datetime(2024, 1, 15, tzinfo=UTC)
ctx.author.created_at = datetime(2023, 6, 1, tzinfo=UTC)
ctx.channel.id = "channel-1"
ctx.guild.id = "guild-1"
ctx.message.id = "msg-1"
@@ -481,7 +482,6 @@ def test_speak_plain_with_mock_tts(
asyncio.run(main_module._speak_plain(mock_ctx, "hello world", mock_tts_engine))
from vibe_bot.config import TTS_SPEED, TTS_VOICE
from vibe_bot.tts import DEFAULT_LANG
mock_tts_engine.generate_audio.assert_called_once_with(
+5 -1
View File
@@ -8,6 +8,10 @@ import numpy as np
import pytest
class ChunkProcessingError(Exception):
"""Simulates a chunk processing failure in the fake Kokoro processor."""
def test_tts_engine_init(mock_kokoro_tts: MagicMock) -> None:
"""Test TTSEngine initialization."""
from vibe_bot.tts import TTSEngine
@@ -91,7 +95,7 @@ def test_generate_audio_chunk_failure(mock_kokoro_tts: MagicMock) -> None:
lang: str,
) -> tuple[np.ndarray, int]:
if chunk == "bad chunk":
raise Exception("processing error")
raise ChunkProcessingError("processing error")
return np.array([0.1, 0.2], dtype=np.float32), 24000
mock_kokoro_tts["chunk_text"].return_value = [