diff --git a/test/response_test.rb b/test/response_test.rb index 7da54c9e..9b59a3a6 100644 --- a/test/response_test.rb +++ b/test/response_test.rb @@ -125,6 +125,21 @@ class ResponseTest < Minitest::Test assert body.buffer.is_a?(Tempfile), "body should buffer to file after going over threshold" end + def test_response_decoders + json_response = Response.new(request, 200, "2.0", { "content-type" => "application/json" }) + json_response << %({"a": "b"}) + assert json_response.json == { "a" => "b" } + assert json_response.json(symbolize_names: true) == { :a => "b" } + + form_response = Response.new(request, 200, "2.0", { "content-type" => "application/x-www-form-urlencoded" }) + form_response << "a=b&c=d" + assert form_response.form == { "a" => "b", "c" => "d" } + + form2_response = Response.new(request, 200, "2.0", { "content-type" => "application/x-www-form-urlencoded" }) + form2_response << "a[]=b&a[]=c&d[e]=f" + assert form2_response.form == { "a" => %w[b c], "d" => { "e" => "f" } } + end + private def request(verb = :get, uri = "http://google.com") diff --git a/test/support/requests/plugins/multipart.rb b/test/support/requests/plugins/multipart.rb index 1c14e780..231fdc3a 100644 --- a/test/support/requests/plugins/multipart.rb +++ b/test/support/requests/plugins/multipart.rb @@ -219,6 +219,42 @@ module Requests assert check_error[retries_response], "expected #{retries_response} to be an error response" assert retries_session.calls == 1, "expect request to be retried 1 time (was #{retries_session.calls})" end + + def test_plugin_multipart_response_decoder + form_response = HTTPX.plugin(:multipart) + .class.default_options + .response_class + .new( + HTTPX::Request.new(:get, "http://example.com"), + 200, + "2.0", + { "content-type" => "Content-Type: multipart/form-data; boundary=90" } + ) + form_response << [ + "--90\r\n", + "Content-Disposition: form-data; name=\"text\"\r\n\r\n", + "text default\r\n", + "--90\r\n", + "Content-Disposition: form-data; name=\"file1\"; filename=\"a.txt\"\r\n", + "Content-Type: text/plain\r\n\r\n", + "Content of a.txt.\r\n\r\n", + "--90\r\n", + "Content-Disposition: form-data; name=\"file2\"; filename=\"a.html\"\r\n", + "Content-Type: text/html\r\n\r\n", + "