"""LibraryManager.set_track_location: repoint a track at a moved/renamed file. It's a path repair, not a content edit — so it persists the new location and notifies the UI, but must not touch date_modified or write tags. """ from lintunes.models import Library, Track from lintunes.library_manager import LibraryManager def _manager(tmp_path): track = Track(track_id=1, name="Song", location="/old/path/song.mp3", date_modified="2020-01-01T00:00:00") return LibraryManager(Library(tracks={1: track}), tmp_path), track def test_set_track_location_repoints_and_persists(qapp, tmp_path): manager, track = _manager(tmp_path) updates, edits = [], [] manager.track_updated.connect(updates.append) manager.track_fields_edited.connect(lambda tid, fields: edits.append(tid)) manager.set_track_location(1, "/new/path/from there to here.mp3") assert track.location == "/new/path/from there to here.mp3" assert manager._dirty_tracks # will be saved assert updates == [1] # UI refreshes the row assert edits == [] # not a metadata edit assert track.date_modified == "2020-01-01T00:00:00" # untouched def test_set_track_location_noop_when_unchanged(qapp, tmp_path): manager, track = _manager(tmp_path) updates = [] manager.track_updated.connect(updates.append) manager.set_track_location(1, track.location) assert updates == [] assert not manager._dirty_tracks def test_set_track_location_ignores_unknown_track(qapp, tmp_path): manager, _track = _manager(tmp_path) manager.set_track_location(999, "/whatever.mp3") # no such track assert not manager._dirty_tracks