fix(t86 🔴): 換知識庫實例時清空看守資料夾——堵個資外洩
leo 07-28 實測坐實:youlin 時代的資料夾被原封同步進 geek6688 新實例
(「假如我把個人的同步到官方去就很危險,個資外泄」)。
修:instanceChanged(old,new) 比 host;連線精靈成功後若換了實例→清空
WatchFolders/WatchFolder,成功對話框改為說明「因為換了知識庫,為避免把舊資料夾
誤傳到新知識庫,請重新用『+新增知識資料夾…』選擇」;同實例改密碼行為照舊。
測試(main_test.go):host 異同判定含大小寫/尾斜線/scheme 差異。tray go test 綠。
(實作=子 CC;審查+commit=總管。⚠️ manifest 沿用=t86b 另案未含)
This commit is contained in:
@@ -92,3 +92,94 @@ func TestDirectConfigJSONOmitsEmptyInstanceName(t *testing.T) {
|
||||
t.Errorf("暱稱空時不該序列化出 instance_name 欄:%s", data)
|
||||
}
|
||||
}
|
||||
|
||||
// ── t86:instanceChanged ─────────────────────────────────────────────────────
|
||||
|
||||
func TestInstanceChanged(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
oldURL string
|
||||
newURL string
|
||||
want bool
|
||||
}{
|
||||
{
|
||||
"同 host 同實例改密碼不觸發清空",
|
||||
"https://arcrun-cypher-executor.youlin.workers.dev",
|
||||
"https://arcrun-cypher-executor.youlin.workers.dev",
|
||||
false,
|
||||
},
|
||||
{
|
||||
"不同 host 換實例觸發清空",
|
||||
"https://arcrun-cypher-executor.youlin.workers.dev",
|
||||
"https://arcrun-cypher-executor.geek6688.workers.dev",
|
||||
true,
|
||||
},
|
||||
{
|
||||
"舊 URL 空(首次設定)不觸發清空",
|
||||
"",
|
||||
"https://arcrun-cypher-executor.geek6688.workers.dev",
|
||||
false,
|
||||
},
|
||||
{
|
||||
"新 URL 空(異常值)不觸發清空",
|
||||
"https://arcrun-cypher-executor.youlin.workers.dev",
|
||||
"",
|
||||
false,
|
||||
},
|
||||
}
|
||||
for _, c := range cases {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
got := instanceChanged(c.oldURL, c.newURL)
|
||||
if got != c.want {
|
||||
t.Errorf("instanceChanged(%q, %q) = %v, want %v", c.oldURL, c.newURL, got, c.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// t86:換實例後 applyRemoteConfig 清空資料夾清單
|
||||
func TestApplyRemoteConfigClearsFoldersOnInstanceSwitch(t *testing.T) {
|
||||
cfg := &directConfig{
|
||||
CypherURL: "https://arcrun-cypher-executor.youlin.workers.dev",
|
||||
Namespace: "youlin",
|
||||
WatchFolder: "/Users/youlin/KnowledgeBase",
|
||||
WatchFolders: []string{"/Users/youlin/KnowledgeBase", "/Users/youlin/Finance"},
|
||||
}
|
||||
r := &daemonConfigResp{}
|
||||
r.Config.CypherURL = "https://arcrun-cypher-executor.geek6688.workers.dev"
|
||||
r.Config.Namespace = "geek6688"
|
||||
|
||||
switched := applyRemoteConfig(cfg, r)
|
||||
|
||||
if !switched {
|
||||
t.Error("換了不同 host 應回傳 switched=true")
|
||||
}
|
||||
if cfg.WatchFolder != "" {
|
||||
t.Errorf("換實例後 WatchFolder 應清空,got %q", cfg.WatchFolder)
|
||||
}
|
||||
if len(cfg.WatchFolders) != 0 {
|
||||
t.Errorf("換實例後 WatchFolders 應清空,got %v", cfg.WatchFolders)
|
||||
}
|
||||
}
|
||||
|
||||
// t86:同實例改密碼不清空資料夾清單
|
||||
func TestApplyRemoteConfigKeepsFoldersOnSameInstance(t *testing.T) {
|
||||
cfg := &directConfig{
|
||||
CypherURL: "https://arcrun-cypher-executor.youlin.workers.dev",
|
||||
Namespace: "youlin",
|
||||
WatchFolder: "/Users/youlin/KnowledgeBase",
|
||||
WatchFolders: []string{"/Users/youlin/KnowledgeBase"},
|
||||
}
|
||||
r := &daemonConfigResp{}
|
||||
r.Config.CypherURL = "https://arcrun-cypher-executor.youlin.workers.dev"
|
||||
r.Config.Namespace = "youlin"
|
||||
|
||||
switched := applyRemoteConfig(cfg, r)
|
||||
|
||||
if switched {
|
||||
t.Error("同 host 不應回傳 switched=true")
|
||||
}
|
||||
if cfg.WatchFolder == "" || len(cfg.WatchFolders) == 0 {
|
||||
t.Error("同實例不應清空資料夾清單")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user