11import pickle
22import unittest
33
4- from python_http_client .client import Client
4+ from python_http_client .client import Client , HTTPError , urllib
55from python_http_client .exceptions import (
6- BadRequestsError , HTTPError ,
6+ HTTPError as SG_HTTPError ,
7+ BadRequestsError ,
78 NotFoundError ,
89 ServiceUnavailableError ,
910 UnsupportedMediaTypeError ,
10- handle_error
1111)
1212
1313try :
1414 # Python 3
15- import urllib .request as urllib
1615 from unittest import mock
1716except ImportError :
1817 # Python 2
19- import urllib2 as urllib
2018 import mock
2119
2220try :
2725
2826class MockException (HTTPError ):
2927
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+ )
3432
3533 def read (self ):
3634 return 'BODY'
@@ -51,17 +49,16 @@ def read(self):
5149 return 'RESPONSE BODY'
5250
5351
54- class MockClient ( Client ) :
52+ class MockOpener :
5553
56- def __init__ (self , host , response_code , timeout = None ):
54+ def __init__ (self ):
5755 self .response_code = 200
58- Client .__init__ (self , host )
5956
60- def _make_request (self , opener , request , timeout = None ):
57+ def open (self , request , timeout = None ):
6158 if 200 <= self .response_code < 299 : # if successful code
6259 return MockResponse (self .response_code )
6360 else :
64- raise handle_error ( MockException (self .response_code ) )
61+ raise MockException (request . get_full_url (), self .response_code )
6562
6663
6764class TestClient (unittest .TestCase ):
@@ -150,9 +147,12 @@ def test__(self):
150147 url_path = ['hello' ]
151148 self .assertEqual (client ._url_path [0 ], url_path [0 ])
152149
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' )
156156 url_path = ['hello' ]
157157 self .assertEqual (client ._url_path , url_path )
158158 self .assertEqual (client .__getattr__ ('get' ).__name__ , 'http_request' )
@@ -162,42 +162,42 @@ def test__getattr__(self):
162162 self .assertEqual (client ._version , 3 )
163163
164164 # Test GET
165- mock_client ._url_path += ['test' ]
166- r = mock_client .get ()
165+ client ._url_path += ['test' ]
166+ r = client .get ()
167167 self .assertEqual (r .status_code , 200 )
168168
169169 # Test POST
170- r = mock_client .put ()
170+ r = client .put ()
171171 self .assertEqual (r .status_code , 200 )
172172
173173 # Test PATCH
174- r = mock_client .patch ()
174+ r = client .patch ()
175175 self .assertEqual (r .status_code , 200 )
176176
177177 # Test POST
178- mock_client .response_code = 201
179- r = mock_client .post ()
178+ mock_opener .response_code = 201
179+ r = client .post ()
180180 self .assertEqual (r .status_code , 201 )
181181
182182 # Test DELETE
183- mock_client .response_code = 204
184- r = mock_client .delete ()
183+ mock_opener .response_code = 204
184+ r = client .delete ()
185185 self .assertEqual (r .status_code , 204 )
186186
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 )
189189
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 )
192192
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 )
195195
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 )
198198
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 )
201201
202202 def test_client_pickle_unpickle (self ):
203203 pickled_client = pickle .dumps (self .client )
0 commit comments