140 lines
5.0 KiB
Ruby
140 lines
5.0 KiB
Ruby
|
require_relative '../../../spec_helper'
|
||
|
|
||
|
require 'rspec/core'
|
||
|
require 'rspec/expectations'
|
||
|
require 'rspec/mocks'
|
||
|
require 'mocha'
|
||
|
require_relative '../../../../lib/carto/http/client'
|
||
|
require_relative '../../../../lib/carto/http/request'
|
||
|
|
||
|
describe Carto::Http::Client do
|
||
|
|
||
|
before(:each) do
|
||
|
http_client_tag = 'test'
|
||
|
@client = Carto::Http::Client.get(http_client_tag, log_requests: true)
|
||
|
end
|
||
|
|
||
|
after(:each) do
|
||
|
Typhoeus::Expectation.clear
|
||
|
end
|
||
|
|
||
|
describe '#request' do
|
||
|
it 'wraps creation of typhoeus request objects' do
|
||
|
expected_url = 'www.example.com'
|
||
|
expected_options = {
|
||
|
method: :post,
|
||
|
body: "this is a request body",
|
||
|
params: { field1: "a field" },
|
||
|
headers: { Accept: "text/html",
|
||
|
"User-Agent" => Carto::Http::Request::DEFAULT_USER_AGENT
|
||
|
}
|
||
|
}
|
||
|
Typhoeus::Request.expects(:new).once.with(expected_url, expected_options)
|
||
|
@client.request(
|
||
|
"www.example.com",
|
||
|
method: :post,
|
||
|
body: "this is a request body",
|
||
|
params: { field1: "a field" },
|
||
|
headers: { Accept: "text/html", "User-Agent" => Carto::Http::Request::DEFAULT_USER_AGENT}
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'Request#run' do
|
||
|
it 'performs a request through its typhoeus request object' do
|
||
|
expected_response = Typhoeus::Response.new(code: 200, body: "{'name' : 'paul'}")
|
||
|
Typhoeus.stub('www.example.com').and_return(expected_response)
|
||
|
request = @client.request(
|
||
|
"www.example.com",
|
||
|
method: :post,
|
||
|
body: "this is a request body",
|
||
|
params: { field1: "a field" },
|
||
|
headers: { Accept: "text/html", "User-Agent" => Carto::Http::Request::DEFAULT_USER_AGENT}
|
||
|
)
|
||
|
request.run.should eq expected_response
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#set_x_request_id!' do
|
||
|
after(:each) do
|
||
|
Carto::CurrentRequest.request_id = nil
|
||
|
end
|
||
|
|
||
|
it 'adds the X-Request-ID header from the CurrentRequest when present' do
|
||
|
Carto::CurrentRequest.request_id = 'expected_request_id'
|
||
|
expected_response = Typhoeus::Response.new(code: 200, body: "{'name' : 'paul'}")
|
||
|
Typhoeus.stub('www.example.com') do |request|
|
||
|
request.options[:headers]['X-Request-ID'].should eq 'expected_request_id'
|
||
|
expected_response
|
||
|
end
|
||
|
request = @client.request(
|
||
|
"www.example.com",
|
||
|
method: :post,
|
||
|
body: "this is a request body",
|
||
|
params: { field1: "a field" },
|
||
|
headers: { Accept: "text/html", "User-Agent" => Carto::Http::Request::DEFAULT_USER_AGENT}
|
||
|
)
|
||
|
request.run.should eq expected_response
|
||
|
end
|
||
|
|
||
|
it 'does not touch the headers when absent' do
|
||
|
expected_response = Typhoeus::Response.new(code: 200, body: "{'name' : 'paul'}")
|
||
|
Typhoeus.stub('www.example.com') do |request|
|
||
|
request.options[:headers]['X-Request-ID'].should be_nil
|
||
|
expected_response
|
||
|
end
|
||
|
request = @client.request(
|
||
|
"www.example.com",
|
||
|
method: :post,
|
||
|
body: "this is a request body",
|
||
|
params: { field1: "a field" },
|
||
|
headers: { Accept: "text/html", "User-Agent" => Carto::Http::Request::DEFAULT_USER_AGENT}
|
||
|
)
|
||
|
request.run.should eq expected_response
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#get' do
|
||
|
it 'creates a wrapped GET request and runs it' do
|
||
|
expected_response = Typhoeus::Response.new(code: 200, body: "{'name' : 'paul'}")
|
||
|
Typhoeus.stub("www.example.com").and_return(expected_response)
|
||
|
@client.get("www.example.com").should eq expected_response
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#post' do
|
||
|
it 'creates a wrapped POST request and runs it' do
|
||
|
expected_response = Typhoeus::Response.new(code: 200, body: "{'success': 'true'}")
|
||
|
Typhoeus.stub("www.example.com/posts").and_return(expected_response)
|
||
|
@client.post("www.example.com/posts", body: { title: "test post", content: "this is my test"})
|
||
|
.should eq expected_response
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#head' do
|
||
|
it 'creates a wrapped HEAD request and runs it' do
|
||
|
expected_response = Typhoeus::Response.new(code: 200)
|
||
|
Typhoeus.stub("www.example.com").and_return(expected_response)
|
||
|
@client.head("www.example.com").should eq expected_response
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#put' do
|
||
|
it 'creates a wrapped PUT request and runs it' do
|
||
|
expected_response = Typhoeus::Response.new(code: 200, body: "{'success': 'true'}")
|
||
|
Typhoeus.stub("www.example.com/posts/1").and_return(expected_response)
|
||
|
@client.put("www.example.com/posts/1", body: "whoo, a body").should eq expected_response
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#delete' do
|
||
|
it 'creates a wrapped DELETE request and runs it' do
|
||
|
expected_response = Typhoeus::Response.new(code: 204)
|
||
|
Typhoeus.stub("www.example.com/posts/1").and_return(expected_response)
|
||
|
@client.delete("www.example.com/posts/1").should eq expected_response
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|