Files
arcrun-collector/tidy_wiki_untouched_test.go

80 lines
3.5 KiB
Go
Raw Permalink 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.
// tidy_wiki_untouched_test.go — 舊制的「卡片歸位」不准動新制 `.wiki/` 裡的卡
// inkstone/Arcrun#1802026-08-28 實撞)。
//
// 為什麼需要這一張網:`MigrateCardNames` 是 **daemon 每輪自動跑**的(direct.go
// runDirectOnceRoot 開頭),而它掃的目錄與新制卡的家在某些資料夾上**完全重疊**——
// 使用者把整理好的卡放在 `system-dev/wiki/cards/`,那些卡自己就是原稿,
// 萃出來的新卡於是落在 `system-dev/wiki/cards/.wiki/`。
//
// 兩條規則撞上的當下沒有人會看到錯誤訊息:舊制默默把卡搬走並改名,
// 萃取端下一步才報「讀卡片失敗」,而那句話指向的是**它自己一秒前寫出來的檔**。
// ⇒ 這種 bug 只有機械網抓得到,靠讀程式碼讀不出來(本票就是這樣被繞了三輪)。
package collector
import (
"os"
"path/filepath"
"testing"
)
func mustWriteFile(t *testing.T, root, rel, body string) {
t.Helper()
p := filepath.Join(root, filepath.FromSlash(rel))
if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(p, []byte(body), 0o644); err != nil {
t.Fatal(err)
}
}
func TestMigrateCardNames_不准把新制wiki裡的卡拖出來(t *testing.T) {
root := t.TempDir()
// leo 的 youlinhsieh-test1 的形狀:整理好的卡住在 system-dev/wiki/cards/
// 它們自己被當原稿萃過一輪,新卡落在同一層的 .wiki/。
mustWriteFile(t, root, "system-dev/wiki/cards/arcrun-火星座標_短片劇本_v1.md", "# 火星座標\n")
mustWriteFile(t, root, "system-dev/wiki/cards/.wiki/火星座標_短片劇本_v1.md", "# 火星座標\n")
mustWriteFile(t, root, "system-dev/wiki/cards/.wiki/官架子.md", "# 官架子\n")
mustWriteFile(t, root, "system-dev/wiki/cards/.wiki/00-INDEX.md", "# 00-INDEX\n")
mustWriteFile(t, root, "system-dev/wiki/cards/.wiki/.gitignore", "*\n")
MigrateCardNames(root)
for _, rel := range []string{
"system-dev/wiki/cards/.wiki/火星座標_短片劇本_v1.md",
"system-dev/wiki/cards/.wiki/官架子.md",
"system-dev/wiki/cards/.wiki/00-INDEX.md",
"system-dev/wiki/cards/.wiki/.gitignore",
} {
if _, err := os.Stat(filepath.Join(root, filepath.FromSlash(rel))); err != nil {
t.Errorf("%s 不見了——舊制的歸位又走進 .wiki/ 了:%v", rel, err)
}
}
// 反面:不准在上一層生出帶前綴的複本(那正是「卡萃卡」增生的起點)。
for _, rel := range []string{
"system-dev/wiki/cards/arcrun-官架子.md",
"system-dev/wiki/cards/arcrun-00-INDEX.md",
"system-dev/wiki/cards/arcrun-.gitignore",
} {
if _, err := os.Stat(filepath.Join(root, filepath.FromSlash(rel))); err == nil {
t.Errorf("多出了 %s——`.wiki/` 裡的東西被拖出來改名了", rel)
}
}
}
// 上一輪(#60 第三輪)的修復不准被這次的「跳過點開頭目錄」關掉:
// `.arcrun-rag/wiki/cards/` 這個**收容處自己**是隱藏路徑,它仍然要被掃到。
func TestMigrateCardNames_收容處自己仍然掃得到(t *testing.T) {
root := t.TempDir()
mustWriteFile(t, root, ".arcrun-rag/wiki/cards/沒帶標記的舊卡.md", "# 舊卡\n")
mig := MigrateCardNames(root)
if mig.Moved != 1 {
t.Fatalf("收容處裡沒帶標記的舊卡應該仍然被認出來(#60 第三輪的行為),實際 moved=%d", mig.Moved)
}
if _, err := os.Stat(filepath.Join(root, ".arcrun-rag/wiki/cards/沒帶標記的舊卡.md")); err == nil {
t.Fatal("它應該已經歸位了,原位置不該還在")
}
}