addest tests for headers/request/response

This commit is contained in:
HoneyryderChuck 2017-11-28 14:00:16 +00:00
parent 0bcfc7fbe2
commit 46a1223187
8 changed files with 159 additions and 5 deletions

View File

@ -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

View File

@ -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

View File

@ -11,6 +11,10 @@ module HTTPX
@body = nil
end
def scheme
@uri.scheme
end
def path
path = uri.path
path << "/" if path.empty?

View File

@ -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
View 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
View 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&region=eu-west-1")
assert r3.path == "/path?q=bang&region=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
View 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
View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
gem "minitest"
require "minitest/autorun"
require "httpx"