Merge lp:~twom/launchpad/rescan-button-needs-less-permissions into lp:launchpad

Proposed by Tom Wardill
Status: Merged
Merged at revision: 18876
Proposed branch: lp:~twom/launchpad/rescan-button-needs-less-permissions
Merge into: lp:launchpad
Diff against target: 58 lines (+37/-1)
2 files modified
lib/lp/code/browser/configure.zcml (+1/-1)
lib/lp/code/browser/tests/test_branch.py (+36/-0)
To merge this branch: bzr merge lp:~twom/launchpad/rescan-button-needs-less-permissions
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+362874@code.launchpad.net

Commit message

Make the permissions for the Branch rescan more permissive.

Description of the change

Currently only the branch owner can rescan, this will allow product owners and commercial owners to also cause a rescan.

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) :
review: Needs Fixing
Revision history for this message
Colin Watson (cjwatson) :
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/browser/configure.zcml'
2--- lib/lp/code/browser/configure.zcml 2019-01-31 13:48:34 +0000
3+++ lib/lp/code/browser/configure.zcml 2019-02-07 17:12:49 +0000
4@@ -446,7 +446,7 @@
5 name="+rescan"
6 for="lp.code.interfaces.branch.IBranch"
7 class="lp.code.browser.branch.BranchRescanView"
8- permission="launchpad.Edit"
9+ permission="launchpad.Moderate"
10 template="../templates/branch-rescan.pt"/>
11 <browser:page
12 name="+edit-import"
13
14=== modified file 'lib/lp/code/browser/tests/test_branch.py'
15--- lib/lp/code/browser/tests/test_branch.py 2019-01-30 17:24:15 +0000
16+++ lib/lp/code/browser/tests/test_branch.py 2019-02-07 17:12:49 +0000
17@@ -649,6 +649,42 @@
18 self.assertThat(recorder, HasQueryCount(Equals(30)))
19
20
21+class TestBranchRescanView(BrowserTestCase):
22+
23+ layer = DatabaseFunctionalLayer
24+
25+ def test_owner_can_see_rescan(self):
26+ branch = self.factory.makeAnyBranch()
27+ job = BranchScanJob.create(branch)
28+ job.job._status = JobStatus.FAILED
29+ branch_url = canonical_url(
30+ branch, view_name='+rescan', rootsite='code')
31+ browser = self.getUserBrowser(branch_url, user=branch.owner)
32+ browser.open(branch_url)
33+ self.assertIn('schedule a rescan', browser.contents)
34+
35+ def test_product_owner_can_see_rescan(self):
36+ project_owner = self.factory.makePerson()
37+ product = self.factory.makeProduct(owner=project_owner)
38+ branch = self.factory.makeAnyBranch(product=product)
39+ job = BranchScanJob.create(branch)
40+ job.job._status = JobStatus.FAILED
41+ branch_url = canonical_url(
42+ branch, view_name='+rescan', rootsite='code')
43+ browser = self.getUserBrowser(branch_url, user=project_owner)
44+ browser.open(branch_url)
45+ self.assertIn('schedule a rescan', browser.contents)
46+
47+ def test_other_user_can_not_see_rescan(self):
48+ branch = self.factory.makeAnyBranch()
49+ job = BranchScanJob.create(branch)
50+ job.job._status = JobStatus.FAILED
51+ branch_url = canonical_url(
52+ branch, view_name='+rescan', rootsite='code')
53+ self.assertRaises(
54+ Unauthorized, self.getUserBrowser, branch_url)
55+
56+
57 class TestBranchViewPrivateArtifacts(BrowserTestCase):
58 """ Tests that branches with private team artifacts can be viewed.
59