diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-07 12:05:55 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-07 12:05:55 +0300 |
commit | ab2382923e7a864a3fa27fdf8eeb9b21893b9147 (patch) | |
tree | 89a0d33672657f2c793b0966e1d82041f36c76c9 /spec/services/merge_requests | |
parent | 3900b8a0062113e11e600e4226426e4163ac5e2c (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.rb | 124 |
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 |