2019-10-12 21:52:04 +05:30
# frozen_string_literal: true
2019-12-04 20:38:33 +05:30
require 'spec_helper'
2017-08-17 22:00:37 +05:30
2020-06-23 00:09:42 +05:30
RSpec . describe 'Merge request > User merges only if pipeline succeeds' , :js do
2017-08-17 22:00:37 +05:30
let ( :merge_request ) { create ( :merge_request_with_diffs ) }
let ( :project ) { merge_request . target_project }
before do
2018-11-18 11:00:15 +05:30
project . add_maintainer ( merge_request . author )
2018-03-17 18:26:18 +05:30
sign_in ( merge_request . author )
2017-08-17 22:00:37 +05:30
end
2018-03-17 18:26:18 +05:30
context 'project does not have CI enabled' do
2017-08-17 22:00:37 +05:30
it 'allows MR to be merged' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect ( page ) . to have_button 'Merge'
end
end
2018-03-17 18:26:18 +05:30
context 'when project has CI enabled' do
let! ( :pipeline ) do
2017-08-17 22:00:37 +05:30
create ( :ci_empty_pipeline ,
project : project ,
sha : merge_request . diff_head_sha ,
ref : merge_request . source_branch ,
2017-09-10 17:25:29 +05:30
status : status , head_pipeline_of : merge_request )
2017-08-17 22:00:37 +05:30
end
context 'when merge requests can only be merged if the pipeline succeeds' do
before do
project . update_attribute ( :only_allow_merge_if_pipeline_succeeds , true )
end
context 'when CI is running' do
2018-03-17 18:26:18 +05:30
let ( :status ) { :running }
2017-08-17 22:00:37 +05:30
it 'does not allow to merge immediately' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect ( page ) . to have_button 'Merge when pipeline succeeds'
2017-09-10 17:25:29 +05:30
expect ( page ) . not_to have_button '.js-merge-moment'
2017-08-17 22:00:37 +05:30
end
end
context 'when CI failed' do
2018-03-17 18:26:18 +05:30
let ( :status ) { :failed }
2017-08-17 22:00:37 +05:30
it 'does not allow MR to be merged' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect ( page ) . to have_css ( 'button[disabled="disabled"]' , text : 'Merge' )
2021-03-11 19:13:27 +05:30
expect ( page ) . to have_content ( 'The pipeline for this merge request did not complete. Push a new commit to fix the failure, or check the troubleshooting documentation to see other possible actions.' )
2017-08-17 22:00:37 +05:30
end
end
context 'when CI canceled' do
2018-03-17 18:26:18 +05:30
let ( :status ) { :canceled }
2017-08-17 22:00:37 +05:30
it 'does not allow MR to be merged' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect ( page ) . not_to have_button 'Merge'
2021-03-11 19:13:27 +05:30
expect ( page ) . to have_content ( 'The pipeline for this merge request did not complete. Push a new commit to fix the failure, or check the troubleshooting documentation to see other possible actions.' )
2017-08-17 22:00:37 +05:30
end
end
context 'when CI succeeded' do
2018-03-17 18:26:18 +05:30
let ( :status ) { :success }
2017-08-17 22:00:37 +05:30
it 'allows MR to be merged' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect ( page ) . to have_button 'Merge'
end
end
context 'when CI skipped' do
2018-03-17 18:26:18 +05:30
let ( :status ) { :skipped }
2017-08-17 22:00:37 +05:30
2019-12-26 22:10:19 +05:30
it 'does not allow MR to be merged' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
2019-12-26 22:10:19 +05:30
expect ( page ) . not_to have_button 'Merge'
2017-08-17 22:00:37 +05:30
end
end
end
context 'when merge requests can be merged when the build failed' do
before do
project . update_attribute ( :only_allow_merge_if_pipeline_succeeds , false )
end
context 'when CI is running' do
2018-03-17 18:26:18 +05:30
let ( :status ) { :running }
2017-08-17 22:00:37 +05:30
it 'allows MR to be merged immediately' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect ( page ) . to have_button 'Merge when pipeline succeeds'
2017-09-10 17:25:29 +05:30
page . find ( '.js-merge-moment' ) . click
2017-08-17 22:00:37 +05:30
expect ( page ) . to have_content 'Merge immediately'
end
end
context 'when CI failed' do
2018-03-17 18:26:18 +05:30
let ( :status ) { :failed }
2017-08-17 22:00:37 +05:30
it 'allows MR to be merged' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect ( page ) . to have_button 'Merge'
end
end
context 'when CI succeeded' do
2018-03-17 18:26:18 +05:30
let ( :status ) { :success }
2017-08-17 22:00:37 +05:30
it 'allows MR to be merged' do
2018-03-17 18:26:18 +05:30
visit project_merge_request_path ( project , merge_request )
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect ( page ) . to have_button 'Merge'
end
end
end
end
end