You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SoulSync/tests/wishlist/test_resolution.py

216 lines
5.9 KiB

from types import SimpleNamespace
from core.wishlist import resolution
class _FakeWishlistService:
def __init__(self, tracks):
self.tracks = tracks
self.removed = []
def get_wishlist_tracks_for_download(self, profile_id=1):
return list(self.tracks)
def mark_track_download_result(self, spotify_track_id, success, error_message=None, profile_id=1):
self.removed.append((spotify_track_id, success, error_message, profile_id))
return True
def test_check_and_remove_from_wishlist_uses_search_result_fallback():
fake_db = SimpleNamespace(get_all_profiles=lambda: [{"id": 1}])
wishlist_service = _FakeWishlistService(
[
{
"wishlist_id": 11,
"spotify_track_id": "sp-track-1",
"id": "sp-track-1",
"name": "Song One",
"artists": [{"name": "Artist One"}],
}
]
)
context = {
"search_result": {
"title": "Song One",
"artist": "Artist One",
"album": "Album One",
},
"track_info": {},
"original_search_result": {},
}
resolution.check_and_remove_from_wishlist(
context,
wishlist_service=wishlist_service,
database=fake_db,
)
assert wishlist_service.removed == [("sp-track-1", True, None, 1)]
def test_check_and_remove_from_wishlist_uses_spotify_source_id():
fake_db = SimpleNamespace(get_all_profiles=lambda: [{"id": 1}])
wishlist_service = _FakeWishlistService(
[
{
"wishlist_id": 11,
"spotify_track_id": "sp-track-1",
"id": "sp-track-1",
"name": "Song One",
"artists": [{"name": "Artist One"}],
}
]
)
context = {
"source": "spotify",
"track_info": {
"id": "sp-track-1",
"name": "Song One",
"artists": [{"name": "Artist One"}],
},
"search_result": {},
"original_search_result": {},
}
resolution.check_and_remove_from_wishlist(
context,
wishlist_service=wishlist_service,
database=fake_db,
)
assert wishlist_service.removed == [("sp-track-1", True, None, 1)]
def test_check_and_remove_from_wishlist_uses_non_spotify_source_id():
fake_db = SimpleNamespace(get_all_profiles=lambda: [{"id": 1}])
wishlist_service = _FakeWishlistService(
[
{
"wishlist_id": 11,
"spotify_track_id": "dz-track-1",
"id": "dz-track-1",
"name": "Song One",
"artists": [{"name": "Artist One"}],
}
]
)
context = {
"source": "deezer",
"track_info": {
"deezer_track_id": "dz-track-1",
"name": "Song One",
"artists": [{"name": "Artist One"}],
},
"search_result": {},
"original_search_result": {},
}
resolution.check_and_remove_from_wishlist(
context,
wishlist_service=wishlist_service,
database=fake_db,
)
assert wishlist_service.removed == [("dz-track-1", True, None, 1)]
def test_check_and_remove_from_wishlist_uses_wishlist_id_lookup():
fake_db = SimpleNamespace(get_all_profiles=lambda: [{"id": 1}])
wishlist_service = _FakeWishlistService(
[
{
"wishlist_id": 22,
"spotify_track_id": "sp-track-2",
"id": "sp-track-2",
"name": "Song Two",
"artists": [{"name": "Artist Two"}],
}
]
)
context = {
"source": "manual",
"track_info": {"wishlist_id": 22},
"search_result": {},
"original_search_result": {},
}
resolution.check_and_remove_from_wishlist(
context,
wishlist_service=wishlist_service,
database=fake_db,
)
assert wishlist_service.removed == [("sp-track-2", True, None, 1)]
def test_check_and_remove_track_from_wishlist_by_metadata_uses_fuzzy_match():
fake_db = SimpleNamespace(get_all_profiles=lambda: [{"id": 1}])
wishlist_service = _FakeWishlistService(
[
{
"wishlist_id": 22,
"spotify_track_id": "sp-track-2",
"id": "sp-track-2",
"name": "Song Two",
"artists": [{"name": "Artist Two"}],
}
]
)
track_data = {
"name": "Song Two",
"id": "",
"artists": [{"name": "Artist Two"}],
}
removed = resolution.check_and_remove_track_from_wishlist_by_metadata(
track_data,
wishlist_service=wishlist_service,
database=fake_db,
)
assert removed is True
assert wishlist_service.removed == [("sp-track-2", True, None, 1)]
def test_check_and_remove_track_from_wishlist_by_metadata_uses_direct_id_match():
fake_db = SimpleNamespace(get_all_profiles=lambda: [{"id": 1}])
wishlist_service = _FakeWishlistService([])
track_data = {
"name": "Song Three",
"id": "sp-track-3",
"artists": [{"name": "Artist Three"}],
}
removed = resolution.check_and_remove_track_from_wishlist_by_metadata(
track_data,
wishlist_service=wishlist_service,
database=fake_db,
)
assert removed is True
assert wishlist_service.removed == [("sp-track-3", True, None, 1)]
def test_check_and_remove_track_from_wishlist_by_metadata_returns_false_when_no_match():
fake_db = SimpleNamespace(get_all_profiles=lambda: [{"id": 1}])
wishlist_service = _FakeWishlistService([])
removed = resolution.check_and_remove_track_from_wishlist_by_metadata(
{
"name": "Missing Song",
"id": "",
"artists": [{"name": "Missing Artist"}],
},
wishlist_service=wishlist_service,
database=fake_db,
)
assert removed is False
assert wishlist_service.removed == []