diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-06 18:09:23 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-06 18:09:23 +0300 |
commit | 2e1b10493f9ed9685eb892ab747335983e58f154 (patch) | |
tree | f5d4cbee99cd3aec51e90e1725d95616d3d07859 /spec/services | |
parent | ebed39e3cedad74e1a1ee4e8d33adfb8bbdc7040 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services')
-rw-r--r-- | spec/services/ci/create_pipeline_service_spec.rb | 19 | ||||
-rw-r--r-- | spec/services/ci/process_pipeline_service_spec.rb | 52 | ||||
-rw-r--r-- | spec/services/merge_requests/update_assignees_service_spec.rb | 82 |
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 |