ForcePilot/backend/test/unit/agents/toolkits/buildin/test_tts.py
Kris b3bdb4fa2f feat: 新增TTS语音合成、音视频解析能力
1. 新增内置TTS工具,支持OpenAI兼容语音合成服务
2. 新增ASR音频解析和视频解析处理器
3. 扩展文件解析支持范围,添加音视频格式支持
4. 新增ffmpeg音视频处理基础工具库
5. 补充相关单元测试用例
2026-06-13 20:33:40 +08:00

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"