Merge lp:~salgado/offspring/more-piston-handlers into lp:~linaro-automation/offspring/private-builds

Proposed by Guilherme Salgado
Status: Merged
Approved by: James Tunnicliffe
Approved revision: 89
Merged at revision: 62
Proposed branch: lp:~salgado/offspring/more-piston-handlers
Merge into: lp:~linaro-automation/offspring/private-builds
Diff against target: 221 lines (+112/-25)
4 files modified
lib/offspring/web/queuemanager/handlers.py (+9/-9)
lib/offspring/web/queuemanager/tests/helpers.py (+14/-0)
lib/offspring/web/queuemanager/tests/test_handlers.py (+87/-0)
lib/offspring/web/queuemanager/tests/test_views.py (+2/-16)
To merge this branch: bzr merge lp:~salgado/offspring/more-piston-handlers
Reviewer Review Type Date Requested Status
James Tunnicliffe (community) Approve
Review via email: mp+79586@code.launchpad.net

Description of the change

This one updates BuildRequestHandler to include private objects the user is allowed to see.

To post a comment you must log in.
Revision history for this message
James Tunnicliffe (dooferlad) wrote :

Looks good.

Revision history for this message
James Tunnicliffe (dooferlad) wrote :

Last comment wasn't an approve one. Who knows if I need to do this...

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/offspring/web/queuemanager/handlers.py'
2--- lib/offspring/web/queuemanager/handlers.py 2011-10-13 23:23:41 +0000
3+++ lib/offspring/web/queuemanager/handlers.py 2011-10-17 17:30:29 +0000
4@@ -154,7 +154,6 @@
5 return results
6
7
8-# TODO: Must be made privacy-aware.
9 class BuildRequestHandler(BaseHandler):
10 allowed_methods = ('GET', 'POST', 'DELETE')
11 model = BuildRequest
12@@ -162,10 +161,10 @@
13
14 def read(self, request, projectName=None, request_id=None):
15 try:
16+ requests = BuildRequest.all_objects.accessible_by_user(
17+ request.user)
18 if projectName is not None:
19- requests = BuildRequest.objects.filter(project__name=projectName)
20- else:
21- requests = BuildRequest.objects
22+ requests = requests.filter(project__name=projectName)
23 except:
24 return rc.NOT_FOUND
25 if request_id is not None:
26@@ -177,12 +176,12 @@
27 def delete(self, request, projectName=None, request_id=None):
28 if request.user.has_perm("queuemanager.can_build"):
29 try:
30+ requests = BuildRequest.all_objects.accessible_by_user(
31+ request.user)
32 if projectName is not None:
33- requests = BuildRequest.objects.filter(project__name=projectName)
34- else:
35- requests = BuildRequest.objects
36+ requests = requests.filter(project__name=projectName)
37 except:
38- return RC.NOT_FOUND
39+ return rc.NOT_FOUND
40 if request_id is not None:
41 try:
42 requests.get(pk=request_id).delete()
43@@ -202,7 +201,8 @@
44 def create(self, request, projectName):
45 if request.user.has_perm("queuemanager.can_build"):
46 try:
47- p = Project.objects.get(pk=projectName)
48+ p = Project.all_objects.accessible_by_user(request.user).get(
49+ pk=projectName)
50 if request.POST.has_key('build_reason'):
51 request = BuildRequest.queue_build(p, request.user, reason=request.POST['build_reason'], scoreBonus=25)
52 else:
53
54=== added file 'lib/offspring/web/queuemanager/tests/helpers.py'
55--- lib/offspring/web/queuemanager/tests/helpers.py 1970-01-01 00:00:00 +0000
56+++ lib/offspring/web/queuemanager/tests/helpers.py 2011-10-17 17:30:29 +0000
57@@ -0,0 +1,14 @@
58+from django.contrib.auth.models import (
59+ Group,
60+ Permission,
61+ )
62+
63+
64+def grant_permission_to_user(user, permission):
65+ group = Group(name=user.username)
66+ group.save()
67+ group.permissions.add(Permission.objects.get(codename=permission))
68+ group.save()
69+ user.groups.add(group)
70+ user.save()
71+ return user
72
73=== modified file 'lib/offspring/web/queuemanager/tests/test_handlers.py'
74--- lib/offspring/web/queuemanager/tests/test_handlers.py 2011-10-13 23:16:02 +0000
75+++ lib/offspring/web/queuemanager/tests/test_handlers.py 2011-10-17 17:30:29 +0000
76@@ -6,13 +6,18 @@
77 from django.test import TestCase
78 from django.contrib.sessions.middleware import SessionMiddleware
79
80+from piston.utils import rc
81+
82+from offspring.web.queuemanager.models import BuildRequest
83 from offspring.web.queuemanager.handlers import (
84 BuildManifestComparisonHandler,
85 BuildManifestHandler,
86+ BuildRequestHandler,
87 BuildResultHandler,
88 ReleaseHandler,
89 )
90 from offspring.web.queuemanager.tests.factory import factory
91+from offspring.web.queuemanager.tests.helpers import grant_permission_to_user
92
93
94 class BaseHandlerTestCase(TestCase):
95@@ -97,6 +102,88 @@
96 self.assertEqual(0, results.count())
97
98
99+class BuildRequestHandlerTests(BaseHandlerTestCase):
100+
101+ def test_public_build_request_is_visible_to_anyone(self):
102+ job = factory.makeBuildRequest(
103+ project=factory.makeProject(is_private=False))
104+ results = BuildRequestHandler().read(
105+ self.request, projectName=job.project.name, request_id=job.id)
106+ self.assertEqual(job, results)
107+
108+ def test_private_build_request_is_visible_to_owner(self):
109+ job = factory.makeBuildRequest(
110+ project=factory.makeProject(is_private=True))
111+ self._login(job.project.owner)
112+ results = BuildRequestHandler().read(
113+ self.request, projectName=job.project.name, request_id=job.id)
114+ self.assertEqual(job, results)
115+
116+ def test_private_build_request_is_not_visible_to_others(self):
117+ job = factory.makeBuildRequest(
118+ project=factory.makeProject(is_private=True))
119+ self._login(factory.makeUser())
120+ self.assertRaises(
121+ BuildRequest.DoesNotExist,
122+ BuildRequestHandler().read,
123+ self.request, projectName=job.project.name, request_id=job.id)
124+
125+ def test_new_build_request_on_public_project(self):
126+ project = factory.makeProject(is_private=False)
127+ self.assertCreateReturnCode(
128+ project, factory.makeUser(), rc.CREATED.status_code)
129+
130+ def test_owner_requests_new_build_on_private_project(self):
131+ project = factory.makeProject(is_private=True)
132+ self.assertCreateReturnCode(
133+ project, project.owner, rc.CREATED.status_code)
134+
135+ def test_other_user_requests_new_build_on_private_project(self):
136+ project = factory.makeProject(is_private=True)
137+ self.assertCreateReturnCode(
138+ project, factory.makeUser(), rc.BAD_REQUEST.status_code)
139+
140+ def test_delete_build_request_on_public_project(self):
141+ job = factory.makeBuildRequest(
142+ project=factory.makeProject(is_private=False))
143+ self.assertDeleteReturnCode(
144+ job, factory.makeUser(), rc.DELETED.status_code)
145+
146+ def test_owner_deletes_build_request_on_private_project(self):
147+ job = factory.makeBuildRequest(
148+ project=factory.makeProject(is_private=True))
149+ self.assertDeleteReturnCode(
150+ job, job.project.owner, rc.DELETED.status_code)
151+
152+ def test_other_user_deletes_build_request_on_private_project(self):
153+ job = factory.makeBuildRequest(
154+ project=factory.makeProject(is_private=True))
155+ self.assertDeleteReturnCode(
156+ job, factory.makeUser(), rc.NOT_FOUND.status_code)
157+
158+ def assertCreateReturnCode(self, project, user, return_code):
159+ """Assert that BuildRequestHandler.create() returns the given code.
160+
161+ Also grant the given user the 'can_build' permission and logs it in.
162+ """
163+ grant_permission_to_user(user, 'can_build')
164+ self._login(user)
165+ result = BuildRequestHandler().create(
166+ self.request, projectName=project.name)
167+ self.assertEqual(return_code, result.status_code)
168+
169+ def assertDeleteReturnCode(self, job, user, return_code):
170+ """Assert that BuildRequestHandler.delete() returns the given code.
171+
172+ Also grant the given user the 'can_build' permission and logs it in.
173+ """
174+ grant_permission_to_user(user, 'can_build')
175+ self._login(user)
176+ result = BuildRequestHandler().delete(
177+ self.request, projectName=job.project.name, request_id=job.id)
178+ self.assertEqual(return_code, result.status_code)
179+
180+
181 class ReleaseHandlerTests(BaseHandlerTestCase):
182
183 def test_public_project_release(self):
184
185=== modified file 'lib/offspring/web/queuemanager/tests/test_views.py'
186--- lib/offspring/web/queuemanager/tests/test_views.py 2011-10-10 21:15:48 +0000
187+++ lib/offspring/web/queuemanager/tests/test_views.py 2011-10-17 17:30:29 +0000
188@@ -1,9 +1,5 @@
189 from django.core.urlresolvers import reverse
190-from django.contrib.auth.models import (
191- AnonymousUser,
192- Group,
193- Permission,
194- )
195+from django.contrib.auth.models import AnonymousUser
196 from django.http import Http404
197 from django.test import TestCase
198
199@@ -13,6 +9,7 @@
200 )
201 from offspring.web.queuemanager.views import get_possibly_private_object
202 from offspring.web.queuemanager.tests.factory import factory
203+from offspring.web.queuemanager.tests.helpers import grant_permission_to_user
204
205
206 class Test_get_possibly_private_object(TestCase):
207@@ -309,14 +306,3 @@
208 def make_user_and_login(client):
209 user = factory.makeUser()
210 return client.login(username=user.username, password=user.username)
211-
212-
213-def grant_permission_to_user(user, permission):
214- group = Group(name=user.username)
215- group.save()
216- group.permissions.add(Permission.objects.get(codename=permission))
217- group.save()
218- user.groups.add(group)
219- user.save()
220- return user
221-

Subscribers

People subscribed via source and target branches