aboutsummaryrefslogtreecommitdiff
path: root/app/tests/test_backends_faster.py
diff options
context:
space:
mode:
authorhistoria <historiavg@proton.me>2026-08-24 18:57:09 -0400
committerhistoria <historiavg@proton.me>2026-08-24 18:57:09 -0400
commit0522e73b68291af62e43c387ab8f9b8ffa2cab47 (patch)
tree1800168c1ed5de7540624265945faba8251a7cab /app/tests/test_backends_faster.py
parentd950fc8e64ee508334e608f6045d687d73a464be (diff)
downloadtts-audiobook-generator-0522e73b68291af62e43c387ab8f9b8ffa2cab47.tar.gz
feat: configure [backend] loads existing backend config rather than just overwriting it
Diffstat (limited to 'app/tests/test_backends_faster.py')
-rw-r--r--app/tests/test_backends_faster.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/app/tests/test_backends_faster.py b/app/tests/test_backends_faster.py
index 641f6ee..21baea7 100644
--- a/app/tests/test_backends_faster.py
+++ b/app/tests/test_backends_faster.py
@@ -80,6 +80,83 @@ class BuildVoicesTests(unittest.TestCase):
self.assertEqual(mock_transcribe.call_args.kwargs["model_name"], "large-v3")
+class LoadVoicesTests(unittest.TestCase):
+ """load_voices: read voices.json, or {} when unusable."""
+
+ def setUp(self):
+ self._tmp = tempfile.TemporaryDirectory()
+ self.dir = Path(self._tmp.name)
+ self.path = self.dir / "voices.json"
+
+ def tearDown(self):
+ self._tmp.cleanup()
+
+ def test_reads_dict_document(self):
+ self.path.write_text(json.dumps({"narrator": {"ref_text": "hi"}}),
+ encoding="utf-8")
+ self.assertEqual(make_voices.load_voices(self.path),
+ {"narrator": {"ref_text": "hi"}})
+
+ def test_missing_file_returns_empty(self):
+ self.assertEqual(make_voices.load_voices(self.path), {})
+
+ def test_unreadable_json_returns_empty(self):
+ self.path.write_text("not json", encoding="utf-8")
+ self.assertEqual(make_voices.load_voices(self.path), {})
+
+ def test_non_dict_document_returns_empty(self):
+ self.path.write_text("[1, 2]", encoding="utf-8")
+ self.assertEqual(make_voices.load_voices(self.path), {})
+
+
+class DecideFasterTranscriptionTests(unittest.TestCase):
+ """_decide_faster_transcription: the re-transcribe plan questions."""
+
+ def setUp(self):
+ self._tmp = tempfile.TemporaryDirectory()
+ self.folder = Path(self._tmp.name)
+ self.narrator = self.folder / "narrator.wav"
+ self.narrator.write_bytes(b"x")
+ self.new_voice = self.folder / "new.wav"
+ self.new_voice.write_bytes(b"x")
+
+ def tearDown(self):
+ self._tmp.cleanup()
+
+ def test_new_voices_default_to_missing_mode(self):
+ confirm = lambda q, default=True: True # noqa: E731
+ plan = make_voices._decide_faster_transcription(
+ [self.narrator, self.new_voice],
+ {"narrator": {"ref_text": "old"}}, confirm)
+ self.assertEqual(plan["mode"], "missing")
+ self.assertEqual([w.name for w in plan["missing"]], ["new.wav"])
+
+ def test_declining_new_voices_transcribes_all(self):
+ confirm = lambda q, default=True: False # noqa: E731
+ plan = make_voices._decide_faster_transcription(
+ [self.narrator, self.new_voice],
+ {"narrator": {"ref_text": "old"}}, confirm)
+ self.assertEqual(plan["mode"], "all")
+
+ def test_no_new_voices_offers_retranscribe_default_no(self):
+ confirm = lambda q, default=True: default # noqa: E731
+ plan = make_voices._decide_faster_transcription(
+ [self.narrator], {"narrator": {"ref_text": "old"}}, confirm)
+ self.assertEqual(plan["mode"], "keep")
+
+ def test_no_new_voices_accepted_retranscribes_all(self):
+ confirm = lambda q, default=True: True # noqa: E731
+ plan = make_voices._decide_faster_transcription(
+ [self.narrator], {"narrator": {"ref_text": "old"}}, confirm)
+ self.assertEqual(plan["mode"], "all")
+
+ def test_cancel_returns_none(self):
+ confirm = lambda q, default=True: None # noqa: E731
+ plan = make_voices._decide_faster_transcription(
+ [self.narrator], {"narrator": {"ref_text": "old"}}, confirm)
+ self.assertIsNone(plan)
+
+
class MainTests(unittest.TestCase):
"""The flag-only (non-TUI) path through main(), end to end."""