Files
wehub-resource-sync 26f897c1ec
release / release-please (push) Failing after 1m49s
docs / build (push) Failing after 6m34s
release / build-and-upload (arm64, linux) (push) Has been cancelled
release / build-and-upload (arm64, windows) (push) Has been cancelled
release / build-darwin (amd64, darwin) (push) Has been cancelled
release / checksums (push) Has been cancelled
release / finalize (push) Has been cancelled
release / build-darwin (arm64, darwin) (push) Has been cancelled
release / build-and-upload (amd64, linux) (push) Has been cancelled
release / build-and-upload (amd64, windows) (push) Has been cancelled
docs / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:34:16 +08:00

108 lines
2.6 KiB
Go

package intent
import (
"context"
"encoding/json"
"os"
"path/filepath"
"testing"
"time"
)
func buildRovoDevSession(t *testing.T, repoCWD string) string {
t.Helper()
home := t.TempDir()
sessionDir := filepath.Join(home, ".rovodev", "sessions", "abc-123")
if err := os.MkdirAll(sessionDir, 0o755); err != nil {
t.Fatal(err)
}
meta, err := json.Marshal(map[string]string{
"workspace": repoCWD,
"title": "add foo",
"created_at": "2026-04-18T02:00:00Z",
})
if err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(sessionDir, "metadata.json"), meta, 0o644); err != nil {
t.Fatal(err)
}
convo, err := json.Marshal(map[string]any{
"workspace": repoCWD,
"conversation": []map[string]string{
{"role": "user", "content": "please add a foo function in internal/foo.go"},
{"role": "assistant", "content": "done"},
},
})
if err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(sessionDir, "session_context.json"), convo, 0o644); err != nil {
t.Fatal(err)
}
return home
}
func TestRovoDevReader_DiscoverAndLoad(t *testing.T) {
repoCWD := t.TempDir()
home := buildRovoDevSession(t, repoCWD)
r := NewRovoDevReader()
sessions, err := r.Discover(context.Background(), DiscoverOpts{
HomeDir: home,
OriginCWD: repoCWD,
WindowStart: time.Now().Add(-24 * time.Hour),
WindowEnd: time.Now().Add(24 * time.Hour),
})
if err != nil {
t.Fatalf("discover: %v", err)
}
if len(sessions) != 1 {
t.Fatalf("got %d sessions, want 1", len(sessions))
}
s := sessions[0]
if s.SessionID != "abc-123" {
t.Errorf("SessionID = %q", s.SessionID)
}
if err := r.Load(context.Background(), s); err != nil {
t.Fatalf("load: %v", err)
}
if len(s.Messages) != 2 {
t.Fatalf("messages = %+v", s.Messages)
}
if s.Messages[0].Role != RoleUser {
t.Errorf("first role = %v", s.Messages[0].Role)
}
}
func TestRovoDevReader_FiltersByWorkspace(t *testing.T) {
repoA := t.TempDir()
home := buildRovoDevSession(t, repoA)
r := NewRovoDevReader()
sessions, err := r.Discover(context.Background(), DiscoverOpts{
HomeDir: home,
OriginCWD: t.TempDir(), // unrelated path
WindowStart: time.Now().Add(-24 * time.Hour),
WindowEnd: time.Now().Add(24 * time.Hour),
})
if err != nil {
t.Fatalf("discover: %v", err)
}
if len(sessions) != 0 {
t.Errorf("expected 0 sessions, got %d", len(sessions))
}
}
func TestRovoDevReader_NoSessionsDir(t *testing.T) {
r := NewRovoDevReader()
sessions, err := r.Discover(context.Background(), DiscoverOpts{HomeDir: t.TempDir()})
if err != nil {
t.Fatalf("discover: %v", err)
}
if len(sessions) != 0 {
t.Errorf("expected 0 sessions, got %d", len(sessions))
}
}