diff options
Diffstat (limited to 'spec/requests/api/project_import_spec.rb')
-rw-r--r-- | spec/requests/api/project_import_spec.rb | 87 |
1 files changed, 83 insertions, 4 deletions
diff --git a/spec/requests/api/project_import_spec.rb b/spec/requests/api/project_import_spec.rb index 3ed08afd57d..a0f6d3d0081 100644 --- a/spec/requests/api/project_import_spec.rb +++ b/spec/requests/api/project_import_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe API::ProjectImport do +RSpec.describe API::ProjectImport, :aggregate_failures do include WorkhorseHelpers include AfterNextHelpers @@ -47,7 +47,7 @@ RSpec.describe API::ProjectImport do it 'executes a limited number of queries' do control_count = ActiveRecord::QueryRecorder.new { subject }.count - expect(control_count).to be <= 104 + expect(control_count).to be <= 105 end it 'schedules an import using a namespace' do @@ -329,7 +329,7 @@ RSpec.describe API::ProjectImport do ) service_response = ServiceResponse.success(payload: project) - expect_next(::Import::GitlabProjects::CreateProjectFromRemoteFileService) + expect_next(::Import::GitlabProjects::CreateProjectService) .to receive(:execute) .and_return(service_response) @@ -352,7 +352,86 @@ RSpec.describe API::ProjectImport do message: 'Failed to import', http_status: :bad_request ) - expect_next(::Import::GitlabProjects::CreateProjectFromRemoteFileService) + expect_next(::Import::GitlabProjects::CreateProjectService) + .to receive(:execute) + .and_return(service_response) + + subject + + expect(response).to have_gitlab_http_status(:bad_request) + expect(json_response).to eq({ + 'message' => 'Failed to import' + }) + end + end + end + end + + describe 'POST /projects/remote-import-s3' do + subject do + post api('/projects/remote-import-s3', user), params: params + end + + let(:params) do + { + path: 'test-import', + region: 'region_name', + bucket_name: 'bucket_name', + file_key: 'file_key', + access_key_id: 'access_key_id', + secret_access_key: 'secret_access_key' + } + end + + it_behaves_like 'requires authentication' + + it 'returns NOT FOUND when the feature is disabled' do + stub_feature_flags(import_project_from_remote_file_s3: false) + + subject + + expect(response).to have_gitlab_http_status(:not_found) + end + + context 'when the feature flag is enabled' do + before do + stub_feature_flags(import_project_from_remote_file_s3: true) + end + + context 'when the response is successful' do + it 'schedules the import successfully' do + project = create( + :project, + namespace: user.namespace, + name: 'test-import', + path: 'test-import' + ) + + service_response = ServiceResponse.success(payload: project) + expect_next(::Import::GitlabProjects::CreateProjectService) + .to receive(:execute) + .and_return(service_response) + + subject + + expect(response).to have_gitlab_http_status(:created) + expect(json_response).to include({ + 'id' => project.id, + 'name' => 'test-import', + 'name_with_namespace' => "#{user.namespace.name} / test-import", + 'path' => 'test-import', + 'path_with_namespace' => "#{user.namespace.path}/test-import" + }) + end + end + + context 'when the service returns an error' do + it 'fails to schedule the import' do + service_response = ServiceResponse.error( + message: 'Failed to import', + http_status: :bad_request + ) + expect_next(::Import::GitlabProjects::CreateProjectService) .to receive(:execute) .and_return(service_response) |