144 lines
5.1 KiB
Ruby
144 lines
5.1 KiB
Ruby
require_relative '../../spec_helper_min'
|
|
|
|
describe Carto::UserMigrationImport do
|
|
it '#import throws an exception if import_metadata and dry are passed' do
|
|
import = Carto::UserMigrationImport.create(
|
|
exported_file: 'irrelevant_file',
|
|
json_file: "irrelevant_json_file",
|
|
database_host: 'database_host',
|
|
user_id: 'irrelevant_user_id',
|
|
organization_id: 'irrelevant_organization_id',
|
|
import_metadata: true,
|
|
dry: true
|
|
)
|
|
import.run_import.should eq false
|
|
import.state.should eq 'failure'
|
|
import.log.entries.should match(/Dry dry cannot be true while import_metadata is true/)
|
|
end
|
|
|
|
it 'fails saving a migration with dry and import_metadata' do
|
|
import = Carto::UserMigrationImport.create(
|
|
exported_file: 'irrelevant_file',
|
|
json_file: "irrelevant_json_file",
|
|
database_host: 'database_host',
|
|
user_id: 'irrelevant_user_id',
|
|
organization_id: 'irrelevant_organization_id',
|
|
import_metadata: true,
|
|
dry: true
|
|
)
|
|
expect { import.save! }.to(
|
|
raise_error(ActiveRecord::RecordInvalid, /dry cannot be true while import_metadata is true/)
|
|
)
|
|
end
|
|
|
|
describe '#import' do
|
|
before :each do
|
|
@org = FactoryGirl.create(:organization)
|
|
@org.whitelisted_email_domains = []
|
|
@org.save
|
|
@user = FactoryGirl.create(:valid_user)
|
|
@user.save
|
|
@user = Carto::User.find(@user.id)
|
|
@import = Carto::UserMigrationImport.create(
|
|
exported_file: 'irrelevant_file',
|
|
json_file: "irrelevant_json_file",
|
|
database_host: 'database_host',
|
|
user_id: @user.id,
|
|
organization_id: @org.id,
|
|
import_metadata: true,
|
|
dry: false
|
|
)
|
|
setup_mocks
|
|
end
|
|
|
|
it 'updates database host for imported user' do
|
|
should_import_metadata_for_user(@user)
|
|
@import.org_import = false
|
|
@import.organization_id = nil
|
|
should_update_database_host_for_users([@user])
|
|
|
|
@import.run_import
|
|
end
|
|
|
|
it 'updates database host for all users in org' do
|
|
users = create_and_add_users_to_organizaton
|
|
should_import_metadata_for_organization(@organization_mock)
|
|
@import.stubs(:update_attributes)
|
|
@import.org_import = true
|
|
@import.user_id = nil
|
|
should_update_database_host_for_users(users)
|
|
|
|
@import.run_import
|
|
end
|
|
|
|
private
|
|
|
|
def should_update_database_host_for_users(users)
|
|
sequel_user_mock = Object.new
|
|
::User.stubs(:[]).returns(sequel_user_mock)
|
|
sequel_user_mock.expects(:reload).times(users.length)
|
|
users.each do |user|
|
|
user.expects(:database_host=).with('database_host').once
|
|
user.expects(:save!).once
|
|
end
|
|
end
|
|
|
|
def setup_mocks
|
|
@organization_mock = Carto::Organization.new
|
|
@import.stubs(:assert_organization_does_not_exist)
|
|
@import.stubs(:assert_user_does_not_exist)
|
|
@user_migration_package_mock = Object.new
|
|
Carto::UserMigrationPackage.stubs(:for_import).returns @user_migration_package_mock
|
|
@user_migration_package_mock.stubs(:download).with('irrelevant_file')
|
|
@user_migration_package_mock.stubs(:meta_dir).returns('irrelevant_meta_dir')
|
|
@user_migration_package_mock.stubs(:data_dir).returns('irrelevant_data_dir')
|
|
@user_mock = Carto::User.new
|
|
@import_job_mock = Object.new
|
|
@import_job_mock.stubs(:db_exists?).returns false
|
|
@import_job_mock.expects(:run!).once
|
|
@import_job_mock.expects(:terminate_connections).once
|
|
CartoDB::DataMover::ImportJob.stubs(:new).returns @import_job_mock
|
|
@user_migration_package_mock.stubs(:cleanup)
|
|
@import.expects(:save!).once.returns @import
|
|
end
|
|
|
|
def expected_job_arguments
|
|
{
|
|
job_uuid: nil,
|
|
file: "irrelevant_data_dir/irrelevant_json_file",
|
|
data: true,
|
|
metadata: false,
|
|
host: :database_host,
|
|
rollback: false,
|
|
into_org_name: nil,
|
|
mode: :import,
|
|
logger: @import.log.logger,
|
|
import_job_logger: @import.log.logger
|
|
}
|
|
end
|
|
|
|
def should_import_metadata_for_user(user)
|
|
@user_migration_package_mock.stubs(:meta_dir).returns 'irrelevant_meta_dir'
|
|
Carto::UserMetadataExportService.any_instance.expects(:import_from_directory).with('irrelevant_meta_dir')
|
|
.returns user
|
|
Carto::UserMetadataExportService.any_instance.expects(:import_metadata_from_directory)
|
|
.with(user, 'irrelevant_meta_dir')
|
|
end
|
|
|
|
def should_import_metadata_for_organization(organization)
|
|
@user_migration_package_mock.stubs(:meta_dir).returns 'irrelevant_meta_dir'
|
|
Carto::OrganizationMetadataExportService.any_instance.stubs(:import_from_directory).with('irrelevant_meta_dir')
|
|
.once.returns organization
|
|
Carto::OrganizationMetadataExportService.any_instance.stubs(:import_metadata_from_directory)
|
|
.once.with(organization, 'irrelevant_meta_dir')
|
|
end
|
|
|
|
def create_and_add_users_to_organizaton
|
|
user2 = Carto::User.new
|
|
user3 = Carto::User.new
|
|
@organization_mock.users << user2
|
|
@organization_mock.users << user3
|
|
end
|
|
end
|
|
end
|