httpx/test/extensions/response_pattern_match.rb
2021-06-17 15:29:09 +01:00

76 lines
2.6 KiB
Ruby

# frozen_string_literal: true
module ResponsePatternMatchTests
include HTTPX
def test_response_headers_deconstruct
response = Response.new(request, 200, "2.0", { "host" => "google.com", "content-type" => "application/json" })
case response
in [_, [*, ["content-type", content_type], *], _]
assert content_type == "application/json"
else
raise "unexpected response"
end
end
def test_response_deconstruct
response_with_body = Response.new(request, 200, "2.0", { "x-with-body" => "true" })
response_with_body << "OK"
responses = [
response_with_body,
Response.new(request, 202, "2.0", { "x-success" => "true" }),
Response.new(request, 400, "2.0", { "x-client-error" => "true" }),
Response.new(request, 500, "2.0", { "x-server-error" => "true" }),
ErrorResponse.new(request, StandardError.new("match error"), Options.new),
]
responses.each do |response|
case response
in [200, headers, "OK"]
verify_header(headers, "x-with-body", "true")
in [201..399, headers, _body]
verify_header(headers, "x-success", "true")
in [400..499, headers, _body]
verify_header(headers, "x-client-error", "true")
in [500.., headers, _body]
verify_header(headers, "x-server-error", "true")
in [StandardError => error]
assert error.message == "match error", "unexpected message (was '#{error.message}')"
else
raise "unexpected response: #{response}"
end
end
end
def test_response_deconstruct_keys
response_with_body = Response.new(request, 200, "2.0", { "x-with-body" => "true" })
response_with_body << "OK"
responses = [
response_with_body,
Response.new(request, 202, "2.0", { "x-success" => "true" }),
Response.new(request, 400, "2.0", { "x-client-error" => "true" }),
Response.new(request, 500, "2.0", { "x-server-error" => "true" }),
ErrorResponse.new(request, StandardError.new("match error"), Options.new),
]
responses.each do |response|
case response
in { status: 200, headers:, body: "OK" }
verify_header(headers, "x-with-body", "true")
in { status: 201..399, headers: }
verify_header(headers, "x-success", "true")
in { status: 400..499, headers: }
verify_header(headers, "x-client-error", "true")
in { status: 500.., headers: }
verify_header(headers, "x-server-error", "true")
in { error: error }
assert error.message == "match error", "unexpected message (was '#{error.message}')"
else
raise "unexpected response: #{response}"
end
end
end
end