Merge lp:~stevenk/launchpad/preview-diff-none-type into lp:launchpad

Proposed by Steve Kowalik
Status: Merged
Approved by: Steve Kowalik
Approved revision: no longer in the source branch.
Merged at revision: 16062
Proposed branch: lp:~stevenk/launchpad/preview-diff-none-type
Merge into: lp:launchpad
Diff against target: 123 lines (+23/-25)
3 files modified
lib/lp/code/interfaces/diff.py (+0/-2)
lib/lp/code/model/tests/test_branchmergeproposal.py (+22/-22)
versions.cfg (+1/-1)
To merge this branch: bzr merge lp:~stevenk/launchpad/preview-diff-none-type
Reviewer Review Type Date Requested Status
Ian Booth (community) Approve
Review via email: mp+126601@code.launchpad.net

Commit message

Update lazr.restful to 0.19.8, and add a test for fetching a NULL preview_diff of an BMP over the API.

Description of the change

IDiff.diffstat is exported as Dict(), so lazr.restful attempts to unmarshall it as so. This would be fine, except when the column in the DB is NULL and the method returns None. Update to lazr.restful 0.19.8 solving the failure.

I have clawed back the LoC by some refactoring of the tests and removing the now unneeded pylint garbage.

To post a comment you must log in.
Revision history for this message
Ian Booth (wallyworld) wrote :

Looks great

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/code/interfaces/diff.py'
2--- lib/lp/code/interfaces/diff.py 2011-12-24 16:54:44 +0000
3+++ lib/lp/code/interfaces/diff.py 2012-10-02 01:43:21 +0000
4@@ -1,8 +1,6 @@
5 # Copyright 2009-2011 Canonical Ltd. This software is licensed under the
6 # GNU Affero General Public License version 3 (see the file LICENSE).
7
8-# pylint: disable-msg=E0211,E0213
9-
10 """Interfaces including and related to IDiff."""
11
12 __metaclass__ = type
13
14=== modified file 'lib/lp/code/model/tests/test_branchmergeproposal.py'
15--- lib/lp/code/model/tests/test_branchmergeproposal.py 2012-09-19 01:19:35 +0000
16+++ lib/lp/code/model/tests/test_branchmergeproposal.py 2012-10-02 01:43:21 +0000
17@@ -1,8 +1,6 @@
18 # Copyright 2009-2012 Canonical Ltd. This software is licensed under the
19 # GNU Affero General Public License version 3 (see the file LICENSE).
20
21-# pylint: disable-msg=F0401
22-
23 """Tests for BranchMergeProposals."""
24
25 __metaclass__ = type
26@@ -1521,13 +1519,11 @@
27 login_person(merge_proposal.source_branch.owner)
28 reviewer = self.factory.makePerson()
29 reference = merge_proposal.nominateReviewer(
30- reviewer=reviewer,
31- registrant=merge_proposal.source_branch.owner,
32+ reviewer=reviewer, registrant=merge_proposal.source_branch.owner,
33 review_type='General')
34 self.assertEqual('general', reference.review_type)
35 merge_proposal.nominateReviewer(
36- reviewer=reviewer,
37- registrant=merge_proposal.source_branch.owner,
38+ reviewer=reviewer, registrant=merge_proposal.source_branch.owner,
39 review_type='Specific')
40 # Note we're using the reference from the first call
41 self.assertEqual('specific', reference.review_type)
42@@ -1539,11 +1535,9 @@
43 BranchSubscriptionNotificationLevel.NOEMAIL,
44 sub.notification_level)
45 self.assertEqual(
46- BranchSubscriptionDiffSize.NODIFF,
47- sub.max_diff_lines)
48+ BranchSubscriptionDiffSize.NODIFF, sub.max_diff_lines)
49 self.assertEqual(
50- CodeReviewNotificationLevel.FULL,
51- sub.review_level)
52+ CodeReviewNotificationLevel.FULL, sub.review_level)
53 # The reviewer can see the branch.
54 self.assertTrue(branch.visibleByUser(reviewer))
55 if branch.stacked_on is not None:
56@@ -1585,6 +1579,14 @@
57 membership_policy=TeamMembershipPolicy.MODERATED)
58 self._test_nominate_grants_visibility(reviewer)
59
60+ def _assertVoteReference(self, votes, reviewer, comment):
61+ self.assertEqual(1, len(votes))
62+ vote_reference = votes[0]
63+ self.assertEqual(reviewer, vote_reference.reviewer)
64+ self.assertEqual(reviewer, vote_reference.registrant)
65+ self.assertIsNone(vote_reference.review_type)
66+ self.assertEqual(comment, vote_reference.comment)
67+
68 def test_comment_with_vote_creates_reference(self):
69 """A comment with a vote creates a vote reference."""
70 reviewer = self.factory.makePerson()
71@@ -1594,12 +1596,7 @@
72 reviewer, 'Message subject', 'Message content',
73 vote=CodeReviewVote.APPROVE)
74 votes = list(merge_proposal.votes)
75- self.assertEqual(1, len(votes))
76- vote_reference = votes[0]
77- self.assertEqual(reviewer, vote_reference.reviewer)
78- self.assertEqual(reviewer, vote_reference.registrant)
79- self.assertTrue(vote_reference.review_type is None)
80- self.assertEqual(comment, vote_reference.comment)
81+ self._assertVoteReference(votes, reviewer, comment)
82
83 def test_comment_without_a_vote_does_not_create_reference(self):
84 """A comment with a vote creates a vote reference."""
85@@ -1621,12 +1618,7 @@
86 reviewer, 'Message subject', 'Message content',
87 vote=CodeReviewVote.APPROVE)
88 votes = list(merge_proposal.votes)
89- self.assertEqual(1, len(votes))
90- vote_reference = votes[0]
91- self.assertEqual(reviewer, vote_reference.reviewer)
92- self.assertEqual(reviewer, vote_reference.registrant)
93- self.assertTrue(vote_reference.review_type is None)
94- self.assertEqual(comment2, vote_reference.comment)
95+ self._assertVoteReference(votes, reviewer, comment2)
96
97 def test_vote_by_nominated_reuses_reference(self):
98 """A comment with a vote for a nominated reviewer alters reference."""
99@@ -2086,3 +2078,11 @@
100 BadRequest,
101 '(.|\n)*Invalid state transition for merge proposal(.|\n)*'):
102 ws_bmp.setStatus(status='Approved')
103+
104+ def test_previewdiff_with_null_diffstat(self):
105+ # A previewdiff with an empty diffstat doesn't crash when fetched.
106+ previewdiff = self.factory.makePreviewDiff()
107+ previewdiff.diff.diffstat = None
108+ user = previewdiff.branch_merge_proposal.target_branch.owner
109+ ws_previewdiff = self.wsObject(previewdiff, user=user)
110+ self.assertIsNone(ws_previewdiff.diffstat)
111
112=== modified file 'versions.cfg'
113--- versions.cfg 2012-09-26 07:59:35 +0000
114+++ versions.cfg 2012-10-02 01:43:21 +0000
115@@ -49,7 +49,7 @@
116 lazr.enum = 1.1.3
117 lazr.jobrunner = 0.10
118 lazr.lifecycle = 1.1
119-lazr.restful = 0.19.7
120+lazr.restful = 0.19.8
121 lazr.restfulclient = 0.13.1
122 lazr.smtptest = 1.3
123 lazr.testing = 0.1.1