soulsync/tests/watchlist/test_musicbrainz_watchlist_ids.py
Broque Thomas f3ad65de34 Complete MusicBrainz watchlist source parity
Add MusicBrainz watchlist artist ID storage, badges, linked-provider editing, and per-artist preferred source support.

Backfill watchlist MusicBrainz matches from already-enriched library artists so existing MusicBrainz worker matches appear in watchlist cards and settings.

Extend bulk watchlist add, liked artist matching, artist map source picking, and service status labels to recognize MusicBrainz, with regression tests for watchlist ID persistence and backfill.
2026-05-18 19:19:25 -07:00

81 lines
3.1 KiB
Python

from database.music_database import MusicDatabase
def test_watchlist_artist_can_store_musicbrainz_match(tmp_path):
db = MusicDatabase(str(tmp_path / "music.db"))
assert db.add_artist_to_watchlist(
"mb-artist-1",
"MusicBrainz Artist",
profile_id=1,
source="musicbrainz",
)
artists = db.get_watchlist_artists(profile_id=1)
assert len(artists) == 1
assert artists[0].artist_name == "MusicBrainz Artist"
assert artists[0].musicbrainz_artist_id == "mb-artist-1"
assert artists[0].spotify_artist_id is None
def test_watchlist_musicbrainz_match_can_be_added_to_existing_artist(tmp_path):
db = MusicDatabase(str(tmp_path / "music.db"))
assert db.add_artist_to_watchlist("sp-artist-1", "Linked Artist", profile_id=1, source="spotify")
assert db.add_artist_to_watchlist("mb-artist-1", "Linked Artist", profile_id=1, source="musicbrainz")
artists = db.get_watchlist_artists(profile_id=1)
assert len(artists) == 1
assert artists[0].spotify_artist_id == "sp-artist-1"
assert artists[0].musicbrainz_artist_id == "mb-artist-1"
def test_watchlist_musicbrainz_match_supports_presence_and_removal(tmp_path):
db = MusicDatabase(str(tmp_path / "music.db"))
db.add_artist_to_watchlist("sp-artist-1", "Removable Artist", profile_id=1, source="spotify")
artist = db.get_watchlist_artists(profile_id=1)[0]
assert db.update_watchlist_musicbrainz_id(artist.id, "mb-artist-1")
assert db.is_artist_in_watchlist("mb-artist-1", profile_id=1)
assert db.remove_artist_from_watchlist("mb-artist-1", profile_id=1)
assert db.get_watchlist_artists(profile_id=1) == []
def test_watchlist_musicbrainz_match_backfills_from_library_by_name(tmp_path):
db = MusicDatabase(str(tmp_path / "music.db"))
db.add_artist_to_watchlist("sp-artist-1", "Library Matched Artist", profile_id=1, source="spotify")
with db._get_connection() as conn:
conn.execute(
"""
INSERT INTO artists (id, name, musicbrainz_id)
VALUES (?, ?, ?)
""",
("library-artist-1", "Library Matched Artist", "mb-library-1"),
)
conn.commit()
assert db.backfill_watchlist_musicbrainz_ids_from_library(profile_id=1) == 1
artist = db.get_watchlist_artists(profile_id=1)[0]
assert artist.musicbrainz_artist_id == "mb-library-1"
def test_watchlist_musicbrainz_match_backfills_from_library_by_linked_id(tmp_path):
db = MusicDatabase(str(tmp_path / "music.db"))
db.add_artist_to_watchlist("sp-artist-1", "Different Watchlist Name", profile_id=1, source="spotify")
with db._get_connection() as conn:
conn.execute(
"""
INSERT INTO artists (id, name, spotify_artist_id, musicbrainz_id)
VALUES (?, ?, ?, ?)
""",
("library-artist-1", "Canonical Library Name", "sp-artist-1", "mb-library-1"),
)
conn.commit()
assert db.backfill_watchlist_musicbrainz_ids_from_library(profile_id=1) == 1
artist = db.get_watchlist_artists(profile_id=1)[0]
assert artist.musicbrainz_artist_id == "mb-library-1"