soulsync/tests/test_watchlist_auto_download.py

42 lines
1.5 KiB
Python

"""DB-level coverage for the per-artist watchlist auto_download ("follow only")
toggle — the column migrates in, defaults to auto-download, and round-trips
through get_watchlist_artists onto the WatchlistArtist dataclass."""
from __future__ import annotations
from database.music_database import MusicDatabase
def _get(db, profile_id=1):
return {a.spotify_artist_id: a for a in db.get_watchlist_artists(profile_id=profile_id)}
def test_auto_download_defaults_true(tmp_path):
db = MusicDatabase(str(tmp_path / 'm.db'))
assert db.add_artist_to_watchlist('sp1', 'Artist One', profile_id=1)
artist = _get(db)['sp1']
# New watchlist artists keep the existing behaviour: auto-download on.
assert artist.auto_download is True
def test_auto_download_persists_when_disabled(tmp_path):
db = MusicDatabase(str(tmp_path / 'm.db'))
db.add_artist_to_watchlist('sp1', 'Artist One', profile_id=1)
# Flip it off the same way the config endpoint's UPDATE does.
with db._get_connection() as conn:
conn.execute(
"UPDATE watchlist_artists SET auto_download = 0 WHERE spotify_artist_id = ?",
('sp1',),
)
conn.commit()
artist = _get(db)['sp1']
assert artist.auto_download is False
def test_auto_download_column_exists_after_migration(tmp_path):
db = MusicDatabase(str(tmp_path / 'm.db'))
with db._get_connection() as conn:
cols = [c[1] for c in conn.execute("PRAGMA table_info(watchlist_artists)").fetchall()]
assert 'auto_download' in cols