def test_delete_pending_by_registrant(self): # A pending review can be deleted by the person requesting the review. reviewer = self.factory.makePerson() bmp = make_merge_proposal_without_reviewers(self.factory) login_person(bmp.registrant) review = bmp.nominateReviewer(reviewer=reviewer, registrant=bmp.registrant) review.delete() self.assertEqual([], list(bmp.votes))
def test_delete_pending_by_registrant(self): # A pending review can be deleted by the person requesting the review. reviewer = self.factory.makePerson() bmp = make_merge_proposal_without_reviewers(self.factory) login_person(bmp.registrant) review = bmp.nominateReviewer( reviewer=reviewer, registrant=bmp.registrant) review.delete() self.assertEqual([], list(bmp.votes))
def test_delete_not_pending(self): # A non-pending review reference cannot be deleted. reviewer = self.factory.makePerson() bmp = make_merge_proposal_without_reviewers(self.factory) login_person(reviewer) bmp.createComment( reviewer, 'Message subject', 'Message content', vote=CodeReviewVote.APPROVE) [review] = list(bmp.votes) self.assertRaises(ReviewNotPending, review.delete)
def test_delete_not_pending(self): # A non-pending review reference cannot be deleted. reviewer = self.factory.makePerson() bmp = make_merge_proposal_without_reviewers(self.factory) login_person(reviewer) bmp.createComment(reviewer, 'Message subject', 'Message content', vote=CodeReviewVote.APPROVE) [review] = list(bmp.votes) self.assertRaises(ReviewNotPending, review.delete)
def test_delete_pending_by_target_branch_owner(self): # A pending review can be deleted by anyone with edit permissions on # the target branch. reviewer = self.factory.makePerson() bmp = make_merge_proposal_without_reviewers(self.factory) login_person(bmp.registrant) review = bmp.nominateReviewer(reviewer=reviewer, registrant=bmp.registrant) login_person(bmp.target_branch.owner) review.delete() self.assertEqual([], list(bmp.votes))
def test_delete_pending_by_target_branch_owner(self): # A pending review can be deleted by anyone with edit permissions on # the target branch. reviewer = self.factory.makePerson() bmp = make_merge_proposal_without_reviewers(self.factory) login_person(bmp.registrant) review = bmp.nominateReviewer( reviewer=reviewer, registrant=bmp.registrant) login_person(bmp.target_branch.owner) review.delete() self.assertEqual([], list(bmp.votes))
def setUp(self): super(TestAddReviewerEmailCommand, self).setUp( user='******') self._old_policy = setSecurityPolicy(LaunchpadSecurityPolicy) self.merge_proposal = ( make_merge_proposal_without_reviewers(self.factory)) # Default the user to be the target branch owner, so they are # authorised to update the status. self.context = CodeReviewEmailCommandExecutionContext( self.merge_proposal, self.merge_proposal.target_branch.owner) self.reviewer = self.factory.makePerson() switch_dbuser(config.processmail.dbuser)
def test_create_vote(self): """CodeReviewVotes can be created""" merge_proposal = make_merge_proposal_without_reviewers(self.factory) reviewer = self.factory.makePerson() login_person(merge_proposal.registrant) vote = merge_proposal.nominateReviewer(reviewer, merge_proposal.registrant) self.assertEqual(reviewer, vote.reviewer) self.assertEqual(merge_proposal.registrant, vote.registrant) self.assertEqual(merge_proposal, vote.branch_merge_proposal) self.assertEqual([vote], list(merge_proposal.votes)) self.assertSqlAttributeEqualsDate(vote, 'date_created', UTC_NOW) self.assertProvides(vote, ICodeReviewVoteReference)
def test_reviewer_with_diff(self): """Requesting a review with a diff works.""" bmp = make_merge_proposal_without_reviewers(self.factory) self.factory.makePreviewDiff(merge_proposal=bmp) # To record the diff in the librarian. transaction.commit() eric = self.factory.makePerson(name="eric", email="*****@*****.**") mail = self.factory.makeSignedMessage(body=' reviewer eric') email_addr = bmp.address switch_dbuser(config.processmail.dbuser) self.code_handler.process(mail, email_addr, None) [vote] = bmp.votes self.assertEqual(eric, vote.reviewer)
def test_reviewer_with_diff(self): """Requesting a review with a diff works.""" bmp = make_merge_proposal_without_reviewers(self.factory) preview_diff = self.factory.makePreviewDiff(merge_proposal=bmp) # To record the diff in the librarian. transaction.commit() eric = self.factory.makePerson(name="eric", email="*****@*****.**") mail = self.factory.makeSignedMessage(body=' reviewer eric') email_addr = bmp.address switch_dbuser(config.processmail.dbuser) self.code_handler.process(mail, email_addr, None) [vote] = bmp.votes self.assertEqual(eric, vote.reviewer)
def test_create_vote(self): """CodeReviewVotes can be created""" merge_proposal = make_merge_proposal_without_reviewers(self.factory) reviewer = self.factory.makePerson() login_person(merge_proposal.registrant) vote = merge_proposal.nominateReviewer( reviewer, merge_proposal.registrant) self.assertEqual(reviewer, vote.reviewer) self.assertEqual(merge_proposal.registrant, vote.registrant) self.assertEqual(merge_proposal, vote.branch_merge_proposal) self.assertEqual([vote], list(merge_proposal.votes)) self.assertSqlAttributeEqualsDate( vote, 'date_created', UTC_NOW) self.assertProvides(vote, ICodeReviewVoteReference)
def makeMergeProposalWithReview(self, completed=False): """Return a new merge proposal with a review.""" bmp = make_merge_proposal_without_reviewers(self.factory) reviewer = self.factory.makePerson() if completed: login_person(reviewer) bmp.createComment( reviewer, 'Message subject', 'Message content', vote=CodeReviewVote.APPROVE) [review] = list(bmp.votes) else: login_person(bmp.registrant) review = bmp.nominateReviewer( reviewer=reviewer, registrant=bmp.registrant) return bmp, review
def makeMergeProposalWithReview(self, completed=False): """Return a new merge proposal with a review.""" bmp = make_merge_proposal_without_reviewers(self.factory) reviewer = self.factory.makePerson() if completed: login_person(reviewer) bmp.createComment(reviewer, 'Message subject', 'Message content', vote=CodeReviewVote.APPROVE) [review] = list(bmp.votes) else: login_person(bmp.registrant) review = bmp.nominateReviewer(reviewer=reviewer, registrant=bmp.registrant) return bmp, review