spec/httpi/adapter/net_http_spec.rb in httpi-1.1.1 vs spec/httpi/adapter/net_http_spec.rb in httpi-2.0.0.rc1

- old
+ new

@@ -1,135 +1,150 @@ require "spec_helper" require "httpi/adapter/net_http" require "httpi/request" +HTTPI::Adapter.load_adapter(:net_http) + describe HTTPI::Adapter::NetHTTP do - let(:net_http) { Net::HTTP.any_instance } + + let(:net_http) { Net::HTTP.any_instance } + let(:request) { HTTPI::Request.new("http://example.com") } let(:basic_response) { { :body => Fixture.xml, :headers => { "Accept-encoding" => "utf-8" } } } - def adapter(request) - @adapter ||= HTTPI::Adapter::NetHTTP.new request - end + let(:adapter) { + HTTPI::Adapter::NetHTTP.new(request) + } - describe "#get" do + describe "#request(:get)" do it "should return a valid HTTPI::Response" do - stub_request(:get, basic_request.url.to_s).to_return(basic_response) - adapter(basic_request).get(basic_request).should match_response(:body => Fixture.xml) + stub_request(:get, request.url.to_s).to_return(basic_response) + adapter.request(:get).should match_response(:body => Fixture.xml) end end - describe "#post" do + describe "#request(:post)" do it "should return a valid HTTPI::Response" do - request = HTTPI::Request.new :url => "http://example.com", :body => Fixture.xml + request.body = Fixture.xml stub_request(:post, request.url.to_s).with(:body => request.body).to_return(basic_response) - adapter(request).post(request).should match_response(:body => Fixture.xml) + adapter.request(:post).should match_response(:body => Fixture.xml) end end - describe "#head" do + describe "#request(:head)" do it "should return a valid HTTPI::Response" do - stub_request(:head, basic_request.url.to_s).to_return(basic_response) - adapter(basic_request).head(basic_request).should match_response(:body => Fixture.xml) + stub_request(:head, request.url.to_s).to_return(basic_response) + adapter.request(:head).should match_response(:body => Fixture.xml) end end - describe "#put" do + describe "#request(:put)" do it "should return a valid HTTPI::Response" do - request = HTTPI::Request.new( - :url => "http://example.com", - :headers => { "Accept-encoding" => "utf-8" }, - :body => Fixture.xml - ) + request.url = "http://example.com" + request.headers = { "Accept-encoding" => "utf-8" } + request.body = Fixture.xml + stub_request(:put, request.url.to_s).with(:body => request.body).to_return(basic_response) - adapter(request).put(request).should match_response(:body => Fixture.xml) + adapter.request(:put).should match_response(:body => Fixture.xml) end end - describe "#delete" do + describe "#request(:delete)" do it "should return a valid HTTPI::Response" do - stub_request(:delete, basic_request.url.to_s).to_return(basic_response) - adapter(basic_request).delete(basic_request).should match_response(:body => Fixture.xml) + stub_request(:delete, request.url.to_s).to_return(basic_response) + adapter.request(:delete).should match_response(:body => Fixture.xml) end end + describe "#request(:custom)" do + it "raises a NotSupportedError" do + expect { adapter.request(:custom) }. + to raise_error(HTTPI::NotSupportedError, "Net::HTTP does not support custom HTTP methods") + end + end + describe "settings:" do - before { stub_request(:get, basic_request.url.to_s) } + before { stub_request(:get, request.url.to_s) } describe "use_ssl" do it "should be set to false for non-SSL requests" do net_http.expects(:use_ssl=).with(false) - adapter(basic_request).get(basic_request) + adapter.request(:get) end it "should be set to true for SSL requests" do - request = basic_request { |request| request.ssl = true } + request.ssl = true net_http.expects(:use_ssl=).with(true) - adapter(request).get(request) + adapter.request(:get) end end describe "open_timeout" do it "should not be set if not specified" do net_http.expects(:open_timeout=).never - adapter(basic_request).get(basic_request) + adapter.request(:get) end it "should be set if specified" do - request = basic_request { |request| request.open_timeout = 30 } + request.open_timeout = 30 net_http.expects(:open_timeout=).with(30) - adapter(request).get(request) + adapter.request(:get) end end describe "read_timeout" do it "should not be set if not specified" do net_http.expects(:read_timeout=).never - adapter(basic_request).get(basic_request) + adapter.request(:get) end it "should be set if specified" do - request = basic_request { |request| request.read_timeout = 30 } + request.read_timeout = 30 net_http.expects(:read_timeout=).with(30) - adapter(request).get(request) + adapter.request(:get) end end describe "basic_auth" do it "should be set for HTTP basic auth" do - request = basic_request { |request| request.auth.basic "username", "password" } + request.auth.basic "username", "password" stub_request(:get, "http://username:password@example.com") Net::HTTP::Get.any_instance.expects(:basic_auth).with(*request.auth.credentials) - adapter(request).get(request) + adapter.request(:get) end end context "(for SSL client auth)" do - let(:ssl_auth_request) do - basic_request do |request| - request.auth.ssl.cert_key_file = "spec/fixtures/client_key.pem" - request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem" - end + before do + request.auth.ssl.cert_key_file = "spec/fixtures/client_key.pem" + request.auth.ssl.cert_file = "spec/fixtures/client_cert.pem" end it "key, cert and verify_mode should be set" do - net_http.expects(:cert=).with(ssl_auth_request.auth.ssl.cert) - net_http.expects(:key=).with(ssl_auth_request.auth.ssl.cert_key) - net_http.expects(:verify_mode=).with(ssl_auth_request.auth.ssl.openssl_verify_mode) + net_http.expects(:cert=).with(request.auth.ssl.cert) + net_http.expects(:key=).with(request.auth.ssl.cert_key) + net_http.expects(:verify_mode=).with(request.auth.ssl.openssl_verify_mode) - adapter(ssl_auth_request).get(ssl_auth_request) + adapter.request(:get) end it "should set the client_ca if specified" do - ssl_auth_request.auth.ssl.ca_cert_file = "spec/fixtures/client_cert.pem" - net_http.expects(:ca_file=).with(ssl_auth_request.auth.ssl.ca_cert_file) + request.auth.ssl.ca_cert_file = "spec/fixtures/client_cert.pem" + net_http.expects(:ca_file=).with(request.auth.ssl.ca_cert_file) - adapter(ssl_auth_request).get(ssl_auth_request) + adapter.request(:get) + end + + it 'should set the ssl_version if specified' do + request.auth.ssl.ssl_version = :SSLv3 + net_http.expects(:ssl_version=).with(request.auth.ssl.ssl_version) + + adapter.request(:get) end end end def basic_request