Files
lintunes/tests/test_track_edit.py
Trav f6d35fa594 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>
2026-06-26 21:12:01 -04:00

57 lines
2.0 KiB
Python

"""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]