| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- import pytest
- import random
- from fastapi.testclient import TestClient
- from app.main import app
- def register_and_login(client):
- # Register
- username = "newuser_" + str(random.randint(1000, 9999))
- client.post(
- "/api/v1/auth/register",
- json={"username": username, "password": "password", "role": "user"}
- )
-
- # Login
- response = client.post(
- "/api/v1/auth/login",
- data={"username": username, "password": "password"}
- )
- data = response.json()
- return data["access_token"]
- def test_auth_register_login(client):
- token = register_and_login(client)
- assert token is not None
- def test_register_rejects_weak_password_and_invalid_email(client):
- weak = client.post(
- "/api/v1/auth/register",
- json={"username": "weak-user", "email": "weak@example.com", "password": "1"},
- )
- assert weak.status_code == 400
- assert weak.json()["detail"] == "密码至少需要 8 个字符"
- invalid_email = client.post(
- "/api/v1/auth/register",
- json={"username": "bad-email", "email": "not-an-email", "password": "password123"},
- )
- assert invalid_email.status_code == 400
- assert "请输入有效的邮箱地址" in str(invalid_email.json())
- def test_register_rejects_duplicate_email(client):
- payload = {
- "username": "email-owner",
- "email": "owner@example.com",
- "password": "password123",
- }
- assert client.post("/api/v1/auth/register", json=payload).status_code == 200
- duplicate = client.post(
- "/api/v1/auth/register",
- json={**payload, "username": "email-copy"},
- )
- assert duplicate.status_code == 400
- assert duplicate.json()["detail"] == "该邮箱已被注册"
- def test_personas_crud(client):
- token = register_and_login(client)
- headers = {"Authorization": f"Bearer {token}"}
-
- # List personas
- response = client.get("/api/v1/personas/", headers=headers)
- assert response.status_code == 200
- assert isinstance(response.json(), list)
- def test_forums_list(client):
- token = register_and_login(client)
- headers = {"Authorization": f"Bearer {token}"}
- response = client.get("/api/v1/forums/", headers=headers)
- assert response.status_code == 200
- assert isinstance(response.json(), list)
- def test_agents_list(client):
- # This might be 404 if not implemented or different path
- response = client.get("/api/v1/agents/")
- # If it's 404, we accept it for now or check the real path
- assert response.status_code in [200, 404]
- def test_moderators_list(client):
- token = register_and_login(client)
- headers = {"Authorization": f"Bearer {token}"}
- response = client.get("/api/v1/moderators/", headers=headers)
- assert response.status_code == 200
- assert isinstance(response.json(), list)
- def test_create_forum_invalid_moderator_returns_404(client):
- token = register_and_login(client)
- headers = {"Authorization": f"Bearer {token}"}
- persona_res = client.post(
- "/api/v1/personas/",
- headers=headers,
- json={
- "name": "P_invalid_mod",
- "title": "T",
- "bio": "B",
- "theories": ["X"],
- "stance": "S",
- "system_prompt": "SP",
- "is_public": False
- }
- )
- assert persona_res.status_code == 200
- persona_id = persona_res.json()["id"]
- forum_res = client.post(
- "/api/v1/forums/",
- headers=headers,
- json={
- "topic": "invalid moderator",
- "participant_ids": [persona_id],
- "duration_minutes": 10,
- "moderator_id": 999999
- }
- )
- assert forum_res.status_code == 404
- def test_create_forum_with_duplicate_participants_succeeds(client):
- token = register_and_login(client)
- headers = {"Authorization": f"Bearer {token}"}
- persona_res = client.post(
- "/api/v1/personas/",
- headers=headers,
- json={
- "name": "P_duplicate_pid",
- "title": "T",
- "bio": "B",
- "theories": ["X"],
- "stance": "S",
- "system_prompt": "SP",
- "is_public": False
- }
- )
- assert persona_res.status_code == 200
- persona_id = persona_res.json()["id"]
- forum_res = client.post(
- "/api/v1/forums/",
- headers=headers,
- json={
- "topic": "duplicate participants",
- "participant_ids": [persona_id, persona_id, persona_id],
- "duration_minutes": 10
- }
- )
- assert forum_res.status_code == 200
- body = forum_res.json()
- assert isinstance(body.get("participants"), list)
- assert len(body["participants"]) == 1
- def test_god_generate_unauthorized(client):
- response = client.post(
- "/api/v1/god/generate_real",
- json={"prompt": "test"}
- )
- assert response.status_code == 401
|