| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- import pytest
- import random
- from unittest.mock import AsyncMock, patch
- from app.crud import create_user
- from app.schemas import UserCreate
- @pytest.fixture
- def auth_header(client, db):
- username = f"user_{random.randint(1, 1000000)}"
- create_user(db, UserCreate(username=username, password="password123", role="admin"))
- token = client.post("/api/v1/auth/login", data={"username": username, "password": "password123"}).json()["access_token"]
- return {"Authorization": f"Bearer {token}"}
- def test_coverage_auth(client):
- # Coverage for auth error paths
- client.post("/api/v1/auth/login", data={"username": "none", "password": "p"})
- client.post("/api/v1/auth/login", data={"username": "", "password": ""})
- def test_coverage_users(client, auth_header):
- client.get("/api/v1/users/me", headers=auth_header)
- # Unauthorized
- client.get("/api/v1/users/me")
- def test_coverage_personas(client, auth_header):
- # Create
- p = client.post("/api/v1/personas/", json={"name": "N", "bio": "B"}, headers=auth_header).json()
- p_id = p["id"]
- # Get
- client.get(f"/api/v1/personas/{p_id}", headers=auth_header)
- # Update
- client.put(f"/api/v1/personas/{p_id}", json={"name": "N2"}, headers=auth_header)
- # Delete
- client.delete(f"/api/v1/personas/{p_id}", headers=auth_header)
- # Not found
- client.get("/api/v1/personas/9999", headers=auth_header)
- def test_coverage_moderators(client, auth_header):
- m = client.post("/api/v1/moderators/", json={"name": "M"}, headers=auth_header).json()
- m_id = m["id"]
- client.get(f"/api/v1/moderators/{m_id}", headers=auth_header)
- client.put(f"/api/v1/moderators/{m_id}", json={"name": "M2"}, headers=auth_header)
- client.get("/api/v1/moderators/", headers=auth_header)
- client.delete(f"/api/v1/moderators/{m_id}", headers=auth_header)
- def test_coverage_users_detailed(client, auth_header):
- # Create user
- username = f"user_{random.randint(1, 1000000)}"
- client.post("/api/v1/users/", json={"username": username, "password": "p", "role": "u"})
- # Duplicate (hits line 14)
- client.post("/api/v1/users/", json={"username": username, "password": "p", "role": "u"})
- # Read user (hits 23-26)
- client.get(f"/api/v1/users/{username}")
- client.get("/api/v1/users/nonexistent")
- def test_coverage_forums_edge_cases(client, auth_header):
- # Read forum (hits 78-81)
- persona = client.post("/api/v1/personas/", json={"name": "Forum Persona", "bio": "B"}, headers=auth_header).json()
- f = client.post("/api/v1/forums/", json={"topic": "T", "participant_ids": [persona["id"]]}, headers=auth_header).json()
- client.get(f"/api/v1/forums/{f['id']}", headers=auth_header)
- # Start forum (hits 102-107)
- with patch("app.services.forum_service.scheduler.start_forum", new_callable=AsyncMock):
- client.post(f"/api/v1/forums/{f['id']}/start", headers=auth_header)
- # Messages/Logs fail path
- client.get(f"/api/v1/forums/{f['id']}/messages", headers=auth_header)
- client.get(f"/api/v1/forums/{f['id']}/logs", headers=auth_header)
- # Delete (hits 91-93)
- client.delete(f"/api/v1/forums/{f['id']}", headers=auth_header)
- def test_coverage_god_detailed(client, auth_header):
- events = iter([{"type": "error", "content": "mocked failure"}])
- with patch("app.api.v1.endpoints.god.settings.API_KEY", "test-key"), patch(
- "app.api.v1.endpoints.god.RealGodAgent"
- ) as agent_class:
- agent_class.return_value.run.return_value = events
- response = client.post("/api/v1/god/generate_real", json={"prompt": "Short", "n": 1}, headers=auth_header)
- assert response.status_code == 200
- assert "mocked failure" in response.text
- assert "所有智能体角色已生成并保存完毕" not in response.text
- def test_coverage_personas_detailed(client, auth_header):
- # Create public
- p = client.post("/api/v1/personas/", json={"name": "Public", "bio": "B", "is_public": True}, headers=auth_header).json()
- p_id = p["id"]
- # List (hits 35-79 filter logic)
- client.get("/api/v1/personas/", headers=auth_header)
- # Get/Update/Delete (hits 110, 114, 127, 131)
- client.get(f"/api/v1/personas/{p_id}", headers=auth_header)
- client.put(f"/api/v1/personas/{p_id}", json={"name": "U"}, headers=auth_header)
- client.delete(f"/api/v1/personas/{p_id}", headers=auth_header)
- def test_coverage_god(client, auth_header):
- persona = {
- "name": "Mock Person",
- "title": "Researcher",
- "bio": "Bio",
- "theories": ["Theory"],
- "stance": "Neutral",
- "system_prompt": "Act naturally.",
- }
- with patch("app.api.v1.endpoints.god.settings.API_KEY", "test-key"), patch(
- "app.api.v1.endpoints.god.RealGodAgent"
- ) as agent_class:
- agent_class.return_value.run.return_value = iter([{"type": "result", "content": [persona]}])
- with client.stream("POST", "/api/v1/god/generate_real", json={"prompt": "Test", "n": 1}, headers=auth_header) as response:
- body = response.read().decode("utf-8")
- assert response.status_code == 200
- assert "Mock Person" in body
- def test_god_generation_reports_missing_model_configuration(client, auth_header):
- with patch("app.api.v1.endpoints.god.settings.API_KEY", None), patch.dict(
- "os.environ", {"API_KEY": ""}
- ):
- response = client.post(
- "/api/v1/god/generate_real",
- json={"prompt": "创建哈利波特", "n": 1},
- headers=auth_header,
- )
- assert response.status_code == 503
- assert "模型服务尚未配置" in response.json()["detail"]
- def test_coverage_agents(client, auth_header):
- client.get("/api/v1/agents/", headers=auth_header)
|