|
|
|
@ -74,26 +74,190 @@ describe 'UserMigration' do
|
|
|
|
|
it_should_behave_like 'migrating metadata', true
|
|
|
|
|
it_should_behave_like 'migrating metadata', false
|
|
|
|
|
|
|
|
|
|
describe 'failing user imports should rollback' do
|
|
|
|
|
before :each do
|
|
|
|
|
@user = create_user_with_visualizations
|
|
|
|
|
@carto_user = Carto::User.find(@user.id)
|
|
|
|
|
@user_attributes = @carto_user.attributes
|
|
|
|
|
|
|
|
|
|
@export = Carto::UserMigrationExport.create(
|
|
|
|
|
user: @carto_user,
|
|
|
|
|
export_metadata: true
|
|
|
|
|
)
|
|
|
|
|
@export.run_export
|
|
|
|
|
destroy_user
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
after :each do
|
|
|
|
|
@carto_user.destroy
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'import failing in import_metadata should rollback' do
|
|
|
|
|
Carto::RedisExportService.any_instance.stubs(:restore_redis_from_hash_export).raises('Some exception')
|
|
|
|
|
|
|
|
|
|
imp = import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
|
|
|
|
|
Carto::RedisExportService.any_instance.unstub(:restore_redis_from_hash_export)
|
|
|
|
|
|
|
|
|
|
import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'import failing in JobImport#run!' do
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.stubs(:grant_user_role).raises('Some exception')
|
|
|
|
|
|
|
|
|
|
imp = import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.unstub(:grant_user_role)
|
|
|
|
|
|
|
|
|
|
import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'import failing creating user database and roles' do
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.stubs(:import_pgdump).raises('Some exception')
|
|
|
|
|
|
|
|
|
|
imp = import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.unstub(:import_pgdump)
|
|
|
|
|
|
|
|
|
|
import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'import failing importing visualizations' do
|
|
|
|
|
Carto::UserMetadataExportService.any_instance.stubs(:import_search_tweets_from_directory).raises('Some exception')
|
|
|
|
|
|
|
|
|
|
imp = import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
|
|
|
|
|
Carto::UserMetadataExportService.any_instance.unstub(:import_search_tweets_from_directory)
|
|
|
|
|
|
|
|
|
|
import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'fails importing an already existing user' do
|
|
|
|
|
import.run_import.should eq true
|
|
|
|
|
import.run_import.should eq false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'should continue with rollback if data import rollback fails' do
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.stubs(:grant_user_role).raises('Some exception')
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.stubs(:rollback_user).raises('Some exception')
|
|
|
|
|
import.run_import.should eq false
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.unstub(:grant_user_role)
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.unstub(:rollback_user)
|
|
|
|
|
import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'should not remove user if already exists while importing' do
|
|
|
|
|
import.run_import.should eq true
|
|
|
|
|
import.run_import.should eq false
|
|
|
|
|
Carto::User.exists?(@user.id).should eq true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe 'failing organization organizations should rollback' do
|
|
|
|
|
include_context 'organization with users helper'
|
|
|
|
|
before :all do
|
|
|
|
|
owner = @carto_organization.owner
|
|
|
|
|
filepath = "#{Rails.root}/services/importer/spec/fixtures/visualization_export_with_two_tables.carto"
|
|
|
|
|
data_import = DataImport.create(
|
|
|
|
|
user_id: owner.id,
|
|
|
|
|
data_source: filepath,
|
|
|
|
|
updated_at: Time.now.utc,
|
|
|
|
|
append: false,
|
|
|
|
|
create_visualization: true
|
|
|
|
|
)
|
|
|
|
|
data_import.values[:data_source] = filepath
|
|
|
|
|
|
|
|
|
|
data_import.run_import!
|
|
|
|
|
data_import.success.should eq true
|
|
|
|
|
|
|
|
|
|
@export = Carto::UserMigrationExport.create(
|
|
|
|
|
organization: @carto_organization,
|
|
|
|
|
export_metadata: true
|
|
|
|
|
)
|
|
|
|
|
@export.run_export
|
|
|
|
|
@organization.destroy_cascade
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
after :each do
|
|
|
|
|
begin
|
|
|
|
|
@organization.reload
|
|
|
|
|
@organization.destroy_cascade
|
|
|
|
|
rescue
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'import failing in import_metadata should rollback' do
|
|
|
|
|
Carto::RedisExportService.any_instance.stubs(:restore_redis_from_hash_export).raises('Some exception')
|
|
|
|
|
|
|
|
|
|
imp = org_import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
|
|
|
|
|
Carto::RedisExportService.any_instance.unstub(:restore_redis_from_hash_export)
|
|
|
|
|
|
|
|
|
|
org_import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'import failing in JobImport#run!' do
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.stubs(:grant_user_role).raises('Some exception')
|
|
|
|
|
|
|
|
|
|
imp = org_import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.unstub(:grant_user_role)
|
|
|
|
|
|
|
|
|
|
org_import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'import failing creating user database and roles' do
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.stubs(:import_pgdump).raises('Some exception')
|
|
|
|
|
|
|
|
|
|
imp = org_import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
|
|
|
|
|
CartoDB::DataMover::ImportJob.any_instance.unstub(:import_pgdump)
|
|
|
|
|
|
|
|
|
|
org_import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'import failing importing visualizations' do
|
|
|
|
|
Carto::UserMetadataExportService.any_instance.stubs(:import_search_tweets_from_directory).raises('Some exception')
|
|
|
|
|
|
|
|
|
|
imp = org_import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
|
|
|
|
|
Carto::UserMetadataExportService.any_instance.unstub(:import_search_tweets_from_directory)
|
|
|
|
|
|
|
|
|
|
org_import.run_import.should eq true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'should fail if importing an already existing organization with metadata' do
|
|
|
|
|
org_import.run_import.should eq true
|
|
|
|
|
imp = org_import
|
|
|
|
|
imp.run_import.should eq false
|
|
|
|
|
imp.state.should eq 'failure'
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'exports and imports a user with a data import with two tables' do
|
|
|
|
|
CartoDB::UserModule::DBService.any_instance.stubs(:enable_remote_db_user).returns(true)
|
|
|
|
|
|
|
|
|
|
user = FactoryGirl.build(:valid_user).save
|
|
|
|
|
user = create_user_with_visualizations
|
|
|
|
|
|
|
|
|
|
carto_user = Carto::User.find(user.id)
|
|
|
|
|
user_attributes = carto_user.attributes
|
|
|
|
|
|
|
|
|
|
filepath = "#{Rails.root}/services/importer/spec/fixtures/visualization_export_with_two_tables.carto"
|
|
|
|
|
data_import = DataImport.create(
|
|
|
|
|
user_id: user.id,
|
|
|
|
|
data_source: filepath,
|
|
|
|
|
updated_at: Time.now.utc,
|
|
|
|
|
append: false,
|
|
|
|
|
create_visualization: true
|
|
|
|
|
)
|
|
|
|
|
data_import.values[:data_source] = filepath
|
|
|
|
|
|
|
|
|
|
data_import.run_import!
|
|
|
|
|
data_import.success.should eq true
|
|
|
|
|
|
|
|
|
|
source_visualizations = carto_user.visualizations.map(&:name).sort
|
|
|
|
|
|
|
|
|
|
export = Carto::UserMigrationExport.create(
|
|
|
|
@ -115,6 +279,8 @@ describe 'UserMigration' do
|
|
|
|
|
json_file: export.json_file,
|
|
|
|
|
import_metadata: true
|
|
|
|
|
)
|
|
|
|
|
import.stubs(:assert_organization_does_not_exist)
|
|
|
|
|
import.stubs(:assert_user_does_not_exist)
|
|
|
|
|
import.run_import
|
|
|
|
|
|
|
|
|
|
puts import.log.entries if import.state != Carto::UserMigrationImport::STATE_COMPLETE
|
|
|
|
@ -211,6 +377,8 @@ describe 'UserMigration' do
|
|
|
|
|
json_file: export.json_file,
|
|
|
|
|
import_metadata: migrate_metadata
|
|
|
|
|
)
|
|
|
|
|
import.stubs(:assert_organization_does_not_exist)
|
|
|
|
|
import.stubs(:assert_user_does_not_exist)
|
|
|
|
|
import.run_import
|
|
|
|
|
|
|
|
|
|
puts import.log.entries if import.state != Carto::UserMigrationImport::STATE_COMPLETE
|
|
|
|
@ -258,4 +426,56 @@ describe 'UserMigration' do
|
|
|
|
|
def attributes_to_test(user_attributes)
|
|
|
|
|
user_attributes.keys - %w(created_at updated_at period_end_date)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def create_user_with_visualizations
|
|
|
|
|
user = FactoryGirl.build(:valid_user).save
|
|
|
|
|
|
|
|
|
|
filepath = "#{Rails.root}/services/importer/spec/fixtures/visualization_export_with_two_tables.carto"
|
|
|
|
|
data_import = DataImport.create(
|
|
|
|
|
user_id: user.id,
|
|
|
|
|
data_source: filepath,
|
|
|
|
|
updated_at: Time.now.utc,
|
|
|
|
|
append: false,
|
|
|
|
|
create_visualization: true
|
|
|
|
|
)
|
|
|
|
|
data_import.values[:data_source] = filepath
|
|
|
|
|
|
|
|
|
|
data_import.run_import!
|
|
|
|
|
data_import.success.should eq true
|
|
|
|
|
user
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def org_import
|
|
|
|
|
imp = Carto::UserMigrationImport.create(
|
|
|
|
|
exported_file: @export.exported_file,
|
|
|
|
|
database_host: @carto_organization.owner.attributes['database_host'],
|
|
|
|
|
org_import: true,
|
|
|
|
|
json_file: @export.json_file,
|
|
|
|
|
import_metadata: true
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
imp.stubs(:assert_organization_does_not_exist)
|
|
|
|
|
imp.stubs(:assert_user_does_not_exist)
|
|
|
|
|
imp
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def import
|
|
|
|
|
imp = Carto::UserMigrationImport.create(
|
|
|
|
|
exported_file: @export.exported_file,
|
|
|
|
|
database_host: @user_attributes['database_host'],
|
|
|
|
|
org_import: false,
|
|
|
|
|
json_file: @export.json_file,
|
|
|
|
|
import_metadata: true
|
|
|
|
|
)
|
|
|
|
|
imp.stubs(:assert_organization_does_not_exist)
|
|
|
|
|
imp.stubs(:assert_user_does_not_exist)
|
|
|
|
|
imp
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def destroy_user
|
|
|
|
|
@carto_user.client_applications.each(&:destroy)
|
|
|
|
|
@user.destroy
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|