diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-07-16 06:20:00 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-07-16 06:20:00 +0000 |
| commit | c21f891954f98d6df3769d5063f9528240b5b20a (patch) | |
| tree | fca0308099115476a2d93300717c5f370b1f8891 /internal/store/native_tasks_test.go | |
| parent | 6b13197f479b98c323140d3e9d9998c32f9f6ac9 (diff) | |
Add estimated_minutes to native task read/write/recurrence paths
Diffstat (limited to 'internal/store/native_tasks_test.go')
| -rw-r--r-- | internal/store/native_tasks_test.go | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/internal/store/native_tasks_test.go b/internal/store/native_tasks_test.go index 1b4bdf2..00785c2 100644 --- a/internal/store/native_tasks_test.go +++ b/internal/store/native_tasks_test.go @@ -582,3 +582,91 @@ func TestCreateNextIteration_InheritsProjectIDAndLabels(t *testing.T) { t.Errorf("next iteration Labels = %v, want [chore garden]", next.Labels) } } + +func TestCreateNativeTask_PersistsEstimatedMinutes(t *testing.T) { + s := newNativeTasksTestStore(t) + + task := models.Task{ID: "t-est", Content: "Estimated task", EstimatedMinutes: 45} + if err := s.CreateNativeTask(task); err != nil { + t.Fatalf("CreateNativeTask: %v", err) + } + + got, err := s.GetNativeTaskByID("t-est") + if err != nil { + t.Fatalf("GetNativeTaskByID: %v", err) + } + if got.EstimatedMinutes != 45 { + t.Errorf("EstimatedMinutes = %d, want 45", got.EstimatedMinutes) + } +} + +func TestSetTaskEstimate_UpdatesMinutes(t *testing.T) { + s := newNativeTasksTestStore(t) + + if err := s.SetTaskEstimate("real-1", 30); err != nil { + t.Fatalf("SetTaskEstimate: %v", err) + } + + got, err := s.GetNativeTaskByID("real-1") + if err != nil { + t.Fatalf("GetNativeTaskByID: %v", err) + } + if got.EstimatedMinutes != 30 { + t.Errorf("EstimatedMinutes = %d, want 30", got.EstimatedMinutes) + } +} + +func TestSetTaskEstimate_UnknownID_ReturnsErrNotFound(t *testing.T) { + s := newNativeTasksTestStore(t) + + err := s.SetTaskEstimate("does-not-exist", 30) + if !errors.Is(err, ErrNativeTaskNotFound) { + t.Errorf("err = %v, want ErrNativeTaskNotFound", err) + } +} + +func TestCreateNextIteration_CarriesEstimatedMinutesForward(t *testing.T) { + s := newNativeTasksTestStore(t) + + due := time.Now() + old := models.Task{ + ID: "t-series", Content: "Weekly review", DueDate: &due, + EstimatedMinutes: 60, + RecurrenceFreq: "weekly", + RecurrenceInterval: 1, + RecurrenceSeriesID: "series-1", + CreatedAt: time.Now().Add(-time.Hour), + } + if err := s.CreateNativeTask(old); err != nil { + t.Fatalf("CreateNativeTask: %v", err) + } + if _, err := s.db.Exec(`UPDATE native_tasks SET recurrence_freq = ?, recurrence_interval = ?, recurrence_series_id = ? WHERE id = ?`, + old.RecurrenceFreq, old.RecurrenceInterval, old.RecurrenceSeriesID, old.ID); err != nil { + t.Fatal(err) + } + stored, err := s.GetNativeTaskByID("t-series") + if err != nil { + t.Fatal(err) + } + + if err := s.CreateNextIteration(*stored); err != nil { + t.Fatalf("CreateNextIteration: %v", err) + } + + series, err := s.GetSeriesNeedingNextIteration(time.Now().Add(365 * 24 * time.Hour)) + if err != nil { + t.Fatal(err) + } + var next *models.Task + for i := range series { + if series[i].ID != "t-series" { + next = &series[i] + } + } + if next == nil { + t.Fatal("expected a next iteration row") + } + if next.EstimatedMinutes != 60 { + t.Errorf("EstimatedMinutes = %d, want 60 (carried forward)", next.EstimatedMinutes) + } +} |
