cartodb/services/datasources/spec/acceptance/datasources_factory_spec.rb
2020-06-15 10:58:47 +08:00

80 lines
3.1 KiB
Ruby

require 'yaml'
require_relative '../../../../spec/rspec_configuration'
require_relative '../../lib/datasources'
require_relative '../doubles/user'
require 'spec_helper_min'
include CartoDB::Datasources
describe DatasourcesFactory do
def get_config
@config ||= YAML.load_file("#{File.dirname(__FILE__)}/../../../../config/app_config.yml")['defaults']
end
describe '#provider_instantiations' do
it 'tests all available provider instantiations' do
user = FactoryGirl.build(:user)
user.stubs('has_feature_flag?').with('gnip_v2').returns(false)
DatasourcesFactory.set_config(get_config)
dropbox_provider = DatasourcesFactory.get_datasource(Url::Dropbox::DATASOURCE_NAME, user)
dropbox_provider.is_a?(Url::Dropbox).should eq true
dropbox_provider = DatasourcesFactory.get_datasource(Url::Box::DATASOURCE_NAME, user)
dropbox_provider.is_a?(Url::Box).should eq true
# Stubs Google Drive client for connectionless testing
Google::Apis::DriveV2::DriveService.any_instance.stubs(:get_file)
Google::Apis::DriveV2::DriveService.any_instance.stubs(:export_file)
Google::Apis::DriveV2::DriveService.any_instance.stubs(:list_files)
gdrive_provider = DatasourcesFactory.get_datasource(Url::GDrive::DATASOURCE_NAME, user)
gdrive_provider.is_a?(Url::GDrive).should eq true
url_provider = DatasourcesFactory.get_datasource(Url::PublicUrl::DATASOURCE_NAME, user)
url_provider.is_a?(Url::PublicUrl).should eq true
twitter_provider = DatasourcesFactory.get_datasource(Search::Twitter::DATASOURCE_NAME, user)
twitter_provider.is_a?(Search::Twitter).should eq true
nil_provider = DatasourcesFactory.get_datasource(nil, user)
nil_provider.nil?.should eq true
expect {
DatasourcesFactory.get_datasource('blablabla...', user)
}.to raise_exception MissingConfigurationError
end
end
describe '#customized_config?' do
let(:twitter_datasource) { CartoDB::Datasources::Search::Twitter::DATASOURCE_NAME }
before(:each) do
@config = get_config
end
it 'returns false for a random user' do
user = FactoryGirl.build(:carto_user, username: 'wadus')
DatasourcesFactory.customized_config?(twitter_datasource, user).should be_false
end
it 'returns true for a user with custom config' do
user = FactoryGirl.build(:carto_user, username: 'wadus')
@config['datasource_search']['twitter_search']['customized_user_list'] = [user.username]
DatasourcesFactory.set_config(@config)
DatasourcesFactory.customized_config?(twitter_datasource, user).should be_true
end
it 'returns true for a user in an organization with custom config' do
organization = Carto::Organization.new(name: 'wadus-org')
user = FactoryGirl.build(:carto_user, username: 'nowadus', organization: organization)
@config['datasource_search']['twitter_search']['customized_orgs_list'] = [organization.name]
DatasourcesFactory.set_config(@config)
DatasourcesFactory.customized_config?(twitter_datasource, user).should be_true
end
end
end