1
1
import pickle
2
2
import unittest
3
3
4
- from python_http_client .client import Client
4
+ from python_http_client .client import Client , HTTPError , urllib
5
5
from python_http_client .exceptions import (
6
- BadRequestsError , HTTPError ,
6
+ HTTPError as SG_HTTPError ,
7
+ BadRequestsError ,
7
8
NotFoundError ,
8
9
ServiceUnavailableError ,
9
10
UnsupportedMediaTypeError ,
10
- handle_error
11
11
)
12
12
13
13
try :
14
14
# Python 3
15
- import urllib .request as urllib
16
15
from unittest import mock
17
16
except ImportError :
18
17
# Python 2
19
- import urllib2 as urllib
20
18
import mock
21
19
22
20
try :
27
25
28
26
class MockException (HTTPError ):
29
27
30
- def __init__ (self , code ):
31
- self . code = code
32
- self . reason = 'REASON'
33
- self . hdrs = 'HEADERS'
28
+ def __init__ (self , url , response_code ):
29
+ super ( MockException , self ). __init__ (
30
+ url , response_code , 'REASON' , 'HEADERS' , None
31
+ )
34
32
35
33
def read (self ):
36
34
return 'BODY'
@@ -51,17 +49,16 @@ def read(self):
51
49
return 'RESPONSE BODY'
52
50
53
51
54
- class MockClient ( Client ) :
52
+ class MockOpener :
55
53
56
- def __init__ (self , host , response_code , timeout = None ):
54
+ def __init__ (self ):
57
55
self .response_code = 200
58
- Client .__init__ (self , host )
59
56
60
- def _make_request (self , opener , request , timeout = None ):
57
+ def open (self , request , timeout = None ):
61
58
if 200 <= self .response_code < 299 : # if successful code
62
59
return MockResponse (self .response_code )
63
60
else :
64
- raise handle_error ( MockException (self .response_code ) )
61
+ raise MockException (request . get_full_url (), self .response_code )
65
62
66
63
67
64
class TestClient (unittest .TestCase ):
@@ -150,9 +147,12 @@ def test__(self):
150
147
url_path = ['hello' ]
151
148
self .assertEqual (client ._url_path [0 ], url_path [0 ])
152
149
153
- def test__getattr__ (self ):
154
- mock_client = MockClient (self .host , 200 )
155
- client = mock_client .__getattr__ ('hello' )
150
+ @mock .patch ('python_http_client.client.urllib' )
151
+ def test__getattr__ (self , mock_lib ):
152
+ mock_opener = MockOpener ()
153
+ mock_lib .build_opener .return_value = mock_opener
154
+
155
+ client = self .client .__getattr__ ('hello' )
156
156
url_path = ['hello' ]
157
157
self .assertEqual (client ._url_path , url_path )
158
158
self .assertEqual (client .__getattr__ ('get' ).__name__ , 'http_request' )
@@ -162,42 +162,42 @@ def test__getattr__(self):
162
162
self .assertEqual (client ._version , 3 )
163
163
164
164
# Test GET
165
- mock_client ._url_path += ['test' ]
166
- r = mock_client .get ()
165
+ client ._url_path += ['test' ]
166
+ r = client .get ()
167
167
self .assertEqual (r .status_code , 200 )
168
168
169
169
# Test POST
170
- r = mock_client .put ()
170
+ r = client .put ()
171
171
self .assertEqual (r .status_code , 200 )
172
172
173
173
# Test PATCH
174
- r = mock_client .patch ()
174
+ r = client .patch ()
175
175
self .assertEqual (r .status_code , 200 )
176
176
177
177
# Test POST
178
- mock_client .response_code = 201
179
- r = mock_client .post ()
178
+ mock_opener .response_code = 201
179
+ r = client .post ()
180
180
self .assertEqual (r .status_code , 201 )
181
181
182
182
# Test DELETE
183
- mock_client .response_code = 204
184
- r = mock_client .delete ()
183
+ mock_opener .response_code = 204
184
+ r = client .delete ()
185
185
self .assertEqual (r .status_code , 204 )
186
186
187
- mock_client .response_code = 400
188
- self .assertRaises (BadRequestsError , mock_client .get )
187
+ mock_opener .response_code = 400
188
+ self .assertRaises (BadRequestsError , client .get )
189
189
190
- mock_client .response_code = 404
191
- self .assertRaises (NotFoundError , mock_client .post )
190
+ mock_opener .response_code = 404
191
+ self .assertRaises (NotFoundError , client .post )
192
192
193
- mock_client .response_code = 415
194
- self .assertRaises (UnsupportedMediaTypeError , mock_client .patch )
193
+ mock_opener .response_code = 415
194
+ self .assertRaises (UnsupportedMediaTypeError , client .patch )
195
195
196
- mock_client .response_code = 503
197
- self .assertRaises (ServiceUnavailableError , mock_client .delete )
196
+ mock_opener .response_code = 503
197
+ self .assertRaises (ServiceUnavailableError , client .delete )
198
198
199
- mock_client .response_code = 523
200
- self .assertRaises (HTTPError , mock_client .delete )
199
+ mock_opener .response_code = 523
200
+ self .assertRaises (SG_HTTPError , client .delete )
201
201
202
202
def test_client_pickle_unpickle (self ):
203
203
pickled_client = pickle .dumps (self .client )
0 commit comments