diff options
Diffstat (limited to 'spec/services/auto_merge_service_spec.rb')
-rw-r--r-- | spec/services/auto_merge_service_spec.rb | 69 |
1 files changed, 62 insertions, 7 deletions
diff --git a/spec/services/auto_merge_service_spec.rb b/spec/services/auto_merge_service_spec.rb index 221cf695331..bab69fb4aa3 100644 --- a/spec/services/auto_merge_service_spec.rb +++ b/spec/services/auto_merge_service_spec.rb @@ -3,22 +3,36 @@ require 'spec_helper' describe AutoMergeService do - let_it_be(:project) { create(:project) } + let_it_be(:project) { create(:project, :repository) } let_it_be(:user) { create(:user) } let(:service) { described_class.new(project, user) } - describe '.all_strategies' do - subject { described_class.all_strategies } + before_all do + project.add_maintainer(user) + end - it 'includes merge when pipeline succeeds' do - is_expected.to include(AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS) + describe '.all_strategies_ordered_by_preference' do + subject { described_class.all_strategies_ordered_by_preference } + + it 'returns all strategies in preference order' do + if Gitlab.ee? + is_expected.to eq( + [AutoMergeService::STRATEGY_MERGE_TRAIN, + AutoMergeService::STRATEGY_ADD_TO_MERGE_TRAIN_WHEN_PIPELINE_SUCCEEDS, + AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS]) + else + is_expected.to eq([AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS]) + end end end describe '#available_strategies' do subject { service.available_strategies(merge_request) } - let(:merge_request) { create(:merge_request) } + let(:merge_request) do + create(:merge_request, source_project: project) + end + let(:pipeline_status) { :running } before do @@ -42,6 +56,36 @@ describe AutoMergeService do end end + describe '#preferred_strategy' do + subject { service.preferred_strategy(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 + end + + it 'returns preferred strategy' do + is_expected.to eq('merge_when_pipeline_succeeds') + end + + context 'when the head piipeline succeeded' do + let(:pipeline_status) { :success } + + it 'returns available strategies' do + is_expected.to be_nil + end + end + end + describe '.get_service_class' do subject { described_class.get_service_class(strategy) } @@ -63,7 +107,10 @@ describe AutoMergeService do describe '#execute' do subject { service.execute(merge_request, strategy) } - let(:merge_request) { create(:merge_request) } + let(:merge_request) do + create(:merge_request, source_project: project) + end + let(:pipeline_status) { :running } let(:strategy) { AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS } @@ -90,6 +137,14 @@ describe AutoMergeService do is_expected.to eq(:failed) end end + + context 'when strategy is not specified' do + let(:strategy) { } + + it 'chooses the most preferred strategy' do + is_expected.to eq(:merge_when_pipeline_succeeds) + end + end end describe '#update' do |