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