feat(grid): range-select finalize opens add form, writes via store.Add
4e6ea8b2ed549e1e9a8fecb28c227e2e710da0c2
Kevin Kortum <kevinkortum@me.com> · 2026-07-07 21:45
parent a867de7e
1 files changed
internal/tui/grid/add_test.go +48 −0
@@ -0,0 +1,48 @@
+package grid
+
+import (
+ "testing"
+
+ tea "github.com/charmbracelet/bubbletea"
+)
+
+func TestRangeTimes(t *testing.T) {
+ m := loaded(&fakeStore{}) // slot 30, window 07:00.. → row0=07:00
+ s, e := m.rangeTimes(0, 1)
+ if s != "07:00" || e != "08:00" {
+ t.Errorf("rangeTimes(0,1)=%s..%s, want 07:00..08:00", s, e)
+ }
+ s, e = m.rangeTimes(0, 0)
+ if s != "07:00" || e != "07:30" {
+ t.Errorf("single-slot rangeTimes(0,0)=%s..%s, want 07:00..07:30", s, e)
+ }
+}
+
+func TestSelectionAddCallsStoreAdd(t *testing.T) {
+ f := &fakeStore{}
+ m := loaded(f)
+ // enter ACTIVITY, anchor at 0, extend to 1, finalize
+ nm, _ := m.Update(special(tea.KeyLeft)) // ensure ACTIVITY
+ nm, _ = nm.(Model).Update(key(" ")) // anchor
+ nm, _ = nm.(Model).Update(special(tea.KeyDown))
+ nm, _ = nm.(Model).Update(key(" ")) // finalize → opens form
+ mm := nm.(Model)
+ if !mm.editing || !mm.adding || mm.form == nil {
+ t.Fatalf("finalize should open the add form")
+ }
+ if mm.fv.Start != "07:00" || mm.fv.End != "08:00" {
+ t.Errorf("form prefilled %s..%s, want 07:00..08:00", mm.fv.Start, mm.fv.End)
+ }
+ // fill required fields then Ctrl+S
+ mm.fv.Project, mm.fv.Desc = "ARCHER", "new work"
+ nm, _ = mm.Update(special(tea.KeyCtrlS))
+ if len(f.added) != 1 {
+ t.Fatalf("store.Add not called; added=%d", len(f.added))
+ }
+ if f.added[0].Project != "ARCHER" || f.added[0].Description != "new work" {
+ t.Errorf("added wrong entry: %+v", f.added[0])
+ }
+ if f.added[0].Start.Hour() != 7 || f.added[0].End.Hour() != 8 {
+ t.Errorf("added times wrong: %v..%v", f.added[0].Start, f.added[0].End)
+ }
+}