def nominateReviewer(self, reviewer, registrant, review_type=None, _date_created=DEFAULT, _notify_listeners=True): """See `IBranchMergeProposal`.""" # Return the existing vote reference or create a new one. # Lower case the review type. review_type = self._normalizeReviewType(review_type) vote_reference = self.getUsersVoteReference(reviewer, review_type) # If there is no existing review for the reviewer, then create a new # one. If the reviewer is a team, then we don't care if there is # already an existing pending review, as some projects expect multiple # reviews from a team. if vote_reference is None or reviewer.is_team: vote_reference = CodeReviewVoteReference( branch_merge_proposal=self, registrant=registrant, reviewer=reviewer, date_created=_date_created) self._ensureAssociatedBranchesVisibleToReviewer(reviewer) vote_reference.review_type = review_type if _notify_listeners: notify(ReviewerNominatedEvent(vote_reference)) return vote_reference
def _getVoteReference(self, user, review_type): """Get the vote reference for the user. The returned vote reference will either: * the existing vote reference for the user * a vote reference of the same type that has been requested of a team that the user is a member of * a new vote reference for the user """ # Firstly look for a vote reference for the user. ref = self.getUsersVoteReference(user) if ref is not None: return ref # Get all the unclaimed CodeReviewVoteReferences with the review_type # specified. team_ref = self._getTeamVoteReference(user, review_type) if team_ref is not None: return team_ref # If the review_type is not None, check to see if there is an # outstanding team review requested with no specified type. if review_type is not None: team_ref = self._getTeamVoteReference(user, None) if team_ref is not None: return team_ref # Create a new reference. return CodeReviewVoteReference(branch_merge_proposal=self, registrant=user, reviewer=user, review_type=review_type)
def test_to_addrs_excludes_team_reviewers(self): """Addresses for the to header exclude requested team reviewers.""" bmp, subscriber = self.makeProposalWithSubscriber() team = self.factory.makeTeam(email='*****@*****.**') CodeReviewVoteReference( branch_merge_proposal=bmp, reviewer=team, registrant=subscriber) mailer = BMPMailer.forCreation(bmp, bmp.registrant) ctrl = mailer.generateEmail(subscriber.preferredemail.email, subscriber) reviewer = bmp.target_branch.owner reviewer_id = mailer._format_user_address(reviewer) self.assertEqual(set([reviewer_id, bmp.address]), set(ctrl.to_addrs))