Files
HomeAgent/internal/knowledge/knowledge_test.go

146 lines
2.7 KiB
Go

package knowledge
import (
"os"
"testing"
)
func TestNewStore(t *testing.T) {
dir, err := os.MkdirTemp("", "know_test_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
s := NewStore(dir)
if err := s.Start(); err != nil {
t.Fatal(err)
}
defer s.Stop()
if s == nil {
t.Fatal("store should not be nil")
}
}
func TestAddAndSearch(t *testing.T) {
dir, err := os.MkdirTemp("", "know_add_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
s := NewStore(dir)
s.Start()
defer s.Stop()
if err := s.Add("coffee", "咖啡是一种饮品,含有咖啡因"); err != nil {
t.Fatal(err)
}
results := s.Search("咖啡", 5)
if len(results) == 0 {
t.Fatal("expected results for '咖啡'")
}
}
func TestList(t *testing.T) {
dir, err := os.MkdirTemp("", "know_list_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
s := NewStore(dir)
s.Start()
defer s.Stop()
s.Add("topic1", "内容一")
s.Add("topic2", "内容二")
list := s.List()
if len(list) != 2 {
t.Errorf("expected 2 items, got %d", len(list))
}
}
func TestRemove(t *testing.T) {
dir, err := os.MkdirTemp("", "know_rm_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
s := NewStore(dir)
s.Start()
defer s.Stop()
s.Add("test", "测试内容")
if err := s.Remove("test"); err != nil {
t.Fatal(err)
}
list := s.List()
if len(list) != 0 {
t.Errorf("expected 0 items after remove, got %d", len(list))
}
}
func TestRemoveNotFound(t *testing.T) {
dir, err := os.MkdirTemp("", "know_notfound_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
s := NewStore(dir)
s.Start()
defer s.Stop()
if err := s.Remove("nonexistent"); err != nil {
t.Errorf("remove nonexistent should not error, got: %v", err)
}
}
func TestStats(t *testing.T) {
dir, err := os.MkdirTemp("", "know_stats_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
s := NewStore(dir)
s.Start()
defer s.Stop()
s.Add("a", "内容A")
s.Add("b", "内容B")
stats := s.Stats()
if stats["knowledge_count"].(int) != 2 {
t.Errorf("expected knowledge_count 2, got %v", stats["knowledge_count"])
}
if stats["vector_count"] == nil {
t.Error("expected vector_count in stats")
}
}
func TestSearchNoMatch(t *testing.T) {
dir, err := os.MkdirTemp("", "know_nomatch_*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
s := NewStore(dir)
s.Start()
defer s.Stop()
s.Add("math", "加减乘除是基本运算")
// "电电电电电" 中的字符 "电" 不在文档 "math 加减乘除是基本运算" 的任意 unigram 中
results := s.Search("电电电电电", 5)
if len(results) != 0 {
t.Errorf("expected 0 results for non-matching query, got %d", len(results))
}
}