Skip to content

Commit 3c74df8

Browse files
committed
💄 Improved test function writing
* removed cassette name creation in test methods, and moved it in the helpers methods * added _make_cassette_name function to be used in helper methods * updated all tests
1 parent 3ed1a09 commit 3c74df8

File tree

4 files changed

+110
-166
lines changed

4 files changed

+110
-166
lines changed

tests/helpers.py

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from contextlib import contextmanager
1010

1111
import os
12+
import sys
1213
import logging
1314
import betamax
1415

@@ -378,6 +379,17 @@ def teardown_method(self, method):
378379
self.log.info('GitRepoTestCase.teardown_method({})'.format(method))
379380
self.tempdir.cleanup()
380381

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+
381393
'''popen helper'''
382394

383395
def set_mock_popen_commands(self, cmd_list):
@@ -435,7 +447,7 @@ def assert_tracking_remote(self, remote_name=None, branch_name='master'):
435447

436448
'''test cases templates'''
437449

438-
def action_fork(self, cassette_name, local_namespace, remote_namespace, repository):
450+
def action_fork(self, local_namespace, remote_namespace, repository):
439451
# hijack subprocess call
440452
with self.mockup_git(local_namespace, repository):
441453
# prepare output for git commands
@@ -458,15 +470,15 @@ def action_fork(self, cassette_name, local_namespace, remote_namespace, reposito
458470
' * [new branch] master -> {}/master'.format(self.service.name)]).encode('utf-8'),
459471
0)
460472
])
461-
with self.recorder.use_cassette('_'.join(['test', self.service.name, cassette_name])):
473+
with self.recorder.use_cassette(self._make_cassette_name()):
462474
self.service.connect()
463475
self.service.fork(remote_namespace, repository)
464476
# emulate the outcome of the git actions
465477
self.service.repository.create_remote('upstream', url=remote_slug)
466478
self.service.repository.create_remote('all', url=local_slug)
467479
self.service.repository.create_remote(self.service.name, url=local_slug)
468480

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):
470482
# hijack subprocess call
471483
with self.mockup_git(local_namespace, repository):
472484
# prepare output for git commands
@@ -489,15 +501,15 @@ def action_fork__no_clone(self, cassette_name, local_namespace, remote_namespace
489501
' * [new branch] master -> {}/master'.format(self.service.name)]).encode('utf-8'),
490502
0)
491503
])
492-
with self.recorder.use_cassette('_'.join(['test', self.service.name, cassette_name])):
504+
with self.recorder.use_cassette(self._make_cassette_name()):
493505
self.service.connect()
494506
self.service.fork(remote_namespace, repository)
495507
# emulate the outcome of the git actions
496508
self.service.repository.create_remote('upstream', url=remote_slug)
497509
self.service.repository.create_remote('all', url=local_slug)
498510
self.service.repository.create_remote(self.service.name, url=local_slug)
499511

500-
def action_clone(self, cassette_name, namespace, repository):
512+
def action_clone(self, namespace, repository):
501513
# hijack subprocess call
502514
with self.mockup_git(namespace, repository):
503515
local_slug = self.service.format_path(namespace=namespace, repository=repository, rw=True)
@@ -517,30 +529,30 @@ def action_clone(self, cassette_name, namespace, repository):
517529
' * [new branch] master -> {}/master'.format(self.service.name)]).encode('utf-8'),
518530
0)
519531
])
520-
with self.recorder.use_cassette('_'.join(['test', self.service.name, cassette_name])):
532+
with self.recorder.use_cassette(self._make_cassette_name()):
521533
self.service.connect()
522534
self.service.clone(namespace, repository)
523535
self.service.repository.create_remote('all', url=local_slug)
524536
self.service.repository.create_remote(self.service.name, url=local_slug)
525537

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()):
528540
self.service.connect()
529541
self.service.create(namespace, repository, add=True)
530542
#
531543
self.assert_repository_exists(namespace, repository)
532544
self.assert_added_remote_defaults()
533545

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()):
536548
self.service.connect()
537549
self.service.create(namespace, repository, add=False)
538550
#
539551
self.assert_repository_exists(namespace, repository)
540552
self.assert_added_remote_defaults()
541553

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()):
544556
self.service.connect()
545557
if namespace:
546558
self.service.delete(user=namespace, repo=repository)
@@ -551,8 +563,8 @@ def action_delete(self, cassette_name, repository, namespace=None):
551563
namespace = self.service.user
552564
self.assert_repository_not_exists(namespace, repository)
553565

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()):
556568
# init git in the repository's destination
557569
self.repository.init()
558570
self.service.connect()
@@ -583,16 +595,16 @@ def action_add(self, cassette_name, namespace, repository, alone=False, name=Non
583595
self.assert_added_remote(name)
584596
self.assert_tracking_remote(name, tracking)
585597

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()):
588600
self.service.connect()
589601
requests = list(self.service.request_list(user=namespace, repo=repository))
590602
for i, rq in enumerate(rq_list_data):
591603
assert requests[i] == rq
592604

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):
594606
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()):
596608
with self.mockup_git(namespace, repository):
597609
self.set_mock_popen_commands([
598610
('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
642654
])
643655
self.service.request_fetch(repository, namespace, request)
644656

645-
def action_request_create(self, cassette_name,
657+
def action_request_create(self,
646658
namespace, repository, branch,
647659
title, description,
648660
create_repository='test_create_requests',
@@ -670,7 +682,7 @@ def action_request_create(self, cassette_name,
670682
671683
So all the contextual work is only done
672684
'''
673-
cassette_name = '_'.join(['test', self.service.name, cassette_name])
685+
cassette_name = self._make_cassette_name()
674686
will_record = 'never' != self.recorder.config.default_cassette_options['record_mode'] \
675687
and not os.path.exists(os.path.join(self.recorder.config.cassette_library_dir, cassette_name+'.json'))
676688

@@ -713,8 +725,8 @@ def prepare_project_for_test():
713725
)
714726
return request
715727

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()):
718730
self.service.connect()
719731
if gist is None:
720732
gists = list(self.service.gist_list())
@@ -725,7 +737,7 @@ def action_gist_list(self, cassette_name, gist=None, gist_list_data=[]):
725737
for i, gf in enumerate(gist_list_data):
726738
assert gist_files[i] == gf
727739

728-
def action_gist_clone(self, cassette_name, gist):
740+
def action_gist_clone(self, gist):
729741
with self.mockup_git(None, None):
730742
self.set_mock_popen_commands([
731743
('git version', b'git version 2.8.0', b'', 0),
@@ -741,28 +753,28 @@ def action_gist_clone(self, cassette_name, gist):
741753
b' * branch master -> FETCH_HEAD']),
742754
0),
743755
])
744-
with self.recorder.use_cassette('_'.join(['test', self.service.name, cassette_name])):
756+
with self.recorder.use_cassette(self._make_cassette_name()):
745757
self.service.connect()
746758
self.service.gist_clone(gist)
747759

748760

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()):
751763
self.service.connect()
752764
content = self.service.gist_fetch(gist, gist_file)
753765
return content
754766

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()):
757769
self.service.connect()
758770
content = self.service.gist_create(gist_files, description, secret)
759771

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()):
762774
self.service.connect()
763775
content = self.service.gist_delete(gist)
764776

765-
def action_open(self, cassette_name, namespace, repository):
777+
def action_open(self, namespace, repository):
766778
self.set_mock_popen_commands([
767779
('xdg-open {}'.format(self.service.format_path(namespace=namespace, repository=repository)), b'', b'', 0),
768780
('open {}'.format(self.service.format_path(namespace=namespace, repository=repository)), b'', b'', 0),

tests/integration/test_bitbucket.py

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,86 +32,72 @@ def get_requests_session(self):
3232
return self.service.bb.session
3333

3434
def test_00_fork(self):
35-
self.action_fork(cassette_name=sys._getframe().f_code.co_name,
36-
local_namespace=self.local_namespace,
35+
self.action_fork(local_namespace=self.local_namespace,
3736
remote_namespace='abdo2015',
3837
repository='git_tutorial')
3938

4039
def test_01_create(self):
41-
self.action_create(cassette_name=sys._getframe().f_code.co_name,
42-
namespace=self.local_namespace,
40+
self.action_create(namespace=self.local_namespace,
4341
repository='foobar')
4442

4543

4644
def test_02_delete(self):
47-
self.action_delete(cassette_name=sys._getframe().f_code.co_name,
48-
namespace=self.local_namespace,
45+
self.action_delete(namespace=self.local_namespace,
4946
repository='foobar')
5047

5148
def test_03_delete_nouser(self):
52-
self.action_delete(cassette_name=sys._getframe().f_code.co_name,
53-
repository='git_tutorial')
49+
self.action_delete(repository='git_tutorial')
5450

5551
def test_04_clone(self):
56-
self.action_clone(cassette_name=sys._getframe().f_code.co_name,
57-
namespace='guyzmo',
52+
self.action_clone(namespace='guyzmo',
5853
repository='git-repo')
5954

6055
def test_05_add(self):
61-
self.action_add(cassette_name=sys._getframe().f_code.co_name,
62-
namespace='guyzmo',
56+
self.action_add(namespace='guyzmo',
6357
repository='git-repo')
6458

6559
def test_06_add__name(self):
66-
self.action_add(cassette_name=sys._getframe().f_code.co_name,
67-
namespace='guyzmo',
60+
self.action_add(namespace='guyzmo',
6861
repository='git-repo',
6962
name='test0r')
7063

7164
def test_07_add__alone(self):
72-
self.action_add(cassette_name=sys._getframe().f_code.co_name,
73-
namespace='guyzmo',
65+
self.action_add(namespace='guyzmo',
7466
repository='git-repo',
7567
alone=True)
7668

7769
def test_08_add__alone_name(self):
78-
self.action_add(cassette_name=sys._getframe().f_code.co_name,
79-
namespace='guyzmo',
70+
self.action_add(namespace='guyzmo',
8071
repository='git-repo',
8172
name='test0r',
8273
alone=True)
8374

8475
def test_09_add__default(self):
85-
self.action_add(cassette_name=sys._getframe().f_code.co_name,
86-
namespace='guyzmo',
76+
self.action_add(namespace='guyzmo',
8777
repository='git-repo',
8878
tracking='bitbucket')
8979

9080
def test_10_add__default_name(self):
91-
self.action_add(cassette_name=sys._getframe().f_code.co_name,
92-
namespace='guyzmo',
81+
self.action_add(namespace='guyzmo',
9382
repository='git-repo',
9483
name='test0r',
9584
tracking='bitbucket')
9685

9786
def test_11_add__alone_default(self):
98-
self.action_add(cassette_name=sys._getframe().f_code.co_name,
99-
namespace='guyzmo',
87+
self.action_add(namespace='guyzmo',
10088
repository='git-repo',
10189
alone=True,
10290
tracking='bitbucket')
10391

10492
def test_12_add__alone_default_name(self):
105-
self.action_add(cassette_name=sys._getframe().f_code.co_name,
106-
namespace='guyzmo',
93+
self.action_add(namespace='guyzmo',
10794
repository='git-repo',
10895
alone=True,
10996
name='test0r',
11097
tracking='bitbucket')
11198

11299
def test_13_open(self):
113-
self.action_open(cassette_name=sys._getframe().f_code.co_name,
114-
namespace='guyzmo',
100+
self.action_open(namespace='guyzmo',
115101
repository='git-repo')
116102

117103

0 commit comments

Comments
 (0)