import os
import httpx
import pytest
import conftest
BASE_URL = os.getenv("SYNC_TEST_BASE_URL", "http://127.0.0.1:8002/api/v1")
def _headers():
uid = os.getenv("SYNC_TEST_USER_ID", "")
return {"X-User-ID": uid, "Authorization": f"Bearer {uid}"}
def test_mcp_group_lifecycle():
with httpx.Client(timeout=10.0) as client:
# 1. Create Group via MCP
rpc_create = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_group",
"arguments": {
"name": "MCP Test Group",
"description": "Group created via MCP",
"policy": {"llm": ["gemini"]}
}
}
}
r = client.post(f"{BASE_URL}/mcp/", json=rpc_create, headers=_headers())
print("DEBUG CREATE GROUP RESPONSE:", r.json())
assert r.status_code == 200, r.text
res = r.json()["result"]["content"][0]["text"]
import json
g_data = json.loads(res)
assert "id" in g_data
assert g_data["name"] == "MCP Test Group"
gid = g_data["id"]
# 2. List Groups via MCP
rpc_list = {
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "list_groups",
"arguments": {}
}
}
r = client.post(f"{BASE_URL}/mcp/", json=rpc_list, headers=_headers())
assert r.status_code == 200
res_list = json.loads(r.json()["result"]["content"][0]["text"])
assert any(g["id"] == gid for g in res_list)
# 3. Update Group via MCP
rpc_update = {
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "update_group",
"arguments": {
"gid": gid,
"description": "Updated via MCP"
}
}
}
r = client.post(f"{BASE_URL}/mcp/", json=rpc_update, headers=_headers())
assert r.status_code == 200
res_up = json.loads(r.json()["result"]["content"][0]["text"])
assert res_up["description"] == "Updated via MCP"
# 4. Delete Group via MCP
rpc_del = {
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "delete_group",
"arguments": {
"gid": gid
}
}
}
r = client.post(f"{BASE_URL}/mcp/", json=rpc_del, headers=_headers())
assert r.status_code == 200
def test_mcp_session_lifecycle():
with httpx.Client(timeout=10.0) as client:
# 1. Create Session via MCP
rpc_create = {
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "create_session",
"arguments": {
"provider_name": "deepseek",
"feature_name": "mcp_test"
}
}
}
r = client.post(f"{BASE_URL}/mcp/", json=rpc_create, headers=_headers())
assert r.status_code == 200, r.text
import json
s_data = json.loads(r.json()["result"]["content"][0]["text"])
assert "id" in s_data
sid = s_data["id"]
# 2. Get Session via MCP
rpc_get = {
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "get_session",
"arguments": {
"session_id": sid
}
}
}
r = client.post(f"{BASE_URL}/mcp/", json=rpc_get, headers=_headers())
assert r.status_code == 200
s_get = json.loads(r.json()["result"]["content"][0]["text"])
assert s_get["id"] == sid
# 3. List Sessions via MCP
rpc_list = {
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "list_sessions",
"arguments": {
"feature_name": "mcp_test"
}
}
}
r = client.post(f"{BASE_URL}/mcp/", json=rpc_list, headers=_headers())
assert r.status_code == 200
s_list = json.loads(r.json()["result"]["content"][0]["text"])
assert len(s_list) > 0
assert any(s["id"] == sid for s in s_list)
# 4. Delete Session via MCP
rpc_del = {
"jsonrpc": "2.0",
"id": 8,
"method": "tools/call",
"params": {
"name": "delete_session",
"arguments": {
"session_id": sid
}
}
}
r = client.post(f"{BASE_URL}/mcp/", json=rpc_del, headers=_headers())
assert r.status_code == 200