summaryrefslogtreecommitdiff
path: root/internal/store/native_tasks_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/store/native_tasks_test.go')
-rw-r--r--internal/store/native_tasks_test.go88
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)
+ }
+}