@@ -222,14 +222,8 @@ def test_setter(self):
222
222
url = "http://example.com"
223
223
method = "GET"
224
224
req = oauth .Request (method )
225
-
226
- try :
227
- url = req .url
228
- self .fail ("AttributeError should have been raised on empty url." )
229
- except AttributeError :
230
- pass
231
- except Exception , e :
232
- self .fail (str (e ))
225
+ self .assertTrue (req .url is None )
226
+ self .assertTrue (req .normalized_url is None )
233
227
234
228
def test_deleter (self ):
235
229
url = "http://example.com"
@@ -253,17 +247,21 @@ def test_url(self):
253
247
method = "GET"
254
248
255
249
req = oauth .Request (method , url1 )
256
- self .assertEquals (req .url , exp1 )
250
+ self .assertEquals (req .normalized_url , exp1 )
251
+ self .assertEquals (req .url , url1 )
257
252
258
253
req = oauth .Request (method , url2 )
259
- self .assertEquals (req .url , exp2 )
254
+ self .assertEquals (req .normalized_url , exp2 )
255
+ self .assertEquals (req .url , url2 )
260
256
261
257
def test_url_query (self ):
262
258
url = "https://www.google.com/m8/feeds/contacts/default/full/?alt=json&max-contacts=10"
259
+ normalized_url = urlparse .urlunparse (urlparse .urlparse (url )[:3 ] + (None , None , None ))
263
260
method = "GET"
264
261
265
262
req = oauth .Request (method , url )
266
263
self .assertEquals (req .url , url )
264
+ self .assertEquals (req .normalized_url , normalized_url )
267
265
268
266
def test_get_parameter (self ):
269
267
url = "http://example.com"
@@ -400,6 +398,30 @@ def test_to_url_with_query(self):
400
398
self .assertEquals (b ['max-contacts' ], ['10' ])
401
399
self .assertEquals (a , b )
402
400
401
+ def test_signature_base_string_with_query (self ):
402
+ url = "https://www.google.com/m8/feeds/contacts/default/full/?alt=json&max-contacts=10"
403
+ params = {
404
+ 'oauth_version' : "1.0" ,
405
+ 'oauth_nonce' : "4572616e48616d6d65724c61686176" ,
406
+ 'oauth_timestamp' : "137131200" ,
407
+ 'oauth_consumer_key' : "0685bd9184jfhq22" ,
408
+ 'oauth_signature_method' : "HMAC-SHA1" ,
409
+ 'oauth_token' : "ad180jjd733klru7" ,
410
+ 'oauth_signature' : "wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D" ,
411
+ }
412
+ req = oauth .Request ("GET" , url , params )
413
+ self .assertEquals (req .normalized_url , 'https://www.google.com/m8/feeds/contacts/default/full/' )
414
+ self .assertEquals (req .url , 'https://www.google.com/m8/feeds/contacts/default/full/?alt=json&max-contacts=10' )
415
+ normalized_params = parse_qsl (req .get_normalized_parameters ())
416
+ self .assertTrue (len (normalized_params ), len (params ) + 2 )
417
+ normalized_params = dict (normalized_params )
418
+ for key , value in params .iteritems ():
419
+ if key == 'oauth_signature' :
420
+ continue
421
+ self .assertEquals (value , normalized_params [key ])
422
+ self .assertEquals (normalized_params ['alt' ], 'json' )
423
+ self .assertEquals (normalized_params ['max-contacts' ], '10' )
424
+
403
425
def test_get_normalized_parameters (self ):
404
426
url = "http://sp.example.com/"
405
427
@@ -871,6 +893,36 @@ def test_multipart_post_does_not_alter_body(self):
871
893
self .assertEqual (result , random_result )
872
894
self .mox .VerifyAll ()
873
895
896
+ def test_url_with_query_string (self ):
897
+ self .mox .StubOutWithMock (httplib2 .Http , 'request' )
898
+ uri = 'http://example.com/foo/bar/?show=thundercats&character=snarf'
899
+ client = oauth .Client (self .consumer , None )
900
+ expected_kwargs = {
901
+ 'method' : 'GET' ,
902
+ 'body' : None ,
903
+ 'redirections' : httplib2 .DEFAULT_MAX_REDIRECTS ,
904
+ 'connection_type' : None ,
905
+ 'headers' : mox .IsA (dict ),
906
+ }
907
+ def oauth_verifier (url ):
908
+ req = oauth .Request .from_consumer_and_token (self .consumer , None ,
909
+ http_method = 'GET' , http_url = uri , parameters = {})
910
+ req .sign_request (oauth .SignatureMethod_HMAC_SHA1 (), self .consumer , None )
911
+ expected = parse_qsl (urlparse .urlparse (req .to_url ()).query )
912
+ actual = parse_qsl (urlparse .urlparse (url ).query )
913
+ if len (expected ) != len (actual ):
914
+ return False
915
+ actual = dict (actual )
916
+ for key , value in expected :
917
+ if key not in ('oauth_signature' , 'oauth_nonce' , 'oauth_timestamp' ):
918
+ if actual [key ] != value :
919
+ return False
920
+ return True
921
+ httplib2 .Http .request (client , mox .Func (oauth_verifier ), ** expected_kwargs )
922
+ self .mox .ReplayAll ()
923
+ client .request (uri , 'GET' )
924
+ self .mox .VerifyAll ()
925
+
874
926
if __name__ == "__main__" :
875
927
unittest .main ()
876
928
0 commit comments