mirror of
				https://github.com/HoneyryderChuck/httpx.git
				synced 2025-11-04 00:01:41 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			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
 |