# frozen_string_literal: true RSpec.describe HTTP::Features::AutoInflate do subject(:feature) { HTTP::Features::AutoInflate.new } let(:connection) { double } let(:headers) { {} } let(:response) do HTTP::Response.new( :version => "1.1", :status => 200, :headers => headers, :connection => connection, :request => HTTP::Request.new(:verb => :get, :uri => "http://example.com") ) end describe "#wrap_response" do subject(:result) { feature.wrap_response(response) } context "when there is no Content-Encoding header" do it "returns original request" do expect(result).to be response end end context "for identity Content-Encoding header" do let(:headers) { {:content_encoding => "identity"} } it "returns original request" do expect(result).to be response end end context "for unknown Content-Encoding header" do let(:headers) { {:content_encoding => "not-supported"} } it "returns original request" do expect(result).to be response end end context "for deflate Content-Encoding header" do let(:headers) { {:content_encoding => "deflate"} } it "returns a HTTP::Response wrapping the inflated response body" do expect(result.body).to be_instance_of HTTP::Response::Body end end context "for gzip Content-Encoding header" do let(:headers) { {:content_encoding => "gzip"} } it "returns a HTTP::Response wrapping the inflated response body" do expect(result.body).to be_instance_of HTTP::Response::Body end end context "for x-gzip Content-Encoding header" do let(:headers) { {:content_encoding => "x-gzip"} } it "returns a HTTP::Response wrapping the inflated response body" do expect(result.body).to be_instance_of HTTP::Response::Body end end # TODO(ixti): We should refactor API to either make uri non-optional, # or add reference to request into response object (better). context "when response has uri" do let(:response) do HTTP::Response.new( :version => "1.1", :status => 200, :headers => {:content_encoding => "gzip"}, :connection => connection, :request => HTTP::Request.new(:verb => :get, :uri => "https://example.com") ) end it "preserves uri in wrapped response" do expect(result.uri).to eq HTTP::URI.parse("https://example.com") end end end end