diff options
Diffstat (limited to 'spec/lib/gitlab/import_export/project/tree_restorer_spec.rb')
-rw-r--r-- | spec/lib/gitlab/import_export/project/tree_restorer_spec.rb | 108 |
1 files changed, 64 insertions, 44 deletions
diff --git a/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb index 04e8bd05666..58589a7bbbe 100644 --- a/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb @@ -8,6 +8,7 @@ end describe Gitlab::ImportExport::Project::TreeRestorer do include ImportExport::CommonUtil + using RSpec::Parameterized::TableSyntax let(:shared) { project.import_export_shared } @@ -44,10 +45,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do end end - after(:context) do - cleanup_artifacts_from_extract_archive('complex') - end - context 'JSON' do it 'restores models based on JSON' do expect(@restored_project_json).to be_truthy @@ -536,10 +533,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do expect(restored_project_json).to eq(true) end - after do - cleanup_artifacts_from_extract_archive('light') - end - it 'issue system note metadata restored successfully' do note_content = 'created merge request !1 to address this issue' note = project.issues.first.notes.select { |n| n.note.match(/#{note_content}/)}.first @@ -586,10 +579,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do expect(restored_project_json).to eq(true) end - after do - cleanup_artifacts_from_extract_archive('multi_pipeline_ref_one_external_pr') - end - it_behaves_like 'restores project successfully', issues: 0, labels: 0, @@ -620,10 +609,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do .and_raise(exception) end - after do - cleanup_artifacts_from_extract_archive('light') - end - it 'report post import error' do expect(restored_project_json).to eq(false) expect(shared.errors).to include('post_import_error') @@ -646,10 +631,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do expect(restored_project_json).to eq(true) end - after do - cleanup_artifacts_from_extract_archive('light') - end - it_behaves_like 'restores project successfully', issues: 1, labels: 2, @@ -678,10 +659,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do setup_reader(reader) end - after do - cleanup_artifacts_from_extract_archive('light') - end - it 'handles string versions of visibility_level' do # Project needs to be in a group for visibility level comparison # to happen @@ -747,10 +724,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do expect(restored_project_json).to eq(true) end - after do - cleanup_artifacts_from_extract_archive('group') - end - it_behaves_like 'restores project successfully', issues: 3, labels: 2, @@ -784,10 +757,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do setup_reader(reader) end - after do - cleanup_artifacts_from_extract_archive('light') - end - it 'does not import any templated services' do expect(restored_project_json).to eq(true) @@ -835,10 +804,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do setup_reader(reader) end - after do - cleanup_artifacts_from_extract_archive('milestone-iid') - end - it 'preserves the project milestone IID' do expect_any_instance_of(Gitlab::ImportExport::Shared).not_to receive(:error) @@ -855,10 +820,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do setup_reader(reader) end - after do - cleanup_artifacts_from_extract_archive('light') - end - it 'converts empty external classification authorization labels to nil' do project.create_import_data(data: { override_params: { external_authorization_classification_label: "" } }) @@ -1004,10 +965,6 @@ describe Gitlab::ImportExport::Project::TreeRestorer do subject end - after do - cleanup_artifacts_from_extract_archive('with_invalid_records') - end - context 'when failures occur because a relation fails to be processed' do it_behaves_like 'restores project successfully', issues: 0, @@ -1031,6 +988,69 @@ describe Gitlab::ImportExport::Project::TreeRestorer do end end end + + context 'JSON with design management data' do + let_it_be(:user) { create(:admin, email: 'user_1@gitlabexample.com') } + let_it_be(:second_user) { create(:user, email: 'user_2@gitlabexample.com') } + let_it_be(:project) do + create(:project, :builds_disabled, :issues_disabled, + { name: 'project', path: 'project' }) + end + let(:shared) { project.import_export_shared } + let(:project_tree_restorer) { described_class.new(user: user, shared: shared, project: project) } + + subject(:restored_project_json) { project_tree_restorer.restore } + + before do + setup_import_export_config('designs') + restored_project_json + end + + it_behaves_like 'restores project successfully', issues: 2 + + it 'restores project associations correctly' do + expect(project.designs.size).to eq(7) + end + + describe 'restores issue associations correctly' do + let(:issue) { project.issues.offset(index).first } + + where(:index, :design_filenames, :version_shas, :events, :author_emails) do + 0 | %w[chirrido3.jpg jonathan_richman.jpg mariavontrap.jpeg] | %w[27702d08f5ee021ae938737f84e8fe7c38599e85 9358d1bac8ff300d3d2597adaa2572a20f7f8703 e1a4a501bcb42f291f84e5d04c8f927821542fb6] | %w[creation creation creation modification modification deletion] | %w[user_1@gitlabexample.com user_1@gitlabexample.com user_2@gitlabexample.com] + 1 | ['1 (1).jpeg', '2099743.jpg', 'a screenshot (1).jpg', 'chirrido3.jpg'] | %w[73f871b4c8c1d65c62c460635e023179fb53abc4 8587e78ab6bda3bc820a9f014c3be4a21ad4fcc8 c9b5f067f3e892122a4b12b0a25a8089192f3ac8] | %w[creation creation creation creation modification] | %w[user_1@gitlabexample.com user_2@gitlabexample.com user_2@gitlabexample.com] + end + + with_them do + it do + expect(issue.designs.pluck(:filename)).to contain_exactly(*design_filenames) + expect(issue.design_versions.pluck(:sha)).to contain_exactly(*version_shas) + expect(issue.design_versions.flat_map(&:actions).map(&:event)).to contain_exactly(*events) + expect(issue.design_versions.map(&:author).map(&:email)).to contain_exactly(*author_emails) + end + end + end + + describe 'restores design version associations correctly' do + let(:project_designs) { project.designs.reorder(:filename, :issue_id) } + let(:design) { project_designs.offset(index).first } + + where(:index, :version_shas) do + 0 | %w[73f871b4c8c1d65c62c460635e023179fb53abc4 c9b5f067f3e892122a4b12b0a25a8089192f3ac8] + 1 | %w[73f871b4c8c1d65c62c460635e023179fb53abc4] + 2 | %w[c9b5f067f3e892122a4b12b0a25a8089192f3ac8] + 3 | %w[27702d08f5ee021ae938737f84e8fe7c38599e85 9358d1bac8ff300d3d2597adaa2572a20f7f8703 e1a4a501bcb42f291f84e5d04c8f927821542fb6] + 4 | %w[8587e78ab6bda3bc820a9f014c3be4a21ad4fcc8] + 5 | %w[27702d08f5ee021ae938737f84e8fe7c38599e85 e1a4a501bcb42f291f84e5d04c8f927821542fb6] + 6 | %w[27702d08f5ee021ae938737f84e8fe7c38599e85] + end + + with_them do + it do + expect(design.versions.pluck(:sha)).to contain_exactly(*version_shas) + end + end + end + end end context 'enable ndjson import' do |