# retoor from devplacepy.database.nodes import LIMITS from tests.api.admin.nodes.conftest import admin_headers, make_device from tests.api.nodes.conftest import make_member def test_guest_is_refused(client): assert client.get("/admin/nodes", headers={"Accept": "application/json"}).status_code == 401 def test_member_is_refused(client): member = make_member() assert client.get("/admin/nodes", headers=admin_headers(member)).status_code == 403 def test_admin_overview_shape(client, admin): owner = make_member() device = make_device(owner["uid"], "Overview laptop") body = client.get("/admin/nodes", headers=admin_headers(admin)).json() assert set(body["pool"]) >= {"online", "connected", "capacity", "open_circuits"} assert body["queue"]["max_depth"] == LIMITS.max_queue_depth assert body["limits"]["max_connected_nodes"] == LIMITS.max_connected_nodes assert {item["key"] for item in body["settings"]} == { "nodes_max_total", "nodes_daily_quota_user", "nodes_daily_quota_guest", "nodes_cache_ttl_seconds", "nodes_daily_social_user", "nodes_social_via_nodes", } listed = {row["uid"]: row for row in body["devices"]} assert listed[device["uid"]]["owner_username"] == owner["username"] assert len(body["devices"]) <= 100 assert "secret_hash" not in listed[device["uid"]] def test_html_page_renders(client, admin): response = client.get("/admin/nodes", headers=admin["headers"]) assert response.status_code == 200 assert "Community nodes" in response.text assert "data-live=\"summary\"" in response.text