87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package docDB
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"apigo.cc/go/log"
|
|
)
|
|
|
|
func TestDocDB(t *testing.T) {
|
|
logger := log.DefaultLogger
|
|
dbFile := "test_doc.db"
|
|
os.Remove(dbFile)
|
|
defer os.Remove(dbFile)
|
|
os.RemoveAll("./test_docs")
|
|
defer os.RemoveAll("./test_docs")
|
|
|
|
docDBInst := GetDB("sqlite://"+dbFile, logger, "", "./test_docs")
|
|
app := docDBInst.Auth("user1")
|
|
|
|
var updatedCalled, removedDocCalled, updatedToCCalled, removedToCCalled bool
|
|
docDBInst.Hooks.OnUpdatedDoc = func(doc *Document) { updatedCalled = true }
|
|
docDBInst.Hooks.OnRemovedDoc = func(doc *Document) { removedDocCalled = true }
|
|
docDBInst.Hooks.OnUpdatedToC = func(doc *Document) { updatedToCCalled = true }
|
|
docDBInst.Hooks.OnRemovedToC = func(doc *Document) { removedToCCalled = true }
|
|
|
|
// 1. 测试 SetDoc (创建)
|
|
docPath := "/test/doc1.md"
|
|
doc1 := &Document{
|
|
Path: docPath,
|
|
Title: "Test Doc",
|
|
TextContent: "# Header 1\nContent 1",
|
|
Type: "markdown",
|
|
}
|
|
|
|
err := app.SetDoc(doc1)
|
|
if err != nil {
|
|
t.Fatalf("SetDoc failed: %v", err)
|
|
}
|
|
|
|
if !updatedCalled || !updatedToCCalled {
|
|
t.Error("Hooks not triggered on creation")
|
|
}
|
|
updatedCalled, updatedToCCalled = false, false
|
|
|
|
// 2. 测试 SetMeta 更新 TextContent (触发 ToC 事件)
|
|
err = app.SetMeta(docPath, map[string]any{"textContent": "# New Header"})
|
|
if err != nil {
|
|
t.Fatalf("SetMeta failed: %v", err)
|
|
}
|
|
if !updatedToCCalled || !removedToCCalled {
|
|
t.Error("ToC Hooks not triggered on SetMeta text update")
|
|
}
|
|
if updatedCalled {
|
|
t.Error("OnUpdatedDoc should NOT be triggered on SetMeta")
|
|
}
|
|
updatedToCCalled, removedToCCalled = false, false
|
|
|
|
// 3. 测试 Move (触发删除旧的 + 更新新的)
|
|
newPath := "/test/moved.md"
|
|
err = app.Move(docPath, newPath)
|
|
if err != nil {
|
|
t.Fatalf("Move failed: %v", err)
|
|
}
|
|
if !removedDocCalled || !updatedCalled {
|
|
t.Error("Move Hooks sequence failed")
|
|
}
|
|
removedDocCalled, updatedCalled = false, false
|
|
|
|
// 4. 测试 Remove
|
|
err = app.Remove(newPath)
|
|
if err != nil {
|
|
t.Fatalf("Remove failed: %v", err)
|
|
}
|
|
if !removedDocCalled {
|
|
t.Error("OnRemovedDoc not triggered on Remove")
|
|
}
|
|
}
|
|
|
|
func BenchmarkExtractToC(b *testing.B) {
|
|
content := "# H1\n## H1.1\n### H1.1.1\n" + strings.Repeat("Some content\n", 100) + "# H2\n## H2.1\n"
|
|
for i := 0; i < b.N; i++ {
|
|
_ = ExtractToC(content)
|
|
}
|
|
}
|