PageRenderTime 49ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/test/connection_test.rb

https://github.com/contextoptional/faraday
Ruby | 255 lines | 214 code | 41 blank | 0 comment | 0 complexity | b15616941b7407341da6e4f0cb6f992d MD5 | raw file
  1. require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
  2. class TestConnection < Faraday::TestCase
  3. def test_initialize_parses_host_out_of_given_url
  4. conn = Faraday::Connection.new "http://sushi.com"
  5. assert_equal 'sushi.com', conn.host
  6. end
  7. def test_initialize_parses_nil_port_out_of_given_url
  8. conn = Faraday::Connection.new "http://sushi.com"
  9. assert_nil conn.port
  10. end
  11. def test_initialize_parses_scheme_out_of_given_url
  12. conn = Faraday::Connection.new "http://sushi.com"
  13. assert_equal 'http', conn.scheme
  14. end
  15. def test_initialize_parses_port_out_of_given_url
  16. conn = Faraday::Connection.new "http://sushi.com:815"
  17. assert_equal 815, conn.port
  18. end
  19. def test_initialize_parses_nil_path_prefix_out_of_given_url
  20. conn = Faraday::Connection.new "http://sushi.com"
  21. assert_equal '/', conn.path_prefix
  22. end
  23. def test_initialize_parses_path_prefix_out_of_given_url
  24. conn = Faraday::Connection.new "http://sushi.com/fish"
  25. assert_equal '/fish', conn.path_prefix
  26. end
  27. def test_initialize_parses_path_prefix_out_of_given_url_option
  28. conn = Faraday::Connection.new :url => "http://sushi.com/fish"
  29. assert_equal '/fish', conn.path_prefix
  30. end
  31. def test_initialize_stores_default_params_from_options
  32. conn = Faraday::Connection.new :params => {:a => 1}
  33. assert_equal({'a' => 1}, conn.params)
  34. end
  35. def test_initialize_stores_default_params_from_uri
  36. conn = Faraday::Connection.new "http://sushi.com/fish?a=1"
  37. assert_equal({'a' => '1'}, conn.params)
  38. end
  39. def test_initialize_stores_default_params_from_uri_and_options
  40. conn = Faraday::Connection.new "http://sushi.com/fish?a=1&b=2", :params => {'a' => 3}
  41. assert_equal({'a' => 3, 'b' => '2'}, conn.params)
  42. end
  43. def test_initialize_stores_default_headers_from_options
  44. conn = Faraday::Connection.new :headers => {:user_agent => 'Faraday'}
  45. assert_equal 'Faraday', conn.headers['User-agent']
  46. end
  47. def test_basic_auth_sets_authorization_header
  48. conn = Faraday::Connection.new
  49. conn.basic_auth 'Aladdin', 'open sesame'
  50. assert_equal 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', conn.headers['Authorization']
  51. end
  52. def test_long_basic_auth_sets_authorization_header_without_new_lines
  53. conn = Faraday::Connection.new
  54. conn.basic_auth "A" * 255, ""
  55. assert_equal "Basic #{'QUFB' * 85}Og==", conn.headers['Authorization']
  56. end
  57. def test_auto_parses_basic_auth_from_url
  58. conn = Faraday::Connection.new :url => "http://aladdin:opensesame@sushi.com/fish"
  59. assert_equal 'Basic YWxhZGRpbjpvcGVuc2VzYW1l', conn.headers['Authorization']
  60. end
  61. def test_token_auth_sets_authorization_header
  62. conn = Faraday::Connection.new
  63. conn.token_auth 'abcdef'
  64. assert_equal 'Token token="abcdef"', conn.headers['Authorization']
  65. end
  66. def test_token_auth_with_options_sets_authorization_header
  67. conn = Faraday::Connection.new
  68. conn.token_auth 'abcdef', :nonce => 'abc'
  69. assert_equal 'Token token="abcdef",
  70. nonce="abc"', conn.headers['Authorization']
  71. end
  72. def test_build_url_uses_connection_host_as_default_uri_host
  73. conn = Faraday::Connection.new
  74. conn.host = 'sushi.com'
  75. uri = conn.build_url("/sake.html")
  76. assert_equal 'sushi.com', uri.host
  77. end
  78. def test_build_url_uses_connection_port_as_default_uri_port
  79. conn = Faraday::Connection.new
  80. conn.port = 23
  81. uri = conn.build_url("http://sushi.com")
  82. assert_equal 23, uri.port
  83. end
  84. def test_build_url_uses_connection_scheme_as_default_uri_scheme
  85. conn = Faraday::Connection.new 'http://sushi.com'
  86. uri = conn.build_url("/sake.html")
  87. assert_equal 'http', uri.scheme
  88. end
  89. def test_build_url_uses_connection_path_prefix_to_customize_path
  90. conn = Faraday::Connection.new
  91. conn.path_prefix = '/fish'
  92. uri = conn.build_url("sake.html")
  93. assert_equal '/fish/sake.html', uri.path
  94. end
  95. def test_build_url_uses_root_connection_path_prefix_to_customize_path
  96. conn = Faraday::Connection.new
  97. conn.path_prefix = '/'
  98. uri = conn.build_url("sake.html")
  99. assert_equal '/sake.html', uri.path
  100. end
  101. def test_build_url_forces_connection_path_prefix_to_be_absolute
  102. conn = Faraday::Connection.new
  103. conn.path_prefix = 'fish'
  104. uri = conn.build_url("sake.html")
  105. assert_equal '/fish/sake.html', uri.path
  106. end
  107. def test_build_url_ignores_connection_path_prefix_trailing_slash
  108. conn = Faraday::Connection.new
  109. conn.path_prefix = '/fish/'
  110. uri = conn.build_url("sake.html")
  111. assert_equal '/fish/sake.html', uri.path
  112. end
  113. def test_build_url_allows_absolute_uri_to_ignore_connection_path_prefix
  114. conn = Faraday::Connection.new
  115. conn.path_prefix = '/fish'
  116. uri = conn.build_url("/sake.html")
  117. assert_equal '/sake.html', uri.path
  118. end
  119. def test_build_url_parses_url_params_into_path
  120. conn = Faraday::Connection.new
  121. uri = conn.build_url("http://sushi.com/sake.html")
  122. assert_equal '/sake.html', uri.path
  123. end
  124. def test_build_url_doesnt_add_ending_slash
  125. conn = Faraday::Connection.new
  126. conn.url_prefix = "http://sushi.com/nigiri"
  127. uri = conn.build_url(nil)
  128. assert_equal "/nigiri", uri.path
  129. end
  130. def test_build_url_parses_url_params_into_query
  131. conn = Faraday::Connection.new
  132. uri = conn.build_url("http://sushi.com/sake.html", 'a[b]' => '1 + 2')
  133. assert_equal "a%5Bb%5D=1%20%2B%202", uri.query
  134. end
  135. def test_build_url_mashes_default_and_given_params_together
  136. conn = Faraday::Connection.new 'http://sushi.com/api?token=abc', :params => {'format' => 'json'}
  137. url = conn.build_url("nigiri?page=1", :limit => 5)
  138. assert_equal %w[format=json limit=5 page=1 token=abc], url.query.split('&').sort
  139. end
  140. def test_build_url_overrides_default_params_with_given_params
  141. conn = Faraday::Connection.new 'http://sushi.com/api?token=abc', :params => {'format' => 'json'}
  142. url = conn.build_url("nigiri?page=1", :limit => 5, :token => 'def', :format => 'xml')
  143. assert_equal %w[format=xml limit=5 page=1 token=def], url.query.split('&').sort
  144. end
  145. def test_default_params_hash_has_indifferent_access
  146. conn = Faraday::Connection.new :params => {'format' => 'json'}
  147. assert conn.params.has_key?(:format)
  148. conn.params[:format] = 'xml'
  149. url = conn.build_url("")
  150. assert_equal %w[format=xml], url.query.split('&').sort
  151. end
  152. def test_build_url_parses_url
  153. conn = Faraday::Connection.new
  154. uri = conn.build_url("http://sushi.com/sake.html")
  155. assert_equal "http", uri.scheme
  156. assert_equal "sushi.com", uri.host
  157. assert_equal '/sake.html', uri.path
  158. assert_nil uri.port
  159. end
  160. def test_build_url_parses_url_and_changes_scheme
  161. conn = Faraday::Connection.new :url => "http://sushi.com/sushi"
  162. conn.scheme = 'https'
  163. uri = conn.build_url("sake.html")
  164. assert_equal 'https://sushi.com/sushi/sake.html', uri.to_s
  165. end
  166. def test_proxy_accepts_string
  167. conn = Faraday::Connection.new
  168. conn.proxy 'http://proxy.com'
  169. assert_equal 'proxy.com', conn.proxy[:uri].host
  170. assert_equal [:uri], conn.proxy.keys
  171. end
  172. def test_proxy_accepts_uri
  173. conn = Faraday::Connection.new
  174. conn.proxy Addressable::URI.parse('http://proxy.com')
  175. assert_equal 'proxy.com', conn.proxy[:uri].host
  176. assert_equal [:uri], conn.proxy.keys
  177. end
  178. def test_proxy_accepts_hash_with_string_uri
  179. conn = Faraday::Connection.new
  180. conn.proxy :uri => 'http://proxy.com', :user => 'rick'
  181. assert_equal 'proxy.com', conn.proxy[:uri].host
  182. assert_equal 'rick', conn.proxy[:user]
  183. end
  184. def test_proxy_accepts_hash
  185. conn = Faraday::Connection.new
  186. conn.proxy :uri => Addressable::URI.parse('http://proxy.com'), :user => 'rick'
  187. assert_equal 'proxy.com', conn.proxy[:uri].host
  188. assert_equal 'rick', conn.proxy[:user]
  189. end
  190. def test_proxy_requires_uri
  191. conn = Faraday::Connection.new
  192. assert_raises ArgumentError do
  193. conn.proxy :uri => :bad_uri, :user => 'rick'
  194. end
  195. end
  196. def test_params_to_query_converts_hash_of_params_to_uri_escaped_query_string
  197. conn = Faraday::Connection.new
  198. url = conn.build_url('', 'a[b]' => '1 + 2')
  199. assert_equal "a%5Bb%5D=1%20%2B%202", url.query
  200. end
  201. def test_dups_connection_object
  202. conn = Faraday::Connection.new 'http://sushi.com/foo', :ssl => { :verify => :none } do |b|
  203. b.adapter :net_http
  204. end
  205. conn.headers['content-type'] = 'text/plain'
  206. conn.params['a'] = '1'
  207. duped = conn.dup
  208. assert_equal conn.build_url(''), duped.build_url('')
  209. [:headers, :params, :builder, :ssl].each do |attr|
  210. assert_equal conn.send(attr), duped.send(attr)
  211. assert_not_equal conn.send(attr).object_id, duped.send(attr).object_id
  212. end
  213. end
  214. end