110 lines
2.9 KiB
Go
110 lines
2.9 KiB
Go
package adapter
|
||
|
||
import (
|
||
"os"
|
||
"path/filepath"
|
||
"strings"
|
||
"testing"
|
||
|
||
"skillmgr/internal/types"
|
||
)
|
||
|
||
func TestOpenCodeAdapter_GetSkillInstallPath_Global(t *testing.T) {
|
||
tmpDir, cleanup := setupAdapterTestEnv(t)
|
||
defer cleanup()
|
||
|
||
adapter := &OpenCodeAdapter{}
|
||
path, err := adapter.GetSkillInstallPath(types.ScopeGlobal, "test-skill")
|
||
if err != nil {
|
||
t.Fatalf("GetSkillInstallPath 失败: %v", err)
|
||
}
|
||
|
||
// OpenCode 全局 skill 使用 ~/.config/opencode/skills/
|
||
expected := filepath.Join(tmpDir, ".config", "opencode", "skills", "test-skill")
|
||
if path != expected {
|
||
t.Errorf("期望 %s,得到 %s", expected, path)
|
||
}
|
||
}
|
||
|
||
func TestOpenCodeAdapter_GetCommandInstallPath_Global(t *testing.T) {
|
||
tmpDir, cleanup := setupAdapterTestEnv(t)
|
||
defer cleanup()
|
||
|
||
adapter := &OpenCodeAdapter{}
|
||
path, err := adapter.GetCommandInstallPath(types.ScopeGlobal, "test-cmd")
|
||
if err != nil {
|
||
t.Fatalf("GetCommandInstallPath 失败: %v", err)
|
||
}
|
||
|
||
// OpenCode 全局 command 使用 ~/.config/opencode/commands/
|
||
expected := filepath.Join(tmpDir, ".config", "opencode", "commands")
|
||
if path != expected {
|
||
t.Errorf("期望 %s,得到 %s", expected, path)
|
||
}
|
||
}
|
||
|
||
func TestOpenCodeAdapter_AdaptCommand_Flattening(t *testing.T) {
|
||
tmpDir, cleanup := setupAdapterTestEnv(t)
|
||
defer cleanup()
|
||
|
||
// 创建源目录
|
||
srcDir := filepath.Join(tmpDir, "src-cmd")
|
||
os.MkdirAll(srcDir, 0755)
|
||
os.WriteFile(filepath.Join(srcDir, "init.md"), []byte("test"), 0644)
|
||
os.WriteFile(filepath.Join(srcDir, "run.md"), []byte("test"), 0644)
|
||
|
||
destDir := filepath.Join(tmpDir, "dest-cmd")
|
||
|
||
adapter := &OpenCodeAdapter{}
|
||
mapping, err := adapter.AdaptCommand(srcDir, destDir, "test-cmd")
|
||
if err != nil {
|
||
t.Fatalf("AdaptCommand 失败: %v", err)
|
||
}
|
||
|
||
if len(mapping) != 2 {
|
||
t.Errorf("期望 2 个文件映射,得到 %d 个", len(mapping))
|
||
}
|
||
|
||
// 验证文件名被扁平化
|
||
for src, dest := range mapping {
|
||
srcBase := filepath.Base(src)
|
||
destBase := filepath.Base(dest)
|
||
|
||
// init.md -> test-cmd-init.md
|
||
nameWithoutExt := strings.TrimSuffix(srcBase, ".md")
|
||
expectedBase := "test-cmd-" + nameWithoutExt + ".md"
|
||
if destBase != expectedBase {
|
||
t.Errorf("OpenCode 适配器应扁平化文件名:期望 %s,得到 %s", expectedBase, destBase)
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestGetAdapter_Claude(t *testing.T) {
|
||
adapter, err := GetAdapter(types.PlatformClaude)
|
||
if err != nil {
|
||
t.Fatalf("GetAdapter(claude) 失败: %v", err)
|
||
}
|
||
|
||
if _, ok := adapter.(*ClaudeAdapter); !ok {
|
||
t.Error("期望 ClaudeAdapter 类型")
|
||
}
|
||
}
|
||
|
||
func TestGetAdapter_OpenCode(t *testing.T) {
|
||
adapter, err := GetAdapter(types.PlatformOpenCode)
|
||
if err != nil {
|
||
t.Fatalf("GetAdapter(opencode) 失败: %v", err)
|
||
}
|
||
|
||
if _, ok := adapter.(*OpenCodeAdapter); !ok {
|
||
t.Error("期望 OpenCodeAdapter 类型")
|
||
}
|
||
}
|
||
|
||
func TestGetAdapter_Invalid(t *testing.T) {
|
||
_, err := GetAdapter(types.Platform("invalid"))
|
||
if err == nil {
|
||
t.Error("期望无效平台返回错误")
|
||
}
|
||
}
|