mirror of
				https://github.com/HoneyryderChuck/httpx.git
				synced 2025-11-03 00:03:30 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require_relative "test_helper"
 | 
						|
 | 
						|
class ResponseTest < Minitest::Test
 | 
						|
  include HTTPX
 | 
						|
 | 
						|
  def test_response_status
 | 
						|
    r1 = Response.new(request, 200, "1.1", {})
 | 
						|
    assert r1.status == 200, "unexpected status code (#{r1.status})"
 | 
						|
    r2 = Response.new(request, "200", "1.1", {})
 | 
						|
    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_write
 | 
						|
    assert resource.body.empty?, "body should be empty after init"
 | 
						|
    resource << "data"
 | 
						|
    assert resource.body == "data", "body should have been updated"
 | 
						|
  end
 | 
						|
 | 
						|
  def test_raise_for_status
 | 
						|
    r1 = Response.new(request, 200, "2.0", {})
 | 
						|
    r1.raise_for_status
 | 
						|
    r2 = Response.new(request, 302, "2.0", {})
 | 
						|
    r2.raise_for_status
 | 
						|
    r3 = Response.new(request, 404, "2.0", {})
 | 
						|
    error = assert_raises(HTTPX::HTTPError) { r3.raise_for_status }
 | 
						|
    assert error.status == 404
 | 
						|
    r4 = Response.new(request, 500, "2.0", {})
 | 
						|
    error = assert_raises(HTTPX::HTTPError) { r4.raise_for_status }
 | 
						|
    assert error.status == 500
 | 
						|
  end
 | 
						|
 | 
						|
  def test_response_body_to_s
 | 
						|
    body1 = Response::Body.new(Response.new(request, 200, "2.0", {}), threshold_size: 1024)
 | 
						|
    assert body1.empty?, "body must be empty after initialization"
 | 
						|
    body1.write("foo")
 | 
						|
    assert body1 == "foo", "body must be updated"
 | 
						|
    body1.write("foo")
 | 
						|
    body1.write("bar")
 | 
						|
    assert body1 == "foobar", "body must buffer subsequent chunks"
 | 
						|
 | 
						|
    body3 = Response::Body.new(Response.new(request("head"), 200, "2.0", {}), threshold_size: 1024)
 | 
						|
    assert body3.empty?, "body must be empty after initialization"
 | 
						|
    assert body3 == "", "HEAD requets body must be empty"
 | 
						|
  end
 | 
						|
 | 
						|
  def test_response_body_read
 | 
						|
    body1 = Response::Body.new(Response.new(request, 200, "2.0", {}), threshold_size: 1024)
 | 
						|
    body1.write("foo")
 | 
						|
    assert body1.bytesize == 3
 | 
						|
    assert body1.read(1), "f"
 | 
						|
    assert body1.read(1), "o"
 | 
						|
    assert body1.read(1), "o"
 | 
						|
  end
 | 
						|
 | 
						|
  def test_response_body_each
 | 
						|
    body1 = Response::Body.new(Response.new(request, 200, "2.0", {}), threshold_size: 1024)
 | 
						|
    body1.write("foo")
 | 
						|
    assert body1.each.to_a == %w[foo], "must yield buffer"
 | 
						|
    body1.write("foo")
 | 
						|
    body1.write("bar")
 | 
						|
    assert body1.each.to_a == %w[foobar], "must yield buffers"
 | 
						|
  end
 | 
						|
 | 
						|
  def test_response_body_buffer
 | 
						|
    body = Response::Body.new(Response.new(request, 200, "2.0", {}), threshold_size: 10)
 | 
						|
    body.extend(Module.new do
 | 
						|
      attr_reader :buffer
 | 
						|
    end)
 | 
						|
    assert body.buffer.nil?, "body should not buffer anything"
 | 
						|
    body.write("hello")
 | 
						|
    assert body.buffer.is_a?(StringIO), "body should buffer to memory"
 | 
						|
    body.write(" world")
 | 
						|
    assert body.buffer.is_a?(Tempfile), "body should buffer to file after going over threshold"
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def request(verb = :get, uri = "http://google.com")
 | 
						|
    Request.new(verb, uri)
 | 
						|
  end
 | 
						|
 | 
						|
  def response(*args)
 | 
						|
    Response.new(*args)
 | 
						|
  end
 | 
						|
 | 
						|
  def resource
 | 
						|
    @resource ||= Response.new(request, 200, "2.0", {})
 | 
						|
  end
 | 
						|
end
 |