1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Cherry-pick Commits', :js, feature_category: :source_code_management do
let_it_be(:user) { create(:user) }
let_it_be(:sha) { '7d3b0f7cff5f37573aea97cebfd5692ea1689924' }
let!(:project) { create_default(:project, :repository, namespace: user.namespace) }
let(:master_pickable_commit) { project.commit(sha) }
before do
sign_in(user)
end
context 'when clicking cherry-pick from the dropdown for a commit on pipelines tab' do
it 'launches the modal form' do
create(:ci_empty_pipeline, sha: sha)
visit project_commit_path(project, master_pickable_commit.id)
click_link 'Pipelines'
open_modal
page.within(modal_selector) do
expect(page).to have_content('Cherry-pick this commit')
end
end
end
context 'when starting from the commit tab' do
before do
visit project_commit_path(project, master_pickable_commit.id)
end
context 'when cherry-picking a commit' do
specify do
cherry_pick_commit
expect(page).to have_content('The commit has been successfully cherry-picked into master.')
end
end
context 'when cherry-picking a merge commit' do
specify do
cherry_pick_commit
expect(page).to have_content('The commit has been successfully cherry-picked into master.')
end
end
context 'when cherry-picking a commit that was previously cherry-picked' do
specify do
cherry_pick_commit
visit project_commit_path(project, master_pickable_commit.id)
cherry_pick_commit
expect(page).to have_content('Sorry, we cannot cherry-pick this commit automatically.')
end
end
context 'when cherry-picking a commit in a new merge request' do
specify do
cherry_pick_commit(create_merge_request: true)
expect(page).to have_content("The commit has been successfully cherry-picked into cherry-pick-#{master_pickable_commit.short_id}. You can now submit a merge request to get this change into the original branch.")
expect(page).to have_content("From cherry-pick-#{master_pickable_commit.short_id} into master")
end
end
context 'when I cherry-picking a commit from a different branch' do
specify do
open_modal
page.within(modal_selector) do
click_button 'master'
end
page.within("#{modal_selector} .dropdown-menu") do
fill_in 'Search branches', with: 'feature'
wait_for_requests
find('.gl-dropdown-item-text-wrapper', exact_text: 'feature').click
end
submit_cherry_pick
expect(page).to have_content('The commit has been successfully cherry-picked into feature.')
end
end
context 'when the project is archived' do
let(:project) { create(:project, :repository, :archived, namespace: user.namespace) }
it 'does not show the cherry-pick button' do
open_dropdown
expect(page).not_to have_text("Cherry-pick")
end
end
end
def cherry_pick_commit(create_merge_request: false)
open_modal
submit_cherry_pick(create_merge_request: create_merge_request)
end
def open_dropdown
find(dropdown_selector).click
end
def open_modal
open_dropdown
page.within(dropdown_selector) do
click_button 'Cherry-pick'
end
end
def submit_cherry_pick(create_merge_request: false)
page.within(modal_selector) do
uncheck('create_merge_request') unless create_merge_request
click_button('Cherry-pick')
end
end
def dropdown_selector
'[data-testid="commit-options-dropdown"]'
end
def modal_selector
'[data-testid="modal-commit"]'
end
end
|