package knowledge import ( "testing" "unicode/utf8" ) func TestPlanQueriesCapsAtConfigLimit(t *testing.T) { queries := PlanQueries(PlanInput{ Seed: "敏感肌", TargetAudience: "孕婦", L1Labels: []string{"a", "b", "c", "d", "e", "f", "g", "h"}, }) max := MaxPlanQueriesPerRound() if len(queries) > max { t.Fatalf("expected <= %d queries, got %d", max, len(queries)) } if len(queries) < 4 { t.Fatalf("expected at least 4 queries, got %d", len(queries)) } } func TestDeriveSearchTagsFromGraph(t *testing.T) { graph := Graph{ Nodes: []Node{ {ID: "n1", Label: "敏感肌", NodeKind: "pain", Layer: 0}, {ID: "n2", Label: "屏障受損", NodeKind: "symptom", Layer: 1}, }, } DeriveSearchTagsFromGraph(&graph, PatrolTagInput{ Questions: []string{"敏感肌沐浴乳有推薦嗎"}, Pillars: []string{"敏感肌沐浴用品挑選"}, }) if graph.PainTagCount != 2 { t.Fatalf("expected pain tag count 2, got %d", graph.PainTagCount) } for _, tag := range graph.Nodes[0].DerivedTags.Relevance { if utf8.RuneCountInString(tag) < 6 { t.Fatalf("expected human-length tag, got %q", tag) } } if len(graph.Nodes[0].DerivedTags.Relevance) == 0 { t.Fatal("expected relevance tags on core node") } if len(graph.Nodes[0].DerivedTags.Recency) == 0 { t.Fatal("expected recency tags on pain node") } }