fix(kanban): reset done and default bucket when the bucket itself is deleted
Resolves https://github.com/go-vikunja/vikunja/issues/234
This commit is contained in:
parent
e1c972d64d
commit
5b2b7f7bdc
@ -310,7 +310,7 @@ func (b *Bucket) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||
// @Failure 404 {object} web.HTTPError "The bucket does not exist."
|
||||
// @Failure 500 {object} models.Message "Internal error"
|
||||
// @Router /projects/{projectID}/buckets/{bucketID} [delete]
|
||||
func (b *Bucket) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||
func (b *Bucket) Delete(s *xorm.Session, a web.Auth) (err error) {
|
||||
|
||||
// Prevent removing the last bucket
|
||||
total, err := s.Where("project_id = ?", b.ProjectID).Count(&Bucket{})
|
||||
@ -324,17 +324,27 @@ func (b *Bucket) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the bucket itself
|
||||
_, err = s.Where("id = ?", b.ID).Delete(&Bucket{})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Get the default bucket
|
||||
p, err := GetProjectSimpleByID(s, b.ProjectID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var updateProject bool
|
||||
if b.ID == p.DefaultBucketID {
|
||||
p.DefaultBucketID = 0
|
||||
updateProject = true
|
||||
}
|
||||
if b.ID == p.DoneBucketID {
|
||||
p.DoneBucketID = 0
|
||||
updateProject = true
|
||||
}
|
||||
if updateProject {
|
||||
err = p.Update(s, a)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
defaultBucketID, err := getDefaultBucketID(s, p)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -345,5 +355,11 @@ func (b *Bucket) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||
Where("bucket_id = ?", b.ID).
|
||||
Cols("bucket_id").
|
||||
Update(&Task{BucketID: defaultBucketID})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Remove the bucket itself
|
||||
_, err = s.Where("id = ?", b.ID).Delete(&Bucket{})
|
||||
return
|
||||
}
|
||||
|
@ -197,6 +197,23 @@ func TestBucket_Delete(t *testing.T) {
|
||||
"project_id": 18,
|
||||
}, false)
|
||||
})
|
||||
t.Run("done bucket should be reset", func(t *testing.T) {
|
||||
db.LoadAndAssertFixtures(t)
|
||||
s := db.NewSession()
|
||||
defer s.Close()
|
||||
|
||||
b := &Bucket{
|
||||
ID: 3,
|
||||
ProjectID: 1,
|
||||
}
|
||||
err := b.Delete(s, user)
|
||||
require.NoError(t, err)
|
||||
|
||||
db.AssertMissing(t, "projects", map[string]interface{}{
|
||||
"id": 1,
|
||||
"done_bucket_id": 3,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestBucket_Update(t *testing.T) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user