101 lines
2.4 KiB
Go
101 lines
2.4 KiB
Go
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("目标目录不应该存在")
|
|
}
|
|
}
|