mirror of https://github.com/Nezreka/SoulSync.git
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.
216 lines
5.9 KiB
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 == []
|