1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
require File.expand_path('../../test_helper', __FILE__)
require 'oauth/request_proxy/action_controller_request'
class ActionControllerRequestProxyTest < Minitest::Test
def request_proxy(request_method = :get, uri_params = {}, body_params = {})
request = ActionDispatch::TestRequest.create
request.request_uri = '/'
case request_method
when :post
request.env['REQUEST_METHOD'] = 'POST'
when :put
request.env['REQUEST_METHOD'] = 'PUT'
when :patch
request.env['REQUEST_METHOD'] = 'PATCH'
end
request.env['REQUEST_URI'] = '/'
request.env['RAW_POST_DATA'] = body_params.to_query
request.env['QUERY_STRING'] = body_params.to_query
request.env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'
yield request if block_given?
OAuth::RequestProxy::ActionControllerRequest.new(request, :parameters => uri_params)
end
def test_that_proxy_simple_get_request_works_with_query_params
request_proxy = request_proxy(:get, {'key'=>'value'})
expected_parameters = [["key", "value"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'GET', request_proxy.method
end
def test_that_proxy_simple_post_request_works_with_query_params
request_proxy = request_proxy(:post, {'key'=>'value'})
expected_parameters = [["key", "value"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'POST', request_proxy.method
end
def test_that_proxy_simple_put_request_works_with_query_params
request_proxy = request_proxy(:put, {'key'=>'value'})
expected_parameters = [["key", "value"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'PUT', request_proxy.method
end
def test_that_proxy_simple_patch_request_works_with_query_params
request_proxy = request_proxy(:patch, {'key'=>'value'})
expected_parameters = [["key", "value"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'PATCH', request_proxy.method
end
def test_that_proxy_simple_get_request_works_with_post_params
request_proxy = request_proxy(:get, {}, {'key'=>'value'})
expected_parameters = []
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'GET', request_proxy.method
end
def test_that_proxy_simple_post_request_works_with_post_params
request_proxy = request_proxy(:post, {}, {'key'=>'value'})
expected_parameters = [["key", "value"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'POST', request_proxy.method
end
def test_that_proxy_simple_put_request_works_with_post_params
request_proxy = request_proxy(:put, {}, {'key'=>'value'})
expected_parameters = []
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'PUT', request_proxy.method
end
def test_that_proxy_simple_patch_request_works_with_post_params
request_proxy = request_proxy(:patch, {}, {'key'=>'value'})
expected_parameters = []
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'PATCH', request_proxy.method
end
def test_that_proxy_simple_get_request_works_with_mixed_params
request_proxy = request_proxy(:get, {'key'=>'value'}, {'key2'=>'value2'})
expected_parameters = [["key", "value"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'GET', request_proxy.method
end
def test_that_proxy_simple_post_request_works_with_mixed_params
request_proxy = request_proxy(:post, {'key'=>'value'}, {'key2'=>'value2'})
expected_parameters = [["key", "value"],["key2", "value2"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'POST', request_proxy.method
end
def test_that_proxy_simple_put_request_works_with_mixed_params
request_proxy = request_proxy(:put, {'key'=>'value'}, {'key2'=>'value2'})
expected_parameters = [["key", "value"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'PUT', request_proxy.method
end
def test_that_proxy_simple_patch_request_works_with_mixed_params
request_proxy = request_proxy(:patch, {'key'=>'value'}, {'key2'=>'value2'})
expected_parameters = [["key", "value"]]
assert_equal expected_parameters, request_proxy.parameters_for_signature
assert_equal 'PATCH', request_proxy.method
end
def test_parameter_keys_should_preserve_brackets_from_hash
assert_equal(
[["message[body]", "This is a test"]],
request_proxy(:post, { :message => { :body => 'This is a test' }}).parameters_for_signature
)
end
def test_parameter_values_with_amps_should_not_break_parameter_parsing
assert_equal(
[['message[body]', 'http://foo.com/?a=b&c=d']],
request_proxy(:post, { :message => { :body => 'http://foo.com/?a=b&c=d'}}).parameters_for_signature
)
end
def test_parameter_keys_should_preserve_brackets_from_array
assert_equal(
[["foo[]", "123"], ["foo[]", "456"]],
request_proxy(:post, { :foo => [123, 456] }).parameters_for_signature.sort
)
end
# TODO disabled; ActionController::TestRequest does not appear to parse
# QUERY_STRING
def x_test_query_string_parameter_values_should_be_cgi_unescaped
request = request_proxy do |r|
r.env['QUERY_STRING'] = 'url=http%3A%2F%2Ffoo.com%2F%3Fa%3Db%26c%3Dd'
end
assert_equal(
[['url', 'http://foo.com/?a=b&c=d']],
request.parameters_for_signature.sort
)
end
end
|