Files
plane-gptproto-integration/ai-agent/tests/test_data_members.py
T
carlandCursor 0136c15274 Initial commit: Plane 自部署与 gptproto AI 集成
包含本地/远程部署脚本、AI Agent 服务、Dashboard 与 QA 验证。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 11:37:41 +08:00

62 lines
2.0 KiB
Python

import httpx
import pytest
import respx
MEMBERS_RESPONSE = [
{"id": "mem-1", "display_name": "张三", "avatar_url": "https://example.com/a.png", "role": 15},
{"id": "mem-2", "display_name": "李四", "avatar_url": "", "role": 10},
]
@pytest.mark.asyncio
@respx.mock
async def test_members_returns_list(client):
respx.get("http://api:8000/api/v1/workspaces/ws-demo/members/").mock(
return_value=httpx.Response(200, json={"results": MEMBERS_RESPONSE})
)
resp = await client.get("/data/members", params={"workspace_slug": "ws-demo"})
assert resp.status_code == 200
body = resp.json()
assert isinstance(body, list)
assert len(body) == 2
@pytest.mark.asyncio
@respx.mock
async def test_members_fields(client):
respx.get("http://api:8000/api/v1/workspaces/ws-demo/members/").mock(
return_value=httpx.Response(200, json={"results": MEMBERS_RESPONSE})
)
resp = await client.get("/data/members", params={"workspace_slug": "ws-demo"})
member = resp.json()[0]
assert "id" in member
assert "display_name" in member
@pytest.mark.asyncio
@respx.mock
async def test_members_sends_api_key(client):
route = respx.get("http://api:8000/api/v1/workspaces/ws-demo/members/").mock(
return_value=httpx.Response(200, json={"results": MEMBERS_RESPONSE})
)
await client.get("/data/members", params={"workspace_slug": "ws-demo"})
assert route.called
assert route.calls[0].request.headers.get("x-api-key") == "test-plane-token"
@pytest.mark.asyncio
@respx.mock
async def test_members_plane_error_returns_502(client):
respx.get("http://api:8000/api/v1/workspaces/ws-demo/members/").mock(
return_value=httpx.Response(401, json={"detail": "unauthorized"})
)
resp = await client.get("/data/members", params={"workspace_slug": "ws-demo"})
assert resp.status_code == 502
@pytest.mark.asyncio
async def test_members_missing_slug_returns_422(client):
resp = await client.get("/data/members")
assert resp.status_code == 422