package memory import ( "context" "io" "log/slog" "testing" "git.yeij.top/AskaEth/Cyrene_v2/internal/db" ) // testLogger 返回一个不写任何地方的 logger,保持测试输出干净。 func testLogger() *slog.Logger { return slog.New(slog.NewTextHandler(io.Discard, nil)) } // newTestStore 打开一个隔离的内存 SQLite 库并在其上构建 Store。 // 每次调用都拥有私有 DB,因此并行测试天生相互隔离。 func newTestStore(t *testing.T) *Store { t.Helper() ctx := context.Background() d, err := db.Open(ctx, ":memory:", testLogger()) if err != nil { t.Fatalf("open in-memory db: %v", err) } t.Cleanup(func() { _ = d.Close() }) s, err := NewStore(ctx, d, testLogger()) if err != nil { t.Fatalf("NewStore: %v", err) } return s } // baseItem 是测试用的最小合法记忆条目。 func baseItem() MemoryItem { return MemoryItem{ PersonaID: "persona.a", RoleID: "role.1", Scope: ScopePersona, Kind: KindRelationship, Content: "她喜欢喝冰美式", Tags: []string{"habit", "coffee"}, Confidence: 0.9, } }