1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe AutoMergeProcessWorker, feature_category: :continuous_delivery do
let(:merge_request) { create(:merge_request) }
describe '#perform' do
subject { described_class.new.perform(args) }
let(:args) { { 'merge_request_id' => merge_request.id } }
context 'when merge request is found' do
it 'executes AutoMergeService' do
expect_next_instance_of(AutoMergeService) do |auto_merge|
expect(auto_merge).to receive(:process).with(merge_request)
end
subject
end
end
context 'when merge request is not found' do
let(:args) { { 'merge_request_id' => -1 } }
it 'does not execute AutoMergeService' do
expect(AutoMergeService).not_to receive(:new)
subject
end
end
context 'when a pipeline is passed with auto mergeable MRs', :aggregate_failures do
let(:merge_service) { instance_double(AutoMergeService, process: true) }
let(:mwps_merge_request) { create(:merge_request, :with_head_pipeline, :merge_when_pipeline_succeeds) }
let(:mwcp_merge_request) { create(:merge_request, :with_head_pipeline, :merge_when_checks_pass) }
let(:args) do
{
'merge_request_id' => merge_request.id,
'pipeline_id' => [mwps_merge_request.head_pipeline.id, mwcp_merge_request.head_pipeline.id]
}
end
it 'initializes and executes AutoMergeService for the passed MR and those attached to the passed pipeline' do
expect(AutoMergeService).to receive(:new).exactly(3).times.and_return(merge_service)
expect(merge_service).to receive(:process).with(merge_request)
expect(merge_service).to receive(:process).with(mwps_merge_request)
expect(merge_service).to receive(:process).with(mwcp_merge_request)
subject
end
end
context 'when pipeline is not found' do
let(:args) { { 'pipeline_id' => -1 } }
it 'does not execute AutoMergeService' do
expect(AutoMergeService).not_to receive(:new)
subject
end
end
context 'when merge request id is nil' do
let(:args) { { 'merge_request_id' => nil } }
it 'does not execute AutoMergeService' do
expect(AutoMergeService).not_to receive(:new)
subject
end
end
# Integer args are deprecated as of 17.5. IDs should be passed
# as a hash with merge_request_id and pipeline_id keys.
# https://gitlab.com/gitlab-org/gitlab/-/issues/497247
context 'with integer args' do
let(:args) { merge_request.id }
context 'when merge request is found' do
it 'executes AutoMergeService' do
expect_next_instance_of(AutoMergeService) do |auto_merge|
expect(auto_merge).to receive(:process)
end
subject
end
end
context 'when merge request is not found' do
let(:args) { -1 }
it 'does not execute AutoMergeService' do
expect(AutoMergeService).not_to receive(:new)
subject
end
end
context 'when merge request id is nil' do
let(:args) { nil }
it 'does not execute AutoMergeService' do
expect(AutoMergeService).not_to receive(:new)
subject
end
end
end
end
end
|