215 lines
8.7 KiB
Ruby
215 lines
8.7 KiB
Ruby
|
require_relative '../../spec_helper'
|
||
|
require_relative '../../../spec/doubles/request'
|
||
|
|
||
|
module CartoDB
|
||
|
def self.clear_internal_cache
|
||
|
remove_class_variable(:@@request_host) if defined?(@@request_host)
|
||
|
remove_class_variable(:@@hostname) if defined?(@@hostname)
|
||
|
remove_class_variable(:@@http_port) if defined?(@@http_port)
|
||
|
remove_class_variable(:@@https_port) if defined?(@@http_ports)
|
||
|
remove_class_variable(:@@session_domain) if defined?(@@session_domain)
|
||
|
remove_class_variable(:@@domain) if defined?(@@domain)
|
||
|
remove_class_variable(:@@subdomainless_urls) if defined?(@@subdomainless_urls)
|
||
|
remove_class_variable(:@@account_host) if defined?(@@account_host)
|
||
|
remove_class_variable(:@@account_path) if defined?(@@account_path)
|
||
|
remove_class_variable(:@@data_library_path) if defined?(@@data_library_path)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe CartoDB do
|
||
|
after(:each) do
|
||
|
CartoDB.clear_internal_cache
|
||
|
end
|
||
|
|
||
|
describe '#url_methods' do
|
||
|
|
||
|
it 'Tests extract_real_subdomain()' do
|
||
|
username = 'test'
|
||
|
expected_session_domain = '.carto.com'
|
||
|
|
||
|
CartoDB.clear_internal_cache
|
||
|
CartoDB.expects(:get_session_domain).returns(expected_session_domain)
|
||
|
|
||
|
request = Doubles::Request.new({
|
||
|
host: "#{username}#{expected_session_domain}"
|
||
|
})
|
||
|
CartoDB.subdomain_from_request(request).should eq username
|
||
|
end
|
||
|
|
||
|
it 'Tests extract_host_subdomain()' do
|
||
|
username = 'test'
|
||
|
expected_session_domain = '.carto.com'
|
||
|
|
||
|
CartoDB.expects(:get_session_domain).returns(expected_session_domain)
|
||
|
|
||
|
# test.carto.com
|
||
|
request = Doubles::Request.new({
|
||
|
host: "#{username}#{expected_session_domain}"
|
||
|
})
|
||
|
CartoDB.extract_host_subdomain(request).should eq nil
|
||
|
|
||
|
# test.carto.com/u/whatever
|
||
|
request = Doubles::Request.new({
|
||
|
host: "#{username}#{expected_session_domain}",
|
||
|
params: {
|
||
|
user_domain: 'whatever'
|
||
|
}
|
||
|
})
|
||
|
CartoDB.extract_host_subdomain(request).should eq username
|
||
|
end
|
||
|
|
||
|
it 'Tests extract_subdomain() and username_from_request()' do
|
||
|
username = 'test'
|
||
|
orgname = 'testorg'
|
||
|
user_domain = 'whatever'
|
||
|
expected_session_domain = '.carto.com'
|
||
|
|
||
|
CartoDB.expects(:get_session_domain).at_least(0).returns(expected_session_domain)
|
||
|
|
||
|
# testorg.carto.com/u/whatever
|
||
|
request = Doubles::Request.new({
|
||
|
host: "#{orgname}#{expected_session_domain}",
|
||
|
params: {
|
||
|
user_domain: user_domain
|
||
|
}
|
||
|
})
|
||
|
CartoDB.username_from_request(request).should eq user_domain
|
||
|
# test.carto.com
|
||
|
request = Doubles::Request.new({
|
||
|
host: "#{username}#{expected_session_domain}"
|
||
|
})
|
||
|
CartoDB.username_from_request(request).should eq nil
|
||
|
|
||
|
# For extract_subdomain() no need to call again real methods
|
||
|
|
||
|
user_domain_param = "test_user"
|
||
|
host_username = "another_user"
|
||
|
host = "#{host_username}#{expected_session_domain}"
|
||
|
|
||
|
CartoDB.extract_subdomain(Doubles::Request.new({
|
||
|
params: { user_domain: user_domain_param}
|
||
|
}))
|
||
|
.should eq user_domain_param
|
||
|
|
||
|
CartoDB.extract_subdomain(Doubles::Request.new({
|
||
|
host: host
|
||
|
}))
|
||
|
.should eq host_username
|
||
|
end
|
||
|
|
||
|
it 'Tests base_url()' do
|
||
|
expected_session_domain = '.carto.com'
|
||
|
expected_http_port = ':12345'
|
||
|
expected_https_port = ':67890'
|
||
|
username = 'test'
|
||
|
orgname = 'testorg'
|
||
|
protocol_override_https = 'https'
|
||
|
protocol_override_http = 'http'
|
||
|
|
||
|
CartoDB.expects(:get_subdomainless_urls).returns(false)
|
||
|
|
||
|
CartoDB.expects(:use_https?).at_least(0).returns(false)
|
||
|
CartoDB.expects(:get_session_domain).returns(expected_session_domain)
|
||
|
CartoDB.expects(:get_http_port).at_least(1).returns(expected_http_port)
|
||
|
CartoDB.expects(:get_https_port).at_least(1).returns(expected_https_port)
|
||
|
|
||
|
CartoDB.base_url(username, nil, nil).should eq "http://#{username}#{expected_session_domain}#{expected_http_port}"
|
||
|
|
||
|
CartoDB.base_url(username, nil, protocol_override_https)
|
||
|
.should eq "#{protocol_override_https}://#{username}#{expected_session_domain}#{expected_https_port}"
|
||
|
|
||
|
CartoDB.base_url(orgname, username, nil)
|
||
|
.should eq "http://#{orgname}#{expected_session_domain}#{expected_http_port}/u/#{username}"
|
||
|
|
||
|
CartoDB.base_url(orgname, username, protocol_override_https)
|
||
|
.should eq "#{protocol_override_https}://#{orgname}#{expected_session_domain}#{expected_https_port}/u/#{username}"
|
||
|
|
||
|
CartoDB.unstub(:use_https?)
|
||
|
CartoDB.expects(:use_https?).at_least(0).returns(true)
|
||
|
|
||
|
CartoDB.base_url(username, nil, nil)
|
||
|
.should eq "https://#{username}#{expected_session_domain}#{expected_https_port}"
|
||
|
|
||
|
CartoDB.base_url(username, nil, protocol_override_http)
|
||
|
.should eq "#{protocol_override_http}://#{username}#{expected_session_domain}#{expected_http_port}"
|
||
|
|
||
|
# Reset and check without subdomains
|
||
|
CartoDB.clear_internal_cache
|
||
|
|
||
|
expected_session_domain = 'carto.com'
|
||
|
|
||
|
CartoDB.unstub(:get_subdomainless_urls)
|
||
|
CartoDB.expects(:get_subdomainless_urls).returns(true)
|
||
|
|
||
|
CartoDB.unstub(:get_session_domain)
|
||
|
CartoDB.expects(:get_session_domain).returns(expected_session_domain)
|
||
|
CartoDB.expects(:use_https?).at_least(0).returns(false)
|
||
|
|
||
|
CartoDB.base_url(username, nil, nil)
|
||
|
.should eq "http://#{expected_session_domain}#{expected_http_port}/user/#{username}"
|
||
|
|
||
|
CartoDB.base_url(username, nil, protocol_override_https)
|
||
|
.should eq "#{protocol_override_https}://#{expected_session_domain}#{expected_https_port}/user/#{username}"
|
||
|
|
||
|
# Because without subdomains organizations are ignored, acts as previous scenario
|
||
|
CartoDB.base_url(orgname, username, nil)
|
||
|
.should eq "http://#{expected_session_domain}#{expected_http_port}/user/#{orgname}"
|
||
|
|
||
|
CartoDB.base_url(orgname, username, protocol_override_https)
|
||
|
.should eq "#{protocol_override_https}://#{expected_session_domain}#{expected_https_port}/user/#{orgname}"
|
||
|
|
||
|
CartoDB.unstub(:use_https?)
|
||
|
CartoDB.expects(:use_https?).at_least(0).returns(true)
|
||
|
|
||
|
CartoDB.base_url(username, nil, nil)
|
||
|
.should eq "https://#{expected_session_domain}#{expected_https_port}/user/#{username}"
|
||
|
|
||
|
CartoDB.base_url(username, nil, protocol_override_http)
|
||
|
.should eq "#{protocol_override_http}://#{expected_session_domain}#{expected_http_port}/user/#{username}"
|
||
|
end
|
||
|
|
||
|
it 'tests base_url() without logged user' do
|
||
|
expected_session_domain = 'carto.com'
|
||
|
expected_ip = '127.0.0.1'
|
||
|
expected_https_port = ':67890'
|
||
|
|
||
|
CartoDB.clear_internal_cache
|
||
|
CartoDB.stubs(:use_https?).returns(true)
|
||
|
CartoDB.stubs(:get_https_port).returns(expected_https_port)
|
||
|
|
||
|
CartoDB.stubs(:get_subdomainless_urls).returns(true)
|
||
|
CartoDB.stubs(:get_session_domain).returns(expected_session_domain)
|
||
|
CartoDB.base_url(nil, nil, nil).should eq "https://#{expected_session_domain}#{expected_https_port}"
|
||
|
|
||
|
CartoDB.stubs(:request_host).returns(expected_ip)
|
||
|
CartoDB.base_url(nil, nil, nil).should eq "https://#{expected_ip}#{expected_https_port}"
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
describe '#base_domain_from_request' do
|
||
|
it 'extracts subdomain without domain based urls' do
|
||
|
CartoDB.stubs(:subdomainless_urls?).returns(false)
|
||
|
CartoDB.stubs(:session_domain).returns('.localhost.lan')
|
||
|
CartoDB.stubs(:protocol).returns('http')
|
||
|
|
||
|
CartoDB.base_domain_from_request(
|
||
|
OpenStruct.new(host: 'auser.localhost.lan', params: { user_domain: 'buser' })
|
||
|
).should == "http://auser.localhost.lan#{CartoDB.http_port}"
|
||
|
CartoDB.base_domain_from_request(
|
||
|
OpenStruct.new(host: 'org.localhost.lan', params: { user_domain: 'auser' })
|
||
|
).should == "http://org.localhost.lan#{CartoDB.http_port}"
|
||
|
end
|
||
|
|
||
|
it 'extracts subdomain with subdomainless urls' do
|
||
|
CartoDB.stubs(:subdomainless_urls?).returns(true)
|
||
|
CartoDB.stubs(:session_domain).returns('localhost.lan')
|
||
|
CartoDB.stubs(:protocol).returns('http')
|
||
|
|
||
|
CartoDB.base_domain_from_request(
|
||
|
OpenStruct.new(host: 'localhost.lan', params: { user_domain: 'auser' })
|
||
|
).should == "http://localhost.lan#{CartoDB.http_port}"
|
||
|
end
|
||
|
end
|
||
|
end
|