aboutsummaryrefslogtreecommitdiff
path: root/app/tests/test_tui.py
diff options
context:
space:
mode:
authorhistoria <historiavg@proton.me>2026-08-26 17:46:48 -0400
committerhistoria <historiavg@proton.me>2026-08-26 17:46:48 -0400
commit6ccb6d443d2fb871b43d96ea61a95bc3e6a92355 (patch)
treed692ddccd6ec212cf4ebabb25a85e83af479d0fe /app/tests/test_tui.py
parentc147087c9d4707bffaeee58d390653637a21cce8 (diff)
downloadtts-audiobook-generator-6ccb6d443d2fb871b43d96ea61a95bc3e6a92355.tar.gz
feat: combined install/configure tui screens into one menu, removed extraneous wizard screens
Diffstat (limited to 'app/tests/test_tui.py')
-rw-r--r--app/tests/test_tui.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/app/tests/test_tui.py b/app/tests/test_tui.py
index c2cd267..b15419b 100644
--- a/app/tests/test_tui.py
+++ b/app/tests/test_tui.py
@@ -753,6 +753,58 @@ class FormTests(TuiTestCase):
result = tui.form(screen, "Settings", fields)
self.assertEqual(result, {"fmt": "good", "other": "x"})
+ def test_dir_field_opens_the_browser_and_saves_the_pick(self):
+ picked = Path("/picked/voices")
+ fields = [{"key": "voices", "label": "Voices directory",
+ "kind": "dir", "value": Path("/start")}]
+ with patch.object(tui, "browse_directory",
+ return_value=picked) as mk_browser:
+ # edit, Enter (focus jumped to Save after the pick).
+ screen = FakeScreen(keys=[10, 10])
+ result = tui.form(screen, "Settings", fields)
+ self.assertEqual(result, {"voices": picked})
+ mk_browser.assert_called_once()
+ self.assertEqual(Path(mk_browser.call_args[1]["start"]),
+ Path("/start"))
+
+ def test_dir_pick_moves_focus_to_the_accept_button(self):
+ # Accepting a directory is a completed choice: focus lands on
+ # Save, so the very next Enter submits — no Tab hunting.
+ picked = Path("/picked/voices")
+ fields = [{"key": "voices", "label": "Voices directory",
+ "kind": "dir", "value": Path("/start")}]
+ with patch.object(tui, "browse_directory",
+ return_value=picked) as mk_browser:
+ screen = FakeScreen(keys=[10, 10])
+ result = tui.form(screen, "Settings", fields)
+ self.assertEqual(result, {"voices": picked})
+ mk_browser.assert_called_once()
+
+ def test_dir_field_back_out_keeps_the_old_value(self):
+ # Backing out of the browser returns its back_value; the field
+ # keeps the previous path and focus stays on the fields (Tab
+ # then walks to Save).
+ fields = [{"key": "voices", "label": "Voices directory",
+ "kind": "dir", "value": Path("/start")}]
+ with patch.object(tui, "browse_directory",
+ side_effect=lambda *a, **k: k["back_value"]):
+ screen = FakeScreen(keys=[10, 9, 10])
+ result = tui.form(screen, "Settings", fields)
+ self.assertEqual(result, {"voices": Path("/start")})
+
+ def test_dir_field_renders_its_path_and_fires_on_change(self):
+ picked = Path("/picked")
+ calls = []
+ fields = [{"key": "voices", "label": "Voices", "kind": "dir",
+ "value": None, "on_change": lambda fs: calls.append(1)}]
+ with patch.object(tui, "browse_directory", return_value=picked):
+ screen = FakeScreen(keys=[10, 10])
+ result = tui.form(screen, "Settings", fields)
+ self.assertEqual(result, {"voices": picked})
+ self.assertEqual(calls, [1])
+ texts = [text for _, _, text, _ in screen.strings]
+ self.assertTrue(any("Voices:" in text for text in texts))
+
def _two_text_fields(self):
return [{"key": "first", "label": "First", "kind": "text",
"value": "a"},