fb63d9f0c4
leo 07-28 實測:「官方總圖」被顯示成「知識庫」=slug 後為空退到 kb; 兩個純中文資料夾會塌縮同庫(靜默混庫,B5 分庫隔離形同虛設)。 修:libraryFor 第三優先從退 c.Library/kb 改為 lib_+sha256(絕對路徑)前6hex—— 路徑穩定故鍵穩定、不同路徑必不同鍵;後端庫名鍵限 A-Za-z0-9_- 相容。 測試(t52_library_test.go):純中文→lib_雜湊非kb/兩中文夾不同鍵/同夾重跑鍵穩定/ ASCII 行為不變/明列對映仍最優先。collector go test 全綠(總管親跑)。 (實作=子 CC headless;審查+commit=總管)
96 lines
3.1 KiB
Go
96 lines
3.1 KiB
Go
package main
|
||
|
||
import (
|
||
"crypto/sha256"
|
||
"encoding/hex"
|
||
"testing"
|
||
)
|
||
|
||
// stableHashLib 重現 libraryFor 對純中文資料夾的穩定雜湊鍵(t89 驗收用)。
|
||
func stableHashLib(absPath string) string {
|
||
sum := sha256.Sum256([]byte(absPath))
|
||
return "lib_" + hex.EncodeToString(sum[:3])
|
||
}
|
||
|
||
func TestLibraryPerFolder(t *testing.T) {
|
||
cfg := &DirectConfig{Library: "kb"}
|
||
cases := map[string]string{
|
||
"/Users/x/Desktop/finance": "finance",
|
||
"/Users/x/Desktop/HR Docs": "hr_docs",
|
||
// t89:純中文資料夾名不再退 kb,改生穩定唯一鍵
|
||
"/Users/x/Desktop/官方總圖": stableHashLib("/Users/x/Desktop/官方總圖"),
|
||
"/Users/x/Desktop/test 01": "test_01",
|
||
}
|
||
for in, want := range cases {
|
||
if got := cfg.libraryFor(in); got != want {
|
||
t.Errorf("libraryFor(%q) = %q, want %q", in, got, want)
|
||
}
|
||
}
|
||
cfg.Libraries = map[string]string{"/Users/x/Desktop/官方總圖": "official"}
|
||
if got := cfg.libraryFor("/Users/x/Desktop/官方總圖"); got != "official" {
|
||
t.Errorf("明列對映應優先,got %q", got)
|
||
}
|
||
}
|
||
|
||
// ── t89 五條驗收測試 ────────────────────────────────────────────────────────
|
||
|
||
// ①純中文資料夾 → lib_+6hex,非 "kb"
|
||
func TestT89ChineseFolderNotKb(t *testing.T) {
|
||
cfg := &DirectConfig{Library: "kb"}
|
||
got := cfg.libraryFor("/Users/x/Desktop/官方總圖")
|
||
if got == "kb" {
|
||
t.Errorf("純中文資料夾不應退到 'kb',got %q", got)
|
||
}
|
||
if len(got) != len("lib_")+6 || got[:4] != "lib_" {
|
||
t.Errorf("預期格式 lib_<6hex>,got %q", got)
|
||
}
|
||
}
|
||
|
||
// ②兩個不同純中文資料夾 → 不同鍵(不混庫)
|
||
func TestT89TwoChineseFoldersDifferentKeys(t *testing.T) {
|
||
cfg := &DirectConfig{Library: "kb"}
|
||
k1 := cfg.libraryFor("/Users/x/Desktop/官方總圖")
|
||
k2 := cfg.libraryFor("/Users/x/Desktop/人事資料")
|
||
if k1 == k2 {
|
||
t.Errorf("不同純中文資料夾必須對映不同鍵,got k1=%q k2=%q", k1, k2)
|
||
}
|
||
}
|
||
|
||
// ③同一路徑重跑 → 鍵穩定(冪等)
|
||
func TestT89SameFolderStableKey(t *testing.T) {
|
||
cfg := &DirectConfig{Library: "kb"}
|
||
k1 := cfg.libraryFor("/Users/x/Desktop/官方總圖")
|
||
k2 := cfg.libraryFor("/Users/x/Desktop/官方總圖")
|
||
if k1 != k2 {
|
||
t.Errorf("同路徑重跑必須回傳同一鍵,got %q vs %q", k1, k2)
|
||
}
|
||
}
|
||
|
||
// ④ASCII 資料夾行為不變(test 01 → test_01)
|
||
func TestT89ASCIIFolderUnchanged(t *testing.T) {
|
||
cfg := &DirectConfig{Library: "kb"}
|
||
cases := map[string]string{
|
||
"/Users/x/Desktop/finance": "finance",
|
||
"/Users/x/Desktop/test 01": "test_01",
|
||
"/Users/x/Desktop/HR Docs": "hr_docs",
|
||
}
|
||
for in, want := range cases {
|
||
if got := cfg.libraryFor(in); got != want {
|
||
t.Errorf("libraryFor(%q) = %q, want %q", in, got, want)
|
||
}
|
||
}
|
||
}
|
||
|
||
// ⑤明列 Libraries 對映仍最優先(即使是純中文資料夾)
|
||
func TestT89ExplicitMappingWins(t *testing.T) {
|
||
cfg := &DirectConfig{
|
||
Library: "kb",
|
||
Libraries: map[string]string{
|
||
"/Users/x/Desktop/官方總圖": "official",
|
||
},
|
||
}
|
||
if got := cfg.libraryFor("/Users/x/Desktop/官方總圖"); got != "official" {
|
||
t.Errorf("明列對映應優先,got %q", got)
|
||
}
|
||
}
|