"""TTS 模块单元测试。""" import os from unittest.mock import patch import pytest # 导入 tts 模块触发 __init__.py 中的 provider 注册 import yuxi.agents.toolkits.buildin.tts # noqa: F401 from yuxi.agents.toolkits.buildin.tts.openai_compatible import OpenAICompatibleTTSProvider from yuxi.agents.toolkits.buildin.tts.provider import ( SpeechSynthesisResult, TTSProvider, get_tts_provider, register_tts_provider, ) class TestSpeechSynthesisResult: def test_creation(self): result = SpeechSynthesisResult(audio_data=b"audio", content_type="audio/mpeg") assert result.audio_data == b"audio" assert result.content_type == "audio/mpeg" def test_default_content_type(self): result = SpeechSynthesisResult(audio_data=b"audio") assert result.content_type == "audio/mpeg" def test_frozen(self): result = SpeechSynthesisResult(audio_data=b"audio") with pytest.raises(AttributeError): result.audio_data = b"new" class TestGetTTSProvider: @patch.dict(os.environ, {"TTS_API_KEY": ""}) def test_no_configured_provider(self): provider = get_tts_provider() assert provider is None @patch.dict(os.environ, {"TTS_API_KEY": "test-key"}) def test_configured_provider_by_id(self): provider = get_tts_provider("openai_compatible") assert provider is not None assert provider.provider_id == "openai_compatible" @patch.dict(os.environ, {"TTS_API_KEY": "test-key"}) def test_configured_provider_auto(self): provider = get_tts_provider() assert provider is not None assert provider.provider_id == "openai_compatible" def test_unknown_provider(self): provider = get_tts_provider("nonexistent") assert provider is None @patch.dict(os.environ, {"TTS_API_KEY": ""}) def test_unconfigured_provider(self): provider = get_tts_provider() assert provider is None class TestOpenAICompatibleTTSProvider: @patch.dict(os.environ, {"TTS_API_KEY": "test-key", "TTS_BASE_URL": "https://api.test.com/v1", "TTS_MODEL": "tts-1"}) def test_is_configured(self): provider = OpenAICompatibleTTSProvider() assert provider.is_configured() is True @patch.dict(os.environ, {"TTS_API_KEY": ""}) def test_not_configured(self): provider = OpenAICompatibleTTSProvider() assert provider.is_configured() is False def test_provider_id(self): provider = OpenAICompatibleTTSProvider() assert provider.provider_id == "openai_compatible" @pytest.mark.asyncio async def test_list_voices(self): provider = OpenAICompatibleTTSProvider() voices = await provider.list_voices() assert len(voices) == 6 assert voices[0]["id"] == "alloy"