From ba6da17a92493f1f21a4a3d8313e5d54411e7632 Mon Sep 17 00:00:00 2001 From: red person Date: Wed, 3 Jun 2026 08:12:45 +0300 Subject: [PATCH] Ignore non-object prefs JSON (#1257) --- routes/prefs_routes.py | 3 ++- tests/test_prefs_routes.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/test_prefs_routes.py diff --git a/routes/prefs_routes.py b/routes/prefs_routes.py index 8839d17..ce88fc8 100644 --- a/routes/prefs_routes.py +++ b/routes/prefs_routes.py @@ -12,7 +12,8 @@ def _load(): """Load the raw prefs file (internal use only).""" try: with open(PREFS_FILE, "r", encoding="utf-8") as f: - return json.load(f) + data = json.load(f) + return data if isinstance(data, dict) else {} except (FileNotFoundError, json.JSONDecodeError): return {} diff --git a/tests/test_prefs_routes.py b/tests/test_prefs_routes.py new file mode 100644 index 0000000..575f12c --- /dev/null +++ b/tests/test_prefs_routes.py @@ -0,0 +1,20 @@ +import json + +import routes.prefs_routes as prefs_routes + + +def test_load_ignores_non_object_prefs_file(tmp_path, monkeypatch): + prefs_file = tmp_path / "user_prefs.json" + prefs_file.write_text(json.dumps(["not", "a", "prefs", "object"]), encoding="utf-8") + monkeypatch.setattr(prefs_routes, "PREFS_FILE", str(prefs_file)) + + assert prefs_routes._load() == {} + assert prefs_routes._load_for_user("alice") == {} + + +def test_load_keeps_object_prefs_file(tmp_path, monkeypatch): + prefs_file = tmp_path / "user_prefs.json" + prefs_file.write_text(json.dumps({"theme": "dark"}), encoding="utf-8") + monkeypatch.setattr(prefs_routes, "PREFS_FILE", str(prefs_file)) + + assert prefs_routes._load_for_user("alice") == {"theme": "dark"}