Import existing LinTunes project
Snapshot of the existing codebase before working through the TASKS.md backlog. Real library data (data/) and the iTunes import fixture (itunes-test-library/) are gitignored. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
56
tests/test_track_edit.py
Normal file
56
tests/test_track_edit.py
Normal file
@ -0,0 +1,56 @@
|
||||
"""Regression tests for live browser refresh after a Get-Info edit.
|
||||
|
||||
The bug: renaming a track's artist left the column browser (and its filter)
|
||||
pointing at the old name, so the renamed artist didn't re-sort and clicking it
|
||||
returned no tracks. The fix routes a new `track_fields_edited(track_id, fields)`
|
||||
signal to the library view, which rebuilds the browser only when a field it
|
||||
groups by changed — and leaves play-count/skip bumps alone.
|
||||
"""
|
||||
|
||||
from lintunes.models import Library, Track
|
||||
from lintunes.library_manager import LibraryManager
|
||||
from lintunes.gui.library_view import _BROWSER_FIELDS
|
||||
|
||||
|
||||
def _manager(tmp_path):
|
||||
track = Track(track_id=1, name="Song", artist="Aardvark",
|
||||
album="Debut", genre="Rock")
|
||||
library = Library(tracks={1: track})
|
||||
return LibraryManager(library, tmp_path), track
|
||||
|
||||
|
||||
def test_edit_emits_changed_fields(qapp, tmp_path):
|
||||
manager, _track = _manager(tmp_path)
|
||||
edits, updates = [], []
|
||||
manager.track_fields_edited.connect(lambda tid, fields: edits.append((tid, fields)))
|
||||
manager.track_updated.connect(updates.append)
|
||||
|
||||
manager.update_track_fields(1, {"artist": "Zz Top"})
|
||||
|
||||
assert edits == [(1, ["artist"])]
|
||||
assert updates == [1]
|
||||
assert _BROWSER_FIELDS.intersection(edits[0][1]) # would refresh the browser
|
||||
|
||||
|
||||
def test_no_op_edit_is_silent(qapp, tmp_path):
|
||||
manager, _track = _manager(tmp_path)
|
||||
edits = []
|
||||
manager.track_fields_edited.connect(lambda tid, fields: edits.append((tid, fields)))
|
||||
|
||||
manager.update_track_fields(1, {"artist": "Aardvark"}) # unchanged value
|
||||
|
||||
assert edits == []
|
||||
|
||||
|
||||
def test_play_count_does_not_reorganize(qapp, tmp_path):
|
||||
"""record_play bumps play_count via track_updated but must NOT emit
|
||||
track_fields_edited, so a finished play never rebuilds the browser."""
|
||||
manager, _track = _manager(tmp_path)
|
||||
edits, updates = [], []
|
||||
manager.track_fields_edited.connect(lambda tid, fields: edits.append((tid, fields)))
|
||||
manager.track_updated.connect(updates.append)
|
||||
|
||||
manager.record_play(1)
|
||||
|
||||
assert edits == []
|
||||
assert updates == [1]
|
||||
Reference in New Issue
Block a user