2019-07-25 05:24:42 +00:00
# frozen_string_literal: true
2019-08-29 07:56:52 +00:00
require 'spec_helper'
2016-10-26 21:21:50 +00:00
2020-06-16 18:09:01 +00:00
RSpec . describe 'Resolving all open threads in a merge request from an issue' , :js do
2016-10-26 21:21:50 +00:00
let ( :user ) { create ( :user ) }
2017-07-26 21:49:06 +00:00
let ( :project ) { create ( :project , :repository ) }
2016-10-26 21:21:50 +00:00
let ( :merge_request ) { create ( :merge_request , source_project : project ) }
2017-03-10 01:29:11 +00:00
let! ( :discussion ) { create ( :diff_note_on_merge_request , noteable : merge_request , project : project ) . to_discussion }
2016-10-26 21:21:50 +00:00
2020-07-23 18:10:06 +00:00
def resolve_all_discussions_link_selector ( title : " " )
2018-06-21 12:22:40 +00:00
url = new_project_issue_path ( project , merge_request_to_resolve_discussions_of : merge_request . iid )
2020-07-23 18:10:06 +00:00
if title . empty?
%Q{ a[href=" #{ url } "] }
else
%Q{ a[title=" #{ title } "][href=" #{ url } "] }
end
2018-06-21 12:22:40 +00:00
end
2022-08-26 12:11:48 +00:00
before do
stub_feature_flags ( moved_mr_sidebar : false )
end
2017-03-09 12:48:07 +00:00
describe 'as a user with access to the project' do
2016-10-26 21:21:50 +00:00
before do
2018-07-11 14:36:08 +00:00
project . add_maintainer ( user )
2017-06-21 23:44:10 +00:00
sign_in user
2017-07-06 16:20:50 +00:00
visit project_merge_request_path ( project , merge_request )
2016-10-26 21:21:50 +00:00
end
2019-06-13 11:59:38 +00:00
it 'shows a button to resolve all threads by creating a new issue' do
2022-09-05 06:12:53 +00:00
find ( '.discussions-counter .dropdown-toggle' ) . click
2022-05-13 12:08:49 +00:00
within ( '.discussions-counter' ) do
2022-09-05 06:12:53 +00:00
expect ( page ) . to have_link ( _ ( " Create issue to resolve all threads " ) , href : new_project_issue_path ( project , merge_request_to_resolve_discussions_of : merge_request . iid ) )
2017-03-09 12:48:07 +00:00
end
2016-10-26 21:21:50 +00:00
end
2019-06-13 11:59:38 +00:00
context 'resolving the thread' do
2017-03-09 12:48:07 +00:00
before do
2022-09-05 09:12:22 +00:00
find ( 'button[data-testid="resolve-discussion-button"]' ) . click
2017-03-09 12:48:07 +00:00
end
2017-02-27 15:01:56 +00:00
2017-03-09 12:48:07 +00:00
it 'hides the link for creating a new issue' do
2018-06-21 12:22:40 +00:00
expect ( page ) . not_to have_selector resolve_all_discussions_link_selector
2021-09-13 18:11:46 +00:00
expect ( page ) . not_to have_content " Create issue to resolve all threads "
2017-03-09 12:48:07 +00:00
end
2016-10-26 21:21:50 +00:00
end
2019-06-13 11:59:38 +00:00
context 'creating an issue for threads' do
2017-02-27 15:01:56 +00:00
before do
2022-09-05 06:12:53 +00:00
find ( '.discussions-counter .dropdown-toggle' ) . click
2018-06-21 12:22:40 +00:00
find ( resolve_all_discussions_link_selector ) . click
2017-02-27 15:01:56 +00:00
end
2019-06-14 12:04:36 +00:00
it_behaves_like 'creating an issue for a thread'
2016-10-26 21:21:50 +00:00
end
2019-06-13 11:59:38 +00:00
context 'for a project where all threads need to be resolved before merging' do
2016-10-26 21:21:50 +00:00
before do
2017-03-09 12:48:07 +00:00
project . update_attribute ( :only_allow_merge_if_all_discussions_are_resolved , true )
2016-10-26 21:21:50 +00:00
end
2017-03-09 12:48:07 +00:00
context 'with the internal tracker disabled' do
before do
project . project_feature . update_attribute ( :issues_access_level , ProjectFeature :: DISABLED )
2017-07-06 16:20:50 +00:00
visit project_merge_request_path ( project , merge_request )
2017-03-09 12:48:07 +00:00
end
2016-10-26 21:21:50 +00:00
2017-03-09 12:48:07 +00:00
it 'does not show a link to create a new issue' do
2021-09-13 18:11:46 +00:00
expect ( page ) . not_to have_link 'Create issue to resolve all threads'
2017-02-27 15:01:56 +00:00
end
2016-10-26 21:21:50 +00:00
end
2019-06-13 11:59:38 +00:00
context 'merge request has threads that need to be resolved' do
2017-02-27 15:01:56 +00:00
before do
2017-07-06 16:20:50 +00:00
visit project_merge_request_path ( project , merge_request )
2017-03-09 12:48:07 +00:00
end
2019-06-13 11:59:38 +00:00
it 'shows a warning that the merge request contains unresolved threads' do
2021-05-06 12:10:38 +00:00
expect ( page ) . to have_content 'all threads must be resolved'
2017-03-09 12:48:07 +00:00
end
2019-06-13 11:59:38 +00:00
it 'has a link to resolve all threads by creating an issue' do
2022-05-05 15:08:47 +00:00
expect ( page ) . to have_link 'Create issue to resolve all threads' , href : new_project_issue_path ( project , merge_request_to_resolve_discussions_of : merge_request . iid )
2017-02-27 15:01:56 +00:00
end
2022-11-09 18:07:50 +00:00
context 'creating an issue for threads' do
2017-03-09 12:48:07 +00:00
before do
2022-05-05 15:08:47 +00:00
page . within '.mr-state-widget' do
2021-09-13 18:11:46 +00:00
page . click_link 'Create issue to resolve all threads' , href : new_project_issue_path ( project , merge_request_to_resolve_discussions_of : merge_request . iid )
2021-02-23 12:10:56 +00:00
wait_for_all_requests
2020-07-23 18:10:06 +00:00
end
2017-03-09 12:48:07 +00:00
end
2019-06-14 12:04:36 +00:00
it_behaves_like 'creating an issue for a thread'
2017-03-09 12:48:07 +00:00
end
2017-02-27 15:01:56 +00:00
end
2016-10-26 21:21:50 +00:00
end
end
2017-03-09 12:48:07 +00:00
describe 'as a reporter' do
before do
2017-12-22 08:18:28 +00:00
project . add_reporter ( user )
2017-06-21 23:44:10 +00:00
sign_in user
2017-07-06 16:20:50 +00:00
visit new_project_issue_path ( project , merge_request_to_resolve_discussions_of : merge_request . iid )
2017-03-09 12:48:07 +00:00
end
2020-12-09 18:09:48 +00:00
it 'shows a notice to ask someone else to resolve the threads' do
2019-06-13 11:59:38 +00:00
expect ( page ) . to have_content ( " The threads at #{ merge_request . to_reference } will stay unresolved. Ask someone with permission to resolve them. " )
2017-03-09 12:48:07 +00:00
end
end
2016-10-26 21:21:50 +00:00
end