Browser code factoring

This commit is contained in:
erwanlr
2013-03-05 12:50:26 +01:00
parent 1adadcb4bb
commit 5f584f92a7
2 changed files with 99 additions and 93 deletions

View File

@@ -169,6 +169,12 @@ class Browser
end end
def merge_request_params(params = {}) def merge_request_params(params = {})
params = Browser.append_params_header_field(
params,
'User-Agent',
self.user_agent
)
if @proxy if @proxy
params = params.merge(proxy: @proxy) params = params.merge(proxy: @proxy)
@@ -178,25 +184,11 @@ class Browser
end end
if @basic_auth if @basic_auth
if !params.has_key?(:headers) params = Browser.append_params_header_field(
params = params.merge(:headers => {'Authorization' => @basic_auth}) params,
elsif !params[:headers].has_key?('Authorization') 'Authorization',
params[:headers]['Authorization'] = @basic_auth @basic_auth
end )
end
#unless params.has_key?(:ssl_verifyhost)
# params = params.merge(ssl_verifyhost: 0)
#end
#unless params.has_key?(:ssl_verifypeer)
# params = params.merge(ssl_verifypeer: 0)
#end
if !params.has_key?(:headers)
params = params.merge(:headers => {'User-Agent' => self.user_agent})
elsif !params[:headers].has_key?('User-Agent')
params[:headers]['User-Agent'] = self.user_agent
end end
# Used to enable the cache system if :cache_ttl > 0 # Used to enable the cache system if :cache_ttl > 0
@@ -209,6 +201,16 @@ class Browser
private private
# return Array
def self.append_params_header_field(params = {}, field, field_value)
if !params.has_key?(:headers)
params = params.merge(:headers => { field => field_value })
elsif !params[:headers].has_key?(field)
params[:headers][field] = field_value
end
params
end
# return the response # return the response
def run_request(request) def run_request(request)
@hydra.queue request @hydra.queue request

View File

@@ -236,95 +236,99 @@ describe Browser do
end end
end end
describe '#merge_request_params without proxy' do describe '#append_params_header_field' do
it 'should return the default params' do after :each do
expected_params = { Browser.append_params_header_field(
#disable_ssl_host_verification: true, @params,
#disable_ssl_peer_verification: true, @field,
headers: { 'User-Agent' => @browser.user_agent }, @field_value
cache_ttl: @json_config_without_proxy['cache_ttl'] ).should === @expected
}
@browser.merge_request_params().should == expected_params
end end
it 'should return the default params with some values overriden' do context 'when there is no headers' do
expected_params = { it 'create the header and set the field' do
#disable_ssl_host_verification: false, @params = { somekey: 'somevalue' }
#disable_ssl_peer_verification: true, @field = 'User-Agent'
headers: { 'User-Agent' => 'Fake IE' }, @field_value = 'FakeOne'
cache_ttl: 0 @expected = { somekey: 'somevalue', headers: { 'User-Agent' => 'FakeOne' } }
}
@browser.merge_request_params(
#disable_ssl_host_verification: false,
headers: { 'User-Agent' => 'Fake IE' },
cache_ttl: 0
).should == expected_params
end
it 'should return the defaul params with :headers:accept = \'text/html\' (should not override :headers:User-Agent)' do
expected_params = {
#disable_ssl_host_verification: true,
#disable_ssl_peer_verification: true,
headers: { 'User-Agent' => @browser.user_agent, 'accept' => 'text/html' },
cache_ttl: @json_config_without_proxy['cache_ttl']
}
@browser.merge_request_params(headers: { 'accept' => 'text/html' }).should == expected_params
end
it 'should merge the basic-auth' do
@browser.basic_auth = 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='
expected_params = {
#disable_ssl_host_verification: true,
#disable_ssl_peer_verification: true,
cache_ttl: @json_config_without_proxy['cache_ttl'],
headers: {
'Authorization' => 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==',
'User-Agent' => @browser.user_agent
}
}
@browser.merge_request_params().should == expected_params
expected_params[:headers].merge!('User-Agent' => 'Fake FF')
@browser.merge_request_params(headers: { 'User-Agent' => 'Fake FF' }).should == expected_params
end end
end end
describe '#merge_request_params with proxy' do context 'when there are headers' do
it 'should return the default params' do context 'when the field already exists' do
Browser.reset it 'does not replace it' do
browser = Browser.instance(config_file: CONFIG_FILE_WITH_PROXY) @params = { somekey: 'somevalue', headers: { 'Location' => 'SomeLocation' } }
@field = 'Location'
expected_params = { @field_value = 'AnotherLocation'
proxy: @json_config_with_proxy['proxy'], @expected = @params
#disable_ssl_host_verification: true, end
#disable_ssl_peer_verification: true,
headers: { 'User-Agent' => @json_config_with_proxy['user_agent'] },
cache_ttl: @json_config_with_proxy['cache_ttl']
}
browser.merge_request_params().should == expected_params
end end
it 'should return the default params (proxy_auth set)' do context 'when the field is not present' do
Browser.reset it 'sets the field' do
browser = Browser.instance(config_file: CONFIG_FILE_WITH_PROXY_AND_AUTH) @params = { somekey: 'somevalue', headers: { 'Auth' => 'user:pass' } }
@field = 'UA'
expected_params = { @field_value = 'FF'
proxy: @json_config_with_proxy['proxy'], @expected = { somekey: 'somevalue', headers: { 'Auth' => 'user:pass', 'UA' => 'FF' } }
proxyauth: 'user:pass',
#disable_ssl_host_verification: true,
#disable_ssl_peer_verification: true,
headers: { 'User-Agent' => @json_config_with_proxy['user_agent'] },
cache_ttl: @json_config_with_proxy['cache_ttl']
}
browser.merge_request_params().should == expected_params
end end
end end
end
end
describe '#merge_request_params' do
let(:params) { {} }
let(:default_expectation) { { cache_ttl: 250, headers: { 'User-Agent' => 'SomeUA' } } }
after :each do
@browser.stub(user_agent: 'SomeUA')
@browser.cache_ttl = 250
@browser.merge_request_params(params).should == @expected
end
it 'sets the User-Agent header field and cache_ttl' do
@expected = default_expectation
end
context 'when @proxy' do
let(:proxy) { '127.0.0.1:9050' }
let(:proxy_expectation) { default_expectation.merge(proxy: proxy) }
it 'merges the proxy' do
@browser.proxy = proxy
@expected = proxy_expectation
end
context 'when @proxy_auth' do
it 'sets the proxy_auth' do
@browser.proxy = proxy
@browser.proxy_auth = 'user:pass'
@expected = proxy_expectation.merge(proxyauth: 'user:pass')
end
end
end
context 'when @basic_auth' do
it 'appends the basic_auth' do
@browser.basic_auth = 'basic-auth'
@expected = default_expectation.merge(
headers: default_expectation[:headers].merge('Authorization' => 'basic-auth')
)
end
end
context 'when the cache_ttl is alreday set' do
let(:params) { { cache_ttl: 500 } }
it 'does not override it' do
@expected = default_expectation.merge(params)
end
end
end
# TODO # TODO
describe '#forge_request' do describe '#forge_request' do