cartodb-4.42/spec/lib/carto/http/client_spec.rb
2024-04-06 05:25:13 +00:00

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