Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-10-07 12:05:55 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-10-07 12:05:55 +0300
commitab2382923e7a864a3fa27fdf8eeb9b21893b9147 (patch)
tree89a0d33672657f2c793b0966e1d82041f36c76c9 /spec/services/merge_requests
parent3900b8a0062113e11e600e4226426e4163ac5e2c (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/merge_requests')
-rw-r--r--spec/services/merge_requests/refresh_service_spec.rb124
1 files changed, 124 insertions, 0 deletions
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 6ba67c7165c..2dc932c9f2c 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
describe MergeRequests::RefreshService do
include ProjectForksHelper
+ include ProjectHelpers
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
@@ -756,4 +757,127 @@ describe MergeRequests::RefreshService do
end
end
end
+
+ describe '#abort_ff_merge_requests_with_when_pipeline_succeeds' do
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:source_project) { project }
+ let_it_be(:target_project) { project }
+ let_it_be(:author) { create_user_from_membership(target_project, :developer) }
+ let_it_be(:user) { create(:user) }
+
+ let_it_be(:forked_project) do
+ fork_project(target_project, author, repository: true)
+ end
+
+ let_it_be(:merge_request) do
+ create(:merge_request,
+ author: author,
+ source_project: source_project,
+ source_branch: 'feature',
+ target_branch: 'master',
+ target_project: target_project,
+ auto_merge_enabled: true,
+ auto_merge_strategy: AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS,
+ merge_user: user)
+ end
+
+ let_it_be(:newrev) do
+ target_project
+ .repository
+ .create_file(user, 'test1.txt', 'Test data',
+ message: 'Test commit', branch_name: 'master')
+ end
+
+ let_it_be(:oldrev) do
+ target_project
+ .repository
+ .commit(newrev)
+ .parent_id
+ end
+
+ let(:refresh_service) { service.new(project, user) }
+
+ before do
+ target_project.merge_method = merge_method
+ target_project.save!
+
+ refresh_service.execute(oldrev, newrev, 'refs/heads/master')
+ merge_request.reload
+ end
+
+ let(:aborted_message) do
+ /aborted the automatic merge because target branch was updated/
+ end
+
+ shared_examples 'aborted MWPS' do
+ it 'aborts auto_merge' do
+ expect(merge_request.auto_merge_enabled?).to be_falsey
+ expect(merge_request.notes.last.note).to match(aborted_message)
+ end
+
+ it 'removes merge_user' do
+ expect(merge_request.merge_user).to be_nil
+ end
+
+ it 'does not add todos for merge user' do
+ expect(user.todos.for_target(merge_request)).to be_empty
+ end
+
+ it 'adds todos for merge author' do
+ expect(author.todos.for_target(merge_request)).to be_present.and be_all(&:pending?)
+ end
+ end
+
+ context 'when Project#merge_method is set to FF' do
+ let(:merge_method) { :ff }
+
+ it_behaves_like 'aborted MWPS'
+
+ context 'with forked project' do
+ let(:source_project) { forked_project }
+
+ it_behaves_like 'aborted MWPS'
+ end
+ end
+
+ context 'when Project#merge_method is set to rebase_merge' do
+ let(:merge_method) { :rebase_merge }
+
+ it_behaves_like 'aborted MWPS'
+
+ context 'with forked project' do
+ let(:source_project) { forked_project }
+
+ it_behaves_like 'aborted MWPS'
+ end
+ end
+
+ context 'when Project#merge_method is set to merge' do
+ let(:merge_method) { :merge }
+
+ shared_examples 'maintained MWPS' do
+ it 'does not cancel auto merge' do
+ expect(merge_request.auto_merge_enabled?).to be_truthy
+ expect(merge_request.notes).to be_empty
+ end
+
+ it 'does not change merge_user' do
+ expect(merge_request.merge_user).to eq(user)
+ end
+
+ it 'does not add todos' do
+ expect(author.todos.for_target(merge_request)).to be_empty
+ expect(user.todos.for_target(merge_request)).to be_empty
+ end
+ end
+
+ it_behaves_like 'maintained MWPS'
+
+ context 'with forked project' do
+ let(:source_project) { forked_project }
+
+ it_behaves_like 'maintained MWPS'
+ end
+ end
+ end
end