Skip to content
This repository was archived by the owner on Mar 14, 2023. It is now read-only.

Commit 72dfaa1

Browse files
committed
Refactor mock patcher logic to base class
1 parent 6586897 commit 72dfaa1

File tree

3 files changed

+68
-136
lines changed

3 files changed

+68
-136
lines changed

highfive/tests/base.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
1+
import mock
12
import os
2-
33
import testtools
44

55

66
class BaseTest(testtools.TestCase):
7+
def setUp(self, patchers=None):
8+
super(BaseTest, self).setUp()
9+
10+
patchers = patchers or ()
11+
self.patchers = {n: mock.patch(p) for n,p in patchers}
12+
self.mocks = {n: p.start() for n,p in self.patchers.iteritems()}
13+
14+
def tearDown(self):
15+
super(BaseTest, self).tearDown()
16+
17+
for patcher in self.patchers.itervalues():
18+
patcher.stop()
19+
720
@classmethod
821
def _load_fake(cls, fake):
922
fakes_dir = os.path.join(os.path.dirname(__file__), 'fakes')

highfive/tests/integration_tests.py

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,12 @@ def verify_calls(self):
5252
@attr('hermetic')
5353
class TestNewPr(base.BaseTest):
5454
def setUp(self):
55-
super(TestNewPr, self).setUp()
56-
57-
self.patchers = {
58-
'get_irc_nick': mock.patch('highfive.newpr.get_irc_nick'),
59-
'ConfigParser': mock.patch('highfive.newpr.ConfigParser'),
60-
'load_json_file': mock.patch('highfive.newpr._load_json_file'),
61-
}
62-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
55+
super(TestNewPr, self).setUp((
56+
('get_irc_nick', 'highfive.newpr.get_irc_nick'),
57+
('ConfigParser', 'highfive.newpr.ConfigParser'),
58+
('load_json_file', 'highfive.newpr._load_json_file'),
59+
))
60+
6361
self.mocks['get_irc_nick'].return_value = None
6462

6563
config_mock = mock.Mock()
@@ -71,12 +69,6 @@ def setUp(self):
7169
fakes.get_global_configs()['base'],
7270
)
7371

74-
def tearDown(self):
75-
super(TestNewPr, self).tearDown()
76-
77-
for patcher in self.patchers.itervalues():
78-
patcher.stop()
79-
8072
def test_new_pr_non_contributor(self):
8173
payload = fakes.Payload.new_pr(
8274
repo_owner='rust-lang', repo_name='rust', pr_author='pnkfelix'
@@ -162,20 +154,12 @@ def test_new_pr_contributor(self):
162154
@attr('hermetic')
163155
class TestNewComment(base.BaseTest):
164156
def setUp(self):
165-
super(TestNewComment, self).setUp()
157+
super(TestNewComment, self).setUp((
158+
('get_irc_nick', 'highfive.newpr.get_irc_nick'),
159+
))
166160

167-
self.patchers = {
168-
'get_irc_nick': mock.patch('highfive.newpr.get_irc_nick'),
169-
}
170-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
171161
self.mocks['get_irc_nick'].return_value = None
172162

173-
def tearDown(self):
174-
super(TestNewComment, self).tearDown()
175-
176-
for patcher in self.patchers.itervalues():
177-
patcher.stop()
178-
179163
def test_author_is_commenter(self):
180164
payload = fakes.Payload.new_comment()
181165
api_req_mock = ApiReqMocker([

highfive/tests/test_newpr.py

Lines changed: 45 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@
1010
@attr(type='unit')
1111
@attr('hermetic')
1212
class TestNewPR(base.BaseTest):
13-
def setUp(self):
14-
super(TestNewPR, self).setUp()
15-
16-
def tearDown(self):
17-
super(TestNewPR, self).tearDown()
13+
pass
1814

1915
class TestNewPRGeneral(TestNewPR):
2016
def test_welcome_msg(self):
@@ -318,15 +314,12 @@ def setUpClass(cls):
318314
cls.url = 'https://foo.bar'
319315

320316
def setUp(self):
321-
super(TestApiReq, self).setUp()
322-
323-
self.patchers = {
324-
'urlopen': mock.patch('urllib2.urlopen'),
325-
'Request': mock.patch('urllib2.Request'),
326-
'StringIO': mock.patch('highfive.newpr.StringIO'),
327-
'GzipFile': mock.patch('gzip.GzipFile'),
328-
}
329-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
317+
super(TestApiReq, self).setUp((
318+
('urlopen', 'urllib2.urlopen'),
319+
('Request', 'urllib2.Request'),
320+
('StringIO', 'highfive.newpr.StringIO'),
321+
('GzipFile', 'gzip.GzipFile'),
322+
))
330323

331324
self.req = self.mocks['Request'].return_value
332325

@@ -338,12 +331,6 @@ def setUp(self):
338331
self.gzipped_body = self.mocks['GzipFile'].return_value.read
339332
self.gzipped_body.return_value = 'body2'
340333

341-
def tearDown(self):
342-
super(TestApiReq, self).tearDown()
343-
344-
for patcher in self.patchers.itervalues():
345-
patcher.stop()
346-
347334
def verify_mock_calls(self, header_calls, gzipped):
348335
self.mocks['Request'].assert_called_with(
349336
self.url, json.dumps(self.data) if self.data else self.data,
@@ -473,23 +460,15 @@ def setUpClass(cls):
473460
cls.token = 'credential'
474461

475462
def setUp(self):
476-
super(TestSetAssignee, self).setUp()
463+
super(TestSetAssignee, self).setUp((
464+
('api_req', 'highfive.newpr.api_req'),
465+
('get_irc_nick', 'highfive.newpr.get_irc_nick'),
466+
('post_comment', 'highfive.newpr.post_comment'),
467+
('IrcClient', 'highfive.irc.IrcClient'),
468+
))
477469

478-
self.patchers = {
479-
'api_req': mock.patch('highfive.newpr.api_req'),
480-
'get_irc_nick': mock.patch('highfive.newpr.get_irc_nick'),
481-
'post_comment': mock.patch('highfive.newpr.post_comment'),
482-
'IrcClient': mock.patch('highfive.irc.IrcClient'),
483-
}
484-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
485470
self.mocks['client'] = self.mocks['IrcClient'].return_value
486471

487-
def tearDown(self):
488-
super(TestSetAssignee, self).tearDown()
489-
490-
for patcher in self.patchers.itervalues():
491-
patcher.stop()
492-
493472
def set_assignee(self, assignee='', to_mention=None):
494473
assignee = self.assignee if assignee == '' else assignee
495474
return newpr.set_assignee(
@@ -596,18 +575,10 @@ def setUpClass(cls):
596575
cls.token = 'credential'
597576

598577
def setUp(self):
599-
super(TestIsNewContributor, self).setUp()
578+
super(TestIsNewContributor, self).setUp((
579+
('api_req', 'highfive.newpr.api_req'),
580+
))
600581
self.payload = Payload({'repository': {'fork': False}})
601-
self.patchers = {
602-
'api_req': mock.patch('highfive.newpr.api_req'),
603-
}
604-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
605-
606-
def tearDown(self):
607-
super(TestIsNewContributor, self).tearDown()
608-
609-
for patcher in self.patchers.itervalues():
610-
patcher.stop()
611582

612583
def is_new_contributor(self):
613584
return newpr.is_new_contributor(
@@ -666,20 +637,11 @@ def setUpClass(cls):
666637
cls.token = 'credential'
667638

668639
def setUp(self):
669-
super(TestPostWarnings, self).setUp()
670-
671-
self.patchers = {
672-
'unexpected_branch': mock.patch('highfive.newpr.unexpected_branch'),
673-
'modifies_submodule': mock.patch('highfive.newpr.modifies_submodule'),
674-
'post_comment': mock.patch('highfive.newpr.post_comment'),
675-
}
676-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
677-
678-
def tearDown(self):
679-
super(TestPostWarnings, self).tearDown()
680-
681-
for patcher in self.patchers.itervalues():
682-
patcher.stop()
640+
super(TestPostWarnings, self).setUp((
641+
('unexpected_branch', 'highfive.newpr.unexpected_branch'),
642+
('modifies_submodule', 'highfive.newpr.modifies_submodule'),
643+
('post_comment', 'highfive.newpr.post_comment'),
644+
))
683645

684646
def post_warnings(self):
685647
newpr.post_warnings(
@@ -769,32 +731,23 @@ def setUpClass(cls):
769731
cls.token = 'credential'
770732

771733
def setUp(self):
772-
super(TestNewPrFunction, self).setUp()
773-
774-
self.patchers = {
775-
'api_req': mock.patch('highfive.newpr.api_req'),
776-
'find_reviewer': mock.patch('highfive.newpr.find_reviewer'),
777-
'load_json_file': mock.patch('highfive.newpr._load_json_file'),
778-
'choose_reviewer': mock.patch('highfive.newpr.choose_reviewer'),
779-
'set_assignee': mock.patch('highfive.newpr.set_assignee'),
780-
'is_new_contributor': mock.patch('highfive.newpr.is_new_contributor'),
781-
'post_comment': mock.patch('highfive.newpr.post_comment'),
782-
'welcome_msg': mock.patch('highfive.newpr.welcome_msg'),
783-
'review_msg': mock.patch('highfive.newpr.review_msg'),
784-
'post_warnings': mock.patch('highfive.newpr.post_warnings'),
785-
'add_labels': mock.patch('highfive.newpr.add_labels'),
786-
}
787-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
734+
super(TestNewPrFunction, self).setUp((
735+
('api_req', 'highfive.newpr.api_req'),
736+
('find_reviewer', 'highfive.newpr.find_reviewer'),
737+
('load_json_file', 'highfive.newpr._load_json_file'),
738+
('choose_reviewer', 'highfive.newpr.choose_reviewer'),
739+
('set_assignee', 'highfive.newpr.set_assignee'),
740+
('is_new_contributor', 'highfive.newpr.is_new_contributor'),
741+
('post_comment', 'highfive.newpr.post_comment'),
742+
('welcome_msg', 'highfive.newpr.welcome_msg'),
743+
('review_msg', 'highfive.newpr.review_msg'),
744+
('post_warnings', 'highfive.newpr.post_warnings'),
745+
('add_labels', 'highfive.newpr.add_labels'),
746+
))
788747

789748
self.mocks['api_req'].return_value = {'body': 'diff'}
790749
self.mocks['load_json_file'].return_value = self.config
791750

792-
def tearDown(self):
793-
super(TestNewPrFunction, self).tearDown()
794-
795-
for patcher in self.patchers.itervalues():
796-
patcher.stop()
797-
798751
def call_new_pr(self):
799752
return newpr.new_pr(self.payload, self.user, self.token)
800753

@@ -927,20 +880,11 @@ def test_empty_pr_labels(self):
927880

928881
class TestNewComment(TestNewPR):
929882
def setUp(self):
930-
super(TestNewComment, self).setUp()
931-
932-
self.patchers = {
933-
'is_collaborator': mock.patch('highfive.newpr.is_collaborator'),
934-
'find_reviewer': mock.patch('highfive.newpr.find_reviewer'),
935-
'set_assignee': mock.patch('highfive.newpr.set_assignee'),
936-
}
937-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
938-
939-
def tearDown(self):
940-
super(TestNewComment, self).tearDown()
941-
942-
for patcher in self.patchers.itervalues():
943-
patcher.stop()
883+
super(TestNewComment, self).setUp((
884+
('is_collaborator', 'highfive.newpr.is_collaborator'),
885+
('find_reviewer', 'highfive.newpr.find_reviewer'),
886+
('set_assignee', 'highfive.newpr.set_assignee'),
887+
))
944888

945889
@staticmethod
946890
def make_payload(
@@ -1240,28 +1184,19 @@ def test_with_dirs_no_intersection(self):
12401184

12411185
class TestRun(TestNewPR):
12421186
def setUp(self):
1243-
super(TestRun, self).setUp()
1244-
1245-
self.patchers = {
1246-
'ConfigParser': mock.patch('highfive.newpr.ConfigParser'),
1247-
'new_pr': mock.patch('highfive.newpr.new_pr'),
1248-
'new_comment': mock.patch('highfive.newpr.new_comment'),
1249-
'sys': mock.patch('highfive.newpr.sys')
1250-
}
1251-
self.mocks = {k: v.start() for k,v in self.patchers.iteritems()}
1187+
super(TestRun, self).setUp((
1188+
('ConfigParser', 'highfive.newpr.ConfigParser'),
1189+
('new_pr', 'highfive.newpr.new_pr'),
1190+
('new_comment', 'highfive.newpr.new_comment'),
1191+
('sys', 'highfive.newpr.sys'),
1192+
))
12521193

12531194
self.config_mock = mock.Mock()
12541195
self.config_mock.get.side_effect = (
12551196
'integration-user', 'integration-token'
12561197
)
12571198
self.mocks['ConfigParser'].RawConfigParser.return_value = self.config_mock
12581199

1259-
def tearDown(self):
1260-
super(TestRun, self).tearDown()
1261-
1262-
for patcher in self.patchers.itervalues():
1263-
patcher.stop()
1264-
12651200
def test_newpr(self):
12661201
payload = {'action': 'opened'}
12671202
newpr.run(payload)

0 commit comments

Comments
 (0)