From a2afca944b28d0253c02cf72aa210df3ed4b3de5 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Wed, 15 Jul 2026 18:13:07 +0000 Subject: feat(tasks): add Projects CRUD store methods --- internal/store/projects_test.go | 86 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 internal/store/projects_test.go (limited to 'internal/store/projects_test.go') diff --git a/internal/store/projects_test.go b/internal/store/projects_test.go new file mode 100644 index 0000000..beb1aa9 --- /dev/null +++ b/internal/store/projects_test.go @@ -0,0 +1,86 @@ +package store + +import ( + "errors" + "testing" +) + +func TestCreateProject_ReturnsCreatedProject(t *testing.T) { + s := newNativeTasksTestStore(t) + + project, err := s.CreateProject("Sailing prep", "#3B82F6") + if err != nil { + t.Fatalf("CreateProject: %v", err) + } + if project.ID == "" { + t.Error("expected a generated ID") + } + if project.Name != "Sailing prep" { + t.Errorf("Name = %q, want %q", project.Name, "Sailing prep") + } + if project.Color != "#3B82F6" { + t.Errorf("Color = %q, want %q", project.Color, "#3B82F6") + } + if project.Archived { + t.Error("expected a newly created project to not be archived") + } +} + +func TestGetProjects_ExcludesArchived(t *testing.T) { + s := newNativeTasksTestStore(t) + active, err := s.CreateProject("Active project", "#111111") + if err != nil { + t.Fatal(err) + } + archived, err := s.CreateProject("Archived project", "#222222") + if err != nil { + t.Fatal(err) + } + if _, err := s.db.Exec(`UPDATE projects SET archived = 1 WHERE id = ?`, archived.ID); err != nil { + t.Fatal(err) + } + + projects, err := s.GetProjects() + if err != nil { + t.Fatalf("GetProjects: %v", err) + } + if len(projects) != 1 || projects[0].ID != active.ID { + t.Fatalf("expected only the active project, got %+v", projects) + } +} + +func TestGetProjectByID_UnknownID_ReturnsErrNotFound(t *testing.T) { + s := newNativeTasksTestStore(t) + _, err := s.GetProjectByID("does-not-exist") + if !errors.Is(err, ErrNativeTaskNotFound) { + t.Fatalf("expected ErrNativeTaskNotFound, got %v", err) + } +} + +func TestSetTaskProject_UpdatesProjectID(t *testing.T) { + s := newNativeTasksTestStore(t) + project, err := s.CreateProject("Test project", "#333333") + if err != nil { + t.Fatal(err) + } + + if err := s.SetTaskProject("real-1", project.ID); err != nil { + t.Fatalf("SetTaskProject: %v", err) + } + + task, err := s.GetNativeTaskByID("real-1") + if err != nil { + t.Fatal(err) + } + if task.ProjectID != project.ID { + t.Errorf("ProjectID = %q, want %q", task.ProjectID, project.ID) + } +} + +func TestSetTaskProject_UnknownID_ReturnsErrNotFound(t *testing.T) { + s := newNativeTasksTestStore(t) + err := s.SetTaskProject("does-not-exist", "") + if !errors.Is(err, ErrNativeTaskNotFound) { + t.Fatalf("expected ErrNativeTaskNotFound, got %v", err) + } +} -- cgit v1.2.3