Skip to content

Commit fe519d8

Browse files
jpraetlafriks
andauthored
Restore previous official review when an official review is deleted (#22449)
Fix #22406 Co-authored-by: Lauris BH <[email protected]>
1 parent fc037b4 commit fe519d8

File tree

2 files changed

+58
-9
lines changed

2 files changed

+58
-9
lines changed

models/issues/review.go

+23-9
Original file line numberDiff line numberDiff line change
@@ -733,17 +733,9 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Commen
733733
if err != nil {
734734
return nil, err
735735
} 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 {
739737
return nil, err
740738
}
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-
}
747739
}
748740

749741
comment, err := CreateComment(ctx, &CreateCommentOptions{
@@ -761,6 +753,22 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Commen
761753
return comment, committer.Commit()
762754
}
763755

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
770+
}
771+
764772
// AddTeamReviewRequest add a review request from one team
765773
func AddTeamReviewRequest(issue *Issue, reviewer *organization.Team, doer *user_model.User) (*Comment, error) {
766774
ctx, committer, err := db.TxContext(db.DefaultContext)
@@ -979,6 +987,12 @@ func DeleteReview(r *Review) error {
979987
return err
980988
}
981989

990+
if r.Official {
991+
if err := restoreLatestOfficialReview(ctx, r.IssueID, r.ReviewerID); err != nil {
992+
return err
993+
}
994+
}
995+
982996
return committer.Commit()
983997
}
984998

models/issues/review_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -200,3 +200,38 @@ func TestDismissReview(t *testing.T) {
200200
assert.False(t, requestReviewExample.Dismissed)
201201
assert.True(t, approveReviewExample.Dismissed)
202202
}
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+
}

0 commit comments

Comments
 (0)