"""T2.8 多主体画像 API 测试。 测试投资机构、基金、投资经理画像的 CRUD 和关联查询。 """ import pytest from fastapi.testclient import TestClient @pytest.fixture def auth_headers(client: TestClient): """注册并登录,返回认证头。""" client.post( "/api/v1/auth/register", json={ "email": "profile_test@example.com", "password": "password123", "name": "画像测试用户", "tenant_name": "画像测试机构", "role": "investor", }, ) resp = client.post( "/api/v1/auth/login", json={"email": "profile_test@example.com", "password": "password123"}, ) token = resp.json()["data"]["access_token"] return {"Authorization": f"Bearer {token}"} class TestFirmProfile: """投资机构画像测试。""" def test_list_firms_empty(self, client: TestClient, auth_headers: dict): """空列表查询。""" resp = client.get("/api/v1/profiles/firms", headers=auth_headers) assert resp.status_code == 200 assert resp.json()["code"] == 0 assert resp.json()["data"] == [] def test_create_firm(self, client: TestClient, auth_headers: dict): """创建投资机构画像。""" resp = client.post( "/api/v1/profiles/firms", json={"name": "测试投资机构", "focus_areas": ["AI", "SaaS"], "stage_preference": "early"}, headers=auth_headers, ) assert resp.status_code == 201 assert resp.json()["code"] == 0 def test_list_firms_after_create(self, client: TestClient, auth_headers: dict): """创建后查询列表。""" client.post( "/api/v1/profiles/firms", json={"name": "查询测试机构"}, headers=auth_headers, ) resp = client.get("/api/v1/profiles/firms", headers=auth_headers) assert resp.status_code == 200 data = resp.json()["data"] assert len(data) >= 1 def test_no_auth(self, client: TestClient): """无认证返回 401。""" resp = client.get("/api/v1/profiles/firms") assert resp.status_code == 401 class TestFundAndManager: """基金和投资经理测试。""" def test_list_funds(self, client: TestClient, auth_headers: dict): """查询基金列表。""" resp = client.get("/api/v1/profiles/funds", headers=auth_headers) assert resp.status_code == 200 assert resp.json()["code"] == 0 def test_list_managers(self, client: TestClient, auth_headers: dict): """查询投资经理列表。""" resp = client.get("/api/v1/profiles/managers", headers=auth_headers) assert resp.status_code == 200 assert resp.json()["code"] == 0