@@ -62,6 +62,32 @@ def test_that_using_auth_headers_on_post_requests_works
6262 assert_matching_headers correct_sorted_params , request [ 'authorization' ]
6363 end
6464
65+ def test_that_using_auth_headers_on_post_requests_with_data_works
66+ request = Net ::HTTP ::Post . new ( @request_uri . path )
67+ request . body = "data"
68+ request . content_type = 'text/ascii'
69+ request . oauth! ( @http , @consumer , @token , { :nonce => @nonce , :timestamp => @timestamp } )
70+
71+ assert_equal 'POST' , request . method
72+ assert_equal '/test' , request . path
73+ assert_equal 'data' , request . body
74+ assert_equal 'text/ascii' , request . content_type
75+ assert_matching_headers "oauth_nonce=\" 225579211881198842005988698334675835446\" , oauth_body_hash=\" oXyaqmHoChv3HQ2FCvTluqmAC70%3D\" , oauth_signature_method=\" HMAC-SHA1\" , oauth_token=\" token_411a7f\" , oauth_timestamp=\" 1199645624\" , oauth_consumer_key=\" consumer_key_86cad9\" , oauth_signature=\" 0DA6pGTapdHSqC15RZelY5rNLDw%3D\" , oauth_version=\" 1.0\" " , request [ 'authorization' ]
76+ end
77+
78+ def test_that_body_hash_is_obmitted_when_no_algorithm_is_defined
79+ request = Net ::HTTP ::Post . new ( @request_uri . path )
80+ request . body = "data"
81+ request . content_type = 'text/ascii'
82+ request . oauth! ( @http , @consumer , @token , { :nonce => @nonce , :timestamp => @timestamp , :signature_method => 'plaintext' } )
83+
84+ assert_equal 'POST' , request . method
85+ assert_equal '/test' , request . path
86+ assert_equal 'data' , request . body
87+ assert_equal 'text/ascii' , request . content_type
88+ assert_matching_headers "oauth_nonce=\" 225579211881198842005988698334675835446\" , oauth_signature_method=\" plaintext\" , oauth_token=\" token_411a7f\" , oauth_timestamp=\" 1199645624\" , oauth_consumer_key=\" consumer_key_86cad9\" , oauth_signature=\" 5888bf0345e5d237%263196ffd991c8ebdb\" , oauth_version=\" 1.0\" " , request [ 'authorization' ]
89+ end
90+
6591 def test_that_version_is_added_to_existing_user_agent
6692 request = Net ::HTTP ::Post . new ( @request_uri . path )
6793 request [ 'User-Agent' ] = "MyApp"
@@ -127,14 +153,15 @@ def test_that_using_post_params_works_with_plaintext
127153
128154 def test_that_using_post_with_uri_params_works
129155 request = Net ::HTTP ::Post . new ( @request_uri . path + "?" + request_parameters_to_s )
156+ request . set_form_data ( { } ) # just to make sure we have a correct mime type and thus no body hash
130157 request . oauth! ( @http , @consumer , @token , { :scheme => 'query_string' , :nonce => @nonce , :timestamp => @timestamp } )
131158
132159 assert_equal 'POST' , request . method
133160 uri = URI . parse ( request . path )
134161 assert_equal '/test' , uri . path
135162 assert_equal nil , uri . fragment
136163 assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=26g7wHTtNO6ZWJaLltcueppHYiI%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0" , uri . query . split ( "&" ) . sort . join ( '&' )
137- assert_equal nil , request . body
164+ assert_equal "" , request . body
138165 assert_equal nil , request [ 'authorization' ]
139166 end
140167
@@ -152,6 +179,22 @@ def test_that_using_post_with_uri_and_form_params_works
152179 assert_equal nil , request [ 'authorization' ]
153180 end
154181
182+ def test_that_using_post_with_uri_and_data_works
183+ request = Net ::HTTP ::Post . new ( @request_uri . path + "?" + request_parameters_to_s )
184+ request . body = "data"
185+ request . content_type = 'text/ascii'
186+ request . oauth! ( @http , @consumer , @token , { :scheme => :query_string , :nonce => @nonce , :timestamp => @timestamp } )
187+
188+ assert_equal 'POST' , request . method
189+ uri = URI . parse ( request . path )
190+ assert_equal '/test' , uri . path
191+ assert_equal nil , uri . fragment
192+ assert_equal "data" , request . body
193+ assert_equal 'text/ascii' , request . content_type
194+ assert_equal "key=value&oauth_body_hash=oXyaqmHoChv3HQ2FCvTluqmAC70%3D&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=MHRKU42iVHU4Ke9kBUDa9Zw6IAM%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0" , uri . query . split ( "&" ) . sort . join ( '&' )
195+ assert_equal nil , request [ 'authorization' ]
196+ end
197+
155198
156199 def test_example_from_specs
157200 consumer = OAuth ::Consumer . new ( "dpf43f3p2l4k3l03" , "kd94hf93k423kf44" )
@@ -200,12 +243,12 @@ def test_step_by_step_token_request
200243 assert_equal "oauth_token=requestkey&oauth_token_secret=requestsecret" , response . body
201244 end
202245
203- def test_that_put_bodies_not_signed
246+ def test_that_put_bodies_signed
204247 request = Net ::HTTP ::Put . new ( @request_uri . path )
205248 request . body = "<?xml version=\" 1.0\" ?><foo><bar>baz</bar></foo>"
206249 request [ "Content-Type" ] = "application/xml"
207250 signature_base_string = request . signature_base_string ( @http , @consumer , nil , { :nonce => @nonce , :timestamp => @timestamp } )
208- assert_equal "PUT&http%3A%2F%2Fexample.com%2Ftest&oauth_consumer_key %3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0" , signature_base_string
251+ assert_equal "PUT&http%3A%2F%2Fexample.com%2Ftest&oauth_body_hash%3DDvAa1AWdFoH9K%252B%252F2AHm3f6wH27k%253D%26oauth_consumer_key %3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0" , signature_base_string
209252 end
210253
211254 def test_that_put_bodies_not_signed_even_if_form_urlencoded
@@ -222,12 +265,12 @@ def test_that_post_bodies_signed_if_form_urlencoded
222265 assert_equal "POST&http%3A%2F%2Fexample.com%2Ftest&key2%3Dvalue2%26oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0" , signature_base_string
223266 end
224267
225- def test_that_post_bodies_not_signed_if_other_content_type
268+ def test_that_post_bodies_signed_if_other_content_type
226269 request = Net ::HTTP ::Post . new ( @request_uri . path )
227270 request . body = "<?xml version=\" 1.0\" ?><foo><bar>baz</bar></foo>"
228271 request [ "Content-Type" ] = "application/xml"
229272 signature_base_string = request . signature_base_string ( @http , @consumer , nil , { :nonce => @nonce , :timestamp => @timestamp } )
230- assert_equal "POST&http%3A%2F%2Fexample.com%2Ftest&oauth_consumer_key %3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0" , signature_base_string
273+ assert_equal "POST&http%3A%2F%2Fexample.com%2Ftest&oauth_body_hash%3DDvAa1AWdFoH9K%252B%252F2AHm3f6wH27k%253D%26oauth_consumer_key %3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0" , signature_base_string
231274 end
232275
233276 protected
0 commit comments