128 lines
4.0 KiB
Python
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)
|