filesend/backend/conftest.py

137 lines
3.6 KiB
Python
Raw Permalink Normal View History

2025-10-10 17:25:29 +08:00
import pytest
import os
import tempfile
from app import create_app, db
from app.models import User, SystemSettings
from werkzeug.security import generate_password_hash
from datetime import datetime
@pytest.fixture
def app():
"""创建测试应用"""
# 创建临时数据库文件
db_fd, db_path = tempfile.mkstemp()
# 配置测试环境
app = create_app({
'TESTING': True,
'SQLALCHEMY_DATABASE_URI': f'sqlite:///{db_path}',
'JWT_SECRET_KEY': 'test-secret-key',
'WTF_CSRF_ENABLED': False
})
with app.app_context():
db.create_all()
# 创建测试系统设置
settings = SystemSettings(
site_title='测试系统',
max_daily_downloads=10,
file_size_limit=100 * 1024 * 1024, # 100MB
allowed_file_types='txt,pdf,doc,docx,xls,xlsx'
)
db.session.add(settings)
db.session.commit()
yield app
db.session.remove()
db.drop_all()
os.close(db_fd)
os.unlink(db_path)
@pytest.fixture
def client(app):
"""创建测试客户端"""
return app.test_client()
@pytest.fixture
def auth_headers(app):
"""创建认证头"""
with app.app_context():
# 创建管理员用户
admin_user = User(
username='admin',
email='admin@test.com',
password_hash=generate_password_hash('admin123'),
is_admin=True,
is_active=True,
created_at=datetime.utcnow()
)
db.session.add(admin_user)
# 创建普通用户
normal_user = User(
username='user',
email='user@test.com',
password_hash=generate_password_hash('user123'),
is_admin=False,
is_active=True,
created_at=datetime.utcnow()
)
db.session.add(normal_user)
# 创建团队长用户
team_leader = User(
username='leader',
email='leader@test.com',
password_hash=generate_password_hash('leader123'),
is_admin=False,
is_team_leader=True,
is_active=True,
created_at=datetime.utcnow()
)
db.session.add(team_leader)
db.session.commit()
# 获取JWT token
client = app.test_client()
# 管理员token
admin_response = client.post('/api/auth/login', json={
'username': 'admin',
'password': 'admin123'
})
admin_token = admin_response.json['access_token']
# 普通用户token
user_response = client.post('/api/auth/login', json={
'username': 'user',
'password': 'user123'
})
user_token = user_response.json['access_token']
# 团队长token
leader_response = client.post('/api/auth/login', json={
'username': 'leader',
'password': 'leader123'
})
leader_token = leader_response.json['access_token']
return {
'admin': {'Authorization': f'Bearer {admin_token}'},
'user': {'Authorization': f'Bearer {user_token}'},
'leader': {'Authorization': f'Bearer {leader_token}'}
}
@pytest.fixture
def admin_auth_headers(auth_headers):
"""管理员认证头"""
return auth_headers['admin']
@pytest.fixture
def user_auth_headers(auth_headers):
"""普通用户认证头"""
return auth_headers['user']
@pytest.fixture
def leader_auth_headers(auth_headers):
"""团队长认证头"""
return auth_headers['leader']