Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions internal/db/tasks.go
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,11 @@ func (db *DB) UpdateTask(t *Task) error {
}
}

// Update last used project if project is set
if t.Project != "" {
db.SetLastUsedProject(t.Project)
}

return nil
}

Expand Down
43 changes: 43 additions & 0 deletions internal/db/tasks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1852,6 +1852,49 @@ func TestCreateTaskSavesLastProject(t *testing.T) {
}
}

func TestUpdateTaskSavesLastProject(t *testing.T) {
tmpDir := t.TempDir()
dbPath := filepath.Join(tmpDir, "test.db")

db, err := Open(dbPath)
if err != nil {
t.Fatalf("failed to open database: %v", err)
}
defer db.Close()
defer os.Remove(dbPath)

if err := db.CreateProject(&Project{Name: "work", Path: tmpDir + "/work"}); err != nil {
t.Fatalf("failed to create work project: %v", err)
}

task := &Task{
Title: "Test Task",
Status: StatusBacklog,
Project: "personal",
}
if err := db.CreateTask(task); err != nil {
t.Fatalf("failed to create task: %v", err)
}

lastProject, _ := db.GetLastUsedProject()
if lastProject != "personal" {
t.Errorf("expected 'personal' after create, got %q", lastProject)
}

task.Project = "work"
if err := db.UpdateTask(task); err != nil {
t.Fatalf("failed to update task: %v", err)
}

lastProject, err = db.GetLastUsedProject()
if err != nil {
t.Fatalf("failed to get last used project: %v", err)
}
if lastProject != "work" {
t.Errorf("expected 'work' after update, got %q", lastProject)
}
}

func TestGetExecutorUsageByProject(t *testing.T) {
// Create temporary database
tmpDir := t.TempDir()
Expand Down
60 changes: 60 additions & 0 deletions internal/ui/form_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ui

import (
"path/filepath"
"strings"
"testing"

Expand Down Expand Up @@ -1161,3 +1162,62 @@ func TestFilterProjectsEmptyQueryShowsAll(t *testing.T) {
t.Errorf("expected current project 'workflow' to be pre-selected, got %q", m.projectFiltered[m.projectFilteredIdx])
}
}

func TestNewFormModelDefaultsToLastUsedProject(t *testing.T) {
tmpDir := t.TempDir()
dbPath := filepath.Join(tmpDir, "test.db")

database, err := db.Open(dbPath)
if err != nil {
t.Fatalf("failed to open database: %v", err)
}
defer database.Close()

if err := database.CreateProject(&db.Project{Name: "work", Path: tmpDir}); err != nil {
t.Fatalf("failed to create work project: %v", err)
}

if err := database.SetLastUsedProject("work"); err != nil {
t.Fatalf("failed to set last used project: %v", err)
}

m := NewFormModel(database, 100, 50, "", nil)

if m.project != "work" {
t.Errorf("expected default project to be 'work' (last used), got %q", m.project)
}
}

func TestNewFormModelDefaultsToPersonalWithoutDatabase(t *testing.T) {
m := NewFormModel(nil, 100, 50, "", nil)

if m.project != "personal" {
t.Errorf("expected default project to be 'personal', got %q", m.project)
}
}

func TestNewFormModelLastUsedOverridesWorkingDir(t *testing.T) {
tmpDir1 := t.TempDir()
tmpDir2 := t.TempDir()
dbPath := filepath.Join(tmpDir1, "test.db")

database, err := db.Open(dbPath)
if err != nil {
t.Fatalf("failed to open database: %v", err)
}
defer database.Close()

if err := database.CreateProject(&db.Project{Name: "work", Path: tmpDir2}); err != nil {
t.Fatalf("failed to create work project: %v", err)
}

if err := database.SetLastUsedProject("work"); err != nil {
t.Fatalf("failed to set last used project: %v", err)
}

m := NewFormModel(database, 100, 50, tmpDir1, nil)

if m.project != "work" {
t.Errorf("expected project to be 'work' (last used should override working dir), got %q", m.project)
}
}
Loading