From 9f46488805e86b1bc341ea1620b866016c2ce5ed Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 20 May 2020 14:34:42 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-0-stable-ee --- spec/lib/gitlab/import_export/importer_spec.rb | 79 +++++++++++++++++++------- 1 file changed, 59 insertions(+), 20 deletions(-) (limited to 'spec/lib/gitlab/import_export/importer_spec.rb') diff --git a/spec/lib/gitlab/import_export/importer_spec.rb b/spec/lib/gitlab/import_export/importer_spec.rb index e03c95525df..60179146416 100644 --- a/spec/lib/gitlab/import_export/importer_spec.rb +++ b/spec/lib/gitlab/import_export/importer_spec.rb @@ -51,7 +51,8 @@ describe Gitlab::ImportExport::Importer do Gitlab::ImportExport::UploadsRestorer, Gitlab::ImportExport::LfsRestorer, Gitlab::ImportExport::StatisticsRestorer, - Gitlab::ImportExport::SnippetsRepoRestorer + Gitlab::ImportExport::SnippetsRepoRestorer, + Gitlab::ImportExport::DesignRepoRestorer ].each do |restorer| it "calls the #{restorer}" do fake_restorer = double(restorer.to_s) @@ -89,36 +90,74 @@ describe Gitlab::ImportExport::Importer do end context 'when project successfully restored' do - let!(:existing_project) { create(:project, namespace: user.namespace) } - let(:project) { create(:project, namespace: user.namespace, name: 'whatever', path: 'whatever') } + context "with a project in a user's namespace" do + let!(:existing_project) { create(:project, namespace: user.namespace) } + let(:project) { create(:project, namespace: user.namespace, name: 'whatever', path: 'whatever') } - before do - restorers = double(:restorers, all?: true) + before do + restorers = double(:restorers, all?: true) - allow(subject).to receive(:import_file).and_return(true) - allow(subject).to receive(:check_version!).and_return(true) - allow(subject).to receive(:restorers).and_return(restorers) - allow(project).to receive(:import_data).and_return(double(data: { 'original_path' => existing_project.path })) + allow(subject).to receive(:import_file).and_return(true) + allow(subject).to receive(:check_version!).and_return(true) + allow(subject).to receive(:restorers).and_return(restorers) + allow(project).to receive(:import_data).and_return(double(data: { 'original_path' => existing_project.path })) + end + + context 'when import_data' do + context 'has original_path' do + it 'overwrites existing project' do + expect_next_instance_of(::Projects::OverwriteProjectService) do |service| + expect(service).to receive(:execute).with(existing_project) + end + + subject.execute + end + end + + context 'has not original_path' do + before do + allow(project).to receive(:import_data).and_return(double(data: {})) + end + + it 'does not call the overwrite service' do + expect(::Projects::OverwriteProjectService).not_to receive(:new) + + subject.execute + end + end + end end - context 'when import_data' do + context "with a project in a group namespace" do + let(:group) { create(:group) } + let!(:existing_project) { create(:project, group: group) } + let(:project) { create(:project, creator: user, group: group, name: 'whatever', path: 'whatever') } + + before do + restorers = double(:restorers, all?: true) + + allow(subject).to receive(:import_file).and_return(true) + allow(subject).to receive(:check_version!).and_return(true) + allow(subject).to receive(:restorers).and_return(restorers) + allow(project).to receive(:import_data).and_return(double(data: { 'original_path' => existing_project.path })) + end + context 'has original_path' do it 'overwrites existing project' do - expect_any_instance_of(::Projects::OverwriteProjectService).to receive(:execute).with(existing_project) + group.add_owner(user) - subject.execute - end - end + expect_next_instance_of(::Projects::OverwriteProjectService) do |service| + expect(service).to receive(:execute).with(existing_project) + end - context 'has not original_path' do - before do - allow(project).to receive(:import_data).and_return(double(data: {})) + subject.execute end - it 'does not call the overwrite service' do - expect_any_instance_of(::Projects::OverwriteProjectService).not_to receive(:execute).with(existing_project) + it 'does not allow user to overwrite existing project' do + expect(::Projects::OverwriteProjectService).not_to receive(:new) - subject.execute + expect { subject.execute }.to raise_error(Projects::ImportService::Error, + "User #{user.username} (#{user.id}) cannot overwrite a project in #{group.path}") end end end -- cgit v1.2.3