Files
embycovers/tests/test_homescreen_editor.py
T
2026-06-08 21:58:16 +12:00

105 lines
3.7 KiB
Python

import json
import sqlite3
from services import homescreen_editor
def _make_db(path):
conn = sqlite3.connect(path)
conn.execute("CREATE TABLE Users (Id INTEGER PRIMARY KEY, Name TEXT, Guid TEXT)")
conn.execute("CREATE TABLE UserSettingsKeys (UserSettingsKeyId INTEGER PRIMARY KEY, Name TEXT)")
conn.execute("CREATE TABLE UserSettings (UserId INTEGER, UserSettingsKeyId INTEGER, Value TEXT)")
conn.execute("INSERT INTO UserSettingsKeys (UserSettingsKeyId, Name) VALUES (1, 'homescreensettings')")
conn.execute("INSERT INTO Users (Id, Name, Guid) VALUES (1, 'Alice', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')")
conn.execute("INSERT INTO Users (Id, Name, Guid) VALUES (2, 'Bob', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')")
conn.execute(
"INSERT INTO UserSettings (UserId, UserSettingsKeyId, Value) VALUES (?, ?, ?)",
(
1,
1,
json.dumps(
{
"Sections": [
{
"Id": "one",
"Name": "Watchlist",
"CustomName": "Watchlist",
"UserId": "WRONG",
"SectionType": "items",
}
]
}
),
),
)
conn.commit()
conn.close()
def test_read_db_normalizes_section_user_ids(tmp_path):
db_path = tmp_path / "users.db"
_make_db(db_path)
result = homescreen_editor.read_db(str(db_path))
assert result["validation"]["userCount"] == 2
alice = next(user for user in result["users"] if user["name"] == "Alice")
assert alice["embyGuid"] == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
assert alice["sections"][0]["UserId"] == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
def test_write_db_persists_normalized_sections(tmp_path):
db_path = tmp_path / "users.db"
_make_db(db_path)
payload = homescreen_editor.write_db(
str(db_path),
[
{
"userId": 2,
"sections": [
{
"Id": "two",
"Name": "Recent",
"CustomName": "Recent",
"UserId": "SHOULD_BE_NORMALIZED",
"SectionType": "items",
}
],
}
],
)
assert payload["ok"] is True
conn = sqlite3.connect(db_path)
value = conn.execute("SELECT Value FROM UserSettings WHERE UserId = 2").fetchone()[0]
conn.close()
parsed = json.loads(value)
assert parsed["Sections"][0]["UserId"] == "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
def test_generate_sql_includes_only_changed_users():
original = [{"id": 1, "name": "Alice", "sections": [{"Id": "one"}]}]
updated = [{"id": 1, "name": "Alice", "sections": [{"Id": "two"}]}]
sql = homescreen_editor.generate_sql(updated, original)
assert "Alice" in sql
assert "UPDATE UserSettings" in sql
assert "COMMIT;" in sql
def test_uploaded_db_becomes_active_source(tmp_path, monkeypatch):
upload_dir = tmp_path / "uploads"
state_path = tmp_path / "upload-state.json"
monkeypatch.setattr(homescreen_editor, "HOMESCREEN_UPLOAD_DIR", upload_dir)
monkeypatch.setattr(homescreen_editor, "HOMESCREEN_UPLOAD_STATE_PATH", state_path)
meta = homescreen_editor.save_uploaded_db("users.db", b"sqlite-bytes")
active = homescreen_editor.get_active_upload()
resolved_path, resolved_meta = homescreen_editor.resolve_db_source()
assert meta["upload_id"] == active["upload_id"]
assert resolved_meta["upload_id"] == meta["upload_id"]
assert resolved_path.endswith(f"{meta['upload_id']}.db")