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) } }