Newer
Older
cortex-hub / ai-hub / integration_tests / test_mcp_groups_sessions.py
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