@@ -351,6 +351,151 @@ def test_delete_project_release_bad_confirm(self):
351
351
)
352
352
]
353
353
354
+ def test_delete_project_release_file (self , monkeypatch ):
355
+ release_file = pretend .stub (
356
+ filename = 'foo-bar.tar.gz' ,
357
+ id = str (uuid .uuid4 ()),
358
+ )
359
+ release = pretend .stub (
360
+ version = '1.2.3' ,
361
+ project = pretend .stub (name = 'foobar' ),
362
+ )
363
+ request = pretend .stub (
364
+ POST = {
365
+ 'confirm_filename' : release_file .filename ,
366
+ 'file_id' : release_file .id ,
367
+ },
368
+ method = "POST" ,
369
+ db = pretend .stub (
370
+ delete = pretend .call_recorder (lambda a : None ),
371
+ add = pretend .call_recorder (lambda a : None ),
372
+ query = lambda a : pretend .stub (
373
+ filter = lambda * a : pretend .stub (one = lambda : release_file ),
374
+ ),
375
+ ),
376
+ route_path = pretend .call_recorder (lambda * a , ** kw : '/the-redirect' ),
377
+ session = pretend .stub (
378
+ flash = pretend .call_recorder (lambda * a , ** kw : None )
379
+ ),
380
+ user = pretend .stub (),
381
+ remote_addr = pretend .stub (),
382
+ )
383
+ journal_obj = pretend .stub ()
384
+ journal_cls = pretend .call_recorder (lambda ** kw : journal_obj )
385
+ monkeypatch .setattr (views , 'JournalEntry' , journal_cls )
386
+
387
+ view = views .ManageProjectRelease (release , request )
388
+
389
+ result = view .delete_project_release_file ()
390
+
391
+ assert isinstance (result , HTTPSeeOther )
392
+ assert result .headers ["Location" ] == "/the-redirect"
393
+
394
+ assert request .session .flash .calls == [
395
+ pretend .call (
396
+ f"Successfully deleted file { release_file .filename !r} ." ,
397
+ queue = "success" ,
398
+ )
399
+ ]
400
+ assert request .db .delete .calls == [pretend .call (release_file )]
401
+ assert request .db .add .calls == [pretend .call (journal_obj )]
402
+ assert journal_cls .calls == [
403
+ pretend .call (
404
+ name = release .project .name ,
405
+ action = f"remove file { release_file .filename } " ,
406
+ version = release .version ,
407
+ submitted_by = request .user ,
408
+ submitted_from = request .remote_addr ,
409
+ ),
410
+ ]
411
+ assert request .route_path .calls == [
412
+ pretend .call (
413
+ 'manage.project.release' ,
414
+ project_name = release .project .name ,
415
+ version = release .version ,
416
+ )
417
+ ]
418
+
419
+ def test_delete_project_release_file_no_confirm (self ):
420
+ release = pretend .stub (
421
+ version = '1.2.3' ,
422
+ project = pretend .stub (name = 'foobar' ),
423
+ )
424
+ request = pretend .stub (
425
+ POST = {'confirm_filename' : '' },
426
+ method = "POST" ,
427
+ db = pretend .stub (delete = pretend .call_recorder (lambda a : None )),
428
+ route_path = pretend .call_recorder (lambda * a , ** kw : '/the-redirect' ),
429
+ session = pretend .stub (
430
+ flash = pretend .call_recorder (lambda * a , ** kw : None )
431
+ ),
432
+ )
433
+ view = views .ManageProjectRelease (release , request )
434
+
435
+ result = view .delete_project_release_file ()
436
+
437
+ assert isinstance (result , HTTPSeeOther )
438
+ assert result .headers ["Location" ] == "/the-redirect"
439
+
440
+ assert request .db .delete .calls == []
441
+ assert request .session .flash .calls == [
442
+ pretend .call (
443
+ "Must confirm the request." , queue = 'error'
444
+ )
445
+ ]
446
+ assert request .route_path .calls == [
447
+ pretend .call (
448
+ 'manage.project.release' ,
449
+ project_name = release .project .name ,
450
+ version = release .version ,
451
+ )
452
+ ]
453
+
454
+ def test_delete_project_release_file_bad_confirm (self ):
455
+ release_file = pretend .stub (
456
+ filename = 'foo-bar.tar.gz' ,
457
+ id = str (uuid .uuid4 ()),
458
+ )
459
+ release = pretend .stub (
460
+ version = '1.2.3' ,
461
+ project = pretend .stub (name = 'foobar' ),
462
+ )
463
+ request = pretend .stub (
464
+ POST = {'confirm_filename' : 'invalid' },
465
+ method = "POST" ,
466
+ db = pretend .stub (
467
+ delete = pretend .call_recorder (lambda a : None ),
468
+ query = lambda a : pretend .stub (
469
+ filter = lambda * a : pretend .stub (one = lambda : release_file ),
470
+ ),
471
+ ),
472
+ route_path = pretend .call_recorder (lambda * a , ** kw : '/the-redirect' ),
473
+ session = pretend .stub (
474
+ flash = pretend .call_recorder (lambda * a , ** kw : None )
475
+ ),
476
+ )
477
+ view = views .ManageProjectRelease (release , request )
478
+
479
+ result = view .delete_project_release_file ()
480
+
481
+ assert isinstance (result , HTTPSeeOther )
482
+ assert result .headers ["Location" ] == "/the-redirect"
483
+
484
+ assert request .db .delete .calls == []
485
+ assert request .session .flash .calls == [
486
+ pretend .call (
487
+ f"'invalid' is not the same as { release_file .filename !r} " ,
488
+ queue = "error" ,
489
+ )
490
+ ]
491
+ assert request .route_path .calls == [
492
+ pretend .call (
493
+ 'manage.project.release' ,
494
+ project_name = release .project .name ,
495
+ version = release .version ,
496
+ )
497
+ ]
498
+
354
499
355
500
class TestManageProjectRoles :
356
501
0 commit comments