Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(223)

Side by Side Diff: appengine/monorail/project/test/peopledetail_test.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is govered by a BSD-style
3 # license that can be found in the LICENSE file or at
4 # https://developers.google.com/open-source/licenses/bsd
5
6 """Unittest for the people detail page."""
7
8 import logging
9
10 import unittest
11
12 import webapp2
13
14 from framework import monorailrequest
15 from framework import permissions
16 from project import peopledetail
17 from proto import project_pb2
18 from services import service_manager
19 from testing import fake
20 from testing import testing_helpers
21
22
23 class PeopleDetailTest(unittest.TestCase):
24
25 def setUp(self):
26 services = service_manager.Services(
27 project=fake.ProjectService(),
28 user=fake.UserService())
29 services.user.TestAddUser('jrobbins', 111L)
30 services.user.TestAddUser('jrobbins@jrobbins.org', 333L)
31 services.user.TestAddUser('jrobbins@chromium.org', 555L)
32 services.user.TestAddUser('imso31337@gmail.com', 999L)
33 self.project = services.project.TestAddProject('proj')
34 self.project.owner_ids.extend([111L, 222L])
35 self.project.committer_ids.extend([333L, 444L])
36 self.project.contributor_ids.extend([555L])
37 self.servlet = peopledetail.PeopleDetail('req', 'res', services=services)
38
39 def VerifyAccess(self, exception_expected):
40 mr = testing_helpers.MakeMonorailRequest(
41 path='/p/proj/people/detail?u=111',
42 project=self.project,
43 perms=permissions.OWNER_ACTIVE_PERMISSIONSET)
44 self.servlet.AssertBasePermission(mr)
45 # Owner never raises PermissionException.
46
47 mr = testing_helpers.MakeMonorailRequest(
48 path='/p/proj/people/detail?u=333',
49 project=self.project,
50 perms=permissions.COMMITTER_ACTIVE_PERMISSIONSET)
51 self.servlet.AssertBasePermission(mr)
52 # Committer never raises PermissionException.
53
54 mr = testing_helpers.MakeMonorailRequest(
55 path='/p/proj/people/detail?u=555',
56 project=self.project,
57 perms=permissions.CONTRIBUTOR_ACTIVE_PERMISSIONSET)
58 if exception_expected:
59 self.assertRaises(permissions.PermissionException,
60 self.servlet.AssertBasePermission, mr)
61 else:
62 self.servlet.AssertBasePermission(mr)
63 # No PermissionException raised
64
65 # Sign-out users
66 mr = testing_helpers.MakeMonorailRequest(
67 path='/p/proj/people/detail?u=555',
68 project=self.project,
69 perms=permissions.READ_ONLY_PERMISSIONSET)
70 if exception_expected:
71 self.assertRaises(permissions.PermissionException,
72 self.servlet.AssertBasePermission, mr)
73 else:
74 self.servlet.AssertBasePermission(mr)
75
76 # Non-membr users
77 mr = testing_helpers.MakeMonorailRequest(
78 path='/p/proj/people/detail?u=555',
79 project=self.project,
80 perms=permissions.USER_PERMISSIONSET)
81 if exception_expected:
82 self.assertRaises(permissions.PermissionException,
83 self.servlet.AssertBasePermission, mr)
84 else:
85 self.servlet.AssertBasePermission(mr)
86
87 def testAssertBasePermission_Normal(self):
88 self.VerifyAccess(False)
89
90 def testAssertBasePermission_HubSpoke(self):
91 self.project.only_owners_see_contributors = True
92 self.VerifyAccess(True)
93
94 def testAssertBasePermission_HubSpokeViewingSelf(self):
95 self.project.only_owners_see_contributors = True
96 mr = testing_helpers.MakeMonorailRequest(
97 path='/p/proj/people/detail?u=333',
98 project=self.project,
99 perms=permissions.COMMITTER_ACTIVE_PERMISSIONSET)
100 mr.auth.user_id = 333L
101 self.servlet.AssertBasePermission(mr)
102 # No PermissionException raised
103
104 def testGatherPageData(self):
105 mr = testing_helpers.MakeMonorailRequest(
106 path='/p/proj/people/detail?u=111',
107 project=self.project,
108 perms=permissions.OWNER_ACTIVE_PERMISSIONSET)
109 mr.auth = monorailrequest.AuthData()
110 page_data = self.servlet.GatherPageData(mr)
111 self.assertFalse(page_data['warn_abandonment'])
112 self.assertEquals(2, page_data['total_num_owners'])
113 # TODO(jrobbins): fill in tests for all other aspects.
114
115 def testValidateMemberID(self):
116 # We can validate owners
117 self.assertEquals(
118 111L,
119 self.servlet.ValidateMemberID('fake cnxn', 111, self.project))
120
121 # We can parse members
122 self.assertEquals(
123 333L,
124 self.servlet.ValidateMemberID(
125 'fake cnxn', 333, self.project))
126
127 # 404 for user that does not exist
128 try:
129 self.servlet.ValidateMemberID('fake cnxn', 8933, self.project)
130 self.fail()
131 except webapp2.HTTPException as e:
132 self.assertEquals(404, e.code)
133
134 # 404 for valid user that is not in this project
135 try:
136 self.servlet.ValidateMemberID('fake cnxn', 999, self.project)
137 self.fail()
138 except webapp2.HTTPException as e:
139 self.assertEquals(404, e.code)
140
141 def testParsePersonData_BadPost(self):
142 mr = testing_helpers.MakeMonorailRequest(
143 path='/p/proj/people/detail',
144 project=self.project)
145 post_data = fake.PostData()
146 try:
147 _result = self.servlet.ParsePersonData(mr, post_data)
148 self.fail()
149 except monorailrequest.InputException:
150 pass
151
152 mr = testing_helpers.MakeMonorailRequest(
153 path='/p/proj/people/detail?u=',
154 project=self.project)
155 post_data = fake.PostData()
156 try:
157 _result = self.servlet.ParsePersonData(mr, post_data)
158 self.fail()
159 except monorailrequest.InputException:
160 pass
161
162 def testParsePersonData_NoDetails(self):
163 mr = testing_helpers.MakeMonorailRequest(
164 path='/p/proj/people/detail?u=111',
165 project=self.project)
166 post_data = fake.PostData(role=['owner'])
167 u, r, ac, n = self.servlet.ParsePersonData(mr, post_data)
168 self.assertEquals(111, u)
169 self.assertEquals('owner', r)
170 self.assertEquals([], ac)
171 self.assertEquals('', n)
172
173 mr = testing_helpers.MakeMonorailRequest(
174 path='/p/proj/people/detail?u=333',
175 project=self.project)
176 post_data = fake.PostData(role=['owner'])
177 u, r, ac, n = self.servlet.ParsePersonData(mr, post_data)
178 self.assertEquals(333, u)
179
180 def testParsePersonData(self):
181 mr = testing_helpers.MakeMonorailRequest(
182 path='/p/proj/people/detail?u=111',
183 project=self.project)
184 post_data = fake.PostData(
185 role=['owner'], extra_perms=['ViewQuota', 'EditIssue'])
186 u, r, ac, n = self.servlet.ParsePersonData(mr, post_data)
187 self.assertEquals(111, u)
188 self.assertEquals('owner', r)
189 self.assertEquals(['ViewQuota', 'EditIssue'], ac)
190 self.assertEquals('', n)
191
192 post_data = fake.PostData({
193 'role': ['owner'],
194 'extra_perms': [' ', ' \t'],
195 'notes': [''],
196 })
197 u, r, ac, n = self.servlet.ParsePersonData(mr, post_data)
198 self.assertEquals(111, u)
199 self.assertEquals('owner', r)
200 self.assertEquals([], ac)
201 self.assertEquals('', n)
202
203 post_data = fake.PostData({
204 'username': ['jrobbins'],
205 'role': ['owner'],
206 'extra_perms': ['_ViewQuota', ' __EditIssue'],
207 'notes': [' Our local Python expert '],
208 })
209 u, r, ac, n = self.servlet.ParsePersonData(mr, post_data)
210 self.assertEquals(111, u)
211 self.assertEquals('owner', r)
212 self.assertEquals(['ViewQuota', 'EditIssue'], ac)
213 self.assertEquals('Our local Python expert', n)
214
215 def testCanEditMemberNotes(self):
216 """Only owners can edit member notes."""
217 mr = testing_helpers.MakeMonorailRequest(
218 path='/p/proj/people/detail?u=111',
219 project=self.project,
220 perms=permissions.CONTRIBUTOR_ACTIVE_PERMISSIONSET)
221 result = self.servlet.CanEditMemberNotes(mr, 222)
222 self.assertFalse(result)
223
224 mr.auth.user_id = 222
225 result = self.servlet.CanEditMemberNotes(mr, 222)
226 self.assertTrue(result)
227
228 mr = testing_helpers.MakeMonorailRequest(
229 path='/p/proj/people/detail?u=111',
230 project=self.project,
231 perms=permissions.OWNER_ACTIVE_PERMISSIONSET)
232 result = self.servlet.CanEditMemberNotes(mr, 222)
233 self.assertTrue(result)
234
235 def testCanEditPerms(self):
236 """Only owners can edit member perms."""
237 mr = testing_helpers.MakeMonorailRequest(
238 path='/p/proj/people/detail?u=111',
239 project=self.project,
240 perms=permissions.CONTRIBUTOR_ACTIVE_PERMISSIONSET)
241 result = self.servlet.CanEditPerms(mr)
242 self.assertFalse(result)
243
244 mr = testing_helpers.MakeMonorailRequest(
245 path='/p/proj/people/detail?u=111',
246 project=self.project,
247 perms=permissions.OWNER_ACTIVE_PERMISSIONSET)
248 result = self.servlet.CanEditPerms(mr)
249 self.assertTrue(result)
250
251 def testCanRemoveRole(self):
252 """Owners can remove members. Users could also remove themselves."""
253 mr = testing_helpers.MakeMonorailRequest(
254 path='/p/proj/people/detail?u=111',
255 project=self.project,
256 perms=permissions.CONTRIBUTOR_ACTIVE_PERMISSIONSET)
257 result = self.servlet.CanRemoveRole(mr, 222)
258 self.assertFalse(result)
259
260 mr.auth.user_id = 111
261 result = self.servlet.CanRemoveRole(mr, 111)
262 self.assertTrue(result)
263
264 mr = testing_helpers.MakeMonorailRequest(
265 path='/p/proj/people/detail?u=111',
266 project=self.project,
267 perms=permissions.OWNER_ACTIVE_PERMISSIONSET)
268 result = self.servlet.CanRemoveRole(mr, 222)
269 self.assertTrue(result)
270
271
272 if __name__ == '__main__':
273 unittest.main()
OLDNEW
« no previous file with comments | « appengine/monorail/project/test/__init__.py ('k') | appengine/monorail/project/test/peoplelist_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698