Restore previous official review when an official review is deleted (#22449)
Fix #22406 Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
parent
fc037b4b82
commit
fe519d8633
2 changed files with 58 additions and 9 deletions
|
@ -733,17 +733,9 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Commen
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if official {
|
} else if official {
|
||||||
// recalculate the latest official review for reviewer
|
if err := restoreLatestOfficialReview(ctx, issue.ID, reviewer.ID); err != nil {
|
||||||
review, err := GetReviewByIssueIDAndUserID(ctx, issue.ID, reviewer.ID)
|
|
||||||
if err != nil && !IsErrReviewNotExist(err) {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if review != nil {
|
|
||||||
if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE id=?", true, review.ID); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
comment, err := CreateComment(ctx, &CreateCommentOptions{
|
comment, err := CreateComment(ctx, &CreateCommentOptions{
|
||||||
|
@ -761,6 +753,22 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Commen
|
||||||
return comment, committer.Commit()
|
return comment, committer.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Recalculate the latest official review for reviewer
|
||||||
|
func restoreLatestOfficialReview(ctx context.Context, issueID, reviewerID int64) error {
|
||||||
|
review, err := GetReviewByIssueIDAndUserID(ctx, issueID, reviewerID)
|
||||||
|
if err != nil && !IsErrReviewNotExist(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if review != nil {
|
||||||
|
if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE id=?", true, review.ID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// AddTeamReviewRequest add a review request from one team
|
// AddTeamReviewRequest add a review request from one team
|
||||||
func AddTeamReviewRequest(issue *Issue, reviewer *organization.Team, doer *user_model.User) (*Comment, error) {
|
func AddTeamReviewRequest(issue *Issue, reviewer *organization.Team, doer *user_model.User) (*Comment, error) {
|
||||||
ctx, committer, err := db.TxContext(db.DefaultContext)
|
ctx, committer, err := db.TxContext(db.DefaultContext)
|
||||||
|
@ -979,6 +987,12 @@ func DeleteReview(r *Review) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.Official {
|
||||||
|
if err := restoreLatestOfficialReview(ctx, r.IssueID, r.ReviewerID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return committer.Commit()
|
return committer.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -200,3 +200,38 @@ func TestDismissReview(t *testing.T) {
|
||||||
assert.False(t, requestReviewExample.Dismissed)
|
assert.False(t, requestReviewExample.Dismissed)
|
||||||
assert.True(t, approveReviewExample.Dismissed)
|
assert.True(t, approveReviewExample.Dismissed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDeleteReview(t *testing.T) {
|
||||||
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
|
||||||
|
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2})
|
||||||
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
|
||||||
|
|
||||||
|
review1, err := issues_model.CreateReview(db.DefaultContext, issues_model.CreateReviewOptions{
|
||||||
|
Content: "Official rejection",
|
||||||
|
Type: issues_model.ReviewTypeReject,
|
||||||
|
Official: false,
|
||||||
|
Issue: issue,
|
||||||
|
Reviewer: user,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
review2, err := issues_model.CreateReview(db.DefaultContext, issues_model.CreateReviewOptions{
|
||||||
|
Content: "Official approval",
|
||||||
|
Type: issues_model.ReviewTypeApprove,
|
||||||
|
Official: true,
|
||||||
|
Issue: issue,
|
||||||
|
Reviewer: user,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.NoError(t, issues_model.DeleteReview(review2))
|
||||||
|
|
||||||
|
_, err = issues_model.GetReviewByID(db.DefaultContext, review2.ID)
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.True(t, issues_model.IsErrReviewNotExist(err), "IsErrReviewNotExist")
|
||||||
|
|
||||||
|
review1, err = issues_model.GetReviewByID(db.DefaultContext, review1.ID)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, review1.Official)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue