filesend/backend/test_team_leader_simple.py

266 lines
8.8 KiB
Python
Raw Normal View History

2025-10-10 17:25:29 +08:00
#!/usr/bin/env python3
"""
简单的团队长功能测试脚本
用于验证基本的团队长功能逻辑
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from app import create_app, db
from app.models import User, TeamMember, SystemSettings
from werkzeug.security import generate_password_hash
from datetime import datetime
def test_team_leader_basic_functionality():
"""测试团队长基本功能"""
print("开始测试团队长基本功能...")
# 设置测试环境变量
os.environ['DATABASE_URL'] = 'sqlite:///:memory:'
os.environ['SECRET_KEY'] = 'test-secret-key'
os.environ['JWT_SECRET_KEY'] = 'test-secret-key'
# 创建测试应用
app = create_app()
with app.app_context():
# 创建数据库表
db.create_all()
# 创建系统设置
SystemSettings.set_value('site_title', '测试系统', '网站标题', 'string')
SystemSettings.set_value('max_daily_downloads', '10', '每日最大下载次数', 'int')
SystemSettings.set_value('file_size_limit', str(100 * 1024 * 1024), '文件大小限制(字节)', 'int')
SystemSettings.set_value('allowed_file_types', 'txt,pdf,doc,docx,xls,xlsx', '允许的文件类型', 'string')
# 创建测试用户(先删除已存在的用户)
User.query.filter_by(username='admin').delete()
User.query.filter_by(username='leader').delete()
User.query.filter_by(username='member').delete()
db.session.commit()
admin = User(
username='admin',
email='admin@test.com',
password_hash=generate_password_hash('admin123'),
is_admin=True,
is_team_leader=False,
is_active=True,
created_at=datetime.utcnow()
)
db.session.add(admin)
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(leader)
member = User(
username='member',
email='member@test.com',
password_hash=generate_password_hash('member123'),
is_admin=False,
is_team_leader=False,
is_active=True,
created_at=datetime.utcnow()
)
db.session.add(member)
db.session.commit()
print("✓ 测试用户创建成功")
# 测试1: 验证用户角色
assert admin.is_admin is True
assert admin.is_team_leader is False
assert leader.is_admin is False
assert leader.is_team_leader is True
assert member.is_admin is False
assert member.is_team_leader is False
print("✓ 用户角色验证通过")
# 测试2: 创建团队成员关系
team_member = TeamMember(
leader_id=leader.id,
member_id=member.id,
created_at=datetime.utcnow()
)
db.session.add(team_member)
db.session.commit()
print("✓ 团队成员关系创建成功")
# 测试3: 验证团队成员关系
assert team_member.leader_id == leader.id
assert team_member.member_id == member.id
print("✓ 团队成员关系验证通过")
# 测试4: 查询团队成员
leader_members = TeamMember.query.filter_by(leader_id=leader.id).all()
assert len(leader_members) == 1
assert leader_members[0].member_id == member.id
print("✓ 团队成员查询功能正常")
# 测试5: 查询用户的团队长
member_leader = TeamMember.query.filter_by(member_id=member.id).first()
assert member_leader is not None
assert member_leader.leader_id == leader.id
print("✓ 用户团队长查询功能正常")
# 测试6: 验证不能添加自己为成员
try:
self_member = TeamMember(
leader_id=leader.id,
member_id=leader.id,
created_at=datetime.utcnow()
)
db.session.add(self_member)
db.session.commit()
assert False, "应该禁止添加自己为成员"
except Exception as e:
print("✓ 正确阻止了添加自己为成员的行为")
# 测试7: 验证不能重复添加成员
try:
duplicate_member = TeamMember(
leader_id=leader.id,
member_id=member.id,
created_at=datetime.utcnow()
)
db.session.add(duplicate_member)
db.session.commit()
assert False, "应该禁止重复添加成员"
except Exception as e:
print("✓ 正确阻止了重复添加成员的行为")
print("\n✅ 所有团队长基本功能测试通过!")
return True
def test_team_leader_permissions():
"""测试团队长权限验证"""
print("\n开始测试团队长权限验证...")
# 设置测试环境变量
os.environ['DATABASE_URL'] = 'sqlite:///:memory:'
os.environ['SECRET_KEY'] = 'test-secret-key'
os.environ['JWT_SECRET_KEY'] = 'test-secret-key'
app = create_app()
with app.app_context():
db.create_all()
# 创建系统设置
SystemSettings.set_value('site_title', '测试系统', '网站标题', 'string')
SystemSettings.set_value('max_daily_downloads', '10', '每日最大下载次数', 'int')
SystemSettings.set_value('file_size_limit', str(100 * 1024 * 1024), '文件大小限制(字节)', 'int')
SystemSettings.set_value('allowed_file_types', 'txt,pdf,doc,docx,xls,xlsx', '允许的文件类型', 'string')
# 创建用户(先删除已存在的用户)
User.query.filter_by(username='admin').delete()
User.query.filter_by(username='leader').delete()
User.query.filter_by(username='user').delete()
db.session.commit()
admin = User(
username='admin',
email='admin@test.com',
password_hash=generate_password_hash('admin123'),
is_admin=True,
is_team_leader=False,
is_active=True,
created_at=datetime.utcnow()
)
db.session.add(admin)
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(leader)
user = User(
username='user',
email='user@test.com',
password_hash=generate_password_hash('user123'),
is_admin=False,
is_team_leader=False,
is_active=True,
created_at=datetime.utcnow()
)
db.session.add(user)
db.session.commit()
# 测试权限验证装饰器逻辑
def team_leader_required(user):
"""模拟team_leader_required装饰器逻辑"""
if not user.is_team_leader:
return False, "需要团队长权限"
return True, None
# 测试管理员权限
success, error = team_leader_required(admin)
assert success is False
assert error == "需要团队长权限"
print("✓ 管理员没有团队长权限")
# 测试普通用户权限
success, error = team_leader_required(user)
assert success is False
assert error == "需要团队长权限"
print("✓ 普通用户没有团队长权限")
# 测试团队长权限
success, error = team_leader_required(leader)
assert success is True
assert error is None
print("✓ 团队长具有正确的权限")
print("\n✅ 团队长权限验证测试通过!")
return True
def main():
"""运行所有测试"""
print("=" * 50)
print("团队长功能测试开始")
print("=" * 50)
try:
# 运行基本功能测试
test_team_leader_basic_functionality()
# 运行权限验证测试
test_team_leader_permissions()
print("\n" + "=" * 50)
print("🎉 所有测试通过!团队长功能正常工作")
print("=" * 50)
except Exception as e:
print(f"\n❌ 测试失败: {str(e)}")
import traceback
traceback.print_exc()
return False
return True
if __name__ == '__main__':
success = main()
sys.exit(0 if success else 1)