diff --git a/ee/app/services/auto_merge/merge_when_checks_pass_service.rb b/ee/app/services/auto_merge/merge_when_checks_pass_service.rb index 78d73bde8b77f9951f7ff3b5e26b8f29047618d8..d738219e0703968b69e6ab1daa89a1b7b6f4d137 100644 --- a/ee/app/services/auto_merge/merge_when_checks_pass_service.rb +++ b/ee/app/services/auto_merge/merge_when_checks_pass_service.rb @@ -30,6 +30,7 @@ def add_system_note(merge_request) def check_availability(merge_request) return false if Feature.disabled?(:merge_when_checks_pass, merge_request.project) return false unless merge_request.approval_feature_available? + return false if merge_request.project.merge_trains_enabled? super || !merge_request.approved? || diff --git a/ee/spec/services/auto_merge/merge_when_checks_pass_service_spec.rb b/ee/spec/services/auto_merge/merge_when_checks_pass_service_spec.rb index f7039c34c35dacbf359ce10ea145c2c92506615b..082811fb682e58da0fa18e84d1ecf8b23a75f413 100644 --- a/ee/spec/services/auto_merge/merge_when_checks_pass_service_spec.rb +++ b/ee/spec/services/auto_merge/merge_when_checks_pass_service_spec.rb @@ -16,6 +16,13 @@ subject { service.available_for?(mr_merge_if_green_enabled) } let_it_be(:approver) { create(:user) } + let(:feature_flag) { true } + let(:draft_status) { true } + let(:blocked_status) { true } + let(:discussions_status) { true } + let(:additional_feature_flag) { true } + let(:pipeline_status) { :running } + let(:approvals_required) { 1 } before do create(:ci_pipeline, pipeline_status, @@ -25,41 +32,33 @@ mr_merge_if_green_enabled.update_head_pipeline approval_rule.users << approver + stub_feature_flags(merge_when_checks_pass: feature_flag, + additional_merge_when_checks_ready: additional_feature_flag) + mr_merge_if_green_enabled.update!(title: 'Draft: check') if draft_status + allow(mr_merge_if_green_enabled).to receive(:merge_blocked_by_other_mrs?).and_return(blocked_status) + allow(mr_merge_if_green_enabled).to receive(:mergeable_discussions_state?).and_return(discussions_status) end - context 'when feature flag "merge_when_checks_pass" is enabled' do - before do - stub_feature_flags(merge_when_checks_pass: project, additional_merge_when_checks_ready: additional_feature_flag) - mr_merge_if_green_enabled.update!(title: 'Draft: check') if draft_status - allow(mr_merge_if_green_enabled).to receive(:merge_blocked_by_other_mrs?).and_return(blocked_status) - allow(mr_merge_if_green_enabled).to receive(:mergeable_discussions_state?).and_return(discussions_status) - end - - where(:pipeline_status, :approvals_required, :draft_status, :blocked_status, :discussions_status, - :additional_feature_flag, :result) do - :running | 0 | true | true | false | true | true - :running | 0 | false | false | true | true | true - :success | 0 | false | false | true | true | false - :success | 0 | true | true | false | true | true - :success | 0 | true | true | true | false | false - :running | 1 | true | true | false | true | true - :success | 1 | true | true | false | true | true - :success | 1 | false | false | true | true | true - :running | 1 | false | false | true | true | true - end + where(:pipeline_status, :approvals_required, :draft_status, :blocked_status, :discussions_status, + :additional_feature_flag, :result) do + :running | 0 | true | true | false | true | true + :running | 0 | false | false | true | true | true + :success | 0 | false | false | true | true | false + :success | 0 | true | true | false | true | true + :success | 0 | true | true | true | false | false + :running | 1 | true | true | false | true | true + :success | 1 | true | true | false | true | true + :success | 1 | false | false | true | true | true + :running | 1 | false | false | true | true | true + end - with_them do - it { is_expected.to eq result } - end + with_them do + it { is_expected.to eq result } end context 'when feature flags merge_when_checks_pass and additional_merge_when_checks_ready are disabled"' do - before do - stub_feature_flags(merge_when_checks_pass: false, additional_merge_when_checks_ready: false) - mr_merge_if_green_enabled.update!(title: 'Draft: check') if draft_status - allow(mr_merge_if_green_enabled).to receive(:merge_blocked_by_other_mrs?).and_return(blocked_status) - allow(mr_merge_if_green_enabled).to receive(:mergeable_discussions_state?).and_return(discussions_status) - end + let(:additional_feature_flag) { false } + let(:feature_flag) { false } where(:pipeline_status, :approvals_required, :draft_status, :blocked_status, :discussions_status, :result) do :running | 0 | true | true | false | false @@ -96,6 +95,14 @@ it { is_expected.to eq false } end + + context 'when merge trains are enabled' do + before do + allow(mr_merge_if_green_enabled.project).to receive(:merge_trains_enabled?).and_return(true) + end + + it { is_expected.to eq false } + end end describe "#execute" do