完成一个简易的全局skill、command管理器
This commit is contained in:
100
manager/internal/installer/transaction_test.go
Normal file
100
manager/internal/installer/transaction_test.go
Normal file
@@ -0,0 +1,100 @@
|
||||
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("目标目录不应该存在")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user