mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-08-17 03:27:00 +08:00
- 将 WechatExplorer 产品身份升级为 TraceMemo - 更新 appId、Runtime Identity、Reader Skill 和 API 环境变量 - 增加旧用户数据、Knowledge、Token 与 AI Provider 安全迁移 - 保留 Windows WeFlow 和旧版配置兼容 - 完善首次启动迁移测试及 v2.2.0 发布文档 - 移除 macOS Intel x64 构建与发布支持
81 lines
2.1 KiB
Go
81 lines
2.1 KiB
Go
package ilink
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestSaveCredentialsKeepsOnlyLatestAccount(t *testing.T) {
|
|
t.Setenv("HOME", t.TempDir())
|
|
old := &Credentials{ILinkBotID: "bot-old@im.bot", BotToken: "old-token"}
|
|
latest := &Credentials{ILinkBotID: "bot-new@im.bot", BotToken: "new-token"}
|
|
if err := SaveCredentials(old); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
dir, err := AccountsDir()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(dir, NormalizeAccountID(old.ILinkBotID)+".sync.json"), []byte(`{}`), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := SaveCredentials(latest); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
accounts, err := LoadAllCredentials()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(accounts) != 1 || accounts[0].ILinkBotID != latest.ILinkBotID {
|
|
t.Fatalf("accounts = %#v", accounts)
|
|
}
|
|
if _, err := os.Stat(filepath.Join(dir, NormalizeAccountID(old.ILinkBotID)+".sync.json")); !os.IsNotExist(err) {
|
|
t.Fatalf("old sync state still exists: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestAccountsDirUsesTraceMemoIdentity(t *testing.T) {
|
|
home := t.TempDir()
|
|
t.Setenv("HOME", home)
|
|
dir, err := AccountsDir()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
want := filepath.Join(home, ".tracememo", "wechat-connector", "accounts")
|
|
if dir != want {
|
|
t.Fatalf("AccountsDir() = %q, want %q", dir, want)
|
|
}
|
|
}
|
|
|
|
func TestLoadAllCredentialsFallsBackToLegacyDirectory(t *testing.T) {
|
|
home := t.TempDir()
|
|
t.Setenv("HOME", home)
|
|
legacyDir, err := LegacyAccountsDir()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.MkdirAll(legacyDir, 0o700); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
legacy := &Credentials{ILinkBotID: "legacy@im.bot", BotToken: "legacy-token"}
|
|
data, err := json.Marshal(legacy)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(legacyDir, NormalizeAccountID(legacy.ILinkBotID)+".json"), data, 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
accounts, err := LoadAllCredentials()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(accounts) != 1 || accounts[0].BotToken != legacy.BotToken {
|
|
t.Fatalf("accounts = %#v", accounts)
|
|
}
|
|
if _, err := os.Stat(legacyDir); err != nil {
|
|
t.Fatalf("legacy directory changed or removed: %v", err)
|
|
}
|
|
}
|