Skip to content

Commit 3496109

Browse files
committed
Merge pull request #45 from BenjamenMeyer/enhancement_decorators
Enhancement: Decorators
2 parents 1171609 + c6cc9f7 commit 3496109

File tree

15 files changed

+647
-35
lines changed

15 files changed

+647
-35
lines changed

README.rst

Lines changed: 91 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -124,19 +124,39 @@ HTTPretty
124124
125125
def setUp(self):
126126
super(TestHttpretty, self).setUp()
127-
StackInABox.register_service(HelloService())
127+
StackInABox.register_service(HelloService())
128128
129129
def tearDown(self):
130130
super(TestHttpretty, self).tearDown()
131-
StackInABox.reset_services()
131+
StackInABox.reset_services()
132132
133133
def test_basic(self):
134134
stackinabox.util.httpretty.httpretty_registration('localhost')
135135
136136
res = requests.get('http://localhost/')
137137
self.assertEqual(res.status_code, 200)
138138
self.assertEqual(res.text, 'Hello')
139-
assert False
139+
140+
There is now also the option of using a decorator:
141+
142+
.. code-block:: python
143+
144+
import unittest
145+
146+
import requests
147+
148+
import stackinabox.util.httpretty.decorator as stack_decorator
149+
from stackinabox.services.hello import HelloService
150+
151+
152+
class TestHttpretty(unittest.TestCase):
153+
154+
@stack_decorator.stack_activate('localhost', HelloService())
155+
def test_basic(self):
156+
res = requests.get('http://localhost/')
157+
self.assertEqual(res.status_code, 200)
158+
self.assertEqual(res.text, 'Hello')
159+
140160
141161
---------
142162
Responses
@@ -158,14 +178,32 @@ Responses
158178
159179
@responses.activate
160180
def test_basic_responses():
161-
StackInABox.reset_services()
162-
StackInABox.register_service(HelloService())
181+
StackInABox.reset_services()
182+
StackInABox.register_service(HelloService())
163183
stackinabox.util.responses.responses_registration('localhost')
164184
165185
res = requests.get('http://localhost/hello/')
166186
assert res.status_code == 200
167187
assert res.text == 'Hello'
168188
189+
There is now also the option of using a decorator:
190+
191+
.. code-block:: python
192+
193+
import unittest
194+
195+
import requests
196+
197+
import stackinabox.util.responses.decorator as stack_decorator
198+
from stackinabox.services.hello import HelloService
199+
200+
201+
@stack_decorator.stack_activate('localhost', HelloService())
202+
def test_basic_responses_with_decorator(self):
203+
res = requests.get('http://localhost/')
204+
self.assertEqual(res.status_code, 200)
205+
self.assertEqual(res.text, 'Hello')
206+
169207
170208
-------------
171209
Requests Mock
@@ -175,41 +213,61 @@ Requests Mock
175213

176214
.. code-block:: python
177215
178-
import unittest
216+
import unittest
179217
180-
import requests
218+
import requests
181219
182-
import stackinabox.util.requests_mock
183-
from stackinabox.stack import StackInABox
184-
from stackinabox.services.hello import HelloService
220+
import stackinabox.util.requests_mock
221+
from stackinabox.stack import StackInABox
222+
from stackinabox.services.hello import HelloService
185223
186-
class TestRequestsMock(unittest.TestCase):
224+
class TestRequestsMock(unittest.TestCase):
187225
188-
def setUp(self):
189-
super(TestRequestsMock, self).setUp()
190-
StackInABox.register_service(HelloService())
191-
self.session = requests.Session()
226+
def setUp(self):
227+
super(TestRequestsMock, self).setUp()
228+
StackInABox.register_service(HelloService())
229+
self.session = requests.Session()
192230
193-
def tearDown(self):
194-
super(TestRequestsMock, self).tearDown()
195-
StackInABox.reset_services()
196-
self.session.close()
231+
def tearDown(self):
232+
super(TestRequestsMock, self).tearDown()
233+
StackInABox.reset_services()
234+
self.session.close()
197235
198-
def test_basic_requests_mock(self):
199-
# Register with existing session object
200-
stackinabox.util.requests_mock.requests_mock_session_registration(
201-
'localhost', self.session)
236+
def test_basic_requests_mock(self):
237+
# Register with existing session object
238+
stackinabox.util.requests_mock.requests_mock_session_registration(
239+
'localhost', self.session)
202240
203-
res = self.session.get('http://localhost/hello/')
204-
self.assertEqual(res.status_code, 200)
205-
self.assertEqual(res.text, 'Hello')
241+
res = self.session.get('http://localhost/hello/')
242+
self.assertEqual(res.status_code, 200)
243+
self.assertEqual(res.text, 'Hello')
206244
207-
def test_context_requests_mock(self):
208-
with stackinabox.util.requests_mock.activate():
245+
def test_context_requests_mock(self):
246+
with stackinabox.util.requests_mock.activate():
209247
# Register without the session object
210-
stackinabox.util.requests_mock.requests_mock_registration(
211-
'localhost')
248+
stackinabox.util.requests_mock.requests_mock_registration(
249+
'localhost')
250+
251+
res = requests.get('http://localhost/hello/')
252+
self.assertEqual(res.status_code, 200)
253+
self.assertEqual(res.text, 'Hello')
254+
255+
There is now also the option of using a decorator:
256+
257+
.. code-block:: python
258+
259+
import unittest
260+
261+
import requests
262+
263+
import stackinabox.util.requests_mock.decorator as stack_decorator
264+
from stackinabox.services.hello import HelloService
212265
213-
res = requests.get('http://localhost/hello/')
214-
self.assertEqual(res.status_code, 200)
215-
self.assertEqual(res.text, 'Hello')
266+
267+
class TestRequestsMock(unittest.TestCase):
268+
269+
@stack_decorator.stack_activate('localhost', HelloService())
270+
def test_basic(self):
271+
res = requests.get('http://localhost/')
272+
self.assertEqual(res.status_code, 200)
273+
self.assertEqual(res.text, 'Hello')

docs/api/utils/httpretty.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ StackInABox provides support for writing tests with httpretty.
88
.. currentmodule:: stackinabox.util.httpretty
99
.. autofunction:: httpretty_callback
1010
.. autofunction:: httpretty_registration
11+
12+
.. currentmodule:: stackinabox.util.httpretty.decorator
13+
.. autoclass:: stack_activate

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ cover-package=stackinabox
66
cover-erase=1
77
cover-inclusive=true
88
cover-branches=true
9-
cover-min-percentage=88
9+
cover-min-percentage=91
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
"""
2+
Stack-In-A-Box: Basic Test
3+
"""
4+
import unittest
5+
6+
import requests
7+
8+
import stackinabox.util.httpretty.decorator as stack_decorator
9+
from stackinabox.services.hello import HelloService
10+
from stackinabox.tests.utils.services import AdvancedService
11+
12+
13+
class TestHttprettyBasicWithDecorator(unittest.TestCase):
14+
15+
@stack_decorator.stack_activate('localhost', HelloService())
16+
def test_basic(self):
17+
res = requests.get('http://localhost/hello/')
18+
self.assertEqual(res.status_code, 200)
19+
self.assertEqual(res.text, 'Hello')
20+
21+
@stack_decorator.stack_activate('localhost', HelloService(),
22+
200, value='Hello')
23+
def test_basic_with_parameters(self, response_code, value='alpha'):
24+
res = requests.get('http://localhost/hello/')
25+
self.assertEqual(res.status_code, response_code)
26+
self.assertEqual(res.text, value)
27+
28+
@stack_decorator.stack_activate('localhost', HelloService(),
29+
200, value='Hello',
30+
access_services="stack")
31+
def test_basic_with_stack_acccess(self, response_code, value='alpha',
32+
stack=None):
33+
res = requests.get('http://localhost/hello/')
34+
self.assertEqual(res.status_code, response_code)
35+
self.assertEqual(res.text, value)
36+
self.assertEqual(len(stack), 1)
37+
self.assertTrue(HelloService().name in stack)
38+
self.assertIsInstance(stack[list(stack.keys())[0]], HelloService)
39+
40+
41+
class TestHttprettyAdvancedWithDecorator(unittest.TestCase):
42+
43+
@stack_decorator.stack_activate('localhost', AdvancedService())
44+
def test_basic(self):
45+
res = requests.get('http://localhost/advanced/')
46+
self.assertEqual(res.status_code, 200)
47+
self.assertEqual(res.text, 'Hello')
48+
49+
res = requests.get('http://localhost/advanced/h')
50+
self.assertEqual(res.status_code, 200)
51+
self.assertEqual(res.text, 'Good-Bye')
52+
53+
expected_result = {
54+
'bob': 'bob: Good-Bye alice',
55+
'alice': 'alice: Good-Bye bob',
56+
'joe': 'joe: Good-Bye jane'
57+
}
58+
res = requests.get('http://localhost/advanced/g?bob=alice;'
59+
'alice=bob&joe=jane')
60+
self.assertEqual(res.status_code, 200)
61+
self.assertEqual(res.json(), expected_result)
62+
63+
res = requests.get('http://localhost/advanced/1234567890')
64+
self.assertEqual(res.status_code, 200)
65+
self.assertEqual(res.text, 'okay')
66+
67+
res = requests.get('http://localhost/advanced/_234567890')
68+
self.assertEqual(res.status_code, 595)
69+
70+
res = requests.put('http://localhost/advanced/h')
71+
self.assertEqual(res.status_code, 405)
72+
73+
res = requests.put('http://localhost/advanced2/i')
74+
self.assertEqual(res.status_code, 597)
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
"""
2+
Stack-In-A-Box: Basic Test
3+
"""
4+
import json
5+
import logging
6+
import unittest
7+
8+
import requests
9+
10+
import stackinabox.util.requests_mock.decorator as stack_decorator
11+
from stackinabox.services.hello import HelloService
12+
from stackinabox.tests.utils.services import AdvancedService
13+
14+
15+
logger = logging.getLogger(__name__)
16+
17+
18+
class TestRequestsMockBasic(unittest.TestCase):
19+
20+
def setUp(self):
21+
super(TestRequestsMockBasic, self).setUp()
22+
23+
def tearDown(self):
24+
super(TestRequestsMockBasic, self).tearDown()
25+
26+
@stack_decorator.stack_activate('localhost', HelloService())
27+
def test_basic_requests_mock(self):
28+
res = requests.get('http://localhost/hello/')
29+
self.assertEqual(res.status_code, 200)
30+
self.assertEqual(res.text, 'Hello')
31+
32+
@stack_decorator.stack_activate('localhost', HelloService(),
33+
200, value='Hello')
34+
def test_basic_with_parameters(self, response_code, value='alpha'):
35+
res = requests.get('http://localhost/hello/')
36+
self.assertEqual(res.status_code, response_code)
37+
self.assertEqual(res.text, value)
38+
39+
@stack_decorator.stack_activate('localhost', HelloService(),
40+
200, value='Hello',
41+
access_services="stack")
42+
def test_basic_with_stack_acccess(self, response_code, value='alpha',
43+
stack=None):
44+
res = requests.get('http://localhost/hello/')
45+
self.assertEqual(res.status_code, response_code)
46+
self.assertEqual(res.text, value)
47+
self.assertEqual(len(stack), 1)
48+
self.assertTrue(HelloService().name in stack)
49+
self.assertIsInstance(stack[list(stack.keys())[0]], HelloService)
50+
51+
52+
class TestRequestMockAdvanced(unittest.TestCase):
53+
54+
def setUp(self):
55+
super(TestRequestMockAdvanced, self).setUp()
56+
57+
def tearDown(self):
58+
super(TestRequestMockAdvanced, self).tearDown()
59+
60+
@stack_decorator.stack_activate('localhost', AdvancedService(),
61+
session="session")
62+
def test_basic(self, session):
63+
res = session.get('http://localhost/advanced/')
64+
self.assertEqual(res.status_code, 200)
65+
self.assertEqual(res.text, 'Hello')
66+
67+
res = session.get('http://localhost/advanced/h')
68+
self.assertEqual(res.status_code, 200)
69+
self.assertEqual(res.text, 'Good-Bye')
70+
71+
expected_result = {
72+
'bob': 'bob: Good-Bye alice',
73+
'alice': 'alice: Good-Bye bob',
74+
'joe': 'joe: Good-Bye jane'
75+
}
76+
res = session.get('http://localhost/advanced/g?bob=alice;'
77+
'alice=bob&joe=jane')
78+
self.assertEqual(res.status_code, 200)
79+
self.assertEqual(res.json(), expected_result)
80+
81+
res = session.get('http://localhost/advanced/1234567890')
82+
self.assertEqual(res.status_code, 200)
83+
self.assertEqual(res.text, 'okay')
84+
85+
res = session.get('http://localhost/advanced/_234567890')
86+
self.assertEqual(res.status_code, 595)
87+
88+
res = session.put('http://localhost/advanced/h')
89+
self.assertEqual(res.status_code, 405)
90+
91+
res = session.put('http://localhost/advanced2/i')
92+
self.assertEqual(res.status_code, 597)
93+
94+
session.close()

0 commit comments

Comments
 (0)