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.
57 lines
1.7 KiB
57 lines
1.7 KiB
import json
|
|
|
|
from core.wishlist import presence
|
|
|
|
|
|
class _FakeCursor:
|
|
def __init__(self, profile_rows=None, legacy_rows=None, fail_profile_query=False):
|
|
self.profile_rows = list(profile_rows or [])
|
|
self.legacy_rows = list(legacy_rows or [])
|
|
self.fail_profile_query = fail_profile_query
|
|
self.calls = []
|
|
self._last_sql = ""
|
|
|
|
def execute(self, sql, params=None):
|
|
self.calls.append((sql, params))
|
|
self._last_sql = sql
|
|
if self.fail_profile_query and "WHERE profile_id = ?" in sql:
|
|
raise RuntimeError("profile_id column missing")
|
|
|
|
def fetchall(self):
|
|
if "WHERE profile_id = ?" in self._last_sql and not self.fail_profile_query:
|
|
return list(self.profile_rows)
|
|
return list(self.legacy_rows)
|
|
|
|
|
|
def test_load_wishlist_keys_uses_profile_specific_query():
|
|
cursor = _FakeCursor(
|
|
profile_rows=[
|
|
(json.dumps({"name": "Song One", "artists": [{"name": "Artist One"}]}),),
|
|
("not-json",),
|
|
]
|
|
)
|
|
|
|
keys = presence.load_wishlist_keys(cursor, profile_id=7)
|
|
|
|
assert keys == {"song one|||artist one"}
|
|
assert cursor.calls == [
|
|
("SELECT spotify_data FROM wishlist_tracks WHERE profile_id = ?", (7,)),
|
|
]
|
|
|
|
|
|
def test_load_wishlist_keys_falls_back_to_legacy_schema():
|
|
cursor = _FakeCursor(
|
|
fail_profile_query=True,
|
|
legacy_rows=[
|
|
(json.dumps({"name": "Song Two", "artists": [{"name": "Artist Two"}]}),),
|
|
],
|
|
)
|
|
|
|
keys = presence.load_wishlist_keys(cursor, profile_id=3)
|
|
|
|
assert keys == {"song two|||artist two"}
|
|
assert cursor.calls == [
|
|
("SELECT spotify_data FROM wishlist_tracks WHERE profile_id = ?", (3,)),
|
|
("SELECT spotify_data FROM wishlist_tracks", None),
|
|
]
|