#!/usr/bin/env python3 """ 重构后的账号管理系统测试脚本 运行方式: 1. 确保数据库已应用迁移: flask db upgrade 2. 运行测试: python test_refactored_admin.py """ 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 Admin, AuditLog def test_admin_model(): """测试Admin模型功能""" print("=" * 50) print("测试1: Admin模型基本功能") print("=" * 50) app = create_app() with app.app_context(): # 检查is_deleted字段 admin_columns = [c.name for c in Admin.__table__.columns] print(f"✓ Admin表字段: {', '.join(admin_columns)}") assert 'is_deleted' in admin_columns, "is_deleted字段不存在" print("✓ is_deleted字段已添加") assert 'delete_time' in admin_columns, "delete_time字段不存在" print("✓ delete_time字段已添加") # 测试软删除功能 print("\n测试软删除功能...") test_admin = Admin.query.filter_by(username='testuser').first() if test_admin: old_delete_time = test_admin.delete_time test_admin.soft_delete() db.session.commit() assert test_admin.is_deleted == 1, "软删除失败" assert test_admin.delete_time is not None, "delete_time未设置" print("✓ 软删除功能正常") # 恢复测试数据 test_admin.is_deleted = 0 test_admin.delete_time = None db.session.commit() print("✓ 测试数据已恢复") print("\n✅ Admin模型测试通过!\n") def test_audit_log(): """测试审计日志功能""" print("=" * 50) print("测试2: 审计日志功能") print("=" * 50) app = create_app() with app.app_context(): # 检查audit_log表 audit_columns = [c.name for c in AuditLog.__table__.columns] print(f"✓ AuditLog表字段: {', '.join(audit_columns)}") required_columns = ['log_id', 'admin_id', 'action', 'target_type', 'details', 'create_time'] for col in required_columns: assert col in audit_columns, f"{col}字段不存在" print(f"✓ {col}字段存在") # 测试记录日志 print("\n测试记录审计日志...") admin = Admin.query.filter_by(username='admin').first() if admin: log_count_before = AuditLog.query.count() AuditLog.log_action( admin_id=admin.admin_id, action='TEST', target_type='ADMIN', target_id=admin.admin_id, details={'test': 'data'} ) log_count_after = AuditLog.query.count() assert log_count_after > log_count_before, "审计日志记录失败" print("✓ 审计日志记录成功") print("\n✅ 审计日志测试通过!\n") def test_admin_api(): """测试Admin API""" print("=" * 50) print("测试3: Admin API测试") print("=" * 50) app = create_app() with app.app_context(): from app.api.admin import validate_admin_data, validate_username, validate_password, validate_email # 测试数据验证 print("测试数据验证函数...") # 验证用户名 assert validate_username('testuser')[0] == True, "有效用户名验证失败" print("✓ 有效用户名验证通过") assert validate_username('ab')[0] == False, "过短用户名应该被拒绝" print("✓ 短用户名验证正确拒绝") # 验证密码 assert validate_password('123456')[0] == True, "有效密码验证失败" print("✓ 有效密码验证通过") assert validate_password('123')[0] == False, "过短密码应该被拒绝" print("✓ 短密码验证正确拒绝") # 验证邮箱 assert validate_email('test@example.com')[0] == True, "有效邮箱验证失败" print("✓ 有效邮箱验证通过") assert validate_email('invalid-email')[0] == False, "无效邮箱应该被拒绝" print("✓ 无效邮箱验证正确拒绝") print("\n✅ Admin API测试通过!\n") def test_response_structure(): """测试响应结构""" print("=" * 50) print("测试4: 统一响应格式") print("=" * 50) from app.api.admin import create_response, ResponseCode # 测试成功响应 success_response = create_response(True, data={'id': 1}, message='测试成功', code=ResponseCode.SUCCESS) assert success_response[0].json['success'] == True, "成功响应格式错误" assert 'data' in success_response[0].json, "响应缺少data字段" assert 'message' in success_response[0].json, "响应缺少message字段" assert 'code' in success_response[0].json, "响应缺少code字段" print("✓ 成功响应格式正确") # 测试失败响应 error_response = create_response(False, message='测试失败', code=ResponseCode.VALIDATION_ERROR, status_code=400) assert error_response[0].json['success'] == False, "失败响应格式错误" print("✓ 失败响应格式正确") print("\n✅ 统一响应格式测试通过!\n") def main(): """运行所有测试""" print("\n" + "=" * 60) print("重构后的账号管理系统测试") print("=" * 60 + "\n") try: test_admin_model() test_audit_log() test_admin_api() test_response_structure() print("=" * 60) print("🎉 所有测试通过!") print("=" * 60 + "\n") return 0 except AssertionError as e: print(f"\n❌ 测试失败: {str(e)}\n") return 1 except Exception as e: print(f"\n❌ 测试出错: {str(e)}\n") import traceback traceback.print_exc() return 1 if __name__ == '__main__': sys.exit(main())