diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-13 07:23:24 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-13 07:23:24 +0200 |
| commit | a83156ac084fdaf97e6cefc76ea3ddfd3f6a993a (patch) | |
| tree | 6f586234e616d57ed0a938c98fa3b0aef9e20f6b /internal/tui/tui_test.go | |
| parent | c9d22e32dc9d8d0447beb4ffa78f47a03d0cddc4 (diff) | |
feat: add tui parquet recording controls
Diffstat (limited to 'internal/tui/tui_test.go')
| -rw-r--r-- | internal/tui/tui_test.go | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/internal/tui/tui_test.go b/internal/tui/tui_test.go index 70e2b5b..70552fb 100644 --- a/internal/tui/tui_test.go +++ b/internal/tui/tui_test.go @@ -5,6 +5,7 @@ import ( "encoding/csv" "errors" "os" + "path/filepath" "regexp" "strings" "testing" @@ -709,6 +710,106 @@ func TestExportKeyOpensModalOnDashboard(t *testing.T) { } } +func TestRecordKeyOpensRecordingModalOnDashboard(t *testing.T) { + m := NewModel(-1, func(context.Context) error { return nil }) + m.screen = ScreenDashboard + m.attaching = false + + next, _ := m.Update(tea.KeyPressMsg{Code: []rune{'R'}[0], Text: "R"}) + updated := next.(Model) + if !updated.recordModal.Visible() { + t.Fatalf("expected recording modal to open on R key") + } +} + +func TestStartRecordingUpdatesDashboardStatus(t *testing.T) { + m := NewModel(-1, func(context.Context) error { return nil }) + m.screen = ScreenDashboard + m.attaching = false + m.width = 120 + m.height = 30 + + path := filepath.Join(t.TempDir(), "capture.parquet") + if err := m.startRecording(path); err != nil { + t.Fatalf("startRecording() error = %v", err) + } + t.Cleanup(func() { + if err := m.stopRecording(); err != nil { + t.Fatalf("stopRecording() cleanup error = %v", err) + } + }) + + status := m.runtime.Recorder().Status() + if !status.Active { + t.Fatalf("expected recorder to be active after startRecording()") + } + + view := m.View().Content + if !strings.Contains(view, "rec:") || !strings.Contains(view, "capture") { + t.Fatalf("expected dashboard view to show recording status, got %q", view) + } +} + +func TestRecordKeyStopsActiveRecording(t *testing.T) { + m := NewModel(-1, func(context.Context) error { return nil }) + m.screen = ScreenDashboard + m.attaching = false + + path := filepath.Join(t.TempDir(), "capture.parquet") + if err := m.startRecording(path); err != nil { + t.Fatalf("startRecording() error = %v", err) + } + + next, _ := m.Update(tea.KeyPressMsg{Code: []rune{'R'}[0], Text: "R"}) + updated := next.(Model) + if updated.runtime.Recorder().Status().Active { + t.Fatalf("expected R key to stop active recording") + } +} + +func TestQuitStopsActiveRecording(t *testing.T) { + m := NewModel(-1, func(context.Context) error { return nil }) + m.screen = ScreenDashboard + m.attaching = false + + path := filepath.Join(t.TempDir(), "capture.parquet") + if err := m.startRecording(path); err != nil { + t.Fatalf("startRecording() error = %v", err) + } + + next, cmd := m.Update(tea.KeyPressMsg{Code: []rune{'q'}[0], Text: "q"}) + updated := next.(Model) + if cmd == nil { + t.Fatalf("expected quit command") + } + if updated.runtime.Recorder().Status().Active { + t.Fatalf("expected quit to stop active recording") + } +} + +func TestSelectPIDStopsActiveRecording(t *testing.T) { + m := NewModel(-1, func(context.Context) error { return nil }) + m.screen = ScreenDashboard + m.attaching = false + + path := filepath.Join(t.TempDir(), "capture.parquet") + if err := m.startRecording(path); err != nil { + t.Fatalf("startRecording() error = %v", err) + } + + next, cmd := m.Update(tea.KeyPressMsg{Code: []rune{'p'}[0], Text: "p"}) + updated := next.(Model) + if cmd == nil { + t.Fatalf("expected picker init command") + } + if updated.screen != ScreenPIDPicker { + t.Fatalf("expected p to switch to pid picker, got %v", updated.screen) + } + if updated.runtime.Recorder().Status().Active { + t.Fatalf("expected pid reselect to stop active recording") + } +} + func TestFlamePauseKeyDoesNotTriggerPIDReselect(t *testing.T) { m := NewModel(-1, func(context.Context) error { return nil }) m.screen = ScreenDashboard |
