From 597e82dc20ddcd3144e88ef38158e0beab90c58d Mon Sep 17 00:00:00 2001 From: Kharec Date: Wed, 18 Feb 2026 03:38:58 +0100 Subject: [PATCH] test(app): verify playback start receives selected item metadata --- ...test_app_actions_selection_and_controls.py | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/tests/app/test_app_actions_selection_and_controls.py b/tests/app/test_app_actions_selection_and_controls.py index d708eff..2a8d0da 100644 --- a/tests/app/test_app_actions_selection_and_controls.py +++ b/tests/app/test_app_actions_selection_and_controls.py @@ -1,6 +1,7 @@ from __future__ import annotations from dataclasses import dataclass +from typing import Any, cast from auditui.app.actions import AppActionsMixin @@ -41,7 +42,13 @@ class DummyActionsApp(AppActionsMixin): self.current_items: list[dict] = [] self.download_manager = object() self.library_client = type( - "Library", (), {"extract_asin": lambda self, item: item.get("asin")} + "Library", + (), + { + "extract_asin": lambda self, item: item.get("asin"), + "extract_title": lambda self, item: item.get("title"), + "extract_authors": lambda self, item: item.get("authors"), + }, )() self.playback = FakePlayback(True) self.filter_text = "hello" @@ -61,10 +68,6 @@ class DummyActionsApp(AppActionsMixin): """Record refresh invocations for filter tests.""" self._refreshed += 1 - def _start_playback_async(self, asin: str) -> None: - """Capture async playback launch argument.""" - self.messages.append(f"start:{asin}") - def test_get_selected_asin_requires_non_empty_table() -> None: """Ensure selection fails gracefully when table has no rows.""" @@ -85,10 +88,18 @@ def test_get_selected_asin_returns_current_row_asin() -> None: def test_action_play_selected_starts_async_playback() -> None: """Ensure play action calls async starter with selected ASIN.""" app = DummyActionsApp() + seen: list[str] = [] + + def capture_start(asin: str, item: dict | None = None) -> None: + """Capture playback start arguments for assertions.""" + suffix = f":{item.get('title')}" if item else "" + seen.append(f"start:{asin}{suffix}") + + setattr(cast(Any, app), "_start_playback_async", capture_start) app._table = FakeTable(row_count=1, cursor_row=0) - app.current_items = [{"asin": "ASIN"}] + app.current_items = [{"asin": "ASIN", "title": "Book"}] app.action_play_selected() - assert app.messages[-1] == "start:ASIN" + assert seen[-1] == "start:ASIN:Book" def test_action_toggle_playback_shows_hint_when_no_playback() -> None: