pull/16165/head
Javier Goizueta 4 years ago
parent 3ea4359a46
commit 7dfe25bf99

@ -7,6 +7,12 @@ describe Carto::ConnectionManager do
let(:connection_manager) { Carto::ConnectionManager.new(user) } let(:connection_manager) { Carto::ConnectionManager.new(user) }
before(:all) do before(:all) do
# TODO: remove providers, add dummy providers: (requires parameter changes/adapting the dummy)
# Carto::Connector::PROVIDERS.clear
# Carto::Connector::PROVIDERS << dummy_connector_provider_with_id('snowflake')
# Carto::Connector::PROVIDERS << dummy_connector_provider_with_id('redshift')
# Carto::Connector::PROVIDERS << dummy_connector_provider_with_id('postgres')
# Carto::Connector::PROVIDERS << dummy_connector_provider_with_id('bigquery')
Carto::Connector::PROVIDERS << DummyConnectorProvider Carto::Connector::PROVIDERS << DummyConnectorProvider
Carto::Connector.providers.keys.each do |provider_name| Carto::Connector.providers.keys.each do |provider_name|
Carto::ConnectorProvider.create! name: provider_name Carto::ConnectorProvider.create! name: provider_name
@ -120,4 +126,187 @@ describe Carto::ConnectionManager do
CartoDB::Datasources::Url::Dropbox.any_instance.unstub(:get_auth_url) CartoDB::Datasources::Url::Dropbox.any_instance.unstub(:get_auth_url)
end end
end end
describe "#manage_create" do
after do
$users_metadata.keys('gcloud_connections:*').each do |key|
$users_metadata.del(key)
end
end
it "saves snowflake db connection data to redis" do
pending('db-connectors required for this test') unless Carto::Connector.providers.keys.include?('snowflake')
connection = create(
:connection,
user: user,
name: 'a_connection',
connector: 'snowflake',
connection_type: 'db-connector',
parameters: {
server: 'the-server', database: 'the-database', username: 'the-username', password: 'the-password'
}
)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
expect(redis_json).to be(nil)
connection_manager.manage_create(connection)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
redis_data = JSON.parse(redis_json)
expect(redis_data['connection_id']).to eq(connection.id)
expect(redis_data['connection_type']).to eq(connection.connection_type)
expect(redis_data['connector']).to eq(connection.connector)
expect(redis_data['options']).to eq({ 'server' => 'the-server', 'database' => 'the-database' })
expect(redis_data['credentials']).to eq({ 'username' => 'the-username', 'password' => 'the-password' })
end
it "saves redshift db connection data to redis" do
pending('db-connectors required for this test') unless Carto::Connector.providers.keys.include?('redshift')
connection = create(
:connection,
user: user,
name: 'a_connection',
connector: 'redshift',
connection_type: 'db-connector',
parameters: {
server: 'the-server', database: 'the-database', username: 'the-username', password: 'the-password'
}
)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
expect(redis_json).to be(nil)
connection_manager.manage_create(connection)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
redis_data = JSON.parse(redis_json)
expect(redis_data['connection_id']).to eq(connection.id)
expect(redis_data['connection_type']).to eq(connection.connection_type)
expect(redis_data['connector']).to eq(connection.connector)
expect(redis_data['options']).to eq({ 'server' => 'the-server', 'database' => 'the-database' })
expect(redis_data['credentials']).to eq({ 'username' => 'the-username', 'password' => 'the-password' })
end
it "saves postgres db connection data to redis" do
pending('db-connectors required for this test') unless Carto::Connector.providers.keys.include?('postgres')
connection = create(
:connection,
user: user,
name: 'a_connection',
connector: 'postgres',
connection_type: 'db-connector',
parameters: {
server: 'the-server', database: 'the-database', username: 'the-username', password: 'the-password'
}
)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
expect(redis_json).to be(nil)
connection_manager.manage_create(connection)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
redis_data = JSON.parse(redis_json)
expect(redis_data['connection_id']).to eq(connection.id)
expect(redis_data['connection_type']).to eq(connection.connection_type)
expect(redis_data['connector']).to eq(connection.connector)
expect(redis_data['options']).to eq({ 'server' => 'the-server', 'database' => 'the-database' })
expect(redis_data['credentials']).to eq({ 'username' => 'the-username', 'password' => 'the-password' })
end
it "saves bigquery db connection data to redis" do
pending('db-connectors required for this test') unless Carto::Connector.providers.keys.include?('bigquery')
connection = create(
:connection,
user: user,
name: 'a_connection',
connector: 'bigquery',
connection_type: 'db-connector',
parameters: {
billing_project: 'the-billing-project', service_account: 'the-service-account'
}
)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
expect(redis_json).to be(nil)
connection_manager.manage_create(connection)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
redis_data = JSON.parse(redis_json)
expect(redis_data['connection_id']).to eq(connection.id)
expect(redis_data['connection_type']).to eq(connection.connection_type)
expect(redis_data['connector']).to eq(connection.connector)
expect(redis_data['options']).to eq({ 'billing_project' => 'the-billing-project' })
expect(redis_data['credentials']).to eq({ 'service_account' => 'the-service-account' })
end
it "does not save non-cloud db connections to redis" do
connection = create(
:connection,
user: user,
name: 'a_connection',
connector: 'dummy',
connection_type: 'db-connector',
parameters: { server: 'the-server', password: 'the-password' }
)
connection_manager.manage_create(connection)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
expect(redis_json).to be(nil)
end
it "does not save oauth connections to redis" do
connection_manager.manage_create(connection2)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection2.connector}", connection2.id)
expect(redis_json).to be(nil)
end
it "except for BQ oauth connections" do
connection = create(
:connection,
user: user,
name: 'a_connection',
connector: 'bigquery',
connection_type: 'oauth-service',
token: 'the-token',
parameters: { billing_project: 'the-billing-project' }
)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:bigquery", connection.id)
expect(redis_json).to be(nil)
connection_manager.manage_create(connection)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:bigquery", connection.id)
redis_data = JSON.parse(redis_json)
expect(redis_data['connection_id']).to eq(connection.id)
expect(redis_data['connection_type']).to eq(connection.connection_type)
expect(redis_data['connector']).to eq(connection.connector)
expect(redis_data['options']).to eq({ 'billing_project' => 'the-billing-project' })
expect(redis_data['credentials']).to eq({ 'token' => 'the-token' })
end
end
describe "#manage_destroy" do
after do
$users_metadata.keys('gcloud_connections:*').each do |key|
$users_metadata.del(key)
end
end
it "removes snowflake db connection data from redis" do
pending('db-connectors required for this test') unless Carto::Connector.providers.keys.include?('snowflake')
connection = create(
:connection,
user: user,
name: 'a_connection',
connector: 'snowflake',
connection_type: 'db-connector',
parameters: {
server: 'the-server', database: 'the-database', username: 'the-username', password: 'the-password'
}
)
connection_manager.manage_create(connection)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
expect(redis_json).not_to be(nil)
connection_manager.manage_destroy(connection)
redis_json = $users_metadata.hget("cloud_connections:#{user.username}:#{connection.connector}", connection.id)
expect(redis_json).not_to be(nil)
end
end
# TODO: manage_update
end end

Loading…
Cancel
Save