1
0
Files
Skill/manager/internal/adapter/opencode_test.go

110 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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("期望无效平台返回错误")
}
}