From 10e72d4960e865acf5346ab8cf518ed5844fe45c Mon Sep 17 00:00:00 2001 From: historia Date: Mon, 31 Aug 2026 19:45:57 -0400 Subject: feat: generate a book with all installed models to compare --- app/tests/test_runview.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'app/tests/test_runview.py') diff --git a/app/tests/test_runview.py b/app/tests/test_runview.py index 5c0dc38..f8ab452 100644 --- a/app/tests/test_runview.py +++ b/app/tests/test_runview.py @@ -140,6 +140,31 @@ class StateTransitionTests(_FakeTui, unittest.TestCase): view.handle_event({"kind": "server_stopped"}) self.assertEqual(view.server, "stopped") + def test_all_run_book_events_carry_the_model(self): + # "All (multiple generation)" runs stamp the generating model onto + # the book and book_done/book_failed events; the view keeps it for + # the progress line and the summary rows. + view, _ = self.make_view() + view.handle_event({"kind": "book", "index": 2, "total": 4, + "name": "book.txt", "model": "m1"}) + self.assertEqual(view.book, (2, 4, "book.txt", "m1")) + view.handle_event({"kind": "book_done", "name": "book.txt", + "ok": True, "files": ["book_m1_Vivian.mp3"], + "model": "m1"}) + self.assertEqual(view.book_results, + [("book.txt", True, ["book_m1_Vivian.mp3"], "", + "m1")]) + view.handle_event({"kind": "book", "index": 3, "total": 4, + "name": "book.txt", "model": "m2"}) + view.handle_event({"kind": "book_failed", "name": "book.txt", + "error": "chunk failed", "model": "m2"}) + self.assertEqual(view.book_results[-1], + ("book.txt", False, [], "chunk failed", "m2")) + # A plain (single-model) run carries no model: the field stays None. + view.handle_event({"kind": "book", "index": 4, "total": 4, + "name": "book.txt"}) + self.assertEqual(view.book, (4, 4, "book.txt", None)) + class LogAppenderTests(_FakeTui, unittest.TestCase): """_LogAppender: stray console output survives in the run's log file.""" @@ -234,6 +259,20 @@ class RenderTests(_FakeTui, unittest.TestCase): self.assertIn("book.txt", text) self.assertIn("press any key", text) + def test_summary_screen_names_the_generating_model(self): + # An "All" run's summary rows distinguish which model generated + # each result (the progress line shows the model too). + view, screen = self.make_view() + view.handle_event({"kind": "book", "index": 1, "total": 2, + "name": "book.txt", "model": "m1"}) + view.handle_event({"kind": "book_done", "name": "book.txt", + "ok": True, "files": ["book_m1_Vivian.mp3"], + "model": "m1"}) + view.handle_event({"kind": "done", "ok": 1, "total": 2}) + view.render() + text = self._strings(screen) + self.assertIn("book.txt — m1", text) + def test_stopping_status_shows_elapsed(self): view, screen = self.make_view() view.handle_event({"kind": "book", "index": 1, "total": 1, -- cgit v1.2.3