first commit
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package run
|
||||
|
||||
// Tests for the persistent-memory loop wiring (#481): OpenMemoryStore's
|
||||
// enabled/disabled contract, MemoryRootFromTools resolving through the opened
|
||||
// store, and TodoReminders registering the memory reminder provider alongside
|
||||
// the todo one.
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/smallnest/pigo/internal/agentcore"
|
||||
"github.com/smallnest/pigo/internal/agenttool"
|
||||
"github.com/smallnest/pigo/internal/memory"
|
||||
)
|
||||
|
||||
// TestOpenMemoryStoreDisabled verifies memory.enabled=false yields (nil, nil):
|
||||
// a disabled store is not an error, so the caller degrades to file-based
|
||||
// auto-memory without logging a failure.
|
||||
func TestOpenMemoryStoreDisabled(t *testing.T) {
|
||||
store, err := OpenMemoryStore(false)
|
||||
if err != nil {
|
||||
t.Fatalf("OpenMemoryStore(false) err = %v, want nil", err)
|
||||
}
|
||||
if store != nil {
|
||||
t.Fatalf("OpenMemoryStore(false) store = %v, want nil", store)
|
||||
}
|
||||
}
|
||||
|
||||
// TestMemoryDirHonorsPIGOHome verifies MemoryDir roots the store at
|
||||
// $PIGO_HOME/memory when the override is set.
|
||||
func TestMemoryDirHonorsPIGOHome(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
t.Setenv("PIGO_HOME", dir)
|
||||
if got, want := MemoryDir(), filepath.Join(dir, "memory"); got != want {
|
||||
t.Errorf("MemoryDir() = %q, want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
// TestMemoryRootFromToolsPresent verifies the root is resolved through the
|
||||
// memory_search tool's Store.Root() when one is wired into the tool set.
|
||||
func TestMemoryRootFromToolsPresent(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
store, err := memory.Open(filepath.Join(root, "index.db"), root, "")
|
||||
if err != nil {
|
||||
t.Fatalf("memory.Open: %v", err)
|
||||
}
|
||||
defer store.Close()
|
||||
|
||||
tools := []agentcore.AgentTool{&agenttool.MemorySearchTool{Store: store}}
|
||||
if got := MemoryRootFromTools(tools); got != root {
|
||||
t.Errorf("MemoryRootFromTools = %q, want %q", got, root)
|
||||
}
|
||||
}
|
||||
|
||||
// TestMemoryRootFromToolsAbsent verifies the root is "" when no memory_search
|
||||
// tool (or a store-less one) is present.
|
||||
func TestMemoryRootFromToolsAbsent(t *testing.T) {
|
||||
if got := MemoryRootFromTools(nil); got != "" {
|
||||
t.Errorf("MemoryRootFromTools(nil) = %q, want empty", got)
|
||||
}
|
||||
tools := []agentcore.AgentTool{&agenttool.MemorySearchTool{Store: nil}}
|
||||
if got := MemoryRootFromTools(tools); got != "" {
|
||||
t.Errorf("MemoryRootFromTools(store-less) = %q, want empty", got)
|
||||
}
|
||||
}
|
||||
|
||||
// TestTodoRemindersRegistersMemoryProvider verifies TodoReminders builds a
|
||||
// non-empty registry from a memory_search tool alone, and stays nil when no
|
||||
// provider-bearing tool is present.
|
||||
func TestTodoRemindersRegistersMemoryProvider(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
store, err := memory.Open(filepath.Join(root, "index.db"), root, "")
|
||||
if err != nil {
|
||||
t.Fatalf("memory.Open: %v", err)
|
||||
}
|
||||
defer store.Close()
|
||||
|
||||
reg := TodoReminders([]agentcore.AgentTool{&agenttool.MemorySearchTool{Store: store}})
|
||||
if reg == nil || reg.Empty() {
|
||||
t.Fatal("TodoReminders with a memory_search tool should yield a non-empty registry")
|
||||
}
|
||||
|
||||
if reg := TodoReminders(nil); reg != nil {
|
||||
t.Errorf("TodoReminders(nil) = %v, want nil", reg)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user