2019-07-25 05:24:42 +00:00
# frozen_string_literal: true
2019-08-29 07:56:52 +00:00
require 'spec_helper'
2016-04-27 18:34:42 +00:00
2020-06-16 18:09:01 +00:00
RSpec . describe 'Merge request > User merges only if pipeline succeeds' , :js do
2016-11-18 17:30:07 +00:00
let ( :merge_request ) { create ( :merge_request_with_diffs ) }
let ( :project ) { merge_request . target_project }
2016-04-27 18:34:42 +00:00
before do
2018-07-11 14:36:08 +00:00
project . add_maintainer ( merge_request . author )
2017-08-01 18:03:07 +00:00
sign_in ( merge_request . author )
2016-04-27 18:34:42 +00:00
end
2017-08-01 18:03:07 +00:00
context 'project does not have CI enabled' do
2016-06-07 11:01:34 +00:00
it 'allows MR to be merged' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-06-07 11:01:34 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
expect ( page ) . to have_button 'Merge'
2016-04-27 18:34:42 +00:00
end
end
2017-08-01 18:03:07 +00:00
context 'when project has CI enabled' do
let! ( :pipeline ) do
2016-11-18 17:30:07 +00:00
create ( :ci_empty_pipeline ,
project : project ,
sha : merge_request . diff_head_sha ,
ref : merge_request . source_branch ,
2017-05-19 20:51:07 +00:00
status : status , head_pipeline_of : merge_request )
2016-11-18 17:30:07 +00:00
end
2016-04-27 18:34:42 +00:00
2017-02-17 13:56:13 +00:00
context 'when merge requests can only be merged if the pipeline succeeds' do
2016-04-27 18:34:42 +00:00
before do
2017-02-17 13:56:13 +00:00
project . update_attribute ( :only_allow_merge_if_pipeline_succeeds , true )
2016-04-27 18:34:42 +00:00
end
2016-06-07 11:01:34 +00:00
context 'when CI is running' do
2017-08-01 18:03:07 +00:00
let ( :status ) { :running }
2016-06-07 11:01:34 +00:00
it 'does not allow to merge immediately' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-04-27 18:34:42 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
2017-04-06 13:55:11 +00:00
expect ( page ) . to have_button 'Merge when pipeline succeeds'
2017-08-07 02:29:37 +00:00
expect ( page ) . not_to have_button '.js-merge-moment'
2016-04-27 18:34:42 +00:00
end
end
2016-06-07 11:01:34 +00:00
context 'when CI failed' do
2017-08-01 18:03:07 +00:00
let ( :status ) { :failed }
2016-11-18 17:30:07 +00:00
it 'does not allow MR to be merged' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-11-18 17:30:07 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
expect ( page ) . to have_css ( 'button[disabled="disabled"]' , text : 'Merge' )
2021-02-05 21:09:19 +00:00
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.' )
2016-11-18 17:30:07 +00:00
end
end
context 'when CI canceled' do
2017-08-01 18:03:07 +00:00
let ( :status ) { :canceled }
2016-06-07 11:01:34 +00:00
it 'does not allow MR to be merged' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-04-27 18:34:42 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
expect ( page ) . not_to have_button 'Merge'
2021-02-05 21:09:19 +00:00
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.' )
2016-04-27 18:34:42 +00:00
end
end
2016-06-07 11:01:34 +00:00
context 'when CI succeeded' do
2017-08-01 18:03:07 +00:00
let ( :status ) { :success }
2016-11-18 17:30:07 +00:00
it 'allows MR to be merged' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-11-18 17:30:07 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
expect ( page ) . to have_button 'Merge'
2016-11-18 17:30:07 +00:00
end
end
context 'when CI skipped' do
2017-08-01 18:03:07 +00:00
let ( :status ) { :skipped }
2016-06-07 11:01:34 +00:00
2019-10-22 12:06:20 +00:00
it 'does not allow MR to be merged' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-04-27 18:34:42 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
2019-10-22 12:06:20 +00:00
expect ( page ) . not_to have_button 'Merge'
2016-04-27 18:34:42 +00:00
end
end
end
2016-06-07 11:01:34 +00:00
context 'when merge requests can be merged when the build failed' do
2016-04-27 18:34:42 +00:00
before do
2017-02-17 13:56:13 +00:00
project . update_attribute ( :only_allow_merge_if_pipeline_succeeds , false )
2016-04-27 18:34:42 +00:00
end
2016-06-07 11:01:34 +00:00
context 'when CI is running' do
2017-08-01 18:03:07 +00:00
let ( :status ) { :running }
2016-06-07 11:01:34 +00:00
2017-05-09 04:15:34 +00:00
it 'allows MR to be merged immediately' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-04-27 18:34:42 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
2017-04-06 13:55:11 +00:00
expect ( page ) . to have_button 'Merge when pipeline succeeds'
2016-04-27 18:34:42 +00:00
2017-08-07 02:29:37 +00:00
page . find ( '.js-merge-moment' ) . click
2017-04-06 13:55:11 +00:00
expect ( page ) . to have_content 'Merge immediately'
2016-04-27 18:34:42 +00:00
end
end
2016-06-07 11:01:34 +00:00
context 'when CI failed' do
2017-08-01 18:03:07 +00:00
let ( :status ) { :failed }
2016-06-07 11:01:34 +00:00
it 'allows MR to be merged' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-04-27 18:34:42 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
expect ( page ) . to have_button 'Merge'
2016-04-27 18:34:42 +00:00
end
end
2016-06-07 11:01:34 +00:00
context 'when CI succeeded' do
2017-08-01 18:03:07 +00:00
let ( :status ) { :success }
2016-06-07 11:01:34 +00:00
it 'allows MR to be merged' do
2017-08-01 18:03:07 +00:00
visit project_merge_request_path ( project , merge_request )
2016-04-27 18:34:42 +00:00
2017-05-17 18:25:13 +00:00
wait_for_requests
2017-05-09 04:15:34 +00:00
expect ( page ) . to have_button 'Merge'
2016-04-27 18:34:42 +00:00
end
end
end
end
end