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 136 137 138 139
|
# 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('Commit cherry-pick failed:')
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) do
within_testid('base-dropdown-menu') do
fill_in 'Search branches', with: 'feature'
wait_for_requests
find_by_testid('listbox-item-feature').click
end
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
|