19
19
20
20
from warehouse .manage import views
21
21
from warehouse .accounts .interfaces import IUserService
22
- from warehouse .packaging .models import Role
22
+ from warehouse .packaging .models import JournalEntry , Role
23
23
24
24
from ...common .db .packaging import ProjectFactory , RoleFactory , UserFactory
25
25
@@ -125,6 +125,8 @@ def test_post_new_role(self, db_request):
125
125
)
126
126
db_request .method = "POST"
127
127
db_request .POST = pretend .stub ()
128
+ db_request .remote_addr = "10.10.10.10"
129
+ db_request .user = UserFactory .create ()
128
130
form_obj = pretend .stub (
129
131
validate = pretend .call_recorder (lambda : True ),
130
132
username = pretend .stub (data = user .username ),
@@ -160,6 +162,13 @@ def test_post_new_role(self, db_request):
160
162
"form" : form_obj ,
161
163
}
162
164
165
+ entry = db_request .db .query (JournalEntry ).one ()
166
+
167
+ assert entry .name == project .name
168
+ assert entry .action == "add Owner testuser"
169
+ assert entry .submitted_by == db_request .user
170
+ assert entry .submitted_from == db_request .remote_addr
171
+
163
172
def test_post_duplicate_role (self , db_request ):
164
173
project = ProjectFactory .create (name = "foobar" )
165
174
user = UserFactory .create (username = "testuser" )
@@ -226,7 +235,8 @@ def test_change_role(self, db_request):
226
235
new_role_name = "Maintainer"
227
236
228
237
db_request .method = "POST"
229
- db_request .user = pretend .stub ()
238
+ db_request .user = UserFactory .create ()
239
+ db_request .remote_addr = "10.10.10.10"
230
240
db_request .POST = MultiDict ({
231
241
"role_id" : role .id ,
232
242
"role_name" : new_role_name ,
@@ -250,6 +260,13 @@ def test_change_role(self, db_request):
250
260
assert isinstance (result , HTTPSeeOther )
251
261
assert result .headers ["Location" ] == "/the-redirect"
252
262
263
+ entry = db_request .db .query (JournalEntry ).one ()
264
+
265
+ assert entry .name == project .name
266
+ assert entry .action == "change Owner testuser to Maintainer"
267
+ assert entry .submitted_by == db_request .user
268
+ assert entry .submitted_from == db_request .remote_addr
269
+
253
270
def test_change_role_invalid_role_name (self , pyramid_request ):
254
271
project = pretend .stub (name = "foobar" )
255
272
@@ -282,7 +299,8 @@ def test_change_role_when_multiple(self, db_request):
282
299
new_role_name = "Maintainer"
283
300
284
301
db_request .method = "POST"
285
- db_request .user = pretend .stub ()
302
+ db_request .user = UserFactory .create ()
303
+ db_request .remote_addr = "10.10.10.10"
286
304
db_request .POST = MultiDict ([
287
305
("role_id" , owner_role .id ),
288
306
("role_id" , maintainer_role .id ),
@@ -307,6 +325,13 @@ def test_change_role_when_multiple(self, db_request):
307
325
assert isinstance (result , HTTPSeeOther )
308
326
assert result .headers ["Location" ] == "/the-redirect"
309
327
328
+ entry = db_request .db .query (JournalEntry ).one ()
329
+
330
+ assert entry .name == project .name
331
+ assert entry .action == "remove Owner testuser"
332
+ assert entry .submitted_by == db_request .user
333
+ assert entry .submitted_from == db_request .remote_addr
334
+
310
335
def test_change_missing_role (self , db_request ):
311
336
project = ProjectFactory .create (name = "foobar" )
312
337
missing_role_id = str (uuid .uuid4 ())
@@ -360,6 +385,38 @@ def test_change_own_owner_role(self, db_request):
360
385
assert isinstance (result , HTTPSeeOther )
361
386
assert result .headers ["Location" ] == "/the-redirect"
362
387
388
+ def test_change_own_owner_role_when_multiple (self , db_request ):
389
+ project = ProjectFactory .create (name = "foobar" )
390
+ user = UserFactory .create (username = "testuser" )
391
+ owner_role = RoleFactory .create (
392
+ user = user , project = project , role_name = "Owner"
393
+ )
394
+ maintainer_role = RoleFactory .create (
395
+ user = user , project = project , role_name = "Maintainer"
396
+ )
397
+
398
+ db_request .method = "POST"
399
+ db_request .user = user
400
+ db_request .POST = MultiDict ([
401
+ ("role_id" , owner_role .id ),
402
+ ("role_id" , maintainer_role .id ),
403
+ ("role_name" , "Maintainer" ),
404
+ ])
405
+ db_request .session = pretend .stub (
406
+ flash = pretend .call_recorder (lambda * a , ** kw : None ),
407
+ )
408
+ db_request .route_path = pretend .call_recorder (
409
+ lambda * a , ** kw : "/the-redirect"
410
+ )
411
+
412
+ result = views .change_project_role (project , db_request )
413
+
414
+ assert db_request .session .flash .calls == [
415
+ pretend .call ("Cannot remove yourself as Owner" , queue = "error" ),
416
+ ]
417
+ assert isinstance (result , HTTPSeeOther )
418
+ assert result .headers ["Location" ] == "/the-redirect"
419
+
363
420
364
421
class TestDeleteProjectRoles :
365
422
@@ -371,7 +428,8 @@ def test_delete_role(self, db_request):
371
428
)
372
429
373
430
db_request .method = "POST"
374
- db_request .user = pretend .stub ()
431
+ db_request .user = UserFactory .create ()
432
+ db_request .remote_addr = "10.10.10.10"
375
433
db_request .POST = MultiDict ({"role_id" : role .id })
376
434
db_request .session = pretend .stub (
377
435
flash = pretend .call_recorder (lambda * a , ** kw : None ),
@@ -392,6 +450,13 @@ def test_delete_role(self, db_request):
392
450
assert isinstance (result , HTTPSeeOther )
393
451
assert result .headers ["Location" ] == "/the-redirect"
394
452
453
+ entry = db_request .db .query (JournalEntry ).one ()
454
+
455
+ assert entry .name == project .name
456
+ assert entry .action == "remove Owner testuser"
457
+ assert entry .submitted_by == db_request .user
458
+ assert entry .submitted_from == db_request .remote_addr
459
+
395
460
def test_delete_missing_role (self , db_request ):
396
461
project = ProjectFactory .create (name = "foobar" )
397
462
missing_role_id = str (uuid .uuid4 ())
0 commit comments