包含本地/远程部署脚本、AI Agent 服务、Dashboard 与 QA 验证。 Co-authored-by: Cursor <cursoragent@cursor.com>
62 lines
2.0 KiB
Python
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
|