diff --git a/pkg/models/project_test.go b/pkg/models/project_test.go index 2b1c145f1..cb11f683d 100644 --- a/pkg/models/project_test.go +++ b/pkg/models/project_test.go @@ -78,7 +78,45 @@ func TestProject_CreateOrUpdate(t *testing.T) { "project_view_id": kanbanView.ID, }, false) }) - t.Run("nonexistant parent project", func(t *testing.T) { + t.Run("kanban view creates To-Do, doing, done buckets", func(t *testing.T) { + db.LoadAndAssertFixtures(t) + s := db.NewSession() + project := Project{ + Title: "test kanban buckets", + Description: "Lorem Ipsum", + } + err := project.Create(s, usr) + require.NoError(t, err) + err = s.Commit() + require.NoError(t, err) + + // Get the kanban view + kanbanView := &ProjectView{} + _, err = s.Where("project_id = ? AND view_kind = ?", project.ID, ProjectViewKindKanban).Get(kanbanView) + require.NoError(t, err) + + // Check that three buckets were created + var bucketCount int64 + bucketCount, err = s.Where("project_view_id = ?", kanbanView.ID).Count(&Bucket{}) + require.NoError(t, err) + assert.Equal(t, int64(3), bucketCount, "Should have created three buckets") + + // Check that the buckets are named correctly + var buckets []*Bucket + err = s.Where("project_view_id = ?", kanbanView.ID).OrderBy("position ASC").Find(&buckets) + require.NoError(t, err) + require.Len(t, buckets, 3, "Should have three buckets") + assert.Equal(t, "To-Do", buckets[0].Title) + assert.Equal(t, "Doing", buckets[1].Title) + assert.Equal(t, "Done", buckets[2].Title) + + // Check that Backlog is the default bucket + assert.Equal(t, buckets[0].ID, kanbanView.DefaultBucketID, "To-Do should be the default bucket") + + // Check that Done is the done bucket + assert.Equal(t, buckets[2].ID, kanbanView.DoneBucketID, "Done should be the done bucket") + }) + t.Run("nonexistent parent", func(t *testing.T) { db.LoadAndAssertFixtures(t) s := db.NewSession() project := Project{ @@ -91,7 +129,7 @@ func TestProject_CreateOrUpdate(t *testing.T) { assert.True(t, IsErrProjectDoesNotExist(err)) _ = s.Close() }) - t.Run("nonexistant owner", func(t *testing.T) { + t.Run("nonexistent owner", func(t *testing.T) { db.LoadAndAssertFixtures(t) s := db.NewSession() usr := &user.User{ID: 9482385} @@ -156,7 +194,7 @@ func TestProject_CreateOrUpdate(t *testing.T) { "description": project.Description, }, false) }) - t.Run("nonexistant", func(t *testing.T) { + t.Run("nonexistent", func(t *testing.T) { db.LoadAndAssertFixtures(t) s := db.NewSession() project := Project{ @@ -393,7 +431,7 @@ func TestProject_ReadAll(t *testing.T) { assert.Equal(t, int64(-2), ls[27].ID) _ = s.Close() }) - t.Run("projects for nonexistant user", func(t *testing.T) { + t.Run("projects for nonexistent user", func(t *testing.T) { db.LoadAndAssertFixtures(t) s := db.NewSession() usr := &user.User{ID: 999999} diff --git a/pkg/models/project_view.go b/pkg/models/project_view.go index 99eac034a..475181609 100644 --- a/pkg/models/project_view.go +++ b/pkg/models/project_view.go @@ -298,20 +298,49 @@ func createProjectView(s *xorm.Session, p *ProjectView, a web.Auth, createBacklo return } - if createBacklogBucket && p.BucketConfigurationMode == BucketConfigurationModeManual { - // Create a new first bucket for this project - b := &Bucket{ + if p.ViewKind == ProjectViewKindKanban && createBacklogBucket && p.BucketConfigurationMode == BucketConfigurationModeManual { + // Create default buckets for kanban view + backlog := &Bucket{ ProjectViewID: p.ID, - Title: "Backlog", + Title: "To-Do", + Position: 100, } - err = b.Create(s, a) + err = backlog.Create(s, a) + if err != nil { + return + } + + doing := &Bucket{ + ProjectViewID: p.ID, + Title: "Doing", + Position: 200, + } + err = doing.Create(s, a) + if err != nil { + return + } + + done := &Bucket{ + ProjectViewID: p.ID, + Title: "Done", + Position: 300, + } + err = done.Create(s, a) + if err != nil { + return + } + + // Set Backlog as default bucket and Done as done bucket + p.DefaultBucketID = backlog.ID + p.DoneBucketID = done.ID + _, err = s.ID(p.ID).Cols("default_bucket_id", "done_bucket_id").Update(p) if err != nil { return } // Move all tasks into the new bucket when the project already has tasks if addExistingTasksToView { - err = addTasksToView(s, a, p, b) + err = addTasksToView(s, a, p, backlog) if err != nil { return } diff --git a/pkg/modules/migration/create_from_structure.go b/pkg/modules/migration/create_from_structure.go index 5f28a1f54..d24b38a82 100644 --- a/pkg/modules/migration/create_from_structure.go +++ b/pkg/modules/migration/create_from_structure.go @@ -461,7 +461,7 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas buckets := bucketsIn.([]*models.Bucket) var newBacklogBucket *models.Bucket for _, b := range buckets { - if b.Title == "Backlog" { + if b.Title == "To-Do" { newBacklogBucket = b newBacklogBucket.ProjectID = project.ID break