summaryrefslogtreecommitdiff
path: root/spec/services/auto_merge_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/auto_merge_service_spec.rb')
-rw-r--r--spec/services/auto_merge_service_spec.rb69
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