""" Tests for MCP Server CRUD operations. """ import pytest _state: dict = {} @pytest.mark.anyio async def test_create_mcp_server(client, admin_headers): """POST /api/mcp/servers — create via JSON body.""" r = await client.post( "/api/mcp/servers", json={ "name": "TestMCP", "server_type": "stdio", "command": "python3 test.py", }, headers=admin_headers, ) assert r.status_code == 200, r.text body = r.json() assert "id" in body _state["mid"] = body["id"] @pytest.mark.anyio async def test_list_mcp_servers(client, admin_headers): """GET /api/mcp/servers — list must include created server.""" r = await client.get("/api/mcp/servers", headers=admin_headers) assert r.status_code == 200 servers = r.json() assert isinstance(servers, list) assert any(s["id"] == _state["mid"] for s in servers) @pytest.mark.anyio async def test_update_mcp_server(client, admin_headers): """PUT /api/mcp/servers/{mid} — update name.""" mid = _state["mid"] r = await client.put( f"/api/mcp/servers/{mid}", json={ "name": "UpdatedMCP", "server_type": "stdio", "command": "python3 test.py", }, headers=admin_headers, ) assert r.status_code == 200, r.text @pytest.mark.anyio async def test_toggle_mcp_server(client, admin_headers): """PUT /api/mcp/servers/{mid}/toggle — toggle active state.""" mid = _state["mid"] r = await client.put(f"/api/mcp/servers/{mid}/toggle", headers=admin_headers) assert r.status_code == 200, r.text body = r.json() assert "is_active" in body @pytest.mark.anyio async def test_delete_mcp_server(client, admin_headers): """DELETE /api/mcp/servers/{mid} — remove server.""" mid = _state["mid"] r = await client.delete(f"/api/mcp/servers/{mid}", headers=admin_headers) assert r.status_code == 200, r.text