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
1=== modified file 'lib/lp/code/model/branchmergeproposal.py'
2--- lib/lp/code/model/branchmergeproposal.py 2018-09-10 17:02:47 +0000
3+++ lib/lp/code/model/branchmergeproposal.py 2018-09-19 09:32:34 +0000
4@@ -10,6 +10,7 @@
5 'is_valid_transition',
6 ]
7
8+from collections import defaultdict
9 from email.utils import make_msgid
10 from operator import attrgetter
11 import sys
12@@ -1374,8 +1375,11 @@
13 votes = load_referencing(
14 CodeReviewVoteReference, branch_merge_proposals,
15 ['branch_merge_proposalID'])
16+ votes_map = defaultdict(list)
17+ for vote in votes:
18+ votes_map[vote.branch_merge_proposalID].append(vote)
19 for mp in branch_merge_proposals:
20- get_property_cache(mp).votes = votes
21+ get_property_cache(mp).votes = votes_map.get(mp.id)
22 comments = load_related(CodeReviewComment, votes, ['commentID'])
23 load_related(Message, comments, ['messageID'])
24 person_ids.update(vote.reviewerID for vote in votes)
25
26=== modified file 'lib/lp/code/model/tests/test_branchmergeproposal.py'
27--- lib/lp/code/model/tests/test_branchmergeproposal.py 2018-04-25 12:01:33 +0000
28+++ lib/lp/code/model/tests/test_branchmergeproposal.py 2018-09-19 09:32:34 +0000
29@@ -65,6 +65,7 @@
30 notify_modified,
31 )
32 from lp.code.model.branchmergeproposal import (
33+ BranchMergeProposal,
34 BranchMergeProposalGetter,
35 is_valid_transition,
36 )
37@@ -1740,7 +1741,7 @@
38 merge_proposal.target_branch.owner, vote.reviewer)
39
40 def makeProposalWithReviewer(self, reviewer=None, review_type=None,
41- registrant=None):
42+ registrant=None, **kwargs):
43 """Make a proposal and request a review from reviewer.
44
45 If no reviewer is passed in, make a reviewer.
46@@ -1750,7 +1751,7 @@
47 if registrant is None:
48 registrant = self.factory.makePerson()
49 merge_proposal = make_merge_proposal_without_reviewers(
50- factory=self.factory, registrant=registrant)
51+ factory=self.factory, registrant=registrant, **kwargs)
52 login_person(merge_proposal.source_branch.owner)
53 merge_proposal.nominateReviewer(
54 reviewer=reviewer, registrant=registrant, review_type=review_type)
55@@ -2015,6 +2016,27 @@
56 # Still only one vote.
57 self.assertEqual(1, len(list(merge_proposal.votes)))
58
59+ def test_preloadDataForBMPs_maps_votes_to_proposals(self):
60+ # When called on multiple merge proposals, preloadDataForBMPs
61+ # assigns votes to the correct proposals.
62+ merge_proposal_1, reviewer_1 = self.makeProposalWithReviewer(
63+ set_state=BranchMergeProposalStatus.MERGED)
64+ merge_proposal_2, _ = self.makeProposalWithReviewer(
65+ target_branch=merge_proposal_1.target_branch,
66+ source_branch=merge_proposal_1.source_branch)
67+ merge_proposal_2.nominateReviewer(
68+ reviewer=reviewer_1, registrant=merge_proposal_2.registrant)
69+ votes_1 = list(merge_proposal_1.votes)
70+ self.assertEqual(1, len(votes_1))
71+ votes_2 = list(merge_proposal_2.votes)
72+ self.assertEqual(2, len(votes_2))
73+ BranchMergeProposal.preloadDataForBMPs(
74+ [removeSecurityProxy(merge_proposal_1),
75+ removeSecurityProxy(merge_proposal_2)],
76+ reviewer_1)
77+ self.assertContentEqual(votes_1, merge_proposal_1.votes)
78+ self.assertContentEqual(votes_2, merge_proposal_2.votes)
79+
80
81 class TestBranchMergeProposalResubmit(TestCaseWithFactory):
82