ai_xiaopei
2026-08-21 3e129de1b9ea21cdb7dfff232c3dd32979729b68
internal/index/sqlite_test.go
@@ -131,3 +131,67 @@
      t.Errorf("links count = %d, want 0", len(links))
   }
}
func TestNodeTypeSeparation(t *testing.T) {
   tmpDir := t.TempDir()
   store, err := Open(filepath.Join(tmpDir, "test.db"))
   if err != nil {
      t.Fatalf("Open failed: %v", err)
   }
   defer store.Close()
   // 插入文件节点 + tag 节点
   fileID, err := store.InsertNode(&graph.Node{
      Path: "FAQ/001-测试.md", Title: "测试文档", Section: "FAQ", NodeType: "file",
      Tags: []string{"电磁阀"},
   })
   if err != nil {
      t.Fatalf("InsertNode file failed: %v", err)
   }
   tagID, err := store.InsertNode(&graph.Node{
      Path: "tag:电磁阀", Title: "电磁阀", NodeType: "tag",
   })
   if err != nil {
      t.Fatalf("InsertNode tag failed: %v", err)
   }
   // tag 节点不进 FTS
   if err := store.CreateFTS(); err != nil {
      t.Fatalf("CreateFTS failed: %v", err)
   }
   if err := store.PopulateFTS(); err != nil {
      t.Fatalf("PopulateFTS failed: %v", err)
   }
   res, err := store.FTSSearch([]string{"测试"}, 10)
   if err != nil {
      t.Fatalf("FTSSearch failed: %v", err)
   }
   for _, r := range res {
      if r.ID == tagID {
         t.Error("FTS result contains tag node")
      }
   }
   // FindNodesByKeyword 不返回 tag 节点
   nodes, err := store.FindNodesByKeyword("电磁阀")
   if err != nil {
      t.Fatalf("FindNodesByKeyword failed: %v", err)
   }
   for _, n := range nodes {
      if n.ID == tagID {
         t.Error("FindNodesByKeyword returned tag node")
      }
   }
   // GetAllNodes 只返回 file 节点
   all, err := store.GetAllNodes()
   if err != nil {
      t.Fatalf("GetAllNodes failed: %v", err)
   }
   for _, n := range all {
      if n.ID == tagID {
         t.Error("GetAllNodes returned tag node")
      }
   }
   _ = fileID
}