feat(kanban): create To-Do, Doing, Done buckets when creating a new kanban view

This commit is contained in:
kolaente 2025-03-21 19:16:52 +01:00
parent b19f336f9c
commit 4d41a1bd9b
No known key found for this signature in database
GPG Key ID: F40E70337AB24C9B
3 changed files with 78 additions and 11 deletions

View File

@ -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}

View File

@ -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
}

View File

@ -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