test_prefs.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from conftest import login_static
  2. def test_default_when_no_override(app_client):
  3. login_static(app_client)
  4. data = app_client.get("/api/config").get_json()
  5. # example default_limit is 200
  6. assert data["prefs"]["default_limit"] == 200
  7. def test_override_persists(app_client):
  8. csrf = login_static(app_client)
  9. app_client.put("/api/prefs", json={"default_limit": 42}, headers={"X-CSRF-Token": csrf})
  10. data = app_client.get("/api/config").get_json()
  11. assert data["prefs"]["default_limit"] == 42
  12. def test_invalid_override_rejected(app_client):
  13. csrf = login_static(app_client)
  14. r = app_client.put("/api/prefs", json={"default_limit": 99999}, headers={"X-CSRF-Token": csrf})
  15. assert r.status_code == 400
  16. def test_deleted_pinned_folder_falls_back(app_client):
  17. csrf = login_static(app_client)
  18. # Pin a folder that exists, then remove it from config; effective value must fall back.
  19. app_client.put("/api/prefs", json={"default_folder": "Deleted"}, headers={"X-CSRF-Token": csrf})
  20. store = app_client._store
  21. store.apply({"quarantine": {"folders": ["Quarantine", "Attachment Defense", "Debugging - Josef"],
  22. "deleted_folder": "Quarantine"}}, actor="t")
  23. data = app_client.get("/api/config").get_json()
  24. # "Deleted" no longer in folders -> falls back to admin default, not an error
  25. assert data["prefs"]["default_folder"] != "Deleted"
  26. def test_per_user_isolation(app_client):
  27. from prefs import PrefStore
  28. prefs: PrefStore = app_client.application.config["PREFS"]
  29. snap = app_client._store.snapshot()
  30. prefs.set_many("alice@x.com", {"default_limit": 10}, snap)
  31. prefs.set_many("bob@x.com", {"default_limit": 20}, snap)
  32. assert prefs.effective("alice@x.com", snap)["default_limit"] == 10
  33. assert prefs.effective("bob@x.com", snap)["default_limit"] == 20
  34. def test_clear_resets_to_default(app_client):
  35. csrf = login_static(app_client)
  36. app_client.put("/api/prefs", json={"default_limit": 15}, headers={"X-CSRF-Token": csrf})
  37. app_client.delete("/api/prefs", json={}, headers={"X-CSRF-Token": csrf})
  38. data = app_client.get("/api/config").get_json()
  39. assert data["prefs"]["default_limit"] == 200