223 lines
7.8 KiB
Ruby
223 lines
7.8 KiB
Ruby
|
require_relative '../../../spec_helper'
|
||
|
|
||
|
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)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe Carto::Api::OembedController do
|
||
|
|
||
|
after(:each) do
|
||
|
CartoDB.clear_internal_cache
|
||
|
end
|
||
|
|
||
|
describe '#json_response_behaviour' do
|
||
|
before(:each) do
|
||
|
domain = '.test.local'
|
||
|
@username = 'testuser'
|
||
|
@orgname = 'testorg'
|
||
|
@uuid = "00000000-0000-0000-0000-000000000000"
|
||
|
@callback = 'callback'
|
||
|
@uri = "/user/#{@username}/api/v1/oembed?url=http://#{@orgname}#{domain}/u/#{@username}/#{@uuid}"
|
||
|
end
|
||
|
|
||
|
it 'Returns JSONP if a callback is specified' do
|
||
|
uri_with_callback = @uri + "&callback=#{@callback}"
|
||
|
get uri_with_callback
|
||
|
response.body.should match(/#{@callback}\(.*\)/)
|
||
|
end
|
||
|
|
||
|
it 'Returns regular JSON if a callback is not' do
|
||
|
get @uri
|
||
|
response.body.should_not match(/#{@callback}\(.*\)/)
|
||
|
end
|
||
|
|
||
|
it 'Returns regular JSON if a callback is not' do
|
||
|
get @uri
|
||
|
response.body.should_not match(/#{@callback}\(.*\)/)
|
||
|
end
|
||
|
|
||
|
it 'Returns valid oembed url' do
|
||
|
get_json @uri do |response|
|
||
|
response.status.should eq 200
|
||
|
embed_url = CartoDB.base_url(@orgname, @username).gsub('http', 'https') + "/viz/#{@uuid}/embed_map"
|
||
|
response.body[:html].should include embed_url
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
describe '#private_url_methods_tests' do
|
||
|
|
||
|
it 'Tests from_domainless_url()' do
|
||
|
controller = Carto::Api::OembedController.new
|
||
|
|
||
|
protocol = 'http'
|
||
|
domain = 'test.local'
|
||
|
username = 'testuser'
|
||
|
orgname = 'testorg'
|
||
|
|
||
|
# Not testing for now subdomainless support
|
||
|
CartoDB.expects(:get_subdomainless_urls).at_least(0).returns(false)
|
||
|
|
||
|
# test.local/u/testuser
|
||
|
url_fragments = [ '', '', domain, '', '', "/u/#{username}" ]
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: nil,
|
||
|
user_profile_url: "#{protocol}://#{domain}/u/#{username}"
|
||
|
}
|
||
|
controller.send(:from_domainless_url, url_fragments, protocol).should eq expected_results
|
||
|
|
||
|
# test.local/u/testuser/something
|
||
|
url_fragments = [ '', '', domain, '', '', "/u/#{username}/something" ]
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: nil,
|
||
|
user_profile_url: "#{protocol}://#{domain}/u/#{username}"
|
||
|
}
|
||
|
controller.send(:from_domainless_url, url_fragments, protocol).should eq expected_results
|
||
|
|
||
|
url_fragments = [ '', '', domain, '', '', "/something" ]
|
||
|
expect {
|
||
|
controller.send(:from_domainless_url, url_fragments, protocol)
|
||
|
}.to raise_error Carto::Api::UrlFRagmentsError, "URL needs username specified in the Path"
|
||
|
|
||
|
url_fragments = [ '', '', domain, '', '', "/u/" ]
|
||
|
expect {
|
||
|
controller.send(:from_domainless_url, url_fragments, protocol)
|
||
|
}.to raise_error Carto::Api::UrlFRagmentsError, "Username not found at url"
|
||
|
end
|
||
|
|
||
|
|
||
|
it 'Tests from_url()' do
|
||
|
controller = Carto::Api::OembedController.new
|
||
|
|
||
|
protocol = 'http'
|
||
|
domain = '.test.local'
|
||
|
username = 'testuser'
|
||
|
orgname = 'testorg'
|
||
|
|
||
|
# Not testing for now subdomainless support
|
||
|
CartoDB.expects(:get_subdomainless_urls).at_least(0).returns(false)
|
||
|
|
||
|
CartoDB.expects(:get_http_port).at_least(0).returns(nil)
|
||
|
CartoDB.expects(:get_session_domain).returns(domain)
|
||
|
|
||
|
# .test.local
|
||
|
url_fragments = [ '', '', "#{domain}", '', '', '' ]
|
||
|
expect {
|
||
|
controller.send(:from_url, url_fragments, protocol, domain)
|
||
|
}.to raise_error Carto::Api::UrlFRagmentsError, "Subdomain not found at url"
|
||
|
|
||
|
# testuser.test.local
|
||
|
url_fragments = [ '', '', "#{username}#{domain}", '', '', '/vis' ]
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: nil,
|
||
|
user_profile_url: "#{protocol}://#{username}#{domain}"
|
||
|
}
|
||
|
controller.send(:from_url, url_fragments, protocol, domain).should eq expected_results
|
||
|
|
||
|
# testorg.test.local/u/testuser/vis
|
||
|
url_fragments = [ '', '', "#{orgname}#{domain}", '', '', "/u/#{username}/vis" ]
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: orgname,
|
||
|
user_profile_url: "#{protocol}://#{orgname}#{domain}/u/#{username}"
|
||
|
}
|
||
|
controller.send(:from_url, url_fragments, protocol, domain).should eq expected_results
|
||
|
|
||
|
url_fragments = [ '', '', "#{orgname}#{domain}", '', '', "/u//vis" ]
|
||
|
expect {
|
||
|
controller.send(:from_url, url_fragments, protocol, domain)
|
||
|
}.to raise_error Carto::Api::UrlFRagmentsError, "Username not found at url"
|
||
|
end
|
||
|
|
||
|
it 'Tests url_fields_from_fragments()' do
|
||
|
controller = Carto::Api::OembedController.new
|
||
|
|
||
|
protocol = 'http'
|
||
|
username = 'testuser'
|
||
|
|
||
|
force_https = false
|
||
|
|
||
|
# Not testing for now subdomainless support
|
||
|
CartoDB.expects(:get_subdomainless_urls).at_least(0).returns(false)
|
||
|
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: nil,
|
||
|
user_profile_url: "#{CartoDB.base_url(username)}",
|
||
|
protocol: protocol
|
||
|
}
|
||
|
|
||
|
controller.send(:url_fields_from_fragments, "#{CartoDB.base_url(username)}", force_https)
|
||
|
.should eq expected_results
|
||
|
|
||
|
controller.send(:url_fields_from_fragments, "#{CartoDB.base_url(username)}/something", force_https)
|
||
|
.should eq expected_results
|
||
|
|
||
|
CartoDB.clear_internal_cache
|
||
|
domain = 'carto.com'
|
||
|
orgname = 'testorg'
|
||
|
CartoDB.expects(:get_session_domain).returns(domain)
|
||
|
CartoDB.expects(:get_http_port).at_least(0).returns(nil) # Easier to test without port specified
|
||
|
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: nil,
|
||
|
user_profile_url: "#{protocol}://#{domain}/u/#{username}",
|
||
|
protocol: protocol
|
||
|
}
|
||
|
controller.send(:url_fields_from_fragments, "http://#{domain}/u/#{username}", force_https)
|
||
|
.should eq expected_results
|
||
|
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: nil,
|
||
|
user_profile_url: "#{protocol}://#{domain}/u/#{username}",
|
||
|
protocol: protocol
|
||
|
}
|
||
|
controller.send(:url_fields_from_fragments, "http://#{domain}/u/#{username}/something", force_https)
|
||
|
.should eq expected_results
|
||
|
|
||
|
expect {
|
||
|
controller.send(:url_fields_from_fragments, "http://#{domain}", force_https)
|
||
|
}.to raise_error Carto::Api::UrlFRagmentsError, "URL needs username specified in the Path"
|
||
|
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: nil,
|
||
|
user_profile_url: "#{protocol}://#{username}#{domain}",
|
||
|
protocol: protocol
|
||
|
}
|
||
|
controller.send(:url_fields_from_fragments, "http://#{username}#{domain}/vis", force_https)
|
||
|
.should eq expected_results
|
||
|
|
||
|
expected_results = {
|
||
|
username: username,
|
||
|
organization_name: orgname,
|
||
|
user_profile_url: "#{protocol}://#{orgname}#{domain}/u/#{username}",
|
||
|
protocol: protocol
|
||
|
}
|
||
|
controller.send(:url_fields_from_fragments, "http://#{orgname}#{domain}/u/#{username}/vis", force_https)
|
||
|
.should eq expected_results
|
||
|
|
||
|
expect {
|
||
|
controller.send(:url_fields_from_fragments, "http://#{orgname}#{domain}/u//vis", force_https)
|
||
|
}.to raise_error Carto::Api::UrlFRagmentsError, "Username not found at url"
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|