package store import ( "context" "errors" "path/filepath" "testing" "github.com/crypto/openclaw/internal/llm" ) func TestStoreRoundTrip(t *testing.T) { s, err := Open(filepath.Join(t.TempDir(), "t.db")) if err != nil { t.Fatal(err) } defer s.Close() ctx := context.Background() ss, err := s.CreateSession(ctx, "first") if err != nil { t.Fatal(err) } s.AppendMessage(ctx, ss.ID, llm.Message{Role: llm.RoleUser, Content: "hi"}) s.AppendMessage(ctx, ss.ID, llm.Message{Role: llm.RoleAssistant, ToolCalls: []llm.ToolCall{{ID: "c1", Name: "time_now", Arguments: "{}"}}}) s.AppendMessage(ctx, ss.ID, llm.Message{Role: llm.RoleTool, ToolCallID: "c1", Name: "time_now", Content: "now"}) all, _ := s.Messages(ctx, ss.ID, 0) if len(all) != 3 || all[1].ToolCalls[0].Name != "time_now" || all[2].ToolCallID != "c1" { t.Fatalf("%+v", all) } last, _ := s.Messages(ctx, ss.ID, 2) if len(last) != 2 || last[0].Role != llm.RoleAssistant { t.Fatalf("limit: %+v", last) } if err := s.RenameSession(ctx, ss.ID, "renamed"); err != nil { t.Fatal(err) } list, _ := s.ListSessions(ctx, 10) if len(list) != 1 || list[0].Title != "renamed" { t.Fatalf("%+v", list) } if err := s.DeleteSession(ctx, ss.ID); err != nil { t.Fatal(err) } if _, err := s.GetSession(ctx, ss.ID); !errors.Is(err, ErrNotFound) { t.Fatal(err) } if m, _ := s.Messages(ctx, ss.ID, 0); len(m) != 0 { t.Fatal("cascade delete failed") } }