diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-29 15:06:43 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-29 15:06:43 +0000 |
commit | eac0da9a47f0c7b8b970833d7d5b96cfee057bf7 (patch) | |
tree | 7b7865053435c6dcb4e2d945fcf45e309331c91b /spec/tasks | |
parent | b860c6ba2607541e3b5bdf0fc2daaa9ed41a8726 (diff) | |
download | gitlab-ce-eac0da9a47f0c7b8b970833d7d5b96cfee057bf7.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/tasks')
-rw-r--r-- | spec/tasks/gitlab/import_export/import_rake_spec.rb | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/spec/tasks/gitlab/import_export/import_rake_spec.rb b/spec/tasks/gitlab/import_export/import_rake_spec.rb new file mode 100644 index 00000000000..e8507e63bf5 --- /dev/null +++ b/spec/tasks/gitlab/import_export/import_rake_spec.rb @@ -0,0 +1,106 @@ +# frozen_string_literal: true + +require 'rake_helper' + +describe 'gitlab:import_export:import rake task' do + let(:username) { 'root' } + let(:namespace_path) { username } + let!(:user) { create(:user, username: username) } + let(:task_params) { [username, namespace_path, project_name, archive_path] } + let(:project) { Project.find_by_full_path("#{namespace_path}/#{project_name}") } + + before do + Rake.application.rake_require('tasks/gitlab/import_export/import') + allow(Settings.uploads.object_store).to receive(:[]=).and_call_original + end + + around do |example| + old_direct_upload_setting = Settings.uploads.object_store['direct_upload'] + old_background_upload_setting = Settings.uploads.object_store['background_upload'] + + Settings.uploads.object_store['direct_upload'] = true + Settings.uploads.object_store['background_upload'] = true + + example.run + + Settings.uploads.object_store['direct_upload'] = old_direct_upload_setting + Settings.uploads.object_store['background_upload'] = old_background_upload_setting + end + + subject { run_rake_task('gitlab:import_export:import', task_params) } + + context 'when project import is valid' do + let(:project_name) { 'import_rake_test_project' } + let(:archive_path) { 'spec/fixtures/gitlab/import_export/lightweight_project_export.tar.gz' } + + it 'performs project import successfully' do + expect { subject }.to output(/Done!/).to_stdout + expect { subject }.not_to raise_error + + expect(project.merge_requests.count).to be > 0 + expect(project.issues.count).to be > 0 + expect(project.milestones.count).to be > 0 + expect(project.import_state.status).to eq('finished') + end + + it 'disables direct & background upload only during project creation' do + expect_next_instance_of(Projects::GitlabProjectsImportService) do |service| + expect(service).to receive(:execute).and_wrap_original do |m| + expect(Settings.uploads.object_store['background_upload']).to eq(false) + expect(Settings.uploads.object_store['direct_upload']).to eq(false) + + m.call + end + end + + expect_next_instance_of(GitlabProjectImport) do |importer| + expect(importer).to receive(:execute_sidekiq_job).and_wrap_original do |m| + expect(Settings.uploads.object_store['background_upload']).to eq(true) + expect(Settings.uploads.object_store['direct_upload']).to eq(true) + expect(Settings.uploads.object_store).not_to receive(:[]=).with('backgroud_upload', false) + expect(Settings.uploads.object_store).not_to receive(:[]=).with('direct_upload', false) + + m.call + end + end + + subject + end + end + + context 'when project import is invalid' do + let(:project_name) { 'import_rake_invalid_test_project' } + let(:archive_path) { 'spec/fixtures/gitlab/import_export/corrupted_project_export.tar.gz' } + let(:not_imported_message) { /Total number of not imported relations: 1/ } + let(:error) { /Validation failed: Notes is invalid/ } + + context 'when import_graceful_failures feature flag is enabled' do + before do + stub_feature_flags(import_graceful_failures: true) + end + + it 'performs project import successfully' do + expect { subject }.to output(not_imported_message).to_stdout + expect { subject }.not_to raise_error + + expect(project.merge_requests).to be_empty + expect(project.import_state.last_error).to be_nil + expect(project.import_state.status).to eq('finished') + end + end + + context 'when import_graceful_failures feature flag is disabled' do + before do + stub_feature_flags(import_graceful_failures: false) + end + + it 'fails project import with an error' do + expect { subject }.to raise_error(SystemExit).and output(error).to_stdout + + expect(project.merge_requests).to be_empty + expect(project.import_state.last_error).to match(error) + expect(project.import_state.status).to eq('failed') + end + end + end +end |