146bf32f23
Adds LastfmSource, resolving Last.fm's often-empty artist mbid via the injected MB browser (name->mbid cached) so every emitted SimilarArtist.mbid is a real MusicBrainz artist MBID. Registered in build_similarity_sources, gated on lastfm.api_key so the ListenBrainz-only path is unchanged when unset.
30 lines
1.0 KiB
Python
30 lines
1.0 KiB
Python
from lyra_worker.registry import build_similarity_sources
|
|
from lyra_worker.similarity._lastfm import LastfmSource
|
|
from lyra_worker.similarity._listenbrainz import ListenBrainzSource
|
|
|
|
|
|
def test_build_returns_listenbrainz_by_default():
|
|
sources = build_similarity_sources({})
|
|
assert len(sources) == 1
|
|
assert isinstance(sources[0], ListenBrainzSource)
|
|
assert sources[0].name == "listenbrainz"
|
|
|
|
|
|
def test_base_url_override_from_config():
|
|
src = build_similarity_sources({"discover.listenBrainzUrl": "http://lb.local"})[0]
|
|
assert src._base == "http://lb.local"
|
|
|
|
|
|
def test_lastfm_added_when_api_key_configured():
|
|
sources = build_similarity_sources({"lastfm.api_key": "secret-key"})
|
|
names = [s.name for s in sources]
|
|
assert names == ["listenbrainz", "lastfm"]
|
|
lastfm = next(s for s in sources if s.name == "lastfm")
|
|
assert isinstance(lastfm, LastfmSource)
|
|
assert lastfm._key == "secret-key"
|
|
|
|
|
|
def test_lastfm_omitted_without_api_key():
|
|
sources = build_similarity_sources({})
|
|
assert all(s.name != "lastfm" for s in sources)
|