docDB/doc_test.go

112 lines
2.9 KiB
Go
Raw Normal View History

package docDB
import (
"os"
"strings"
"testing"
"apigo.cc/go/log"
"apigo.cc/go/tableDB"
)
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")
unauthorizedDB := tableDB.GetDB("sqlite://"+dbFile, logger)
// 使用 GetDB 入口
docDBInst := GetDB(unauthorizedDB, "./test_docs")
app := docDBInst.Auth("user1")
var createdCalled, updatedCalled, removedCalled bool
docDBInst.Hooks.OnCreatedDoc = func(doc *Document) { createdCalled = true }
docDBInst.Hooks.OnUpdatedDoc = func(doc *Document) { updatedCalled = true }
docDBInst.Hooks.OnRemoved = func(id string) { removedCalled = true }
// 1. 测试 SetDoc (创建)
doc1 := &Document{
Path: "/test/doc1.md",
Title: "Test Doc",
TextContent: "# Header 1\nContent 1",
Type: "markdown",
}
err := app.SetDoc(doc1)
if err != nil {
t.Fatalf("SetDoc failed: %v", err)
}
if doc1.Version != 1 {
t.Fatalf("Expected version 1, got %d", doc1.Version)
}
if !createdCalled {
t.Error("OnCreatedDoc event not triggered")
}
// 2. 测试 Get
d, err := app.Get(doc1.ID)
if err != nil || d == nil {
t.Fatalf("Get failed: %v", err)
}
if d.Title != "Test Doc" {
t.Fatalf("Expected title 'Test Doc', got %s", d.Title)
}
// 3. 测试 SetDoc (更新内容, 提升版本并存入历史)
doc1.TextContent = "# Header 1\nUpdated Content"
err = app.SetDoc(doc1)
if err != nil {
t.Fatalf("Update SetDoc failed: %v", err)
}
if doc1.Version != 2 {
t.Fatalf("Expected version 2 after content update, got %d", doc1.Version)
}
if !updatedCalled {
t.Error("OnUpdatedDoc event not triggered")
}
// 4. 测试 GetByVersion
hist, err := app.GetByVersion(doc1.ID, 1)
if err != nil || hist == nil {
t.Fatalf("GetByVersion(1) failed: %v", err)
}
if !strings.Contains(hist.TextContent, "Content 1") {
t.Fatalf("Expected 'Content 1' in history version 1, got %s", hist.TextContent)
}
curr, _ := app.GetByVersion(doc1.ID, 2)
if curr.Version != 2 || !strings.Contains(curr.TextContent, "Updated Content") {
t.Fatalf("Expected version 2 content, got version %d", curr.Version)
}
// 5. 测试 Remove 后依然能通过 GetByVersion 获取
docID := doc1.ID
err = app.Remove(docID)
if err != nil {
t.Fatalf("Remove failed: %v", err)
}
if !removedCalled {
t.Error("OnRemoved event not triggered")
}
// 检查当前版本已删除
removedDoc, _ := app.Get(docID)
if removedDoc != nil {
t.Error("Document should be removed from _Doc")
}
// 检查依然能获取历史版本 (包括刚删除的最后一版 v2)
histV2, err := app.GetByVersion(docID, 2)
if err != nil || histV2 == nil {
t.Fatalf("GetByVersion(2) should work after removal: %v", err)
}
if histV2.Version != 2 {
t.Fatalf("Expected version 2 from history after removal, got %d", histV2.Version)
}
}