summaryrefslogtreecommitdiff
path: root/internal/store/projects_test.go
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-07-16 06:27:59 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-07-16 06:27:59 +0000
commit73c3440c579e645ada20f761bbc3eb1c43927e7f (patch)
tree1940b29f8036178ed585c8d1be297877296275bf /internal/store/projects_test.go
parentec45580c839cb94135c6c11c4aecaea255c8f2b7 (diff)
Add budget-tracked toggles for projects/labels; fix SetLabelColor wiping the flag
Diffstat (limited to 'internal/store/projects_test.go')
-rw-r--r--internal/store/projects_test.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/internal/store/projects_test.go b/internal/store/projects_test.go
index beb1aa9..b39384a 100644
--- a/internal/store/projects_test.go
+++ b/internal/store/projects_test.go
@@ -84,3 +84,65 @@ func TestSetTaskProject_UnknownID_ReturnsErrNotFound(t *testing.T) {
t.Fatalf("expected ErrNativeTaskNotFound, got %v", err)
}
}
+
+func TestSetProjectBudgetTracked_TogglesFlag(t *testing.T) {
+ s := newNativeTasksTestStore(t)
+ project, err := s.CreateProject("Sailing prep", "#3B82F6")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if err := s.SetProjectBudgetTracked(project.ID, true); err != nil {
+ t.Fatalf("SetProjectBudgetTracked: %v", err)
+ }
+ got, err := s.GetProjectByID(project.ID)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !got.BudgetTracked {
+ t.Error("expected BudgetTracked = true")
+ }
+
+ if err := s.SetProjectBudgetTracked(project.ID, false); err != nil {
+ t.Fatal(err)
+ }
+ got, err = s.GetProjectByID(project.ID)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got.BudgetTracked {
+ t.Error("expected BudgetTracked = false after untoggling")
+ }
+}
+
+func TestSetProjectBudgetTracked_UnknownID_ReturnsErrNotFound(t *testing.T) {
+ s := newNativeTasksTestStore(t)
+ if err := s.SetProjectBudgetTracked("does-not-exist", true); !errors.Is(err, ErrNativeTaskNotFound) {
+ t.Errorf("err = %v, want ErrNativeTaskNotFound", err)
+ }
+}
+
+func TestGetBudgetTrackedProjectIDs_ReturnsOnlyTracked(t *testing.T) {
+ s := newNativeTasksTestStore(t)
+ tracked, err := s.CreateProject("Tracked", "#111111")
+ if err != nil {
+ t.Fatal(err)
+ }
+ if _, err := s.CreateProject("Untracked", "#222222"); err != nil {
+ t.Fatal(err)
+ }
+ if err := s.SetProjectBudgetTracked(tracked.ID, true); err != nil {
+ t.Fatal(err)
+ }
+
+ ids, err := s.GetBudgetTrackedProjectIDs()
+ if err != nil {
+ t.Fatalf("GetBudgetTrackedProjectIDs: %v", err)
+ }
+ if !ids[tracked.ID] {
+ t.Error("expected tracked project id present")
+ }
+ if len(ids) != 1 {
+ t.Errorf("len(ids) = %d, want 1", len(ids))
+ }
+}