#!/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)