1. 新增内置TTS工具,支持OpenAI兼容语音合成服务 2. 新增ASR音频解析和视频解析处理器 3. 扩展文件解析支持范围,添加音视频格式支持 4. 新增ffmpeg音视频处理基础工具库 5. 补充相关单元测试用例
84 lines
2.8 KiB
Python
84 lines
2.8 KiB
Python
"""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"
|