diff options
| author | historia <historiavg@proton.me> | 2026-08-26 18:18:21 -0400 |
|---|---|---|
| committer | historia <historiavg@proton.me> | 2026-08-26 18:18:21 -0400 |
| commit | 544486a374cd5cae7acce1302648d8dad079db48 (patch) | |
| tree | 5987cdb6790844252ec655465eacea8ae526e3a8 /app/tests/test_backends_audiocpp.py | |
| parent | 6ccb6d443d2fb871b43d96ea61a95bc3e6a92355 (diff) | |
| download | tts-audiobook-generator-544486a374cd5cae7acce1302648d8dad079db48.tar.gz | |
fix: default directory when choosing voices in tui
Diffstat (limited to 'app/tests/test_backends_audiocpp.py')
| -rw-r--r-- | app/tests/test_backends_audiocpp.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/app/tests/test_backends_audiocpp.py b/app/tests/test_backends_audiocpp.py index 8cd7981..37745f3 100644 --- a/app/tests/test_backends_audiocpp.py +++ b/app/tests/test_backends_audiocpp.py @@ -1963,6 +1963,87 @@ class WizardNavigationTests(unittest.TestCase): self.assertFalse(settings["download"]) # no manager script here self.assertTrue(settings["sync_model_ids"]) + def test_tree_screen_starts_on_confirm(self): + # The model-tree screen opens with focus on Confirm so Enter + # accepts the seeded/checked selection immediately. + checkout = self._checkout() + catalog = make_server.catalog.load_model_catalog(checkout) + qwen3 = next(i for i, entry in enumerate(catalog) + if entry["family"] == "qwen3_tts") + captured = {} + + def fake_tree(*args, **kwargs): + captured.update(kwargs) + return [(qwen3, "Qwen3-TTS-12Hz-1.7B-Base-GGUF")] + + def fake_form(stdscr, title, fields, **kwargs): + return {f["key"]: f["value"] for f in fields} + + with patch.object(make_server.build, "find_local_checkout", + return_value=checkout), \ + patch.object(tui, "checkbox_tree", + side_effect=fake_tree), \ + patch.object(tui, "form", side_effect=fake_form): + make_server.wizard._wizard(None, self._args(), + make_server.wizard.build_parser()) + self.assertTrue(captured.get("start_on_buttons")) + + def test_wav_dir_seeded_from_existing_voice_dir(self): + # A modify run loads the Voice clone .wav directory from the + # server.json being configured instead of starting blank. + checkout = self._checkout() + recorded_voices = checkout.parent / "recorded-voices" + (checkout / "server.json").write_text(json.dumps({ + "host": "127.0.0.1", "port": 8080, "backend": "cuda", + "models": [], "voice_dir": str(recorded_voices), + }), encoding="utf-8") + catalog = make_server.catalog.load_model_catalog(checkout) + qwen3 = next(i for i, entry in enumerate(catalog) + if entry["family"] == "qwen3_tts") + + def fake_tree(*args, **kwargs): + return [(qwen3, "Qwen3-TTS-12Hz-1.7B-Base-GGUF")] + + def fake_form(stdscr, title, fields, **kwargs): + by_key = {f["key"]: f for f in fields} + self.assertEqual(by_key["wav_dir"]["value"], + Path(recorded_voices)) + return {f["key"]: f["value"] for f in fields} + + with patch.object(make_server.build, "find_local_checkout", + return_value=checkout), \ + patch.object(tui, "checkbox_tree", + side_effect=fake_tree), \ + patch.object(tui, "form", side_effect=fake_form): + make_server.wizard._wizard(None, self._args(), + make_server.wizard.build_parser()) + + def test_wav_dir_defaults_to_project_voices_when_unconfigured(self): + # Without a voice_dir in server.json the field starts on the + # project's voices/ directory — never blank. + checkout = self._checkout() + (checkout / "server.json").write_text( + json.dumps({"models": []}), encoding="utf-8") + catalog = make_server.catalog.load_model_catalog(checkout) + qwen3 = next(i for i, entry in enumerate(catalog) + if entry["family"] == "qwen3_tts") + + def fake_tree(*args, **kwargs): + return [(qwen3, "Qwen3-TTS-12Hz-1.7B-Base-GGUF")] + + def fake_form(stdscr, title, fields, **kwargs): + by_key = {f["key"]: f for f in fields} + self.assertEqual(by_key["wav_dir"]["value"], common.VOICES_DIR) + return {f["key"]: f["value"] for f in fields} + + with patch.object(make_server.build, "find_local_checkout", + return_value=checkout), \ + patch.object(tui, "checkbox_tree", + side_effect=fake_tree), \ + patch.object(tui, "form", side_effect=fake_form): + make_server.wizard._wizard(None, self._args(), + make_server.wizard.build_parser()) + def test_build_offer_hidden_when_backend_already_built(self): # A checkout with a built binary for the chosen backend must not # show (or honor) a build offer. |
