mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-08-10 00:01:27 -04:00
addest tests for headers/request/response
This commit is contained in:
parent
0bcfc7fbe2
commit
46a1223187
@ -43,7 +43,7 @@ module HTTPX
|
||||
end
|
||||
|
||||
headers = {}
|
||||
headers[":scheme"] = uri.scheme
|
||||
headers[":scheme"] = request.scheme
|
||||
headers[":method"] = request.verb.to_s.upcase
|
||||
headers[":path"] = request.path
|
||||
headers[":authority"] = request.authority
|
||||
|
@ -8,7 +8,7 @@ module HTTPX
|
||||
@headers = {}
|
||||
return unless h
|
||||
h.each do |field, value|
|
||||
@headers[downcased(field)] = value
|
||||
@headers[downcased(field)] = array_value(value)
|
||||
end
|
||||
end
|
||||
|
||||
@ -55,7 +55,7 @@ module HTTPX
|
||||
#
|
||||
def []=(field, value)
|
||||
return unless value
|
||||
@headers[downcased(field)] = [String(value)]
|
||||
@headers[downcased(field)] = array_value(value)
|
||||
end
|
||||
|
||||
# deletes all values associated with +field+ header.
|
||||
@ -123,6 +123,15 @@ module HTTPX
|
||||
|
||||
private
|
||||
|
||||
def array_value(value)
|
||||
case value
|
||||
when Array
|
||||
value.map{ |val| String(val) }
|
||||
else
|
||||
[String(value)]
|
||||
end
|
||||
end
|
||||
|
||||
def downcased(field)
|
||||
field.downcase
|
||||
end
|
||||
|
@ -11,6 +11,10 @@ module HTTPX
|
||||
@body = nil
|
||||
end
|
||||
|
||||
def scheme
|
||||
@uri.scheme
|
||||
end
|
||||
|
||||
def path
|
||||
path = uri.path
|
||||
path << "/" if path.empty?
|
||||
|
@ -12,11 +12,10 @@ module HTTPX
|
||||
def initialize(status, headers)
|
||||
@status = Integer(status)
|
||||
@headers = Headers.new(headers)
|
||||
@body = +"".b
|
||||
end
|
||||
|
||||
def <<(data)
|
||||
@body << data
|
||||
(@body ||= +"") << data
|
||||
end
|
||||
|
||||
|
||||
|
50
test/headers_test.rb
Normal file
50
test/headers_test.rb
Normal file
@ -0,0 +1,50 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative "test_helper"
|
||||
|
||||
class HeadersTest < Minitest::Test
|
||||
include HTTPX
|
||||
|
||||
def test_headers_set
|
||||
h1 = Headers.new
|
||||
assert h1["accept"].nil?, "unexpected header value"
|
||||
assert h1["accept"] = "text/html"
|
||||
assert h1["accept"] == "text/html", "unexpected header value"
|
||||
h1["Accept-Encoding"] = "gzip"
|
||||
assert h1["accept-encoding"] == "gzip", "unexpected header value"
|
||||
assert h1["Accept-Encoding"] == "gzip", "unexpected header value"
|
||||
end
|
||||
|
||||
def test_headers_delete
|
||||
h1 = Headers.new("accept" => "text/html")
|
||||
assert h1["accept"] == "text/html", "unexpected header value"
|
||||
h1.delete("accept")
|
||||
assert h1["accept"].nil?, "unexpected header value"
|
||||
end
|
||||
|
||||
def test_headers_add
|
||||
h1 = Headers.new("accept" => "text/html")
|
||||
h1.add("accept", "application/xhtml+xml")
|
||||
assert h1["accept"] == "text/html,application/xhtml+xml", "unexpected header value"
|
||||
assert h1.get("accept") == %w[text/html application/xhtml+xml], "unexpected header value"
|
||||
end
|
||||
|
||||
def test_header_key?
|
||||
h1 = Headers.new("accept" => "text/html")
|
||||
assert h1.key?("accept"), "header field should exist"
|
||||
assert !h1.key?("content-encoding"), "header field should no exist"
|
||||
end
|
||||
|
||||
def test_header_each
|
||||
h1 = Headers.new("accept" => "text/html")
|
||||
enum = h1.each
|
||||
ha = enum.to_a
|
||||
assert ha == [%w[accept text/html]], "unexpected array representation"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def resource
|
||||
@resource ||= Headers.new({})
|
||||
end
|
||||
end
|
55
test/request_test.rb
Normal file
55
test/request_test.rb
Normal file
@ -0,0 +1,55 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative "test_helper"
|
||||
|
||||
class RequestTest < Minitest::Test
|
||||
include HTTPX
|
||||
|
||||
def test_request_verb
|
||||
r1 = Request.new(:get, "/")
|
||||
assert r1.verb == :get, "unexpected verb (#{r1.verb})"
|
||||
r2 = Request.new("GET", "/")
|
||||
assert r2.verb == :get, "unexpected verb (#{r1.verb})"
|
||||
end
|
||||
|
||||
def test_request_headers
|
||||
assert resource.headers.is_a?(Headers), "headers should have been coerced"
|
||||
end
|
||||
|
||||
def test_request_body_concat
|
||||
assert resource.body.nil?, "body should be nil after init"
|
||||
resource << "data"
|
||||
assert resource.body == "data", "body should have been updated"
|
||||
end
|
||||
|
||||
def test_request_scheme
|
||||
r1 = Request.new(:get, "http://google.com/path")
|
||||
assert r1.scheme == "http", "unexpected scheme (#{r1.scheme}"
|
||||
r2 = Request.new(:get, "https://google.com/path")
|
||||
assert r2.scheme == "https", "unexpected scheme (#{r2.scheme}"
|
||||
end
|
||||
|
||||
def test_request_authority
|
||||
r1 = Request.new(:get, "http://google.com/path")
|
||||
assert r1.authority == "google.com", "unexpected authority (#{r1.authority})"
|
||||
r2 = Request.new(:get, "http://google.com:80/path")
|
||||
assert r2.authority == "google.com", "unexpected authority (#{r2.authority})"
|
||||
r3 = Request.new(:get, "http://app.dev:8080/path")
|
||||
assert r3.authority == "app.dev:8080", "unexpected authority (#{r3.authority})"
|
||||
end
|
||||
|
||||
def test_request_path
|
||||
r1 = Request.new(:get, "http://google.com/")
|
||||
assert r1.path == "/", "unexpected path (#{r1.path})"
|
||||
r2 = Request.new(:get, "http://google.com/path")
|
||||
assert r2.path == "/path", "unexpected path (#{r2.path})"
|
||||
r3 = Request.new(:get, "http://google.com/path?q=bang®ion=eu-west-1")
|
||||
assert r3.path == "/path?q=bang®ion=eu-west-1", "unexpected path (#{r3.path})"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def resource
|
||||
@resource ||= Request.new(:get, "http://localhost:3000")
|
||||
end
|
||||
end
|
30
test/response_test.rb
Normal file
30
test/response_test.rb
Normal file
@ -0,0 +1,30 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative "test_helper"
|
||||
|
||||
class ResponseTest < Minitest::Test
|
||||
include HTTPX
|
||||
|
||||
def test_response_status
|
||||
r1 = Response.new(200, {})
|
||||
assert r1.status == 200, "unexpected status code (#{r1.status})"
|
||||
r2 = Response.new("200", {})
|
||||
assert r2.status == 200, "unexpected status code (#{r2.status})"
|
||||
end
|
||||
|
||||
def test_response_headers
|
||||
assert resource.headers.is_a?(Headers), "headers should have been coerced"
|
||||
end
|
||||
|
||||
def test_response_body_concat
|
||||
assert resource.body.nil?, "body should be nil after init"
|
||||
resource << "data"
|
||||
assert resource.body == "data", "body should have been updated"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def resource
|
||||
@resource ||= Response.new(200, {})
|
||||
end
|
||||
end
|
7
test/test_helper.rb
Normal file
7
test/test_helper.rb
Normal file
@ -0,0 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
gem "minitest"
|
||||
require "minitest/autorun"
|
||||
|
||||
|
||||
require "httpx"
|
Loading…
x
Reference in New Issue
Block a user