52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from unittest import mock
|
|
import unittest
|
|
|
|
from app.providers import tts as tts_module
|
|
from app.providers.tts import FakeTTS, build_tts_provider_from_env
|
|
|
|
|
|
class ProviderTTSTests(unittest.TestCase):
|
|
def test_build_tts_provider_from_env_returns_reason_when_provider_is_unsupported(self) -> None:
|
|
with mock.patch.dict(os.environ, {}, clear=True):
|
|
provider, reason = build_tts_provider_from_env("azure")
|
|
|
|
self.assertIsNone(provider)
|
|
self.assertEqual(reason, "unsupported_tts_provider:azure")
|
|
|
|
def test_build_tts_provider_from_env_returns_reason_when_elevenlabs_sdk_is_missing(self) -> None:
|
|
with mock.patch.dict(
|
|
os.environ,
|
|
{
|
|
"ELEVENLABS_API_KEY": "key-123",
|
|
"ELEVENLABS_VOICE_ID": "voice-123",
|
|
},
|
|
clear=True,
|
|
):
|
|
with mock.patch.object(tts_module, "_is_elevenlabs_available", return_value=False):
|
|
provider, reason = build_tts_provider_from_env("elevenlabs")
|
|
|
|
self.assertIsNone(provider)
|
|
self.assertEqual(reason, "missing_elevenlabs_sdk")
|
|
|
|
def test_build_tts_provider_from_env_returns_fake_provider(self) -> None:
|
|
with mock.patch.dict(
|
|
os.environ,
|
|
{
|
|
"FAKE_TTS_TONE_HZ": "512",
|
|
"FAKE_TTS_CHAR_DURATION_MS": "18",
|
|
},
|
|
clear=True,
|
|
):
|
|
provider, reason = build_tts_provider_from_env("fake")
|
|
|
|
self.assertIsInstance(provider, FakeTTS)
|
|
self.assertIsNone(reason)
|
|
self.assertGreater(len(provider.synthesize_pcm16k("teste fake")), 0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|