diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-20 06:06:58 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-20 06:06:58 +0300 |
commit | accf0d7db3d58a62212125703df39e341d327ec6 (patch) | |
tree | 7ea5e828e0350f9ecd3fd9c8d6daee02849ab2ef /spec/workers | |
parent | d7511e6d2f947dbae4b19947b746fdabb0897d92 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/workers')
-rw-r--r-- | spec/workers/merge_requests/mergeability_check_batch_worker_spec.rb | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/spec/workers/merge_requests/mergeability_check_batch_worker_spec.rb b/spec/workers/merge_requests/mergeability_check_batch_worker_spec.rb index 2c429ed62fb..828ffb0c811 100644 --- a/spec/workers/merge_requests/mergeability_check_batch_worker_spec.rb +++ b/spec/workers/merge_requests/mergeability_check_batch_worker_spec.rb @@ -5,6 +5,8 @@ require 'spec_helper' RSpec.describe MergeRequests::MergeabilityCheckBatchWorker, feature_category: :code_review_workflow do subject { described_class.new } + let_it_be(:user) { create(:user) } + describe '#perform' do context 'when some merge_requests do not exist' do it 'ignores unknown merge request ids' do @@ -12,26 +14,49 @@ RSpec.describe MergeRequests::MergeabilityCheckBatchWorker, feature_category: :c expect(Sidekiq.logger).not_to receive(:error) - subject.perform([1234, 5678]) + subject.perform([1234, 5678], user.id) end end context 'when some merge_requests needs mergeability checks' do let(:merge_request_1) { create(:merge_request, merge_status: :unchecked) } - let(:merge_request_2) { create(:merge_request, merge_status: :cannot_be_merged_rechecking) } + let(:merge_request_2) { create(:merge_request, merge_status: :unchecked) } let(:merge_request_3) { create(:merge_request, merge_status: :can_be_merged) } + before do + merge_request_1.project.add_developer(user) + merge_request_2.project.add_reporter(user) + merge_request_3.project.add_developer(user) + end + it 'executes MergeabilityCheckService on merge requests that needs to be checked' do expect_next_instance_of(MergeRequests::MergeabilityCheckService, merge_request_1) do |service| expect(service).to receive(:execute).and_return(ServiceResponse.success) end - expect_next_instance_of(MergeRequests::MergeabilityCheckService, merge_request_2) do |service| - expect(service).to receive(:execute).and_return(ServiceResponse.success) - end + expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(merge_request_2.id) expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(merge_request_3.id) expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(1234) - subject.perform([merge_request_1.id, merge_request_2.id, merge_request_3.id, 1234]) + subject.perform([merge_request_1.id, merge_request_2.id, merge_request_3.id, 1234], user.id) + end + + context 'when restrict_merge_status_recheck FF is off' do + before do + stub_feature_flags(restrict_merge_status_recheck: false) + end + + it 'executes MergeabilityCheckService on merge requests that needs to be checked' do + expect_next_instance_of(MergeRequests::MergeabilityCheckService, merge_request_1) do |service| + expect(service).to receive(:execute).and_return(ServiceResponse.success) + end + expect_next_instance_of(MergeRequests::MergeabilityCheckService, merge_request_2) do |service| + expect(service).to receive(:execute).and_return(ServiceResponse.success) + end + expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(merge_request_3.id) + expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(1234) + + subject.perform([merge_request_1.id, merge_request_2.id, merge_request_3.id, 1234], user.id) + end end it 'structurally logs a failed mergeability check' do @@ -45,13 +70,26 @@ RSpec.describe MergeRequests::MergeabilityCheckBatchWorker, feature_category: :c worker: described_class.to_s, message: 'Failed to check mergeability of merge request: solar flares') - subject.perform([merge_request_1.id]) + subject.perform([merge_request_1.id], user.id) + end + + context 'when user is nil' do + let(:user) { nil } + + it 'does not run any mergeability checks' do + expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(merge_request_1.id) + expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(merge_request_2.id) + expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(merge_request_3.id) + expect(MergeRequests::MergeabilityCheckService).not_to receive(:new).with(1234) + + subject.perform([merge_request_1.id, merge_request_2.id, merge_request_3.id, 1234], user&.id) + end end end it_behaves_like 'an idempotent worker' do let(:merge_request) { create(:merge_request) } - let(:job_args) { [merge_request.id] } + let(:job_args) { [[merge_request.id], user.id] } it 'is mergeable' do subject |