aboutsummaryrefslogtreecommitdiff
path: root/app/tests/test_converter.py
diff options
context:
space:
mode:
authorhistoria <historiavg@proton.me>2026-08-26 01:43:41 -0400
committerhistoria <historiavg@proton.me>2026-08-26 01:43:41 -0400
commitacbd9ff2c91182d96c57ffb57bee6e9b3fcbcbd4 (patch)
treee336c11f2a57cff5566e249aa5d5477a3dc63c55 /app/tests/test_converter.py
parent104a0d65c1ba37847c15b64212b7fec8ba371ccb (diff)
downloadtts-audiobook-generator-acbd9ff2c91182d96c57ffb57bee6e9b3fcbcbd4.tar.gz
refactor: split tts.py into per-backend packages
Diffstat (limited to 'app/tests/test_converter.py')
-rw-r--r--app/tests/test_converter.py53
1 files changed, 30 insertions, 23 deletions
diff --git a/app/tests/test_converter.py b/app/tests/test_converter.py
index 7aa9c69..53e2897 100644
--- a/app/tests/test_converter.py
+++ b/app/tests/test_converter.py
@@ -9,7 +9,14 @@ from contextlib import redirect_stdout
from pathlib import Path
from unittest.mock import MagicMock, patch
-from converter import config, tts
+from converter import config
+from converter.clients import (
+ BACKEND_AUDIOCPP,
+ BACKEND_FASTER,
+ BACKEND_QWEN,
+ VOICE_MODE_CLONE,
+ VOICE_MODE_CUSTOM,
+)
from converter import converter as converter_mod
from converter.converter import (
AudiobookConverter,
@@ -56,17 +63,17 @@ class ConfigurationValidationTests(unittest.TestCase):
def test_language_defaults_to_config(self):
with patch("converter.converter.QwenTTSClient") as mock_tts:
- AudiobookConverter(backend=tts.BACKEND_QWEN)
+ AudiobookConverter(backend=BACKEND_QWEN)
self.assertEqual(mock_tts.call_args.kwargs["language"], config.LANGUAGE)
def test_output_format_defaults_to_config(self):
with patch("converter.converter.QwenTTSClient"):
- converter = AudiobookConverter(backend=tts.BACKEND_QWEN)
+ converter = AudiobookConverter(backend=BACKEND_QWEN)
self.assertEqual(converter.output_format, config.AUDIO_FORMAT)
def test_language_normalized_before_tts_client(self):
with patch("converter.converter.QwenTTSClient") as mock_tts:
- converter = AudiobookConverter(language="ja", backend=tts.BACKEND_QWEN)
+ converter = AudiobookConverter(language="ja", backend=BACKEND_QWEN)
self.assertEqual(converter.language, "Japanese")
self.assertEqual(mock_tts.call_args.kwargs["language"], "Japanese")
@@ -129,40 +136,40 @@ class NarratorTagTests(unittest.TestCase):
converter = AudiobookConverter.__new__(AudiobookConverter)
converter.voice_mode = voice_mode
converter.voice_clone_ref_audio = ref_audio
- converter.backend = tts.BACKEND_QWEN
+ converter.backend = BACKEND_QWEN
converter.voice = None
converter.instructions = instructions
return converter
def test_custom_voice_uses_speaker_display_name(self):
- self.assertEqual(self._converter(tts.VOICE_MODE_CUSTOM)._narrator_tag(),
+ self.assertEqual(self._converter(VOICE_MODE_CUSTOM)._narrator_tag(),
"Vivian")
def test_multi_word_display_name_gets_underscores(self):
with patch.object(config, "SPEAKER", "uncle_fu"):
- self.assertEqual(self._converter(tts.VOICE_MODE_CUSTOM)._narrator_tag(),
+ self.assertEqual(self._converter(VOICE_MODE_CUSTOM)._narrator_tag(),
"Uncle_Fu")
def test_clone_uses_reference_audio_stem(self):
- self.assertEqual(self._converter(tts.VOICE_MODE_CLONE, "/x/ref.wav")._narrator_tag(),
+ self.assertEqual(self._converter(VOICE_MODE_CLONE, "/x/ref.wav")._narrator_tag(),
"ref")
def test_clone_stem_spaces_become_underscores(self):
- self.assertEqual(self._converter(tts.VOICE_MODE_CLONE, "/x/my voice.wav")._narrator_tag(),
+ self.assertEqual(self._converter(VOICE_MODE_CLONE, "/x/my voice.wav")._narrator_tag(),
"my_voice")
def test_invalid_characters_sanitized(self):
- self.assertEqual(self._converter(tts.VOICE_MODE_CLONE, "/x/bad:name?.wav")._narrator_tag(),
+ self.assertEqual(self._converter(VOICE_MODE_CLONE, "/x/bad:name?.wav")._narrator_tag(),
"bad_name")
def test_empty_after_sanitize_falls_back(self):
- self.assertEqual(self._converter(tts.VOICE_MODE_CLONE, "/x/???.wav")._narrator_tag(),
+ self.assertEqual(self._converter(VOICE_MODE_CLONE, "/x/???.wav")._narrator_tag(),
"narrator")
def _audiocpp_converter(self, voice=None, instructions=None):
- converter = self._converter(tts.VOICE_MODE_CUSTOM,
+ converter = self._converter(VOICE_MODE_CUSTOM,
instructions=instructions)
- converter.backend = tts.BACKEND_AUDIOCPP
+ converter.backend = BACKEND_AUDIOCPP
converter.voice = voice
return converter
@@ -202,7 +209,7 @@ class NarratorTagTests(unittest.TestCase):
with patch("builtins.input",
side_effect=AssertionError("should not prompt")):
_, planned = AudiobookConverter.preflight_overwrites(
- tts.BACKEND_AUDIOCPP, None, tts.VOICE_MODE_CUSTOM,
+ BACKEND_AUDIOCPP, None, VOICE_MODE_CUSTOM,
None, "mp3", instructions="A warm narrator")
self.assertEqual(planned, [(converter_mod.BOOKS_FOLDER / "book.txt",
"book_designed")])
@@ -324,8 +331,8 @@ class DebugDumpTests(unittest.TestCase):
def test_debug_flag_wiring(self):
with patch("converter.converter.QwenTTSClient"):
- self.assertFalse(AudiobookConverter(backend=tts.BACKEND_QWEN).debug)
- self.assertTrue(AudiobookConverter(debug=True, backend=tts.BACKEND_QWEN).debug)
+ self.assertFalse(AudiobookConverter(backend=BACKEND_QWEN).debug)
+ self.assertTrue(AudiobookConverter(debug=True, backend=BACKEND_QWEN).debug)
class SetupLoggingTests(unittest.TestCase):
@@ -415,7 +422,7 @@ class ChunkProgressOutputTests(unittest.TestCase):
def _converter(self):
converter = AudiobookConverter.__new__(AudiobookConverter)
- converter.backend = tts.BACKEND_AUDIOCPP
+ converter.backend = BACKEND_AUDIOCPP
converter.speed = 1.0
converter.output_format = "mp3"
converter.tts = MagicMock()
@@ -514,14 +521,14 @@ class PreflightOverwritesTests(unittest.TestCase):
(converter_mod.BOOKS_FOLDER / "book.txt").unlink()
with patch("builtins.input", side_effect=AssertionError("should not prompt")):
book_files, planned = AudiobookConverter.preflight_overwrites(
- tts.BACKEND_QWEN, None, tts.VOICE_MODE_CUSTOM, None, "mp3")
+ BACKEND_QWEN, None, VOICE_MODE_CUSTOM, None, "mp3")
self.assertEqual(book_files, [])
self.assertEqual(planned, [])
def test_new_book_planned_without_prompt(self):
with patch("builtins.input", side_effect=AssertionError("should not prompt")):
book_files, planned = AudiobookConverter.preflight_overwrites(
- tts.BACKEND_QWEN, None, tts.VOICE_MODE_CUSTOM, None, "mp3")
+ BACKEND_QWEN, None, VOICE_MODE_CUSTOM, None, "mp3")
self.assertEqual(len(book_files), 1)
self.assertEqual(planned, [(book_files[0], "book_Vivian")])
@@ -529,14 +536,14 @@ class PreflightOverwritesTests(unittest.TestCase):
(converter_mod.AUDIOBOOKS_FOLDER / "book_Vivian.mp3").write_bytes(b"existing")
with patch("builtins.input", return_value=""):
book_files, planned = AudiobookConverter.preflight_overwrites(
- tts.BACKEND_QWEN, None, tts.VOICE_MODE_CUSTOM, None, "mp3")
+ BACKEND_QWEN, None, VOICE_MODE_CUSTOM, None, "mp3")
self.assertEqual(planned, [(book_files[0], "book_Vivian")])
def test_existing_output_declined_is_skipped(self):
(converter_mod.AUDIOBOOKS_FOLDER / "book_Vivian.mp3").write_bytes(b"existing")
with patch("builtins.input", return_value="n"):
book_files, planned = AudiobookConverter.preflight_overwrites(
- tts.BACKEND_QWEN, None, tts.VOICE_MODE_CUSTOM, None, "mp3")
+ BACKEND_QWEN, None, VOICE_MODE_CUSTOM, None, "mp3")
self.assertEqual(len(book_files), 1)
self.assertEqual(planned, [])
@@ -552,9 +559,9 @@ class RunOverwritePromptTests(unittest.TestCase):
converter_mod.AUDIOBOOKS_FOLDER = Path(self._output_tmp.name)
(converter_mod.BOOKS_FOLDER / "book.txt").write_text("hello world", encoding="utf-8")
self.converter = AudiobookConverter.__new__(AudiobookConverter)
- self.converter.voice_mode = tts.VOICE_MODE_CUSTOM
+ self.converter.voice_mode = VOICE_MODE_CUSTOM
self.converter.voice_clone_ref_audio = None
- self.converter.backend = tts.BACKEND_QWEN
+ self.converter.backend = BACKEND_QWEN
self.converter.voice = None
self.converter.instructions = None
self.converter.speed = 1.0