mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-06 20:42:43 +08:00
70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
import unittest
|
|
import sys
|
|
from unittest.mock import Mock, patch
|
|
|
|
sys.modules.setdefault("psutil", Mock())
|
|
sys.modules.setdefault("pyquery", Mock())
|
|
|
|
from app.core.config import settings
|
|
from app.helper.voice import VoiceHelper, OpenAIVoiceProvider
|
|
|
|
|
|
class VoiceHelperTest(unittest.TestCase):
|
|
def test_registered_providers_contains_openai(self):
|
|
self.assertIn("openai", VoiceHelper.get_registered_providers())
|
|
|
|
def test_get_provider_uses_single_audio_provider_setting(self):
|
|
with patch.object(settings, "AI_VOICE_PROVIDER", "openai"):
|
|
provider = VoiceHelper.get_provider("stt")
|
|
|
|
self.assertIsInstance(provider, OpenAIVoiceProvider)
|
|
|
|
def test_is_available_checks_stt_and_tts_separately(self):
|
|
provider = Mock()
|
|
provider.is_available_for_stt.return_value = True
|
|
provider.is_available_for_tts.return_value = False
|
|
|
|
with patch.object(
|
|
settings, "LLM_SUPPORT_AUDIO_INPUT_OUTPUT", True
|
|
), patch.object(VoiceHelper, "get_provider", return_value=provider):
|
|
self.assertTrue(VoiceHelper.is_available("stt"))
|
|
self.assertFalse(VoiceHelper.is_available("tts"))
|
|
|
|
def test_is_available_returns_false_when_audio_switch_is_disabled(self):
|
|
provider = Mock()
|
|
provider.is_available_for_stt.return_value = True
|
|
|
|
with patch.object(
|
|
settings, "LLM_SUPPORT_AUDIO_INPUT_OUTPUT", False
|
|
), patch.object(VoiceHelper, "get_provider", return_value=provider):
|
|
self.assertFalse(VoiceHelper.is_available("stt"))
|
|
self.assertFalse(VoiceHelper.is_available())
|
|
|
|
def test_transcribe_bytes_routes_to_stt_provider(self):
|
|
provider = Mock()
|
|
provider.transcribe_bytes.return_value = "你好"
|
|
|
|
with patch.object(
|
|
settings, "LLM_SUPPORT_AUDIO_INPUT_OUTPUT", True
|
|
), patch.object(VoiceHelper, "get_provider", return_value=provider):
|
|
result = VoiceHelper.transcribe_bytes(b"audio")
|
|
|
|
self.assertEqual(result, "你好")
|
|
provider.transcribe_bytes.assert_called_once()
|
|
|
|
def test_synthesize_speech_routes_to_tts_provider(self):
|
|
provider = Mock()
|
|
provider.synthesize_speech.return_value = "/tmp/reply.opus"
|
|
|
|
with patch.object(
|
|
settings, "LLM_SUPPORT_AUDIO_INPUT_OUTPUT", True
|
|
), patch.object(VoiceHelper, "get_provider", return_value=provider):
|
|
result = VoiceHelper.synthesize_speech("你好")
|
|
|
|
self.assertEqual(result, "/tmp/reply.opus")
|
|
provider.synthesize_speech.assert_called_once_with(text="你好")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|