require "spec_helper"
require "httpi"
require "httpclient"
require "curb"
describe HTTPI do
let(:client) { HTTPI }
let(:default_adapter) { HTTPI::Adapter.find HTTPI::Adapter.use }
let(:curb) { HTTPI::Adapter.find :curb }
describe ".get(request)" do
it "should execute an HTTP GET request using the default adapter" do
request = HTTPI::Request.new
default_adapter.any_instance.expects(:get).with(request)
client.get request
end
end
describe ".get(request, adapter)" do
it "should execute an HTTP GET request using the given adapter" do
request = HTTPI::Request.new
curb.any_instance.expects(:get).with(request)
client.get request, :curb
end
end
describe ".get(url)" do
it "should execute an HTTP GET request using the default adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
default_adapter.any_instance.expects(:get).with(instance_of(HTTPI::Request))
client.get "http://example.com"
end
end
describe ".get(url, adapter)" do
it "should execute an HTTP GET request using the given adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
curb.any_instance.expects(:get).with(instance_of(HTTPI::Request))
client.get "http://example.com", :curb
end
end
shared_examples_for "a request method" do
context "(with a block)" do
it "should yield the HTTP client instance used for the request" do
client.delete "http://example.com" do |http|
http.should be_an(HTTPClient)
end
end
end
it "and raise an ArgumentError in case of an invalid adapter" do
lambda { client.delete HTTPI::Request.new, :invalid }.should raise_error(ArgumentError)
end
it "and raise an ArgumentError in case of an invalid URL" do
lambda { client.delete "invalid" }.should raise_error(ArgumentError)
end
end
describe ".get" do
it_should_behave_like "a request method"
end
describe ".post(request)" do
it "should execute an HTTP POST request using the default adapter" do
request = HTTPI::Request.new
default_adapter.any_instance.expects(:post).with(request)
client.post request
end
end
describe ".post(request, adapter)" do
it "should execute an HTTP POST request using the given adapter" do
request = HTTPI::Request.new
curb.any_instance.expects(:post).with(request)
client.post request, :curb
end
end
describe ".post(url, body)" do
it "should execute an HTTP POST request using the default adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
HTTPI::Request.any_instance.expects(:body=).with("xml")
default_adapter.any_instance.expects(:post).with(instance_of(HTTPI::Request))
client.post "http://example.com", "xml"
end
end
describe ".post(url, body, adapter)" do
it "should execute an HTTP POST request using the given adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
HTTPI::Request.any_instance.expects(:body=).with("xml")
curb.any_instance.expects(:post).with(instance_of(HTTPI::Request))
client.post "http://example.com", "xml", :curb
end
end
describe ".post" do
it_should_behave_like "a request method"
end
describe ".head(request)" do
it "should execute an HTTP HEAD request using the default adapter" do
request = HTTPI::Request.new
default_adapter.any_instance.expects(:head).with(request)
client.head request
end
end
describe ".head(request, adapter)" do
it "should execute an HTTP HEAD request using the given adapter" do
request = HTTPI::Request.new
curb.any_instance.expects(:head).with(request)
client.head request, :curb
end
end
describe ".head(url)" do
it "should execute an HTTP HEAD request using the default adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
default_adapter.any_instance.expects(:head).with(instance_of(HTTPI::Request))
client.head "http://example.com"
end
end
describe ".head(url, adapter)" do
it "should execute an HTTP HEAD request using the given adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
curb.any_instance.expects(:head).with(instance_of(HTTPI::Request))
client.head "http://example.com", :curb
end
end
describe ".head" do
it_should_behave_like "a request method"
end
describe ".put(request)" do
it "should execute an HTTP PUT request using the default adapter" do
request = HTTPI::Request.new
default_adapter.any_instance.expects(:put).with(request)
client.put request
end
end
describe ".put(request, adapter)" do
it "should execute an HTTP PUT request using the given adapter" do
request = HTTPI::Request.new
curb.any_instance.expects(:put).with(request)
client.put request, :curb
end
end
describe ".put(url, body)" do
it "should execute an HTTP PUT request using the default adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
HTTPI::Request.any_instance.expects(:body=).with("xml")
default_adapter.any_instance.expects(:put).with(instance_of(HTTPI::Request))
client.put "http://example.com", "xml"
end
end
describe ".put(url, body, adapter)" do
it "should execute an HTTP PUT request using the given adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
HTTPI::Request.any_instance.expects(:body=).with("xml")
curb.any_instance.expects(:put).with(instance_of(HTTPI::Request))
client.put "http://example.com", "xml", :curb
end
end
describe ".put" do
it_should_behave_like "a request method"
end
describe ".delete(request)" do
it "should execute an HTTP DELETE request using the default adapter" do
request = HTTPI::Request.new
default_adapter.any_instance.expects(:delete).with(request)
client.delete request
end
end
describe ".delete(request, adapter)" do
it "should execute an HTTP DELETE request using the given adapter" do
request = HTTPI::Request.new
curb.any_instance.expects(:delete).with(request)
client.delete request, :curb
end
end
describe ".delete(url)" do
it "should execute an HTTP DELETE request using the default adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
default_adapter.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
client.delete "http://example.com"
end
end
describe ".delete(url, adapter)" do
it "should execute an HTTP DELETE request using the given adapter" do
HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
curb.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
client.delete "http://example.com", :curb
end
end
describe ".delete" do
it_should_behave_like "a request method"
end
end