Files
picoclaw/pkg/migrate/sources/openclaw/openclaw_handler_test.go
T
lxowalle 8207c1c7e6 Feat/update migrate (#910)
* * update migrate

* * rename handlers to sources

* * delete dead code

* * fix go test error
2026-02-28 19:59:17 +08:00

248 lines
6.1 KiB
Go

package openclaw
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestNewOpenclawHandler(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "openclaw.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
handler, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.NoError(t, err)
require.NotNil(t, handler)
}
func TestNewOpenclawHandlerNoConfig(t *testing.T) {
tmpDir := t.TempDir()
_, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.Error(t, err)
}
func TestOpenclawHandlerGetSourceName(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "openclaw.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
handler, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.NoError(t, err)
assert.Equal(t, "openclaw", handler.GetSourceName())
}
func TestOpenclawHandlerGetSourceHome(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "openclaw.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
handler, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.NoError(t, err)
home, err := handler.GetSourceHome()
require.NoError(t, err)
assert.Equal(t, tmpDir, home)
}
func TestOpenclawHandlerGetSourceWorkspace(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "openclaw.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
handler, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.NoError(t, err)
workspace, err := handler.GetSourceWorkspace()
require.NoError(t, err)
assert.Equal(t, filepath.Join(tmpDir, "workspace"), workspace)
}
func TestOpenclawHandlerGetSourceConfigFile(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "openclaw.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
handler, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.NoError(t, err)
configFile, err := handler.GetSourceConfigFile()
require.NoError(t, err)
assert.Equal(t, configPath, configFile)
}
func TestOpenclawHandlerGetSourceConfigFileWithConfigJson(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "config.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
handler, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.NoError(t, err)
configFile, err := handler.GetSourceConfigFile()
require.NoError(t, err)
assert.Equal(t, configPath, configFile)
}
func TestOpenclawHandlerGetMigrateableFiles(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "openclaw.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
handler, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.NoError(t, err)
files := handler.GetMigrateableFiles()
assert.NotEmpty(t, files)
assert.Contains(t, files, "AGENTS.md")
assert.Contains(t, files, "SOUL.md")
assert.Contains(t, files, "USER.md")
}
func TestOpenclawHandlerGetMigrateableDirs(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "openclaw.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
handler, err := NewOpenclawHandler(Options{
SourceHome: tmpDir,
})
require.NoError(t, err)
dirs := handler.GetMigrateableDirs()
assert.NotEmpty(t, dirs)
assert.Contains(t, dirs, "memory")
assert.Contains(t, dirs, "skills")
}
func TestResolveSourceHome(t *testing.T) {
result, err := resolveSourceHome("/custom/path")
require.NoError(t, err)
assert.Equal(t, "/custom/path", result)
}
func TestResolveSourceHomeWithEnvVar(t *testing.T) {
t.Setenv("OPENCLAW_HOME", "/env/path")
result, err := resolveSourceHome("")
require.NoError(t, err)
assert.Equal(t, "/env/path", result)
}
func TestResolveSourceHomeWithTilde(t *testing.T) {
home, err := os.UserHomeDir()
require.NoError(t, err)
result, err := resolveSourceHome("~/openclaw")
require.NoError(t, err)
assert.Equal(t, filepath.Join(home, "openclaw"), result)
}
func TestFindSourceConfig(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "openclaw.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
result, err := findSourceConfig(tmpDir)
require.NoError(t, err)
assert.Equal(t, configPath, result)
}
func TestFindSourceConfigWithConfigJson(t *testing.T) {
tmpDir := t.TempDir()
configPath := filepath.Join(tmpDir, "config.json")
err := os.WriteFile(configPath, []byte("{}"), 0o644)
require.NoError(t, err)
result, err := findSourceConfig(tmpDir)
require.NoError(t, err)
assert.Equal(t, configPath, result)
}
func TestFindSourceConfigNotFound(t *testing.T) {
tmpDir := t.TempDir()
_, err := findSourceConfig(tmpDir)
require.Error(t, err)
assert.Contains(t, err.Error(), "no config file found")
}
func TestMapProvider(t *testing.T) {
tests := []struct {
input string
expected string
}{
{"anthropic", "anthropic"},
{"claude", "anthropic"},
{"openai", "openai"},
{"gpt", "openai"},
{"groq", "groq"},
{"ollama", "ollama"},
{"openrouter", "openrouter"},
{"deepseek", "deepseek"},
{"together", "together"},
{"mistral", "mistral"},
{"fireworks", "fireworks"},
{"google", "google"},
{"gemini", "google"},
{"xai", "xai"},
{"grok", "xai"},
{"cerebras", "cerebras"},
{"sambanova", "sambanova"},
{"unknown", "unknown"},
{"", ""},
}
for _, tt := range tests {
result := mapProvider(tt.input)
assert.Equal(t, tt.expected, result, "mapProvider(%q)", tt.input)
}
}
func TestRewriteWorkspacePath(t *testing.T) {
tests := []struct {
input string
expected string
}{
{"~/.openclaw/workspace", "~/.picoclaw/workspace"},
{"/home/user/.openclaw/workspace", "/home/user/.picoclaw/workspace"},
{"/path/without/openclaw/change", "/path/without/openclaw/change"},
{"", ""},
}
for _, tt := range tests {
result := rewriteWorkspacePath(tt.input)
assert.Equal(t, tt.expected, result, "rewriteWorkspacePath(%q)", tt.input)
}
}