diff options
Diffstat (limited to 'app/tests/test_backends_faster.py')
| -rw-r--r-- | app/tests/test_backends_faster.py | 77 |
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.""" |
