137 lines
3.6 KiB
Python
137 lines
3.6 KiB
Python
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'] |