soulsync/tests/database/test_album_thumb_preservation.py
Broque Thomas 96e6ba0ed7 Preserve Navidrome album cover art
Expose Navidrome album coverArt as a Subsonic getCoverArt thumbnail so library refreshes keep a real album-art URL. Preserve existing album thumb_url when an incoming server album has no thumbnail, preventing manual or server-corrected covers from being cleared and later replaced by loose missing-cover searches. Add regression tests for Navidrome album thumbnails and DB thumb preservation.
2026-05-25 19:51:38 -07:00

87 lines
2.2 KiB
Python

from __future__ import annotations
import sqlite3
from database.music_database import MusicDatabase
class _InMemoryDB(MusicDatabase):
def __init__(self):
self._conn = sqlite3.connect(":memory:")
self._conn.row_factory = sqlite3.Row
def _get_connection(self):
return _NonClosingConn(self._conn)
class _NonClosingConn:
def __init__(self, real):
self._real = real
def cursor(self):
return self._real.cursor()
def commit(self):
return self._real.commit()
def close(self):
pass
class _Album:
ratingKey = "album-1"
title = "Flower Boy"
year = 2017
leafCount = 15
duration = 2940
genres = []
thumb = None
def _seed(db):
cur = db._conn.cursor()
cur.execute("""
CREATE TABLE albums (
id TEXT PRIMARY KEY,
artist_id TEXT,
title TEXT,
year INTEGER,
thumb_url TEXT,
genres TEXT,
track_count INTEGER,
duration INTEGER,
server_source TEXT,
created_at TEXT,
updated_at TEXT
)
""")
cur.execute("""
INSERT INTO albums
(id, artist_id, title, year, thumb_url, server_source)
VALUES
('album-1', 'artist-1', 'Flower Boy', 2017, '/rest/getCoverArt?id=correct-cover', 'navidrome')
""")
db._conn.commit()
def test_album_refresh_preserves_existing_thumb_when_incoming_thumb_missing():
db = _InMemoryDB()
_seed(db)
assert db.insert_or_update_media_album(_Album(), "artist-1", server_source="navidrome") is True
row = db._conn.execute("SELECT thumb_url FROM albums WHERE id = 'album-1'").fetchone()
assert row["thumb_url"] == "/rest/getCoverArt?id=correct-cover"
def test_album_refresh_updates_existing_thumb_when_incoming_thumb_present():
db = _InMemoryDB()
_seed(db)
album = _Album()
album.thumb = "/rest/getCoverArt?id=new-cover"
assert db.insert_or_update_media_album(album, "artist-1", server_source="navidrome") is True
row = db._conn.execute("SELECT thumb_url FROM albums WHERE id = 'album-1'").fetchone()
assert row["thumb_url"] == "/rest/getCoverArt?id=new-cover"