mirror of
https://github.com/go-gitea/gitea.git
synced 2025-08-22 05:10:54 +00:00
improve the test
This commit is contained in:
parent
000d87efe1
commit
012b4e504f
@ -153,3 +153,16 @@
|
|||||||
download_count: 0
|
download_count: 0
|
||||||
size: 0
|
size: 0
|
||||||
created_unix: 946684800
|
created_unix: 946684800
|
||||||
|
|
||||||
|
-
|
||||||
|
id: 13
|
||||||
|
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a23
|
||||||
|
repo_id: 1
|
||||||
|
issue_id: 3
|
||||||
|
release_id: 0
|
||||||
|
uploader_id: 0
|
||||||
|
comment_id: 7
|
||||||
|
name: code_comment_uploaded_attachment.png
|
||||||
|
download_count: 0
|
||||||
|
size: 0
|
||||||
|
created_unix: 946684812
|
||||||
|
@ -102,3 +102,12 @@
|
|||||||
review_id: 22
|
review_id: 22
|
||||||
assignee_id: 5
|
assignee_id: 5
|
||||||
created_unix: 946684817
|
created_unix: 946684817
|
||||||
|
|
||||||
|
-
|
||||||
|
id: 12
|
||||||
|
type: 22 # review
|
||||||
|
poster_id: 100
|
||||||
|
issue_id: 3
|
||||||
|
content: ""
|
||||||
|
review_id: 10
|
||||||
|
created_unix: 946684812
|
||||||
|
@ -124,18 +124,3 @@ func Test_UpdateIssueNumComments(t *testing.T) {
|
|||||||
issue2 = unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2})
|
issue2 = unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2})
|
||||||
assert.Equal(t, 1, issue2.NumComments)
|
assert.Equal(t, 1, issue2.NumComments)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_DeleteCommentWithReview(t *testing.T) {
|
|
||||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
||||||
|
|
||||||
comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 7})
|
|
||||||
assert.Equal(t, int64(10), comment.ReviewID)
|
|
||||||
review := unittest.AssertExistsAndLoadBean(t, &issues_model.Review{ID: comment.ReviewID})
|
|
||||||
|
|
||||||
// FIXME: the test fixtures needs a review type comment to be created
|
|
||||||
|
|
||||||
// since this is the last comment of the review, it should be deleted when the comment is deleted
|
|
||||||
assert.NoError(t, issues_model.DeleteComment(db.DefaultContext, comment))
|
|
||||||
|
|
||||||
unittest.AssertNotExistsBean(t, &issues_model.Review{ID: review.ID})
|
|
||||||
}
|
|
||||||
|
38
services/issue/comments_test.go
Normal file
38
services/issue/comments_test.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
package issue
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models/db"
|
||||||
|
issues_model "code.gitea.io/gitea/models/issues"
|
||||||
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
|
"code.gitea.io/gitea/models/unittest"
|
||||||
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_DeleteCommentWithReview(t *testing.T) {
|
||||||
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
|
||||||
|
comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 7})
|
||||||
|
assert.NoError(t, comment.LoadAttachments(t.Context()))
|
||||||
|
assert.Len(t, comment.Attachments, 1)
|
||||||
|
assert.Equal(t, int64(13), comment.Attachments[0].ID)
|
||||||
|
assert.Equal(t, int64(10), comment.ReviewID)
|
||||||
|
review := unittest.AssertExistsAndLoadBean(t, &issues_model.Review{ID: comment.ReviewID})
|
||||||
|
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||||
|
|
||||||
|
// since this is the last comment of the review, it should be deleted when the comment is deleted
|
||||||
|
deletedReviewComment, err := DeleteComment(db.DefaultContext, user1, comment)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotNil(t, deletedReviewComment)
|
||||||
|
|
||||||
|
// the review should be deleted as well
|
||||||
|
unittest.AssertNotExistsBean(t, &issues_model.Review{ID: review.ID})
|
||||||
|
// the attachment should be deleted as well
|
||||||
|
unittest.AssertNotExistsBean(t, &repo_model.Attachment{ID: comment.Attachments[0].ID})
|
||||||
|
}
|
@ -22,7 +22,9 @@ import (
|
|||||||
pull_model "code.gitea.io/gitea/models/pull"
|
pull_model "code.gitea.io/gitea/models/pull"
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
"code.gitea.io/gitea/modules/storage"
|
||||||
|
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
)
|
)
|
||||||
@ -105,7 +107,7 @@ func deleteUser(ctx context.Context, u *user_model.User, purge bool) (err error)
|
|||||||
|
|
||||||
if purge || (setting.Service.UserDeleteWithCommentsMaxTime != 0 &&
|
if purge || (setting.Service.UserDeleteWithCommentsMaxTime != 0 &&
|
||||||
u.CreatedUnix.AsTime().Add(setting.Service.UserDeleteWithCommentsMaxTime).After(time.Now())) {
|
u.CreatedUnix.AsTime().Add(setting.Service.UserDeleteWithCommentsMaxTime).After(time.Now())) {
|
||||||
// Delete Comments
|
// Delete Comments with attachments
|
||||||
const batchSize = 50
|
const batchSize = 50
|
||||||
for {
|
for {
|
||||||
comments := make([]*issues_model.Comment, 0, batchSize)
|
comments := make([]*issues_model.Comment, 0, batchSize)
|
||||||
@ -117,9 +119,29 @@ func deleteUser(ctx context.Context, u *user_model.User, purge bool) (err error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, comment := range comments {
|
for _, comment := range comments {
|
||||||
|
// Delete attachments of the comments
|
||||||
|
if err := comment.LoadAttachments(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if _, err = issues_model.DeleteComment(ctx, comment); err != nil {
|
if _, err = issues_model.DeleteComment(ctx, comment); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// delete comment attachments
|
||||||
|
if _, err := repo_model.DeleteAttachments(ctx, comment.Attachments, true); err != nil {
|
||||||
|
return fmt.Errorf("delete attachments: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, attachment := range comment.Attachments {
|
||||||
|
if err := storage.Attachments.Delete(repo_model.AttachmentRelativePath(attachment.UUID)); err != nil {
|
||||||
|
// Even delete files failed, but the attachments has been removed from database, so we
|
||||||
|
// should not return error but only record the error on logs.
|
||||||
|
// users have to delete this attachments manually or we should have a
|
||||||
|
// synchronize between database attachment table and attachment storage
|
||||||
|
log.Error("delete attachment[uuid: %s] failed: %v", attachment.UUID, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user