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…
	
	Add table
		Add a link
		
	
		Reference in a new issue