package installer import ( "os" "path/filepath" "testing" ) func TestTransaction_StageAndCommit(t *testing.T) { tmpDir, err := os.MkdirTemp("", "skillmgr-tx-test-*") if err != nil { t.Fatalf("创建临时目录失败: %v", err) } defer os.RemoveAll(tmpDir) // 创建源文件 srcDir := filepath.Join(tmpDir, "src") os.MkdirAll(srcDir, 0755) os.WriteFile(filepath.Join(srcDir, "test.md"), []byte("test content"), 0644) // 创建文件映射 targetDir := filepath.Join(tmpDir, "target") fileMap := map[string]string{ filepath.Join(srcDir, "test.md"): filepath.Join(targetDir, "test.md"), } tx, err := NewTransaction(targetDir, fileMap) if err != nil { t.Fatalf("NewTransaction 失败: %v", err) } // Stage if err := tx.Stage(); err != nil { t.Fatalf("Stage 失败: %v", err) } // 验证 staging 目录存在 if _, err := os.Stat(tx.stagingDir); os.IsNotExist(err) { t.Error("Staging 目录应该存在") } // Commit if err := tx.Commit(); err != nil { t.Fatalf("Commit 失败: %v", err) } // 验证目标文件存在 if _, err := os.Stat(filepath.Join(targetDir, "test.md")); os.IsNotExist(err) { t.Error("目标文件应该存在") } // 验证 staging 目录已清理 if _, err := os.Stat(tx.stagingDir); !os.IsNotExist(err) { t.Error("Staging 目录应该被清理") } } func TestTransaction_Rollback(t *testing.T) { tmpDir, err := os.MkdirTemp("", "skillmgr-tx-test-*") if err != nil { t.Fatalf("创建临时目录失败: %v", err) } defer os.RemoveAll(tmpDir) // 创建源文件 srcDir := filepath.Join(tmpDir, "src") os.MkdirAll(srcDir, 0755) os.WriteFile(filepath.Join(srcDir, "test.md"), []byte("test content"), 0644) // 创建文件映射 targetDir := filepath.Join(tmpDir, "target") fileMap := map[string]string{ filepath.Join(srcDir, "test.md"): filepath.Join(targetDir, "test.md"), } tx, err := NewTransaction(targetDir, fileMap) if err != nil { t.Fatalf("NewTransaction 失败: %v", err) } // Stage if err := tx.Stage(); err != nil { t.Fatalf("Stage 失败: %v", err) } stagingDir := tx.stagingDir // Rollback (no return value) tx.Rollback() // 验证 staging 目录已清理 if _, err := os.Stat(stagingDir); !os.IsNotExist(err) { t.Error("Staging 目录应该被清理") } // 验证目标目录不存在 if _, err := os.Stat(targetDir); !os.IsNotExist(err) { t.Error("目标目录不应该存在") } }