# retoor from devplacepy.database import get_setting, set_setting from devplacepy.database.nodes import LIMITS from tests.api.admin.nodes.conftest import admin_headers from tests.api.nodes.conftest import make_member KEYS = ("nodes_max_total", "nodes_daily_quota_user", "nodes_social_via_nodes") def test_member_cannot_change_settings(client): member = make_member() assert client.post("/admin/nodes/settings", json={"nodes_max_total": 1}, headers=admin_headers(member)).status_code == 403 def test_only_submitted_fields_change_and_ceilings_clamp(client, admin): previous = {key: get_setting(key, "") for key in KEYS} try: response = client.post( "/admin/nodes/settings", json={"nodes_max_total": LIMITS.max_connected_nodes + 500, "nodes_social_via_nodes": "1"}, headers=admin_headers(admin), ) data = response.json()["data"] assert "nodes_max_total" in data["clamped"] assert get_setting("nodes_max_total", "") == str(LIMITS.max_connected_nodes) assert get_setting("nodes_social_via_nodes", "") == "1" assert get_setting("nodes_daily_quota_user", "") == previous["nodes_daily_quota_user"] finally: for key, value in previous.items(): set_setting(key, value) def test_negative_and_unknown_values_are_rejected(client, admin): assert client.post("/admin/nodes/settings", json={"nodes_max_total": -1}, headers=admin_headers(admin)).status_code in (400, 422) assert client.post("/admin/nodes/settings", json={"nodes_social_via_nodes": "2"}, headers=admin_headers(admin)).status_code in (400, 422)