From 7e9c479f7de77702622631cff2628a9c8dcbc627 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 19 Nov 2020 08:27:35 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-6-stable-ee --- .../import/bulk_imports_controller_spec.rb | 36 ++++++++++----- spec/controllers/import/github_controller_spec.rb | 52 ++++++++++++++++++++++ 2 files changed, 77 insertions(+), 11 deletions(-) (limited to 'spec/controllers/import') diff --git a/spec/controllers/import/bulk_imports_controller_spec.rb b/spec/controllers/import/bulk_imports_controller_spec.rb index f3850ff844e..dd850a86227 100644 --- a/spec/controllers/import/bulk_imports_controller_spec.rb +++ b/spec/controllers/import/bulk_imports_controller_spec.rb @@ -24,7 +24,7 @@ RSpec.describe Import::BulkImportsController do expect(session[:bulk_import_gitlab_url]).to be_nil expect(response).to have_gitlab_http_status(:found) - expect(response).to redirect_to(status_import_bulk_import_url) + expect(response).to redirect_to(status_import_bulk_imports_url) end end @@ -37,7 +37,7 @@ RSpec.describe Import::BulkImportsController do expect(session[:bulk_import_gitlab_access_token]).to eq(token) expect(session[:bulk_import_gitlab_url]).to eq(url) expect(response).to have_gitlab_http_status(:found) - expect(response).to redirect_to(status_import_bulk_import_url) + expect(response).to redirect_to(status_import_bulk_imports_url) end it 'strips access token with spaces' do @@ -46,19 +46,21 @@ RSpec.describe Import::BulkImportsController do post :configure, params: { bulk_import_gitlab_access_token: " #{token} " } expect(session[:bulk_import_gitlab_access_token]).to eq(token) - expect(controller).to redirect_to(status_import_bulk_import_url) + expect(controller).to redirect_to(status_import_bulk_imports_url) end end describe 'GET status' do - let(:client) { Gitlab::BulkImport::Client.new(uri: 'http://gitlab.example', token: 'token') } + let(:client) { BulkImports::Clients::Http.new(uri: 'http://gitlab.example', token: 'token') } describe 'serialized group data' do let(:client_response) do - [ - { 'id' => 1, 'full_name' => 'group1', 'full_path' => 'full/path/group1' }, - { 'id' => 2, 'full_name' => 'group2', 'full_path' => 'full/path/group2' } - ] + double( + parsed_response: [ + { 'id' => 1, 'full_name' => 'group1', 'full_path' => 'full/path/group1' }, + { 'id' => 2, 'full_name' => 'group2', 'full_path' => 'full/path/group2' } + ] + ) end before do @@ -69,7 +71,7 @@ RSpec.describe Import::BulkImportsController do it 'returns serialized group data' do get :status, format: :json - expect(response.parsed_body).to eq({ importable_data: client_response }.as_json) + expect(json_response).to eq({ importable_data: client_response.parsed_response }.as_json) end end @@ -111,7 +113,7 @@ RSpec.describe Import::BulkImportsController do context 'when connection error occurs' do before do allow(controller).to receive(:client).and_return(client) - allow(client).to receive(:get).and_raise(Gitlab::BulkImport::Client::ConnectionError) + allow(client).to receive(:get).and_raise(BulkImports::Clients::Http::ConnectionError) end it 'returns 422' do @@ -128,9 +130,21 @@ RSpec.describe Import::BulkImportsController do end end end + + describe 'POST create' do + it 'executes BulkImportService' do + expect_next_instance_of(BulkImportService) do |service| + expect(service).to receive(:execute) + end + + post :create + + expect(response).to have_gitlab_http_status(:ok) + end + end end - context 'when gitlab_api_imports feature flag is disabled' do + context 'when bulk_import feature flag is disabled' do before do stub_feature_flags(bulk_import: false) end diff --git a/spec/controllers/import/github_controller_spec.rb b/spec/controllers/import/github_controller_spec.rb index e19b6caca5b..a408d821833 100644 --- a/spec/controllers/import/github_controller_spec.rb +++ b/spec/controllers/import/github_controller_spec.rb @@ -144,6 +144,58 @@ RSpec.describe Import::GithubController do expect(json_response.dig('provider_repos', 0, 'id')).to eq(repo_1.id) expect(json_response.dig('provider_repos', 1, 'id')).to eq(repo_2.id) end + + context 'when filtering' do + let(:filter) { 'test' } + let(:user_login) { 'user' } + let(:collaborations_subquery) { 'repo:repo1 repo:repo2' } + let(:organizations_subquery) { 'org:org1 org:org2' } + + before do + allow_next_instance_of(Octokit::Client) do |client| + allow(client).to receive(:user).and_return(double(login: user_login)) + end + end + + it 'makes request to github search api' do + expected_query = "test in:name is:public,private user:#{user_login} #{collaborations_subquery} #{organizations_subquery}" + + expect_next_instance_of(Gitlab::GithubImport::Client) do |client| + expect(client).to receive(:collaborations_subquery).and_return(collaborations_subquery) + expect(client).to receive(:organizations_subquery).and_return(organizations_subquery) + expect(client).to receive(:each_page).with(:search_repositories, expected_query).and_return([].to_enum) + end + + get :status, params: { filter: filter }, format: :json + end + + context 'when user input contains colons and spaces' do + before do + stub_client(search_repos_by_name: []) + end + + it 'sanitizes user input' do + filter = ' test1:test2 test3 : test4 ' + expected_filter = 'test1test2test3test4' + + get :status, params: { filter: filter }, format: :json + + expect(assigns(:filter)).to eq(expected_filter) + end + end + + context 'when rate limit threshold is exceeded' do + before do + allow(controller).to receive(:status).and_raise(Gitlab::GithubImport::RateLimitError) + end + + it 'returns 429' do + get :status, params: { filter: 'test' }, format: :json + + expect(response).to have_gitlab_http_status(:too_many_requests) + end + end + end end end -- cgit v1.2.3