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>2021-04-20 17:36:54 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-04-20 17:36:54 +0300
commitf61bb2a16a514b71bf33aabbbb999d6732016a24 (patch)
tree9548caa89e60b4f40b99bbd1dac030420b812aa8 /spec/controllers/projects/commit_controller_spec.rb
parent35fc54e5d261f8898e390aea7c2f5ec5fdf0539d (diff)
Add latest changes from gitlab-org/gitlab@13-11-stable-eev13.11.0-rc42
Diffstat (limited to 'spec/controllers/projects/commit_controller_spec.rb')
-rw-r--r--spec/controllers/projects/commit_controller_spec.rb98
1 files changed, 98 insertions, 0 deletions
diff --git a/spec/controllers/projects/commit_controller_spec.rb b/spec/controllers/projects/commit_controller_spec.rb
index 2d7f036be21..a231b54419e 100644
--- a/spec/controllers/projects/commit_controller_spec.rb
+++ b/spec/controllers/projects/commit_controller_spec.rb
@@ -3,6 +3,8 @@
require 'spec_helper'
RSpec.describe Projects::CommitController do
+ include ProjectForksHelper
+
let_it_be(:project) { create(:project, :repository) }
let_it_be(:user) { create(:user) }
@@ -295,6 +297,102 @@ RSpec.describe Projects::CommitController do
expect(flash[:alert]).to match('Sorry, we cannot cherry-pick this commit automatically.')
end
end
+
+ context 'when a project has a fork' do
+ let(:project) { create(:project, :repository) }
+ let(:forked_project) { fork_project(project, user, namespace: user.namespace, repository: true) }
+ let(:target_project) { project }
+ let(:create_merge_request) { nil }
+
+ def send_request
+ post(:cherry_pick,
+ params: {
+ namespace_id: forked_project.namespace,
+ project_id: forked_project,
+ target_project_id: target_project.id,
+ start_branch: 'feature',
+ id: forked_project.commit.id,
+ create_merge_request: create_merge_request
+ })
+ end
+
+ def merge_request_url(source_project, branch)
+ project_new_merge_request_path(
+ source_project,
+ merge_request: {
+ source_project_id: source_project.id,
+ target_project_id: project.id,
+ source_branch: branch,
+ target_branch: 'feature'
+ }
+ )
+ end
+
+ before do
+ forked_project.add_maintainer(user)
+ end
+
+ it 'successfully cherry picks a commit from fork to upstream project' do
+ send_request
+
+ expect(response).to redirect_to project_commits_path(project, 'feature')
+ expect(flash[:notice]).to eq('The commit has been successfully cherry-picked into feature.')
+ expect(project.commit('feature').message).to include(forked_project.commit.id)
+ end
+
+ context 'when the cherry pick is performed via merge request' do
+ let(:create_merge_request) { true }
+
+ it 'successfully cherry picks a commit from fork to a cherry pick branch' do
+ branch = forked_project.commit.cherry_pick_branch_name
+ send_request
+
+ expect(response).to redirect_to merge_request_url(project, branch)
+ expect(flash[:notice]).to start_with("The commit has been successfully cherry-picked into #{branch}")
+ expect(project.commit(branch).message).to include(forked_project.commit.id)
+ end
+ end
+
+ context 'when a user cannot push to upstream project' do
+ let(:create_merge_request) { true }
+
+ before do
+ project.add_reporter(user)
+ end
+
+ it 'cherry picks a commit to the fork' do
+ branch = forked_project.commit.cherry_pick_branch_name
+ send_request
+
+ expect(response).to redirect_to merge_request_url(forked_project, branch)
+ expect(flash[:notice]).to start_with("The commit has been successfully cherry-picked into #{branch}")
+ expect(project.commit('feature').message).not_to include(forked_project.commit.id)
+ expect(forked_project.commit(branch).message).to include(forked_project.commit.id)
+ end
+ end
+
+ context 'when a user do not have access to the target project' do
+ let(:target_project) { create(:project, :private) }
+
+ it 'cherry picks a commit to the fork' do
+ send_request
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+
+ context 'disable pick_into_project feature flag' do
+ before do
+ stub_feature_flags(pick_into_project: false)
+ end
+
+ it 'does not cherry pick a commit from fork to upstream' do
+ send_request
+
+ expect(project.commit('feature').message).not_to include(forked_project.commit.id)
+ end
+ end
+ end
end
describe 'GET diff_for_path' do