@@ -62,6 +62,32 @@ def test_that_using_auth_headers_on_post_requests_works
62
62
assert_matching_headers correct_sorted_params , request [ 'authorization' ]
63
63
end
64
64
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
+
65
91
def test_that_version_is_added_to_existing_user_agent
66
92
request = Net ::HTTP ::Post . new ( @request_uri . path )
67
93
request [ 'User-Agent' ] = "MyApp"
@@ -127,14 +153,15 @@ def test_that_using_post_params_works_with_plaintext
127
153
128
154
def test_that_using_post_with_uri_params_works
129
155
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
130
157
request . oauth! ( @http , @consumer , @token , { :scheme => 'query_string' , :nonce => @nonce , :timestamp => @timestamp } )
131
158
132
159
assert_equal 'POST' , request . method
133
160
uri = URI . parse ( request . path )
134
161
assert_equal '/test' , uri . path
135
162
assert_equal nil , uri . fragment
136
163
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
138
165
assert_equal nil , request [ 'authorization' ]
139
166
end
140
167
@@ -152,6 +179,22 @@ def test_that_using_post_with_uri_and_form_params_works
152
179
assert_equal nil , request [ 'authorization' ]
153
180
end
154
181
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
+
155
198
156
199
def test_example_from_specs
157
200
consumer = OAuth ::Consumer . new ( "dpf43f3p2l4k3l03" , "kd94hf93k423kf44" )
@@ -200,12 +243,12 @@ def test_step_by_step_token_request
200
243
assert_equal "oauth_token=requestkey&oauth_token_secret=requestsecret" , response . body
201
244
end
202
245
203
- def test_that_put_bodies_not_signed
246
+ def test_that_put_bodies_signed
204
247
request = Net ::HTTP ::Put . new ( @request_uri . path )
205
248
request . body = "<?xml version=\" 1.0\" ?><foo><bar>baz</bar></foo>"
206
249
request [ "Content-Type" ] = "application/xml"
207
250
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
209
252
end
210
253
211
254
def test_that_put_bodies_not_signed_even_if_form_urlencoded
@@ -222,12 +265,12 @@ def test_that_post_bodies_signed_if_form_urlencoded
222
265
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
223
266
end
224
267
225
- def test_that_post_bodies_not_signed_if_other_content_type
268
+ def test_that_post_bodies_signed_if_other_content_type
226
269
request = Net ::HTTP ::Post . new ( @request_uri . path )
227
270
request . body = "<?xml version=\" 1.0\" ?><foo><bar>baz</bar></foo>"
228
271
request [ "Content-Type" ] = "application/xml"
229
272
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
231
274
end
232
275
233
276
protected
0 commit comments