Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-27 18:08:16 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-27 18:08:16 +0300
commitfb73ca3398c2ac49a616ab553e117b0586089702 (patch)
treec2f787ac97df38569c59cd0e967331ec1ead6d7e /spec
parentb6b8f7dc871e73f29af55f06a773136a7242df57 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/projects/git_http_controller_spec.rb38
-rw-r--r--spec/fixtures/api/schemas/public_api/v4/issue.json5
-rw-r--r--spec/fixtures/api/schemas/public_api/v4/merge_request.json7
-rw-r--r--spec/initializers/lograge_spec.rb2
-rw-r--r--spec/lib/gitlab/backtrace_cleaner_spec.rb50
-rw-r--r--spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb2
-rw-r--r--spec/lib/gitlab/profiler_spec.rb45
-rw-r--r--spec/lib/gitlab/repository_cache_spec.rb2
-rw-r--r--spec/lib/gitlab/repository_set_cache_spec.rb2
-rw-r--r--spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb2
-rw-r--r--spec/requests/api/internal/base_spec.rb16
-rw-r--r--spec/requests/api/issues/get_group_issues_spec.rb27
-rw-r--r--spec/requests/api/issues/issues_spec.rb11
-rw-r--r--spec/requests/api/merge_requests_spec.rb30
-rw-r--r--spec/services/merge_requests/get_urls_service_spec.rb7
-rw-r--r--spec/support/helpers/query_recorder.rb2
-rw-r--r--spec/support/helpers/test_env.rb4
17 files changed, 190 insertions, 62 deletions
diff --git a/spec/controllers/projects/git_http_controller_spec.rb b/spec/controllers/projects/git_http_controller_spec.rb
index b756dd5662d..b7568346cdc 100644
--- a/spec/controllers/projects/git_http_controller_spec.rb
+++ b/spec/controllers/projects/git_http_controller_spec.rb
@@ -3,10 +3,17 @@
require 'spec_helper'
describe Projects::GitHttpController do
+ let_it_be(:project) { create(:project, :public, :repository) }
+ let(:project_params) do
+ {
+ namespace_id: project.namespace.to_param,
+ project_id: project.path + '.git'
+ }
+ end
+ let(:params) { project_params }
+
describe 'HEAD #info_refs' do
it 'returns 403' do
- project = create(:project, :public, :repository)
-
head :info_refs, params: { namespace_id: project.namespace.to_param, project_id: project.path + '.git' }
expect(response.status).to eq(403)
@@ -14,18 +21,17 @@ describe Projects::GitHttpController do
end
describe 'GET #info_refs' do
+ let(:params) { project_params.merge(service: 'git-upload-pack') }
+
it 'returns 401 for unauthenticated requests to public repositories when http protocol is disabled' do
stub_application_setting(enabled_git_access_protocol: 'ssh')
- project = create(:project, :public, :repository)
- get :info_refs, params: { service: 'git-upload-pack', namespace_id: project.namespace.to_param, project_id: project.path + '.git' }
+ get :info_refs, params: params
expect(response.status).to eq(401)
end
context 'with exceptions' do
- let(:project) { create(:project, :public, :repository) }
-
before do
allow(controller).to receive(:verify_workhorse_api!).and_return(true)
end
@@ -33,7 +39,7 @@ describe Projects::GitHttpController do
it 'returns 503 with GRPC Unavailable' do
allow(controller).to receive(:access_check).and_raise(GRPC::Unavailable)
- get :info_refs, params: { service: 'git-upload-pack', namespace_id: project.namespace.to_param, project_id: project.path + '.git' }
+ get :info_refs, params: params
expect(response.status).to eq(503)
end
@@ -41,11 +47,27 @@ describe Projects::GitHttpController do
it 'returns 503 with timeout error' do
allow(controller).to receive(:access_check).and_raise(Gitlab::GitAccess::TimeoutError)
- get :info_refs, params: { service: 'git-upload-pack', namespace_id: project.namespace.to_param, project_id: project.path + '.git' }
+ get :info_refs, params: params
expect(response.status).to eq(503)
expect(response.body).to eq 'Gitlab::GitAccess::TimeoutError'
end
end
end
+
+ describe 'POST #git_upload_pack' do
+ before do
+ allow(controller).to receive(:authenticate_user).and_return(true)
+ allow(controller).to receive(:verify_workhorse_api!).and_return(true)
+ allow(controller).to receive(:access_check).and_return(nil)
+ end
+
+ after do
+ post :git_upload_pack, params: params
+ end
+
+ it 'updates project statistics' do
+ expect(ProjectDailyStatisticsWorker).to receive(:perform_async)
+ end
+ end
end
diff --git a/spec/fixtures/api/schemas/public_api/v4/issue.json b/spec/fixtures/api/schemas/public_api/v4/issue.json
index 147f53239e0..bf1b4a06f0b 100644
--- a/spec/fixtures/api/schemas/public_api/v4/issue.json
+++ b/spec/fixtures/api/schemas/public_api/v4/issue.json
@@ -84,6 +84,11 @@
"total_time_spent": { "type": "integer" },
"human_time_estimate": { "type": ["string", "null"] },
"human_total_time_spent": { "type": ["string", "null"] }
+ },
+ "references": {
+ "short": {"type": "string"},
+ "relative": {"type": "string"},
+ "full": {"type": "string"}
}
},
"required": [
diff --git a/spec/fixtures/api/schemas/public_api/v4/merge_request.json b/spec/fixtures/api/schemas/public_api/v4/merge_request.json
index a423bf70b69..3bf1299a1d8 100644
--- a/spec/fixtures/api/schemas/public_api/v4/merge_request.json
+++ b/spec/fixtures/api/schemas/public_api/v4/merge_request.json
@@ -113,7 +113,12 @@
"human_total_time_spent": { "type": ["string", "null"] }
},
"allow_collaboration": { "type": ["boolean", "null"] },
- "allow_maintainer_to_push": { "type": ["boolean", "null"] }
+ "allow_maintainer_to_push": { "type": ["boolean", "null"] },
+ "references": {
+ "short": {"type": "string"},
+ "relative": {"type": "string"},
+ "full": {"type": "string"}
+ }
},
"required": [
"id", "iid", "project_id", "title", "description",
diff --git a/spec/initializers/lograge_spec.rb b/spec/initializers/lograge_spec.rb
index 5dd296b6040..65652468d93 100644
--- a/spec/initializers/lograge_spec.rb
+++ b/spec/initializers/lograge_spec.rb
@@ -112,7 +112,7 @@ describe 'lograge', type: :request do
expect(log_data['exception.class']).to eq('RuntimeError')
expect(log_data['exception.message']).to eq('bad request')
- expect(log_data['exception.backtrace']).to eq(Gitlab::Profiler.clean_backtrace(backtrace))
+ expect(log_data['exception.backtrace']).to eq(Gitlab::BacktraceCleaner.clean_backtrace(backtrace))
end
end
end
diff --git a/spec/lib/gitlab/backtrace_cleaner_spec.rb b/spec/lib/gitlab/backtrace_cleaner_spec.rb
new file mode 100644
index 00000000000..f3aded9faad
--- /dev/null
+++ b/spec/lib/gitlab/backtrace_cleaner_spec.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::BacktraceCleaner do
+ describe '.clean_backtrace' do
+ it 'uses the Rails backtrace cleaner' do
+ backtrace = []
+
+ expect(Rails.backtrace_cleaner).to receive(:clean).with(backtrace)
+
+ described_class.clean_backtrace(backtrace)
+ end
+
+ it 'removes lines from IGNORE_BACKTRACES' do
+ backtrace = [
+ "lib/gitlab/gitaly_client.rb:294:in `block (2 levels) in migrate'",
+ "lib/gitlab/gitaly_client.rb:331:in `allow_n_plus_1_calls'",
+ "lib/gitlab/gitaly_client.rb:280:in `block in migrate'",
+ "lib/gitlab/metrics/influx_db.rb:103:in `measure'",
+ "lib/gitlab/gitaly_client.rb:278:in `migrate'",
+ "lib/gitlab/git/repository.rb:1451:in `gitaly_migrate'",
+ "lib/gitlab/git/commit.rb:66:in `find'",
+ "app/models/repository.rb:1047:in `find_commit'",
+ "lib/gitlab/metrics/instrumentation.rb:159:in `block in find_commit'",
+ "lib/gitlab/metrics/method_call.rb:36:in `measure'",
+ "lib/gitlab/metrics/instrumentation.rb:159:in `find_commit'",
+ "app/models/repository.rb:113:in `commit'",
+ "lib/gitlab/i18n.rb:50:in `with_locale'",
+ "lib/gitlab/middleware/multipart.rb:95:in `call'",
+ "lib/gitlab/request_profiler/middleware.rb:14:in `call'",
+ "ee/lib/gitlab/database/load_balancing/rack_middleware.rb:37:in `call'",
+ "ee/lib/gitlab/jira/middleware.rb:15:in `call'"
+ ]
+
+ expect(described_class.clean_backtrace(backtrace))
+ .to eq([
+ "lib/gitlab/gitaly_client.rb:294:in `block (2 levels) in migrate'",
+ "lib/gitlab/gitaly_client.rb:331:in `allow_n_plus_1_calls'",
+ "lib/gitlab/gitaly_client.rb:280:in `block in migrate'",
+ "lib/gitlab/gitaly_client.rb:278:in `migrate'",
+ "lib/gitlab/git/repository.rb:1451:in `gitaly_migrate'",
+ "lib/gitlab/git/commit.rb:66:in `find'",
+ "app/models/repository.rb:1047:in `find_commit'",
+ "app/models/repository.rb:113:in `commit'",
+ "ee/lib/gitlab/jira/middleware.rb:15:in `call'"
+ ])
+ end
+ end
+end
diff --git a/spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb b/spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb
index 0cfda80b854..c9021e2f436 100644
--- a/spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb
+++ b/spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb
@@ -39,7 +39,7 @@ describe Gitlab::GrapeLogging::Loggers::ExceptionLogger do
before do
current_backtrace = caller
allow(exception).to receive(:backtrace).and_return(current_backtrace)
- expected['exception.backtrace'] = Gitlab::Profiler.clean_backtrace(current_backtrace)
+ expected['exception.backtrace'] = Gitlab::BacktraceCleaner.clean_backtrace(current_backtrace)
end
it 'includes the backtrace' do
diff --git a/spec/lib/gitlab/profiler_spec.rb b/spec/lib/gitlab/profiler_spec.rb
index a19392f4bcb..c27e3ca7ace 100644
--- a/spec/lib/gitlab/profiler_spec.rb
+++ b/spec/lib/gitlab/profiler_spec.rb
@@ -120,51 +120,6 @@ describe Gitlab::Profiler do
end
end
- describe '.clean_backtrace' do
- it 'uses the Rails backtrace cleaner' do
- backtrace = []
-
- expect(Rails.backtrace_cleaner).to receive(:clean).with(backtrace)
-
- described_class.clean_backtrace(backtrace)
- end
-
- it 'removes lines from IGNORE_BACKTRACES' do
- backtrace = [
- "lib/gitlab/gitaly_client.rb:294:in `block (2 levels) in migrate'",
- "lib/gitlab/gitaly_client.rb:331:in `allow_n_plus_1_calls'",
- "lib/gitlab/gitaly_client.rb:280:in `block in migrate'",
- "lib/gitlab/metrics/influx_db.rb:103:in `measure'",
- "lib/gitlab/gitaly_client.rb:278:in `migrate'",
- "lib/gitlab/git/repository.rb:1451:in `gitaly_migrate'",
- "lib/gitlab/git/commit.rb:66:in `find'",
- "app/models/repository.rb:1047:in `find_commit'",
- "lib/gitlab/metrics/instrumentation.rb:159:in `block in find_commit'",
- "lib/gitlab/metrics/method_call.rb:36:in `measure'",
- "lib/gitlab/metrics/instrumentation.rb:159:in `find_commit'",
- "app/models/repository.rb:113:in `commit'",
- "lib/gitlab/i18n.rb:50:in `with_locale'",
- "lib/gitlab/middleware/multipart.rb:95:in `call'",
- "lib/gitlab/request_profiler/middleware.rb:14:in `call'",
- "ee/lib/gitlab/database/load_balancing/rack_middleware.rb:37:in `call'",
- "ee/lib/gitlab/jira/middleware.rb:15:in `call'"
- ]
-
- expect(described_class.clean_backtrace(backtrace))
- .to eq([
- "lib/gitlab/gitaly_client.rb:294:in `block (2 levels) in migrate'",
- "lib/gitlab/gitaly_client.rb:331:in `allow_n_plus_1_calls'",
- "lib/gitlab/gitaly_client.rb:280:in `block in migrate'",
- "lib/gitlab/gitaly_client.rb:278:in `migrate'",
- "lib/gitlab/git/repository.rb:1451:in `gitaly_migrate'",
- "lib/gitlab/git/commit.rb:66:in `find'",
- "app/models/repository.rb:1047:in `find_commit'",
- "app/models/repository.rb:113:in `commit'",
- "ee/lib/gitlab/jira/middleware.rb:15:in `call'"
- ])
- end
- end
-
describe '.with_custom_logger' do
context 'when the logger is set' do
it 'uses the replacement logger for the duration of the block' do
diff --git a/spec/lib/gitlab/repository_cache_spec.rb b/spec/lib/gitlab/repository_cache_spec.rb
index 6a684595eb8..1b7dd1766da 100644
--- a/spec/lib/gitlab/repository_cache_spec.rb
+++ b/spec/lib/gitlab/repository_cache_spec.rb
@@ -3,8 +3,8 @@
require 'spec_helper'
describe Gitlab::RepositoryCache do
+ let_it_be(:project) { create(:project) }
let(:backend) { double('backend').as_null_object }
- let(:project) { create(:project) }
let(:repository) { project.repository }
let(:namespace) { "#{repository.full_path}:#{project.id}" }
let(:cache) { described_class.new(repository, backend: backend) }
diff --git a/spec/lib/gitlab/repository_set_cache_spec.rb b/spec/lib/gitlab/repository_set_cache_spec.rb
index 87e51f801e5..de0f3602346 100644
--- a/spec/lib/gitlab/repository_set_cache_spec.rb
+++ b/spec/lib/gitlab/repository_set_cache_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
describe Gitlab::RepositorySetCache, :clean_gitlab_redis_cache do
- let(:project) { create(:project) }
+ let_it_be(:project) { create(:project) }
let(:repository) { project.repository }
let(:namespace) { "#{repository.full_path}:#{project.id}" }
let(:cache) { described_class.new(repository) }
diff --git a/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb b/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb
index 24b6090cb19..a79a0678e2b 100644
--- a/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb
+++ b/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb
@@ -33,7 +33,7 @@ describe Gitlab::SidekiqLogging::ExceptionHandler do
error_class: 'RuntimeError',
error_message: exception_message,
context: 'Test',
- error_backtrace: Gitlab::Profiler.clean_backtrace(backtrace)
+ error_backtrace: Gitlab::BacktraceCleaner.clean_backtrace(backtrace)
)
expect(logger).to receive(:warn).with(expected_data)
diff --git a/spec/requests/api/internal/base_spec.rb b/spec/requests/api/internal/base_spec.rb
index df55e9ad849..4fe0d4a5983 100644
--- a/spec/requests/api/internal/base_spec.rb
+++ b/spec/requests/api/internal/base_spec.rb
@@ -1000,6 +1000,22 @@ describe API::Internal::Base do
it 'does not try to notify that project moved' do
allow_any_instance_of(Gitlab::Identifier).to receive(:identify).and_return(nil)
+ expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message)
+
+ post api('/internal/post_receive'), params: valid_params
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+ end
+
+ context 'when project is nil' do
+ let(:gl_repository) { 'project-foo' }
+
+ it 'does not try to notify that project moved' do
+ allow(Gitlab::GlRepository).to receive(:parse).and_return([nil, Gitlab::GlRepository::PROJECT])
+
+ expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message)
+
post api('/internal/post_receive'), params: valid_params
expect(response).to have_gitlab_http_status(200)
diff --git a/spec/requests/api/issues/get_group_issues_spec.rb b/spec/requests/api/issues/get_group_issues_spec.rb
index 3ee08758f99..ef63902ffd7 100644
--- a/spec/requests/api/issues/get_group_issues_spec.rb
+++ b/spec/requests/api/issues/get_group_issues_spec.rb
@@ -688,5 +688,32 @@ describe API::Issues do
end
end
end
+
+ context "#to_reference" do
+ it 'exposes reference path in context of group' do
+ get api(base_url, user)
+
+ expect(json_response.first['references']['short']).to eq("##{group_closed_issue.iid}")
+ expect(json_response.first['references']['relative']).to eq("#{group_closed_issue.project.path}##{group_closed_issue.iid}")
+ expect(json_response.first['references']['full']).to eq("#{group_closed_issue.project.full_path}##{group_closed_issue.iid}")
+ end
+
+ context 'referencing from parent group' do
+ let(:parent_group) { create(:group) }
+
+ before do
+ group.update(parent_id: parent_group.id)
+ group_closed_issue.reload
+ end
+
+ it 'exposes reference path in context of parent group' do
+ get api("/groups/#{parent_group.id}/issues")
+
+ expect(json_response.first['references']['short']).to eq("##{group_closed_issue.iid}")
+ expect(json_response.first['references']['relative']).to eq("#{group_closed_issue.project.full_path}##{group_closed_issue.iid}")
+ expect(json_response.first['references']['full']).to eq("#{group_closed_issue.project.full_path}##{group_closed_issue.iid}")
+ end
+ end
+ end
end
end
diff --git a/spec/requests/api/issues/issues_spec.rb b/spec/requests/api/issues/issues_spec.rb
index 50a0a80b542..a3538aa98b1 100644
--- a/spec/requests/api/issues/issues_spec.rb
+++ b/spec/requests/api/issues/issues_spec.rb
@@ -805,6 +805,17 @@ describe API::Issues do
end
end
+ describe 'GET /projects/:id/issues/:issue_iid' do
+ it 'exposes full reference path' do
+ get api("/projects/#{project.id}/issues/#{issue.iid}", user)
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(json_response['references']['short']).to eq("##{issue.iid}")
+ expect(json_response['references']['relative']).to eq("##{issue.iid}")
+ expect(json_response['references']['full']).to eq("#{project.parent.path}/#{project.path}##{issue.iid}")
+ end
+ end
+
describe 'DELETE /projects/:id/issues/:issue_iid' do
it 'rejects a non member from deleting an issue' do
delete api("/projects/#{project.id}/issues/#{issue.iid}", non_member)
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb
index e5ad1a6378e..582bf19820d 100644
--- a/spec/requests/api/merge_requests_spec.rb
+++ b/spec/requests/api/merge_requests_spec.rb
@@ -736,6 +736,33 @@ describe API::MergeRequests do
it_behaves_like 'merge requests list'
end
+
+ context "#to_reference" do
+ it 'exposes reference path in context of group' do
+ get api("/groups/#{group.id}/merge_requests", user)
+
+ expect(json_response.first['references']['short']).to eq("!#{merge_request_merged.iid}")
+ expect(json_response.first['references']['relative']).to eq("#{merge_request_merged.target_project.path}!#{merge_request_merged.iid}")
+ expect(json_response.first['references']['full']).to eq("#{merge_request_merged.target_project.full_path}!#{merge_request_merged.iid}")
+ end
+
+ context 'referencing from parent group' do
+ let(:parent_group) { create(:group) }
+
+ before do
+ group.update(parent_id: parent_group.id)
+ merge_request_merged.reload
+ end
+
+ it 'exposes reference path in context of parent group' do
+ get api("/groups/#{parent_group.id}/merge_requests")
+
+ expect(json_response.first['references']['short']).to eq("!#{merge_request_merged.iid}")
+ expect(json_response.first['references']['relative']).to eq("#{merge_request_merged.target_project.full_path}!#{merge_request_merged.iid}")
+ expect(json_response.first['references']['full']).to eq("#{merge_request_merged.target_project.full_path}!#{merge_request_merged.iid}")
+ end
+ end
+ end
end
describe "GET /projects/:id/merge_requests/:merge_request_iid" do
@@ -783,6 +810,9 @@ describe API::MergeRequests do
expect(json_response).not_to include('rebase_in_progress')
expect(json_response['has_conflicts']).to be_falsy
expect(json_response['blocking_discussions_resolved']).to be_truthy
+ expect(json_response['references']['short']).to eq("!#{merge_request.iid}")
+ expect(json_response['references']['relative']).to eq("!#{merge_request.iid}")
+ expect(json_response['references']['full']).to eq("#{merge_request.target_project.full_path}!#{merge_request.iid}")
end
it 'exposes description and title html when render_html is true' do
diff --git a/spec/services/merge_requests/get_urls_service_spec.rb b/spec/services/merge_requests/get_urls_service_spec.rb
index dcb8c8080a1..bb8a1873dac 100644
--- a/spec/services/merge_requests/get_urls_service_spec.rb
+++ b/spec/services/merge_requests/get_urls_service_spec.rb
@@ -45,6 +45,13 @@ describe MergeRequests::GetUrlsService do
end
end
+ context 'when project is nil' do
+ let(:project) { nil }
+ let(:changes) { default_branch_changes }
+
+ it_behaves_like 'no_merge_request_url'
+ end
+
context 'pushing to default branch' do
let(:changes) { default_branch_changes }
diff --git a/spec/support/helpers/query_recorder.rb b/spec/support/helpers/query_recorder.rb
index 9d47a0c23df..1d04014c9a6 100644
--- a/spec/support/helpers/query_recorder.rb
+++ b/spec/support/helpers/query_recorder.rb
@@ -16,7 +16,7 @@ module ActiveRecord
def show_backtrace(values)
Rails.logger.debug("QueryRecorder SQL: #{values[:sql]}")
- Gitlab::Profiler.clean_backtrace(caller).each { |line| Rails.logger.debug(" --> #{line}") }
+ Gitlab::BacktraceCleaner.clean_backtrace(caller).each { |line| Rails.logger.debug(" --> #{line}") }
end
def callback(name, start, finish, message_id, values)
diff --git a/spec/support/helpers/test_env.rb b/spec/support/helpers/test_env.rb
index f2fa6af6402..bd945fe6409 100644
--- a/spec/support/helpers/test_env.rb
+++ b/spec/support/helpers/test_env.rb
@@ -245,8 +245,8 @@ module TestEnv
end
end
- def copy_repo(project, bare_repo:, refs:)
- target_repo_path = File.expand_path(repos_path + "/#{project.disk_path}.git")
+ def copy_repo(subject, bare_repo:, refs:)
+ target_repo_path = File.expand_path(repos_path + "/#{subject.disk_path}.git")
FileUtils.mkdir_p(target_repo_path)
FileUtils.cp_r("#{File.expand_path(bare_repo)}/.", target_repo_path)