hxf/backend/tests/fastapi_test/test_main.py

94 lines
2.7 KiB
Python

import pytest
from fastapi.testclient import TestClient
from main import app, current_user_ctx, UserService
from contextvars import ContextVar
client = TestClient(app)
def test_read_users_me_with_valid_token():
"""测试有效令牌获取用户信息"""
response = client.get(
"/users/me",
headers={"Authorization": "Bearer valid_token_123"}
)
assert response.status_code == 200
assert response.json()["id"] == 123
assert response.json()["username"] == "john_doe"
def test_read_users_me_with_invalid_token():
"""测试无效令牌"""
response = client.get(
"/users/me",
headers={"Authorization": "Bearer invalid_token"}
)
assert response.status_code == 401
assert response.json()["detail"] == "Invalid credentials"
def test_create_task_with_user_context():
"""测试创建任务时用户上下文是否正确"""
response = client.post(
"/tasks",
json={"title": "Test task", "description": "Test description"},
headers={"Authorization": "Bearer valid_token_123"}
)
assert response.status_code == 200
# 检查响应中是否包含正确的用户ID
assert response.json()["task"]["created_by"] == 123
def test_get_tasks_with_different_users():
"""测试不同用户获取任务"""
# 用户1
response1 = client.get(
"/tasks",
headers={"Authorization": "Bearer valid_token_123"}
)
assert response1.status_code == 200
# 这里应该只返回用户1的任务
# 用户2
response2 = client.get(
"/tasks",
headers={"Authorization": "Bearer valid_token_456"}
)
assert response2.status_code == 200
# 这里应该只返回用户2的任务
def test_context_outside_request():
"""测试在请求上下文外获取用户(应该失败)"""
try:
UserService.get_current_user()
assert False, "Should have raised an exception"
except RuntimeError as e:
assert "No current user available" in str(e)
# 手动设置上下文进行测试
def test_user_service_with_manual_context():
"""测试手动设置上下文后获取用户"""
test_user = {"id": 999, "username": "test_user"}
token = current_user_ctx.set(test_user)
try:
user_id = UserService.get_current_user_id()
assert user_id == 999
user = UserService.get_current_user()
assert user["username"] == "test_user"
finally:
current_user_ctx.reset(token)
if __name__ == "__main__":
# pytest.main([__file__, "-v"])
test_read_users_me_with_valid_token()
test_read_users_me_with_invalid_token()
test_create_task_with_user_context()
test_get_tasks_with_different_users()
test_context_outside_request()
test_user_service_with_manual_context()