loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Restore previous official review when an official review is deleted (#22449)

Fix #22406

Co-authored-by: Lauris BH <lauris@nix.lv>

authored by

Jimmy Praet
Lauris BH
and committed by
GitHub
fe519d86 fc037b4b

+58 -9
+23 -9
models/issues/review.go
··· 733 733 if err != nil { 734 734 return nil, err 735 735 } else if official { 736 - // recalculate the latest official review for reviewer 737 - review, err := GetReviewByIssueIDAndUserID(ctx, issue.ID, reviewer.ID) 738 - if err != nil && !IsErrReviewNotExist(err) { 736 + if err := restoreLatestOfficialReview(ctx, issue.ID, reviewer.ID); err != nil { 739 737 return nil, err 740 - } 741 - 742 - if review != nil { 743 - if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE id=?", true, review.ID); err != nil { 744 - return nil, err 745 - } 746 738 } 747 739 } 748 740 ··· 759 751 } 760 752 761 753 return comment, committer.Commit() 754 + } 755 + 756 + // Recalculate the latest official review for reviewer 757 + func restoreLatestOfficialReview(ctx context.Context, issueID, reviewerID int64) error { 758 + review, err := GetReviewByIssueIDAndUserID(ctx, issueID, reviewerID) 759 + if err != nil && !IsErrReviewNotExist(err) { 760 + return err 761 + } 762 + 763 + if review != nil { 764 + if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE id=?", true, review.ID); err != nil { 765 + return err 766 + } 767 + } 768 + 769 + return nil 762 770 } 763 771 764 772 // AddTeamReviewRequest add a review request from one team ··· 977 985 978 986 if _, err := sess.ID(r.ID).Delete(new(Review)); err != nil { 979 987 return err 988 + } 989 + 990 + if r.Official { 991 + if err := restoreLatestOfficialReview(ctx, r.IssueID, r.ReviewerID); err != nil { 992 + return err 993 + } 980 994 } 981 995 982 996 return committer.Commit()
+35
models/issues/review_test.go
··· 200 200 assert.False(t, requestReviewExample.Dismissed) 201 201 assert.True(t, approveReviewExample.Dismissed) 202 202 } 203 + 204 + func TestDeleteReview(t *testing.T) { 205 + assert.NoError(t, unittest.PrepareTestDatabase()) 206 + 207 + issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}) 208 + user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) 209 + 210 + review1, err := issues_model.CreateReview(db.DefaultContext, issues_model.CreateReviewOptions{ 211 + Content: "Official rejection", 212 + Type: issues_model.ReviewTypeReject, 213 + Official: false, 214 + Issue: issue, 215 + Reviewer: user, 216 + }) 217 + assert.NoError(t, err) 218 + 219 + review2, err := issues_model.CreateReview(db.DefaultContext, issues_model.CreateReviewOptions{ 220 + Content: "Official approval", 221 + Type: issues_model.ReviewTypeApprove, 222 + Official: true, 223 + Issue: issue, 224 + Reviewer: user, 225 + }) 226 + assert.NoError(t, err) 227 + 228 + assert.NoError(t, issues_model.DeleteReview(review2)) 229 + 230 + _, err = issues_model.GetReviewByID(db.DefaultContext, review2.ID) 231 + assert.Error(t, err) 232 + assert.True(t, issues_model.IsErrReviewNotExist(err), "IsErrReviewNotExist") 233 + 234 + review1, err = issues_model.GetReviewByID(db.DefaultContext, review1.ID) 235 + assert.NoError(t, err) 236 + assert.True(t, review1.Official) 237 + }