9
9
from contextlib import contextmanager
10
10
11
11
import os
12
+ import sys
12
13
import logging
13
14
import betamax
14
15
@@ -378,6 +379,17 @@ def teardown_method(self, method):
378
379
self .log .info ('GitRepoTestCase.teardown_method({})' .format (method ))
379
380
self .tempdir .cleanup ()
380
381
382
+ '''cassette name helper'''
383
+
384
+ def _make_cassette_name (self ):
385
+ # returns the name of the function calling the function calling this one
386
+ # in other words, when used in an helper function, returns the name of
387
+ # the test function calling the helper function, to make a cassette name.
388
+ test_function_name = sys ._getframe (2 ).f_code .co_name
389
+ if test_function_name .startswith ('test' ):
390
+ return '_' .join (['test' , self .service .name , test_function_name ])
391
+ raise Exception ("Helpers functions shall be used only within test functions!" )
392
+
381
393
'''popen helper'''
382
394
383
395
def set_mock_popen_commands (self , cmd_list ):
@@ -435,7 +447,7 @@ def assert_tracking_remote(self, remote_name=None, branch_name='master'):
435
447
436
448
'''test cases templates'''
437
449
438
- def action_fork (self , cassette_name , local_namespace , remote_namespace , repository ):
450
+ def action_fork (self , local_namespace , remote_namespace , repository ):
439
451
# hijack subprocess call
440
452
with self .mockup_git (local_namespace , repository ):
441
453
# prepare output for git commands
@@ -458,15 +470,15 @@ def action_fork(self, cassette_name, local_namespace, remote_namespace, reposito
458
470
' * [new branch] master -> {}/master' .format (self .service .name )]).encode ('utf-8' ),
459
471
0 )
460
472
])
461
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
473
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
462
474
self .service .connect ()
463
475
self .service .fork (remote_namespace , repository )
464
476
# emulate the outcome of the git actions
465
477
self .service .repository .create_remote ('upstream' , url = remote_slug )
466
478
self .service .repository .create_remote ('all' , url = local_slug )
467
479
self .service .repository .create_remote (self .service .name , url = local_slug )
468
480
469
- def action_fork__no_clone (self , cassette_name , local_namespace , remote_namespace , repository ):
481
+ def action_fork__no_clone (self , local_namespace , remote_namespace , repository ):
470
482
# hijack subprocess call
471
483
with self .mockup_git (local_namespace , repository ):
472
484
# prepare output for git commands
@@ -489,15 +501,15 @@ def action_fork__no_clone(self, cassette_name, local_namespace, remote_namespace
489
501
' * [new branch] master -> {}/master' .format (self .service .name )]).encode ('utf-8' ),
490
502
0 )
491
503
])
492
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
504
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
493
505
self .service .connect ()
494
506
self .service .fork (remote_namespace , repository )
495
507
# emulate the outcome of the git actions
496
508
self .service .repository .create_remote ('upstream' , url = remote_slug )
497
509
self .service .repository .create_remote ('all' , url = local_slug )
498
510
self .service .repository .create_remote (self .service .name , url = local_slug )
499
511
500
- def action_clone (self , cassette_name , namespace , repository ):
512
+ def action_clone (self , namespace , repository ):
501
513
# hijack subprocess call
502
514
with self .mockup_git (namespace , repository ):
503
515
local_slug = self .service .format_path (namespace = namespace , repository = repository , rw = True )
@@ -517,30 +529,30 @@ def action_clone(self, cassette_name, namespace, repository):
517
529
' * [new branch] master -> {}/master' .format (self .service .name )]).encode ('utf-8' ),
518
530
0 )
519
531
])
520
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
532
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
521
533
self .service .connect ()
522
534
self .service .clone (namespace , repository )
523
535
self .service .repository .create_remote ('all' , url = local_slug )
524
536
self .service .repository .create_remote (self .service .name , url = local_slug )
525
537
526
- def action_create (self , cassette_name , namespace , repository ):
527
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
538
+ def action_create (self , namespace , repository ):
539
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
528
540
self .service .connect ()
529
541
self .service .create (namespace , repository , add = True )
530
542
#
531
543
self .assert_repository_exists (namespace , repository )
532
544
self .assert_added_remote_defaults ()
533
545
534
- def action_create__no_add (self , cassette_name , namespace , repository ):
535
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
546
+ def action_create__no_add (self , namespace , repository ):
547
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
536
548
self .service .connect ()
537
549
self .service .create (namespace , repository , add = False )
538
550
#
539
551
self .assert_repository_exists (namespace , repository )
540
552
self .assert_added_remote_defaults ()
541
553
542
- def action_delete (self , cassette_name , repository , namespace = None ):
543
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
554
+ def action_delete (self , repository , namespace = None ):
555
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
544
556
self .service .connect ()
545
557
if namespace :
546
558
self .service .delete (user = namespace , repo = repository )
@@ -551,8 +563,8 @@ def action_delete(self, cassette_name, repository, namespace=None):
551
563
namespace = self .service .user
552
564
self .assert_repository_not_exists (namespace , repository )
553
565
554
- def action_add (self , cassette_name , namespace , repository , alone = False , name = None , tracking = 'master' ):
555
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
566
+ def action_add (self , namespace , repository , alone = False , name = None , tracking = 'master' ):
567
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
556
568
# init git in the repository's destination
557
569
self .repository .init ()
558
570
self .service .connect ()
@@ -583,16 +595,16 @@ def action_add(self, cassette_name, namespace, repository, alone=False, name=Non
583
595
self .assert_added_remote (name )
584
596
self .assert_tracking_remote (name , tracking )
585
597
586
- def action_request_list (self , cassette_name , namespace , repository , rq_list_data = []):
587
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
598
+ def action_request_list (self , namespace , repository , rq_list_data = []):
599
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
588
600
self .service .connect ()
589
601
requests = list (self .service .request_list (user = namespace , repo = repository ))
590
602
for i , rq in enumerate (rq_list_data ):
591
603
assert requests [i ] == rq
592
604
593
- def action_request_fetch (self , cassette_name , namespace , repository , request , pull = False , fail = False ):
605
+ def action_request_fetch (self , namespace , repository , request , pull = False , fail = False ):
594
606
local_slug = self .service .format_path (namespace = namespace , repository = repository , rw = False )
595
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
607
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
596
608
with self .mockup_git (namespace , repository ):
597
609
self .set_mock_popen_commands ([
598
610
('git remote add all {}' .format (local_slug ), b'' , b'' , 0 ),
@@ -642,7 +654,7 @@ def action_request_fetch(self, cassette_name, namespace, repository, request, pu
642
654
])
643
655
self .service .request_fetch (repository , namespace , request )
644
656
645
- def action_request_create (self , cassette_name ,
657
+ def action_request_create (self ,
646
658
namespace , repository , branch ,
647
659
title , description ,
648
660
create_repository = 'test_create_requests' ,
@@ -670,7 +682,7 @@ def action_request_create(self, cassette_name,
670
682
671
683
So all the contextual work is only done
672
684
'''
673
- cassette_name = '_' . join ([ 'test' , self .service . name , cassette_name ] )
685
+ cassette_name = self ._make_cassette_name ( )
674
686
will_record = 'never' != self .recorder .config .default_cassette_options ['record_mode' ] \
675
687
and not os .path .exists (os .path .join (self .recorder .config .cassette_library_dir , cassette_name + '.json' ))
676
688
@@ -713,8 +725,8 @@ def prepare_project_for_test():
713
725
)
714
726
return request
715
727
716
- def action_gist_list (self , cassette_name , gist = None , gist_list_data = []):
717
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
728
+ def action_gist_list (self , gist = None , gist_list_data = []):
729
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
718
730
self .service .connect ()
719
731
if gist is None :
720
732
gists = list (self .service .gist_list ())
@@ -725,7 +737,7 @@ def action_gist_list(self, cassette_name, gist=None, gist_list_data=[]):
725
737
for i , gf in enumerate (gist_list_data ):
726
738
assert gist_files [i ] == gf
727
739
728
- def action_gist_clone (self , cassette_name , gist ):
740
+ def action_gist_clone (self , gist ):
729
741
with self .mockup_git (None , None ):
730
742
self .set_mock_popen_commands ([
731
743
('git version' , b'git version 2.8.0' , b'' , 0 ),
@@ -741,28 +753,28 @@ def action_gist_clone(self, cassette_name, gist):
741
753
b' * branch master -> FETCH_HEAD' ]),
742
754
0 ),
743
755
])
744
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
756
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
745
757
self .service .connect ()
746
758
self .service .gist_clone (gist )
747
759
748
760
749
- def action_gist_fetch (self , cassette_name , gist , gist_file = None ):
750
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
761
+ def action_gist_fetch (self , gist , gist_file = None ):
762
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
751
763
self .service .connect ()
752
764
content = self .service .gist_fetch (gist , gist_file )
753
765
return content
754
766
755
- def action_gist_create (self , cassette_name , description , gist_files , secret ):
756
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
767
+ def action_gist_create (self , description , gist_files , secret ):
768
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
757
769
self .service .connect ()
758
770
content = self .service .gist_create (gist_files , description , secret )
759
771
760
- def action_gist_delete (self , cassette_name , gist ):
761
- with self .recorder .use_cassette ('_' . join ([ 'test' , self .service . name , cassette_name ] )):
772
+ def action_gist_delete (self , gist ):
773
+ with self .recorder .use_cassette (self ._make_cassette_name ( )):
762
774
self .service .connect ()
763
775
content = self .service .gist_delete (gist )
764
776
765
- def action_open (self , cassette_name , namespace , repository ):
777
+ def action_open (self , namespace , repository ):
766
778
self .set_mock_popen_commands ([
767
779
('xdg-open {}' .format (self .service .format_path (namespace = namespace , repository = repository )), b'' , b'' , 0 ),
768
780
('open {}' .format (self .service .format_path (namespace = namespace , repository = repository )), b'' , b'' , 0 ),
0 commit comments