""" 用户认证API测试 """ import pytest from fastapi import status @pytest.mark.unit @pytest.mark.auth class TestAuth: """认证相关测试""" def test_register_user(self, client, test_user_data): """测试用户注册""" response = client.post("/api/v1/auth/register", json=test_user_data) assert response.status_code == status.HTTP_201_CREATED data = response.json() assert "id" in data assert data["username"] == test_user_data["username"] assert data["email"] == test_user_data["email"] assert "password_hash" not in data # 密码哈希不应该返回 def test_register_duplicate_username(self, client, test_user_data): """测试重复用户名注册""" # 第一次注册 response1 = client.post("/api/v1/auth/register", json=test_user_data) assert response1.status_code == status.HTTP_201_CREATED # 第二次注册相同用户名 response2 = client.post("/api/v1/auth/register", json=test_user_data) assert response2.status_code == status.HTTP_400_BAD_REQUEST def test_register_duplicate_email(self, client, test_user_data): """测试重复邮箱注册""" # 第一次注册 response1 = client.post("/api/v1/auth/register", json=test_user_data) assert response1.status_code == status.HTTP_201_CREATED # 使用相同邮箱但不同用户名 duplicate_data = test_user_data.copy() duplicate_data["username"] = "another_user" response2 = client.post("/api/v1/auth/register", json=duplicate_data) assert response2.status_code == status.HTTP_400_BAD_REQUEST def test_login_success(self, client, test_user_data): """测试登录成功""" # 先注册 client.post("/api/v1/auth/register", json=test_user_data) # 登录 response = client.post( "/api/v1/auth/login", data={ "username": test_user_data["username"], "password": test_user_data["password"] } ) assert response.status_code == status.HTTP_200_OK data = response.json() assert "access_token" in data assert data["token_type"] == "bearer" def test_login_wrong_password(self, client, test_user_data): """测试错误密码登录""" # 先注册 client.post("/api/v1/auth/register", json=test_user_data) # 使用错误密码登录 response = client.post( "/api/v1/auth/login", data={ "username": test_user_data["username"], "password": "wrongpassword" } ) assert response.status_code == status.HTTP_401_UNAUTHORIZED def test_login_nonexistent_user(self, client): """测试不存在的用户登录""" response = client.post( "/api/v1/auth/login", data={ "username": "nonexistent", "password": "password123" } ) assert response.status_code == status.HTTP_401_UNAUTHORIZED def test_get_current_user(self, authenticated_client, test_user_data): """测试获取当前用户信息""" response = authenticated_client.get("/api/v1/auth/me") assert response.status_code == status.HTTP_200_OK data = response.json() assert data["username"] == test_user_data["username"] assert data["email"] == test_user_data["email"] def test_get_current_user_unauthorized(self, client): """测试未授权访问当前用户信息""" response = client.get("/api/v1/auth/me") assert response.status_code == status.HTTP_401_UNAUTHORIZED