Merge lp:~cjwatson/launchpad/fix-mp-vote-preloading into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18782
Proposed branch: lp:~cjwatson/launchpad/fix-mp-vote-preloading
Merge into: lp:launchpad
Diff against target: 81 lines (+29/-3)
2 files modified
lib/lp/code/model/branchmergeproposal.py (+5/-1)
lib/lp/code/model/tests/test_branchmergeproposal.py (+24/-2)
To merge this branch: bzr merge lp:~cjwatson/launchpad/fix-mp-vote-preloading
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+355318@code.launchpad.net

Commit message

Fix assignment of votes to merge proposals when preloading data for multiple merge proposals.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/code/model/branchmergeproposal.py'
--- lib/lp/code/model/branchmergeproposal.py 2018-09-10 17:02:47 +0000
+++ lib/lp/code/model/branchmergeproposal.py 2018-09-19 09:32:34 +0000
@@ -10,6 +10,7 @@
10 'is_valid_transition',10 'is_valid_transition',
11 ]11 ]
1212
13from collections import defaultdict
13from email.utils import make_msgid14from email.utils import make_msgid
14from operator import attrgetter15from operator import attrgetter
15import sys16import sys
@@ -1374,8 +1375,11 @@
1374 votes = load_referencing(1375 votes = load_referencing(
1375 CodeReviewVoteReference, branch_merge_proposals,1376 CodeReviewVoteReference, branch_merge_proposals,
1376 ['branch_merge_proposalID'])1377 ['branch_merge_proposalID'])
1378 votes_map = defaultdict(list)
1379 for vote in votes:
1380 votes_map[vote.branch_merge_proposalID].append(vote)
1377 for mp in branch_merge_proposals:1381 for mp in branch_merge_proposals:
1378 get_property_cache(mp).votes = votes1382 get_property_cache(mp).votes = votes_map.get(mp.id)
1379 comments = load_related(CodeReviewComment, votes, ['commentID'])1383 comments = load_related(CodeReviewComment, votes, ['commentID'])
1380 load_related(Message, comments, ['messageID'])1384 load_related(Message, comments, ['messageID'])
1381 person_ids.update(vote.reviewerID for vote in votes)1385 person_ids.update(vote.reviewerID for vote in votes)
13821386
=== modified file 'lib/lp/code/model/tests/test_branchmergeproposal.py'
--- lib/lp/code/model/tests/test_branchmergeproposal.py 2018-04-25 12:01:33 +0000
+++ lib/lp/code/model/tests/test_branchmergeproposal.py 2018-09-19 09:32:34 +0000
@@ -65,6 +65,7 @@
65 notify_modified,65 notify_modified,
66 )66 )
67from lp.code.model.branchmergeproposal import (67from lp.code.model.branchmergeproposal import (
68 BranchMergeProposal,
68 BranchMergeProposalGetter,69 BranchMergeProposalGetter,
69 is_valid_transition,70 is_valid_transition,
70 )71 )
@@ -1740,7 +1741,7 @@
1740 merge_proposal.target_branch.owner, vote.reviewer)1741 merge_proposal.target_branch.owner, vote.reviewer)
17411742
1742 def makeProposalWithReviewer(self, reviewer=None, review_type=None,1743 def makeProposalWithReviewer(self, reviewer=None, review_type=None,
1743 registrant=None):1744 registrant=None, **kwargs):
1744 """Make a proposal and request a review from reviewer.1745 """Make a proposal and request a review from reviewer.
17451746
1746 If no reviewer is passed in, make a reviewer.1747 If no reviewer is passed in, make a reviewer.
@@ -1750,7 +1751,7 @@
1750 if registrant is None:1751 if registrant is None:
1751 registrant = self.factory.makePerson()1752 registrant = self.factory.makePerson()
1752 merge_proposal = make_merge_proposal_without_reviewers(1753 merge_proposal = make_merge_proposal_without_reviewers(
1753 factory=self.factory, registrant=registrant)1754 factory=self.factory, registrant=registrant, **kwargs)
1754 login_person(merge_proposal.source_branch.owner)1755 login_person(merge_proposal.source_branch.owner)
1755 merge_proposal.nominateReviewer(1756 merge_proposal.nominateReviewer(
1756 reviewer=reviewer, registrant=registrant, review_type=review_type)1757 reviewer=reviewer, registrant=registrant, review_type=review_type)
@@ -2015,6 +2016,27 @@
2015 # Still only one vote.2016 # Still only one vote.
2016 self.assertEqual(1, len(list(merge_proposal.votes)))2017 self.assertEqual(1, len(list(merge_proposal.votes)))
20172018
2019 def test_preloadDataForBMPs_maps_votes_to_proposals(self):
2020 # When called on multiple merge proposals, preloadDataForBMPs
2021 # assigns votes to the correct proposals.
2022 merge_proposal_1, reviewer_1 = self.makeProposalWithReviewer(
2023 set_state=BranchMergeProposalStatus.MERGED)
2024 merge_proposal_2, _ = self.makeProposalWithReviewer(
2025 target_branch=merge_proposal_1.target_branch,
2026 source_branch=merge_proposal_1.source_branch)
2027 merge_proposal_2.nominateReviewer(
2028 reviewer=reviewer_1, registrant=merge_proposal_2.registrant)
2029 votes_1 = list(merge_proposal_1.votes)
2030 self.assertEqual(1, len(votes_1))
2031 votes_2 = list(merge_proposal_2.votes)
2032 self.assertEqual(2, len(votes_2))
2033 BranchMergeProposal.preloadDataForBMPs(
2034 [removeSecurityProxy(merge_proposal_1),
2035 removeSecurityProxy(merge_proposal_2)],
2036 reviewer_1)
2037 self.assertContentEqual(votes_1, merge_proposal_1.votes)
2038 self.assertContentEqual(votes_2, merge_proposal_2.votes)
2039
20182040
2019class TestBranchMergeProposalResubmit(TestCaseWithFactory):2041class TestBranchMergeProposalResubmit(TestCaseWithFactory):
20202042