Merge lp:~cjwatson/launchpad/crvr-anonymous into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18784
Proposed branch: lp:~cjwatson/launchpad/crvr-anonymous
Merge into: lp:launchpad
Diff against target: 77 lines (+37/-1)
2 files modified
lib/lp/code/model/tests/test_codereviewvote.py (+28/-1)
lib/lp/security.py (+9/-0)
To merge this branch: bzr merge lp:~cjwatson/launchpad/crvr-anonymous
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+354991@code.launchpad.net

Commit message

Allow anonymous launchpad.View on ICodeReviewVoteReference for public 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/tests/test_codereviewvote.py'
2--- lib/lp/code/model/tests/test_codereviewvote.py 2017-10-04 01:53:48 +0000
3+++ lib/lp/code/model/tests/test_codereviewvote.py 2018-09-15 19:23:00 +0000
4@@ -1,10 +1,11 @@
5-# Copyright 2009-2017 Canonical Ltd. This software is licensed under the
6+# Copyright 2009-2018 Canonical Ltd. This software is licensed under the
7 # GNU Affero General Public License version 3 (see the file LICENSE).
8
9 from __future__ import absolute_import, print_function, unicode_literals
10
11 from zope.security.interfaces import Unauthorized
12
13+from lp.app.enums import InformationType
14 from lp.code.enums import CodeReviewVote
15 from lp.code.errors import (
16 ClaimReviewFailed,
17@@ -14,7 +15,10 @@
18 from lp.code.interfaces.codereviewvote import ICodeReviewVoteReference
19 from lp.code.tests.helpers import make_merge_proposal_without_reviewers
20 from lp.services.database.constants import UTC_NOW
21+from lp.services.webapp.authorization import check_permission
22 from lp.testing import (
23+ ANONYMOUS,
24+ login,
25 login_person,
26 TestCaseWithFactory,
27 )
28@@ -40,6 +44,29 @@
29 vote, 'date_created', UTC_NOW)
30 self.assertProvides(vote, ICodeReviewVoteReference)
31
32+ def test_anonymous_public(self):
33+ """Anonymous users can see votes on public merge proposals."""
34+ merge_proposal = make_merge_proposal_without_reviewers(self.factory)
35+ reviewer = self.factory.makePerson()
36+ login_person(merge_proposal.registrant)
37+ vote = merge_proposal.nominateReviewer(
38+ reviewer, merge_proposal.registrant)
39+ login(ANONYMOUS)
40+ self.assertTrue(check_permission('launchpad.View', vote))
41+
42+ def test_anonymous_private(self):
43+ """Anonymous users cannot see votes on private merge proposals."""
44+ owner = self.factory.makePerson()
45+ login_person(owner)
46+ target_branch = self.factory.makeBranch(
47+ owner=owner, information_type=InformationType.USERDATA)
48+ merge_proposal = make_merge_proposal_without_reviewers(
49+ self.factory, target_branch=target_branch, registrant=owner)
50+ reviewer = self.factory.makePerson()
51+ vote = merge_proposal.nominateReviewer(reviewer, owner)
52+ login(ANONYMOUS)
53+ self.assertFalse(check_permission('launchpad.View', vote))
54+
55
56 class TestCodeReviewVoteReferenceClaimReview(TestCaseWithFactory):
57 """Tests for CodeReviewVoteReference.claimReview."""
58
59=== modified file 'lib/lp/security.py'
60--- lib/lp/security.py 2018-06-15 13:21:14 +0000
61+++ lib/lp/security.py 2018-09-15 19:23:00 +0000
62@@ -2436,6 +2436,15 @@
63 super(PreviewDiffView, self).__init__(obj, obj.branch_merge_proposal)
64
65
66+class CodeReviewVoteReferenceView(DelegatedAuthorization):
67+ permission = 'launchpad.View'
68+ usedfor = ICodeReviewVoteReference
69+
70+ def __init__(self, obj):
71+ super(CodeReviewVoteReferenceView, self).__init__(
72+ obj, obj.branch_merge_proposal)
73+
74+
75 class CodeReviewVoteReferenceEdit(DelegatedAuthorization):
76 permission = 'launchpad.Edit'
77 usedfor = ICodeReviewVoteReference