package index
|
|
import (
|
"path/filepath"
|
"testing"
|
|
"github.com/aisim/kb-cli/internal/graph"
|
)
|
|
func TestStore(t *testing.T) {
|
tmpDir := t.TempDir()
|
dbPath := filepath.Join(tmpDir, "test.db")
|
|
store, err := Open(dbPath)
|
if err != nil {
|
t.Fatalf("Open failed: %v", err)
|
}
|
defer store.Close()
|
|
// 测试插入节点
|
node := &graph.Node{
|
Path: "FAQ/充装类/001-test.md",
|
Title: "测试FAQ",
|
Section: "FAQ",
|
Tags: []string{"充装", "智能枪"},
|
}
|
id, err := store.InsertNode(node)
|
if err != nil {
|
t.Fatalf("InsertNode failed: %v", err)
|
}
|
if id == 0 {
|
t.Error("InsertNode returned 0 id")
|
}
|
|
// 测试插入边
|
edge := &graph.Edge{
|
FromNode: id,
|
ToNode: 1000000,
|
Relation: "tag",
|
Label: "充装",
|
}
|
if err := store.InsertEdge(edge); err != nil {
|
t.Fatalf("InsertEdge failed: %v", err)
|
}
|
|
// 测试元信息
|
if err := store.SetMeta("git_commit", "abc123"); err != nil {
|
t.Fatalf("SetMeta failed: %v", err)
|
}
|
commit, err := store.GetMeta("git_commit")
|
if err != nil {
|
t.Fatalf("GetMeta failed: %v", err)
|
}
|
if commit != "abc123" {
|
t.Errorf("commit = %q, want %q", commit, "abc123")
|
}
|
|
// 测试计数
|
count, err := store.NodeCount()
|
if err != nil {
|
t.Fatalf("NodeCount failed: %v", err)
|
}
|
if count != 1 {
|
t.Errorf("node count = %d, want 1", count)
|
}
|
}
|
|
func TestGetNodeLinks(t *testing.T) {
|
tmpDir := t.TempDir()
|
dbPath := filepath.Join(tmpDir, "test.db")
|
|
store, err := Open(dbPath)
|
if err != nil {
|
t.Fatalf("Open failed: %v", err)
|
}
|
defer store.Close()
|
|
// 插入测试节点
|
node1 := &graph.Node{
|
Path: "FAQ/001-测试.md",
|
Title: "测试文档",
|
Section: "FAQ",
|
Content: "# 测试\n\n内容",
|
}
|
node2 := &graph.Node{
|
Path: "FAQ/002-相关.md",
|
Title: "相关文档",
|
Section: "FAQ",
|
Content: "# 相关\n\n内容",
|
}
|
|
id1, err := store.InsertNode(node1)
|
if err != nil {
|
t.Fatalf("InsertNode node1 failed: %v", err)
|
}
|
|
id2, err := store.InsertNode(node2)
|
if err != nil {
|
t.Fatalf("InsertNode node2 failed: %v", err)
|
}
|
|
// 插入 wikilink 边
|
edge := &graph.Edge{
|
FromNode: id1,
|
ToNode: id2,
|
Relation: "wikilink",
|
Label: "相关文档",
|
}
|
if err := store.InsertEdge(edge); err != nil {
|
t.Fatalf("InsertEdge failed: %v", err)
|
}
|
|
// 测试获取链接
|
links, err := store.GetNodeLinks(id1)
|
if err != nil {
|
t.Fatalf("GetNodeLinks failed: %v", err)
|
}
|
if len(links) != 1 {
|
t.Errorf("links count = %d, want 1", len(links))
|
}
|
if len(links) > 0 && links[0] != "FAQ/002-相关.md" {
|
t.Errorf("links[0] = %q, want %q", links[0], "FAQ/002-相关.md")
|
}
|
|
// 测试无链接的节点
|
links, err = store.GetNodeLinks(id2)
|
if err != nil {
|
t.Fatalf("GetNodeLinks for node2 failed: %v", err)
|
}
|
if len(links) != 0 {
|
t.Errorf("links count = %d, want 0", len(links))
|
}
|
}
|