added tests for json and form (also multipart) decoders

This commit is contained in:
HoneyryderChuck 2021-08-06 00:51:51 +01:00
parent c9de63d4cd
commit e5a120111c
2 changed files with 51 additions and 0 deletions

View File

@ -125,6 +125,21 @@ class ResponseTest < Minitest::Test
assert body.buffer.is_a?(Tempfile), "body should buffer to file after going over threshold" assert body.buffer.is_a?(Tempfile), "body should buffer to file after going over threshold"
end 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 private
def request(verb = :get, uri = "http://google.com") def request(verb = :get, uri = "http://google.com")

View File

@ -219,6 +219,42 @@ module Requests
assert check_error[retries_response], "expected #{retries_response} to be an error response" 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})" assert retries_session.calls == 1, "expect request to be retried 1 time (was #{retries_session.calls})"
end 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",
"<!DOCTYPE html><title>Content of a.html.</title>\r\n\r\n",
"--90--",
].join
form = form_response.form
assert form["text"] == "text_default"
assert form["file1"].original_filename == "a.txt"
assert form["file1"].content_type == "text/plain"
assert form["file1"].read == "Content of a.txt."
assert form["file2"].original_filename == "a.html"
assert form["file2"].content_type == "text/html"
assert form["file2"].read == "<!DOCTYPE html><title>Content of a.html.</title>"
end
end end
end end
end end