MetaCore-startup/tests/test_auto_restore.py
2025-10-11 09:24:06 +08:00

128 lines
4.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试自动恢复功能的简单脚本
"""
import sys
import os
import tempfile
import shutil
import time
from datetime import datetime
# 添加MetaCore目录到Python路径
current_dir = os.path.dirname(os.path.abspath(__file__))
metacore_dir = os.path.join(current_dir, '..', 'MetaCore')
sys.path.insert(0, metacore_dir)
try:
from data.project_manager import Project, ProjectManager
print("✅ 成功导入项目管理器")
# 创建临时目录
temp_dir = tempfile.mkdtemp(prefix="auto_restore_test_")
print(f"📁 创建临时目录: {temp_dir}")
# 创建项目管理器
pm = ProjectManager()
# 创建测试项目目录
test_project_dir = os.path.join(temp_dir, "自动恢复测试项目")
os.makedirs(test_project_dir, exist_ok=True)
# 创建测试文件
with open(os.path.join(test_project_dir, "test.txt"), 'w', encoding='utf-8') as f:
f.write("这是一个测试文件")
print(f"📂 创建测试项目目录: {test_project_dir}")
# 创建测试项目
test_project = Project(
id=999,
title="自动恢复测试项目",
date=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
type="test",
image="🔄",
path=temp_dir,
project_dir=test_project_dir,
description="用于测试自动恢复功能的项目",
status="normal"
)
pm.projects.append(test_project)
print("✅ 创建测试项目")
# 模拟项目目录被删除
print("\n🗑️ 模拟删除项目目录...")
shutil.rmtree(test_project_dir)
print("✅ 项目目录已删除")
# 模拟用户选择保留项目(设置为待删除状态)
test_project.status = "pending_delete"
print("✅ 项目状态设置为 pending_delete")
# 测试检测逻辑
print("\n🔍 测试检测逻辑...")
pm.check_all_projects_existence()
print("✅ 检测逻辑运行完成(应该没有检测到恢复)")
# 恢复项目目录
print("\n📂 恢复项目目录...")
os.makedirs(test_project_dir, exist_ok=True)
with open(os.path.join(test_project_dir, "test.txt"), 'w', encoding='utf-8') as f:
f.write("这是一个恢复的测试文件")
print("✅ 项目目录已恢复")
# 测试自动恢复检测
print("\n🔄 测试自动恢复检测...")
# 创建一个简单的信号接收器来测试
restored_projects = []
def mock_handle_restored(projects):
restored_projects.extend(projects)
print(f"🎉 检测到 {len(projects)} 个项目需要恢复")
for project in projects:
pm.auto_restore_project(project)
print(f"✅ 项目已自动恢复: {project.title}")
# 手动调用检测方法
deleted_projects = []
restored_projects_detected = []
for project in pm.projects:
if project.project_dir:
if project.status == 'pending_delete' and os.path.exists(project.project_dir):
restored_projects_detected.append(project)
if restored_projects_detected:
print(f"🔍 检测到 {len(restored_projects_detected)} 个项目目录已恢复")
mock_handle_restored(restored_projects_detected)
else:
print("❌ 未检测到需要恢复的项目")
# 验证恢复结果
print(f"\n📊 验证结果:")
print(f"项目状态: {test_project.status}")
print(f"目录存在: {os.path.exists(test_project.project_dir)}")
if test_project.status == "normal" and os.path.exists(test_project.project_dir):
print("🎉 自动恢复功能测试成功!")
else:
print("❌ 自动恢复功能测试失败")
# 清理临时目录
print(f"\n🧹 清理临时目录: {temp_dir}")
shutil.rmtree(temp_dir)
print("✅ 清理完成")
except ImportError as e:
print(f"❌ 导入错误:{e}")
sys.exit(1)
except Exception as e:
print(f"❌ 测试失败:{e}")
import traceback
traceback.print_exc()
sys.exit(1)