73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
|
|
package seahorse
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestGrepSearchSummaries(t *testing.T) {
|
||
|
|
s := openTestStore(t)
|
||
|
|
ctx := context.Background()
|
||
|
|
conv, _ := s.GetOrCreateConversation(ctx, "test:grep-tool")
|
||
|
|
|
||
|
|
s.CreateSummary(ctx, CreateSummaryInput{
|
||
|
|
ConversationID: conv.ConversationID,
|
||
|
|
Kind: SummaryKindLeaf,
|
||
|
|
Depth: 0,
|
||
|
|
Content: "database connection pool configuration",
|
||
|
|
TokenCount: 50,
|
||
|
|
})
|
||
|
|
|
||
|
|
re := &RetrievalEngine{store: s}
|
||
|
|
results, err := re.Grep(ctx, GrepInput{
|
||
|
|
Pattern: "database",
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Grep: %v", err)
|
||
|
|
}
|
||
|
|
if len(results.Summaries) == 0 {
|
||
|
|
t.Error("expected at least 1 summary result")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestGrepSearchMessages(t *testing.T) {
|
||
|
|
s := openTestStore(t)
|
||
|
|
ctx := context.Background()
|
||
|
|
conv, _ := s.GetOrCreateConversation(ctx, "test:grep-msg")
|
||
|
|
|
||
|
|
s.AddMessage(ctx, conv.ConversationID, "user", "find this message about testing", 5)
|
||
|
|
s.AddMessage(ctx, conv.ConversationID, "user", "unrelated content", 3)
|
||
|
|
|
||
|
|
re := &RetrievalEngine{store: s}
|
||
|
|
results, err := re.Grep(ctx, GrepInput{
|
||
|
|
Pattern: "testing",
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Grep messages: %v", err)
|
||
|
|
}
|
||
|
|
if len(results.Messages) == 0 {
|
||
|
|
t.Error("expected at least 1 message result")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestGrepMissingPattern(t *testing.T) {
|
||
|
|
s := openTestStore(t)
|
||
|
|
re := &RetrievalEngine{store: s}
|
||
|
|
_, err := re.Grep(context.Background(), GrepInput{})
|
||
|
|
if err == nil {
|
||
|
|
t.Error("expected error for missing pattern")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestGrepToolSupportsAllConversations(t *testing.T) {
|
||
|
|
s := openTestStore(t)
|
||
|
|
tool := NewGrepTool(&RetrievalEngine{store: s})
|
||
|
|
params := tool.Parameters()
|
||
|
|
props := params["properties"].(map[string]any)
|
||
|
|
|
||
|
|
// GrepTool should accept all_conversations parameter
|
||
|
|
if _, ok := props["all_conversations"]; !ok {
|
||
|
|
t.Error("Parameters missing 'all_conversations' field")
|
||
|
|
}
|
||
|
|
}
|