diff --git a/ee/spec/services/auto_merge/add_to_merge_train_when_checks_pass_service_spec.rb b/ee/spec/services/auto_merge/add_to_merge_train_when_checks_pass_service_spec.rb index 657f916681093829c1d852dad1cf03fa0ddc8d19..9d6b1dab64236a05329aba6578f94b6376e7a1db 100644 --- a/ee/spec/services/auto_merge/add_to_merge_train_when_checks_pass_service_spec.rb +++ b/ee/spec/services/auto_merge/add_to_merge_train_when_checks_pass_service_spec.rb @@ -105,7 +105,7 @@ end end - context 'when merge trains not enabled' do + context 'when merge trains are not enabled' do before do allow(merge_request.project).to receive(:merge_trains_enabled?).and_return(false) end @@ -121,6 +121,22 @@ end end + context 'when project is not licensed for merge trains' do + before do + stub_licensed_features(merge_trains: false) + end + + it 'aborts auto merge' do + expect(service).to receive(:abort).once.and_call_original + + expect(SystemNoteService) + .to receive(:abort_add_to_merge_train_when_checks_pass).once + .with(merge_request, project, user, 'merge trains are disabled for this project.') + + process + end + end + context 'when diff head pipeline considered in progress' do before do allow(merge_request).to receive(:only_allow_merge_if_pipeline_succeeds?).and_return(true) @@ -313,6 +329,19 @@ end end + context 'when project is not licensed for merge trains' do + before do + stub_licensed_features(merge_trains: false) + end + + it 'is unavailable and returns the correct reason' do + aggregate_failures do + expect(availability_check.available?).to be false + expect(availability_check.unavailable_reason).to eq :merge_trains_disabled + end + end + end + context 'when the MR does not have ci enabled' do before do allow(merge_request).to receive(:has_ci_enabled?).and_return(false) diff --git a/ee/spec/services/auto_merge/merge_train_service_spec.rb b/ee/spec/services/auto_merge/merge_train_service_spec.rb index c7c7ba772483921237dfb48cf8e1c2e99801f6a3..ff4f83f9300ae291ffd0993e6d14b15722073e25 100644 --- a/ee/spec/services/auto_merge/merge_train_service_spec.rb +++ b/ee/spec/services/auto_merge/merge_train_service_spec.rb @@ -414,6 +414,14 @@ it { is_expected.to be false } end + context 'when project is not licensed for merge trains' do + before do + stub_licensed_features(merge_trains: false) + end + + it { is_expected.to be false } + end + context 'when there is an open MR dependency' do before do stub_licensed_features(blocking_merge_requests: true) diff --git a/ee/spec/services/ee/auto_merge_service_spec.rb b/ee/spec/services/ee/auto_merge_service_spec.rb index aac9ed810815539284616e8d8c7103161252b0af..f95cff447dc1a43ad6c2eadb2767083834a310f9 100644 --- a/ee/spec/services/ee/auto_merge_service_spec.rb +++ b/ee/spec/services/ee/auto_merge_service_spec.rb @@ -3,6 +3,11 @@ require 'spec_helper' RSpec.describe AutoMergeService, feature_category: :code_review_workflow do + let_it_be(:project, reload: true) { create(:project, :repository) } + let_it_be(:user) { create(:user, maintainer_of: project) } + + let(:service) { described_class.new(project, user) } + describe '.all_strategies_ordered_by_preference' do subject { described_class.all_strategies_ordered_by_preference } @@ -12,4 +17,42 @@ AutoMergeService::STRATEGY_MERGE_WHEN_CHECKS_PASS) end end + + describe '#available_strategies' do + subject { service.available_strategies(merge_request) } + + let(:merge_request) do + create(:merge_request, source_project: project) + end + + let(:pipeline_status) { :running } + + before do + create( + :ci_pipeline, + pipeline_status, + ref: merge_request.source_branch, + sha: merge_request.diff_head_sha, + project: merge_request.source_project + ) + + merge_request.update_head_pipeline + project.update!(merge_pipelines_enabled: true, merge_trains_enabled: true) + stub_licensed_features(merge_trains: true, merge_pipelines: true) + end + + it 'returns available strategies' do + is_expected.to include('add_to_merge_train_when_checks_pass') + end + + context 'when merge train license is not available' do + before do + stub_licensed_features(merge_trains: false) + end + + it 'returns available strategies' do + is_expected.to include('merge_when_checks_pass') + end + end + end end