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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-04-06 18:09:23 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-04-06 18:09:23 +0300
commit2e1b10493f9ed9685eb892ab747335983e58f154 (patch)
treef5d4cbee99cd3aec51e90e1725d95616d3d07859 /spec/services
parentebed39e3cedad74e1a1ee4e8d33adfb8bbdc7040 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services')
-rw-r--r--spec/services/ci/create_pipeline_service_spec.rb19
-rw-r--r--spec/services/ci/process_pipeline_service_spec.rb52
-rw-r--r--spec/services/merge_requests/update_assignees_service_spec.rb82
3 files changed, 119 insertions, 34 deletions
diff --git a/spec/services/ci/create_pipeline_service_spec.rb b/spec/services/ci/create_pipeline_service_spec.rb
index 98c85234fe7..35f4b97df0a 100644
--- a/spec/services/ci/create_pipeline_service_spec.rb
+++ b/spec/services/ci/create_pipeline_service_spec.rb
@@ -71,21 +71,19 @@ RSpec.describe Ci::CreatePipelineService do
end
it 'increments the prometheus counter' do
- counter = spy('pipeline created counter')
-
- allow(Gitlab::Ci::Pipeline::Metrics)
- .to receive(:pipelines_created_counter).and_return(counter)
+ expect(Gitlab::Metrics).to receive(:counter)
+ .with(:pipelines_created_total, "Counter of pipelines created")
+ .and_call_original
+ allow(Gitlab::Metrics).to receive(:counter).and_call_original # allow other counters
pipeline
-
- expect(counter).to have_received(:increment)
end
it 'records pipeline size in a prometheus histogram' do
histogram = spy('pipeline size histogram')
allow(Gitlab::Ci::Pipeline::Metrics)
- .to receive(:pipeline_size_histogram).and_return(histogram)
+ .to receive(:new).and_return(histogram)
execute_service
@@ -582,13 +580,6 @@ RSpec.describe Ci::CreatePipelineService do
it_behaves_like 'a failed pipeline'
- it 'increments the error metric' do
- stub_ci_pipeline_yaml_file(ci_yaml)
-
- counter = Gitlab::Metrics.counter(:gitlab_ci_pipeline_failure_reasons, 'desc')
- expect { execute_service }.to change { counter.get(reason: 'config_error') }.by(1)
- end
-
context 'when receive git commit' do
before do
allow_any_instance_of(Ci::Pipeline).to receive(:git_commit_message) { message }
diff --git a/spec/services/ci/process_pipeline_service_spec.rb b/spec/services/ci/process_pipeline_service_spec.rb
index 254bd19c808..e02536fd07f 100644
--- a/spec/services/ci/process_pipeline_service_spec.rb
+++ b/spec/services/ci/process_pipeline_service_spec.rb
@@ -10,14 +10,6 @@ RSpec.describe Ci::ProcessPipelineService do
create(:ci_empty_pipeline, ref: 'master', project: project)
end
- let(:pipeline_processing_events_counter) { double(increment: true) }
- let(:legacy_update_jobs_counter) { double(increment: true) }
-
- let(:metrics) do
- double(pipeline_processing_events_counter: pipeline_processing_events_counter,
- legacy_update_jobs_counter: legacy_update_jobs_counter)
- end
-
subject { described_class.new(pipeline) }
before do
@@ -25,13 +17,22 @@ RSpec.describe Ci::ProcessPipelineService do
stub_not_protect_default_branch
project.add_developer(user)
-
- allow(subject).to receive(:metrics).and_return(metrics)
end
describe 'processing events counter' do
+ let(:metrics) { double('pipeline metrics') }
+ let(:counter) { double('events counter') }
+
+ before do
+ allow(subject)
+ .to receive(:metrics).and_return(metrics)
+ allow(metrics)
+ .to receive(:pipeline_processing_events_counter)
+ .and_return(counter)
+ end
+
it 'increments processing events counter' do
- expect(pipeline_processing_events_counter).to receive(:increment)
+ expect(counter).to receive(:increment)
subject.execute
end
@@ -63,22 +64,33 @@ RSpec.describe Ci::ProcessPipelineService do
expect(all_builds.retried).to contain_exactly(build_retried)
end
- it 'increments the counter' do
- expect(legacy_update_jobs_counter).to receive(:increment)
+ context 'counter ci_legacy_update_jobs_as_retried_total' do
+ let(:counter) { double(increment: true) }
- subject.execute
- end
-
- context 'when the previous build has already retried column true' do
before do
- build_retried.update_columns(retried: true)
+ allow(Gitlab::Metrics).to receive(:counter).and_call_original
+ allow(Gitlab::Metrics).to receive(:counter)
+ .with(:ci_legacy_update_jobs_as_retried_total, anything)
+ .and_return(counter)
end
- it 'does not increment the counter' do
- expect(legacy_update_jobs_counter).not_to receive(:increment)
+ it 'increments the counter' do
+ expect(counter).to receive(:increment)
subject.execute
end
+
+ context 'when the previous build has already retried column true' do
+ before do
+ build_retried.update_columns(retried: true)
+ end
+
+ it 'does not increment the counter' do
+ expect(counter).not_to receive(:increment)
+
+ subject.execute
+ end
+ end
end
end
diff --git a/spec/services/merge_requests/update_assignees_service_spec.rb b/spec/services/merge_requests/update_assignees_service_spec.rb
new file mode 100644
index 00000000000..d2ed24f3460
--- /dev/null
+++ b/spec/services/merge_requests/update_assignees_service_spec.rb
@@ -0,0 +1,82 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe MergeRequests::UpdateAssigneesService do
+ include AfterNextHelpers
+
+ let_it_be(:group) { create(:group, :public) }
+ let_it_be(:project) { create(:project, :private, :repository, group: group) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:user2) { create(:user) }
+ let_it_be(:user3) { create(:user) }
+
+ let_it_be_with_reload(:merge_request) do
+ create(:merge_request, :simple, :unique_branches,
+ title: 'Old title',
+ description: "FYI #{user2.to_reference}",
+ assignee_ids: [user3.id],
+ source_project: project,
+ author: create(:user))
+ end
+
+ before do
+ project.add_maintainer(user)
+ project.add_developer(user2)
+ project.add_developer(user3)
+ end
+
+ let(:service) { described_class.new(project, user, opts) }
+ let(:opts) { { assignee_ids: [user2.id] } }
+
+ describe 'execute' do
+ def update_merge_request
+ service.execute(merge_request)
+ merge_request.reload
+ end
+
+ context 'when the parameters are valid' do
+ it 'updates the MR, and queues the more expensive work for later' do
+ expect(MergeRequests::AssigneesChangeWorker)
+ .to receive(:perform_async)
+ .with(merge_request.id, user.id, [user3.id])
+
+ expect { update_merge_request }
+ .to change(merge_request, :assignees).to([user2])
+ .and change(merge_request, :updated_at)
+ .and change(merge_request, :updated_by).to(user)
+ end
+
+ it 'is more efficient than using the full update-service' do
+ allow(MergeRequests::AssigneesChangeWorker)
+ .to receive(:perform_async)
+ .with(merge_request.id, user.id, [user3.id])
+
+ other_mr = create(:merge_request, :simple, :unique_branches,
+ title: merge_request.title,
+ description: merge_request.description,
+ assignee_ids: merge_request.assignee_ids,
+ source_project: merge_request.project,
+ author: merge_request.author)
+
+ update_service = ::MergeRequests::UpdateService.new(project, user, opts)
+
+ expect { service.execute(merge_request) }
+ .to issue_fewer_queries_than { update_service.execute(other_mr) }
+ end
+ end
+ end
+
+ describe '#handle_assignee_changes' do
+ subject { service.handle_assignee_changes(merge_request, [user2]) }
+
+ it 'calls UpdateService#handle_assignee_changes and executes hooks' do
+ expect(service).to receive(:handle_assignees_change).with(merge_request, [user2])
+ expect(merge_request.project).to receive(:execute_hooks).with(anything, :merge_request_hooks)
+ expect(merge_request.project).to receive(:execute_services).with(anything, :merge_request_hooks)
+ expect(service).to receive(:enqueue_jira_connect_messages_for).with(merge_request)
+
+ subject
+ end
+ end
+end