From edbfc06a418c8ea456debac22c560c3610e732cd Mon Sep 17 00:00:00 2001 From: kolaente Date: Fri, 1 Sep 2023 16:18:59 +0200 Subject: [PATCH] fix(kanban): don't prevent setting a different bucket as done bucket Resolves https://kolaente.dev/vikunja/frontend/issues/3373 --- pkg/models/kanban.go | 12 ++++++++---- pkg/models/kanban_test.go | 15 ++++++++++++--- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/pkg/models/kanban.go b/pkg/models/kanban.go index 6fb76e69428..beac99cb45b 100644 --- a/pkg/models/kanban.go +++ b/pkg/models/kanban.go @@ -293,10 +293,14 @@ func (b *Bucket) Update(s *xorm.Session, _ web.Auth) (err error) { } if doneBucket != nil && doneBucket.IsDoneBucket && b.IsDoneBucket && doneBucket.ID != b.ID { - return &ErrOnlyOneDoneBucketPerProject{ - BucketID: b.ID, - ProjectID: b.ProjectID, - DoneBucketID: doneBucket.ID, + // When the current bucket will be the new done bucket, the old one should not be the done bucket anymore + doneBucket.IsDoneBucket = false + _, err = s. + Where("id = ?", doneBucket.ID). + Cols("is_done_bucket"). + Update(doneBucket) + if err != nil { + return } } diff --git a/pkg/models/kanban_test.go b/pkg/models/kanban_test.go index e4e2987fb4c..31d6400cfe8 100644 --- a/pkg/models/kanban_test.go +++ b/pkg/models/kanban_test.go @@ -217,7 +217,7 @@ func TestBucket_Update(t *testing.T) { testAndAssertBucketUpdate(t, b, s) }) - t.Run("only one done bucket per project", func(t *testing.T) { + t.Run("old done bucket should be unset", func(t *testing.T) { db.LoadAndAssertFixtures(t) s := db.NewSession() defer s.Close() @@ -229,7 +229,16 @@ func TestBucket_Update(t *testing.T) { } err := b.Update(s, &user.User{ID: 1}) - assert.Error(t, err) - assert.True(t, IsErrOnlyOneDoneBucketPerProject(err)) + assert.NoError(t, err) + db.AssertExists(t, "buckets", map[string]interface{}{ + "id": 1, + "project_id": 1, + "is_done_bucket": true, + }, false) + db.AssertExists(t, "buckets", map[string]interface{}{ + "id": 3, + "project_id": 1, + "is_done_bucket": false, + }, false) }) }