1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe 'create a merge request, allowing commits from members who can merge to the target branch', :js do 6 include ProjectForksHelper 7 let(:user) { create(:user) } 8 let(:target_project) { create(:project, :public, :repository) } 9 let(:source_project) { fork_project(target_project, user, repository: true, namespace: user.namespace) } 10 11 def visit_new_merge_request 12 visit project_new_merge_request_path( 13 source_project, 14 merge_request: { 15 source_project_id: source_project.id, 16 target_project_id: target_project.id, 17 source_branch: 'fix', 18 target_branch: 'master' 19 }) 20 end 21 22 before do 23 sign_in(user) 24 end 25 26 it 'allows setting possible', :sidekiq_might_not_need_inline do 27 visit_new_merge_request 28 29 check 'Allow commits from members who can merge to the target branch' 30 31 click_button 'Create merge request' 32 33 wait_for_requests 34 35 expect(page).to have_content('Members who can merge are allowed to add commits.') 36 end 37 38 it 'shows a message when one of the projects is private', :sidekiq_might_not_need_inline do 39 source_project.update!(visibility_level: Gitlab::VisibilityLevel::PRIVATE) 40 41 visit_new_merge_request 42 43 expect(page).to have_content('Not available for private projects') 44 end 45 46 it 'shows a message when the source branch is protected', :sidekiq_might_not_need_inline do 47 create(:protected_branch, project: source_project, name: 'fix') 48 49 visit_new_merge_request 50 51 expect(page).to have_content('Not available for protected branches') 52 end 53 54 context 'when the merge request is being created within the same project' do 55 let(:source_project) { target_project } 56 57 it 'hides the checkbox if the merge request is being created within the same project' do 58 target_project.add_developer(user) 59 60 visit_new_merge_request 61 62 expect(page).not_to have_content('The fork project allows commits from members who can write to the target branch.') 63 end 64 end 65 66 context 'when a member who can merge tries to edit the option' do 67 let(:member) { create(:user) } 68 let(:merge_request) do 69 create(:merge_request, 70 source_project: source_project, 71 target_project: target_project, 72 source_branch: 'fixes') 73 end 74 75 before do 76 target_project.add_maintainer(member) 77 78 sign_in(member) 79 end 80 81 it 'hides the option from members' do 82 visit edit_project_merge_request_path(target_project, merge_request) 83 84 expect(page).not_to have_content('The fork project allows commits from members who can write to the target branch.') 85 end 86 end 87end 88