diff options
Diffstat (limited to 'spec/requests/api/project_import_spec.rb')
-rw-r--r-- | spec/requests/api/project_import_spec.rb | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/spec/requests/api/project_import_spec.rb b/spec/requests/api/project_import_spec.rb index f6cdf370e5c..d3b24eb3832 100644 --- a/spec/requests/api/project_import_spec.rb +++ b/spec/requests/api/project_import_spec.rb @@ -4,6 +4,7 @@ require 'spec_helper' RSpec.describe API::ProjectImport do include WorkhorseHelpers + include AfterNextHelpers include_context 'workhorse headers' @@ -31,6 +32,12 @@ RSpec.describe API::ProjectImport do allow(ImportExportUploader).to receive(:workhorse_upload_path).and_return('/') end + it 'executes a limited number of queries' do + control_count = ActiveRecord::QueryRecorder.new { subject }.count + + expect(control_count).to be <= 100 + end + it 'schedules an import using a namespace' do stub_import(namespace) params[:namespace] = namespace.id @@ -273,6 +280,75 @@ RSpec.describe API::ProjectImport do end end + describe 'POST /projects/remote-import' do + let(:params) do + { + path: 'test-import', + url: 'http://some.s3.url/file' + } + end + + it 'returns NOT FOUND when the feature is disabled' do + stub_feature_flags(import_project_from_remote_file: false) + + post api('/projects/remote-import', user), params: params + + 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: 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::CreateProjectFromRemoteFileService) + .to receive(:execute) + .and_return(service_response) + + post api('/projects/remote-import', user), params: params + + 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::CreateProjectFromRemoteFileService) + .to receive(:execute) + .and_return(service_response) + + post api('/projects/remote-import', user), params: params + + expect(response).to have_gitlab_http_status(:bad_request) + expect(json_response).to eq({ + 'message' => 'Failed to import' + }) + end + end + end + end + describe 'GET /projects/:id/import' do it 'returns the import status' do project = create(:project, :import_started) |