ai_xiaopei
2026-08-21 7bcbed8c3547e55287972bd0bccc7c9e9d8ec495
internal/graph/builder_test.go
@@ -1,6 +1,7 @@
package graph
import (
   "strings"
   "testing"
   "github.com/aisim/kb-cli/internal/vault"
@@ -30,8 +31,33 @@
   g := BuildGraph(files)
   if len(g.Nodes) != 2 {
      t.Errorf("node count = %d, want 2", len(g.Nodes))
   // 2 个文件节点 + 2 个 tag 虚拟节点(充装、智能枪)+ 1 个 entity 虚拟节点
   if len(g.Nodes) != 5 {
      t.Errorf("node count = %d, want 5", len(g.Nodes))
   }
   // 验证虚拟节点 path 命名空间与 NodeType
   tagCount, entityCount, fileCount := 0, 0, 0
   for _, n := range g.Nodes {
      switch n.NodeType {
      case "tag":
         tagCount++
         if !strings.HasPrefix(n.Path, "tag:") {
            t.Errorf("tag node path = %q, want prefix tag:", n.Path)
         }
      case "entity":
         entityCount++
         if !strings.HasPrefix(n.Path, "entity:") {
            t.Errorf("entity node path = %q, want prefix entity:", n.Path)
         }
      case "file":
         fileCount++
      default:
         t.Errorf("unexpected node_type %q for %s", n.NodeType, n.Path)
      }
   }
   if tagCount != 2 || entityCount != 1 || fileCount != 2 {
      t.Errorf("file/tag/entity = %d/%d/%d, want 2/2/1", fileCount, tagCount, entityCount)
   }
   // 应该有 3 条边:2条 tag + 1条 entity