test: cover app and playback controller mixin behavior
This commit is contained in:
78
tests/app/test_app_state_initialization.py
Normal file
78
tests/app/test_app_state_initialization.py
Normal file
@@ -0,0 +1,78 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from auditui.app import state as state_mod
|
||||
|
||||
|
||||
class DummyApp:
|
||||
"""Lightweight app object for state initialization tests."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""Expose update_status to satisfy init dependencies."""
|
||||
self.messages: list[str] = []
|
||||
|
||||
def update_status(self, message: str) -> None:
|
||||
"""Collect status updates for assertions."""
|
||||
self.messages.append(message)
|
||||
|
||||
|
||||
def test_init_state_without_auth_or_client(monkeypatch) -> None:
|
||||
"""Ensure baseline state is initialized when no auth/client is provided."""
|
||||
app = DummyApp()
|
||||
playback_args: list[tuple[object, object]] = []
|
||||
|
||||
class FakePlayback:
|
||||
"""Playback constructor recorder for init tests."""
|
||||
|
||||
def __init__(self, notify, library_client) -> None:
|
||||
"""Capture arguments passed by init_auditui_state."""
|
||||
playback_args.append((notify, library_client))
|
||||
|
||||
monkeypatch.setattr(state_mod, "PlaybackController", FakePlayback)
|
||||
state_mod.init_auditui_state(app)
|
||||
assert app.library_client is None
|
||||
assert app.download_manager is None
|
||||
assert app.all_items == []
|
||||
assert app.current_items == []
|
||||
assert app.filter_text == ""
|
||||
assert app.show_all_mode is False
|
||||
assert playback_args and playback_args[0][1] is None
|
||||
|
||||
|
||||
def test_init_state_with_auth_and_client_builds_dependencies(monkeypatch) -> None:
|
||||
"""Ensure init constructs library, downloads, and playback dependencies."""
|
||||
app = DummyApp()
|
||||
auth = object()
|
||||
client = object()
|
||||
|
||||
class FakeLibraryClient:
|
||||
"""Fake library client constructor for dependency wiring checks."""
|
||||
|
||||
def __init__(self, value) -> None:
|
||||
"""Store constructor argument for assertions."""
|
||||
self.value = value
|
||||
|
||||
class FakeDownloadManager:
|
||||
"""Fake download manager constructor for dependency wiring checks."""
|
||||
|
||||
def __init__(self, auth_value, client_value) -> None:
|
||||
"""Store constructor arguments for assertions."""
|
||||
self.args = (auth_value, client_value)
|
||||
|
||||
class FakePlayback:
|
||||
"""Fake playback constructor for dependency wiring checks."""
|
||||
|
||||
def __init__(self, notify, library_client) -> None:
|
||||
"""Store constructor arguments for assertions."""
|
||||
self.notify = notify
|
||||
self.library_client = library_client
|
||||
|
||||
monkeypatch.setattr(state_mod, "LibraryClient", FakeLibraryClient)
|
||||
monkeypatch.setattr(state_mod, "DownloadManager", FakeDownloadManager)
|
||||
monkeypatch.setattr(state_mod, "PlaybackController", FakePlayback)
|
||||
state_mod.init_auditui_state(app, auth=auth, client=client)
|
||||
assert isinstance(app.library_client, FakeLibraryClient)
|
||||
assert isinstance(app.download_manager, FakeDownloadManager)
|
||||
assert isinstance(app.playback, FakePlayback)
|
||||
assert app.library_client.value is client
|
||||
assert app.download_manager.args == (auth, client)
|
||||
assert app.playback.library_client.value is client
|
||||
Reference in New Issue
Block a user