diff options
| author | historia <historiavg@proton.me> | 2026-08-24 03:22:29 -0400 |
|---|---|---|
| committer | historia <historiavg@proton.me> | 2026-08-24 03:22:29 -0400 |
| commit | 471798cf5e967b2d1bceb02d12a47fe9ad1cbed1 (patch) | |
| tree | b974708bb60424fa5d39825e54813ed133bccc42 /app/tests | |
| parent | 8e54a42db2690e0ac7f09fd400b29ad2fb2c9c5a (diff) | |
| download | tts-audiobook-generator-471798cf5e967b2d1bceb02d12a47fe9ad1cbed1.tar.gz | |
feat: tui ffmpeg check
Diffstat (limited to 'app/tests')
| -rw-r--r-- | app/tests/test_hub.py | 31 | ||||
| -rw-r--r-- | app/tests/test_tui.py | 19 |
2 files changed, 50 insertions, 0 deletions
diff --git a/app/tests/test_hub.py b/app/tests/test_hub.py index b3a17e8..749d2e6 100644 --- a/app/tests/test_hub.py +++ b/app/tests/test_hub.py @@ -160,6 +160,37 @@ class HubMenuTests(unittest.TestCase): ["Convert books...", "Set up a backend...", "Configure a backend...", "Server...", "Settings...", "Quit"]) + def test_ffmpeg_warning_shown_when_missing(self): + # ffmpeg not on PATH → a red notice is passed above the table. + captured = {} + + def fake_menu(stdscr, title, options, **kwargs): + captured["notice_lines"] = kwargs.get("notice_lines") + return "quit" + + screen = FakeScreen() + with patch.object(hub.tui, "menu", fake_menu), \ + patch.object(hub, "detect_all", return_value=[]), \ + patch.object(hub.shutil, "which", return_value=None): + hub._hub_menu(screen) + self.assertEqual(captured["notice_lines"], + [("Warning: ffmpeg not installed!", "err")]) + + def test_ffmpeg_warning_hidden_when_installed(self): + # ffmpeg on PATH → no notice is passed at all. + captured = {} + + def fake_menu(stdscr, title, options, **kwargs): + captured["notice_lines"] = kwargs.get("notice_lines") + return "quit" + + screen = FakeScreen() + with patch.object(hub.tui, "menu", fake_menu), \ + patch.object(hub, "detect_all", return_value=[]), \ + patch.object(hub.shutil, "which", return_value="/usr/bin/ffmpeg"): + hub._hub_menu(screen) + self.assertIsNone(captured["notice_lines"]) + def test_convert_with_no_available_backend_offers_setup(self): # One installed-but-not-ready backend → Convert is offered. The # convert menu lists no available backend, so only "Set up a diff --git a/app/tests/test_tui.py b/app/tests/test_tui.py index c121d55..c87374f 100644 --- a/app/tests/test_tui.py +++ b/app/tests/test_tui.py @@ -300,6 +300,25 @@ class MenuTableTests(TuiTestCase): table_title="Backend status", table_rows=self.ROWS) self.assert_inside_border(screen) + def test_notice_line_is_red_and_above_the_table(self): + screen = FakeScreen(keys=[10]) + tui.menu(screen, "Hub", [("Quit", "quit")], + table_title="Backend status", table_rows=self.ROWS, + notice_lines=[("Warning: ffmpeg not installed!", "err")]) + x0, _ = self.dialog_box(screen) + margin = x0 + 1 + tui.Frame.LIST_MARGIN + x, attr = next((x, a) for _, x, text, a in screen.strings + if text == "Warning: ffmpeg not installed!") + self.assertEqual(x, margin) + self.assertEqual(attr, tui._THEME["err"]) + # The notice sits above the table title ("Backend status"). + notice_y = next(y for y, _, text, _ in screen.strings + if text == "Warning: ffmpeg not installed!") + title_y = next(y for y, _, text, _ in screen.strings + if text == "Backend status") + self.assertLess(notice_y, title_y) + self.assert_inside_border(screen) + class ConfirmTests(TuiTestCase): def test_tab_switches_and_enter_activates(self): |
