diff options
Diffstat (limited to 'spec/features/merge_request')
9 files changed, 162 insertions, 60 deletions
diff --git a/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb index 5894ec923c2..92b9b785148 100644 --- a/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb +++ b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb @@ -17,66 +17,172 @@ RSpec.describe 'Merge request > User edits assignees sidebar', :js do let(:sidebar_assignee_block) { page.find('.js-issuable-sidebar .assignee') } let(:sidebar_assignee_avatar_link) { sidebar_assignee_block.find_all('a').find { |a| a['href'].include? assignee.username } } let(:sidebar_assignee_tooltip) { sidebar_assignee_avatar_link['title'] || '' } - let(:sidebar_assignee_dropdown_item) { sidebar_assignee_block.find(".dropdown-menu li[data-user-id=\"#{assignee.id}\"]") } - let(:sidebar_assignee_dropdown_tooltip) { sidebar_assignee_dropdown_item.find('a')['data-title'] || '' } - context 'when user is an owner' do + context 'when GraphQL assignees widget feature flag is disabled' do + let(:sidebar_assignee_dropdown_item) { sidebar_assignee_block.find(".dropdown-menu li[data-user-id=\"#{assignee.id}\"]") } + let(:sidebar_assignee_dropdown_tooltip) { sidebar_assignee_dropdown_item.find('a')['data-title'] || '' } + before do - stub_const('Autocomplete::UsersFinder::LIMIT', users_find_limit) + stub_feature_flags(issue_assignees_widget: false) + end - sign_in(project.first_owner) + context 'when user is an owner' do + before do + stub_const('Autocomplete::UsersFinder::LIMIT', users_find_limit) - merge_request.assignees << assignee + sign_in(project.first_owner) - visit project_merge_request_path(project, merge_request) + merge_request.assignees << assignee - wait_for_requests + visit project_merge_request_path(project, merge_request) + + wait_for_requests + end + + shared_examples 'when assigned' do |expected_tooltip: ''| + it 'shows assignee name' do + expect(sidebar_assignee_block).to have_text(assignee.name) + end + + it "shows assignee tooltip '#{expected_tooltip}'" do + expect(sidebar_assignee_tooltip).to eql(expected_tooltip) + end + + context 'when edit is clicked' do + before do + sidebar_assignee_block.click_link('Edit') + + wait_for_requests + end + + it "shows assignee tooltip '#{expected_tooltip}" do + expect(sidebar_assignee_dropdown_tooltip).to eql(expected_tooltip) + end + end + end + + context 'when assigned to maintainer' do + let(:assignee) { project_maintainers.last } + + it_behaves_like 'when assigned', expected_tooltip: '' + end + + context 'when assigned to developer' do + let(:assignee) { project_developers.last } + + it_behaves_like 'when assigned', expected_tooltip: 'Cannot merge' + end end - shared_examples 'when assigned' do |expected_tooltip: ''| - it 'shows assignee name' do - expect(sidebar_assignee_block).to have_text(assignee.name) + context 'with invite members considerations' do + let_it_be(:user) { create(:user) } + + before do + sign_in(user) end - it "shows assignee tooltip '#{expected_tooltip}'" do - expect(sidebar_assignee_tooltip).to eql(expected_tooltip) + include_examples 'issuable invite members' do + let(:issuable_path) { project_merge_request_path(project, merge_request) } end + end + end + + context 'when GraphQL assignees widget feature flag is enabled' do + let(:sidebar_assignee_dropdown_item) { sidebar_assignee_block.find(".dropdown-item", text: assignee.username ) } + let(:sidebar_assignee_dropdown_tooltip) { sidebar_assignee_dropdown_item['title']} + + context 'when user is an owner' do + before do + stub_const('Autocomplete::UsersFinder::LIMIT', users_find_limit) + + sign_in(project.first_owner) + + merge_request.assignees << assignee - context 'when edit is clicked' do - before do - sidebar_assignee_block.click_link('Edit') + visit project_merge_request_path(project, merge_request) - wait_for_requests + wait_for_requests + end + + shared_examples 'when assigned' do |expected_tooltip: ''| + it 'shows assignee name' do + expect(sidebar_assignee_block).to have_text(assignee.name) end - it "shows assignee tooltip '#{expected_tooltip}" do - expect(sidebar_assignee_dropdown_tooltip).to eql(expected_tooltip) + it "shows assignee tooltip '#{expected_tooltip}'" do + expect(sidebar_assignee_tooltip).to eql(expected_tooltip) + end + + context 'when edit is clicked' do + before do + open_assignees_dropdown + end + + it "shows assignee tooltip '#{expected_tooltip}" do + expect(sidebar_assignee_dropdown_tooltip).to eql(expected_tooltip) + end end end - end - context 'when assigned to maintainer' do - let(:assignee) { project_maintainers.last } + context 'when assigned to maintainer' do + let(:assignee) { project_maintainers.last } - it_behaves_like 'when assigned', expected_tooltip: '' - end + it_behaves_like 'when assigned', expected_tooltip: '' + end - context 'when assigned to developer' do - let(:assignee) { project_developers.last } + context 'when assigned to developer' do + let(:assignee) { project_developers.last } - it_behaves_like 'when assigned', expected_tooltip: 'Cannot merge' + it_behaves_like 'when assigned', expected_tooltip: 'Cannot merge' + end end - end - context 'with invite members considerations' do - let_it_be(:user) { create(:user) } + context 'with invite members considerations' do + let_it_be(:user) { create(:user) } - before do - sign_in(user) + before do + sign_in(user) + end + + # TODO: Move to shared examples when feature flag is removed: https://gitlab.com/gitlab-org/gitlab/-/issues/328185 + context 'when a privileged user can invite' do + it 'shows a link for inviting members and launches invite modal' do + project.add_maintainer(user) + visit project_merge_request_path(project, merge_request) + + open_assignees_dropdown + + page.within '.dropdown-menu-user' do + expect(page).to have_link('Invite members') + expect(page).to have_selector('[data-track-action="click_invite_members"]') + expect(page).to have_selector('[data-track-label="edit_assignee"]') + end + + click_link 'Invite members' + + expect(page).to have_content("You're inviting members to the") + end + end + + context 'when user cannot invite members in assignee dropdown' do + it 'shows author in assignee dropdown and no invite link' do + project.add_developer(user) + visit project_merge_request_path(project, merge_request) + + open_assignees_dropdown + + page.within '.dropdown-menu-user' do + expect(page).not_to have_link('Invite members') + end + end + end end + end - include_examples 'issuable invite members' do - let(:issuable_path) { project_merge_request_path(project, merge_request) } + def open_assignees_dropdown + page.within('.assignee') do + click_button('Edit') + wait_for_requests end end end diff --git a/spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb b/spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb index 8343e04aef1..231722c166d 100644 --- a/spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb +++ b/spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb @@ -140,7 +140,7 @@ RSpec.describe 'Merge request > User resolves diff notes and threads', :js do describe 'reply form' do before do - click_button 'Toggle thread' + click_button _('Show thread') end it 'allows user to comment' do @@ -362,7 +362,7 @@ RSpec.describe 'Merge request > User resolves diff notes and threads', :js do it 'displays next thread even if hidden' do page.all('.note-discussion', count: 2).each do |discussion| page.within discussion do - click_button 'Toggle thread' + click_button _('Hide thread') end end @@ -549,13 +549,13 @@ RSpec.describe 'Merge request > User resolves diff notes and threads', :js do it 'shows resolved icon' do expect(page).to have_content 'All threads resolved' - click_button 'Toggle thread' + click_button _('Show thread') expect(page).to have_selector('.line-resolve-btn.is-active') end it 'does not allow user to click resolve button' do expect(page).to have_selector('.line-resolve-btn.is-active') - click_button 'Toggle thread' + click_button _('Show thread') expect(page).to have_selector('.line-resolve-btn.is-active') end diff --git a/spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb b/spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb index 33c5a936b8d..fca40dc7edc 100644 --- a/spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb +++ b/spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb @@ -25,6 +25,7 @@ RSpec.describe 'Merge request > User sees avatars on diff notes', :js do before do project.add_maintainer(user) sign_in user + stub_feature_flags(gl_avatar_for_all_user_avatars: false) set_cookie('sidebar_collapsed', 'true') end diff --git a/spec/features/merge_request/user_sees_diff_spec.rb b/spec/features/merge_request/user_sees_diff_spec.rb index 7cd9ef80874..50f4cce5c23 100644 --- a/spec/features/merge_request/user_sees_diff_spec.rb +++ b/spec/features/merge_request/user_sees_diff_spec.rb @@ -45,8 +45,8 @@ RSpec.describe 'Merge request > User sees diff', :js do visit diffs_project_merge_request_path(project, merge_request) - page.within('.alert') do - expect(page).to have_text("Too many changes to show. Plain diff Email patch To preserve performance only 3 of 3+ files are displayed.") + page.within('.gl-alert') do + expect(page).to have_text("Too many changes to show. To preserve performance only 3 of 3+ files are displayed. Plain diff Email patch") end end end @@ -69,7 +69,7 @@ RSpec.describe 'Merge request > User sees diff', :js do end context 'as user who needs to fork' do - it 'shows fork/cancel confirmation', :sidekiq_might_not_need_inline do + it 'shows fork/cancel confirmation', :sidekiq_might_not_need_inline, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/337477' do sign_in(user) visit diffs_project_merge_request_path(project, merge_request) diff --git a/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb b/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb index 2a49109d360..09c6b6bce3b 100644 --- a/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb +++ b/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb @@ -25,6 +25,8 @@ RSpec.describe 'Merge request > User sees pipelines triggered by merge request', } end + let(:expected_detached_mr_tag) {'merge request'} + before do stub_application_setting(auto_devops_enabled: false) stub_ci_pipeline_yaml_file(YAML.dump(config)) @@ -118,16 +120,16 @@ RSpec.describe 'Merge request > User sees pipelines triggered by merge request', it 'sees detached tag for detached merge request pipelines' do page.within('.ci-table') do expect(all('.pipeline-tags')[0]) - .to have_content("detached") + .to have_content(expected_detached_mr_tag) expect(all('.pipeline-tags')[1]) - .to have_content("detached") + .to have_content(expected_detached_mr_tag) expect(all('.pipeline-tags')[2]) - .not_to have_content("detached") + .not_to have_content(expected_detached_mr_tag) expect(all('.pipeline-tags')[3]) - .not_to have_content("detached") + .not_to have_content(expected_detached_mr_tag) end end @@ -312,16 +314,16 @@ RSpec.describe 'Merge request > User sees pipelines triggered by merge request', it 'sees detached tag for detached merge request pipelines' do page.within('.ci-table') do expect(all('.pipeline-tags')[0]) - .to have_content("detached") + .to have_content(expected_detached_mr_tag) expect(all('.pipeline-tags')[1]) - .to have_content("detached") + .to have_content(expected_detached_mr_tag) expect(all('.pipeline-tags')[2]) - .not_to have_content("detached") + .not_to have_content(expected_detached_mr_tag) expect(all('.pipeline-tags')[3]) - .not_to have_content("detached") + .not_to have_content(expected_detached_mr_tag) end end diff --git a/spec/features/merge_request/user_sees_merge_widget_spec.rb b/spec/features/merge_request/user_sees_merge_widget_spec.rb index 872507c3b7a..27f7c699c50 100644 --- a/spec/features/merge_request/user_sees_merge_widget_spec.rb +++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb @@ -96,10 +96,7 @@ RSpec.describe 'Merge request > User sees merge widget', :js do context 'view merge request with external CI service' do before do - create(:integration, project: project, - active: true, - type: 'DroneCiService', - category: 'ci') + create(:drone_ci_integration, project: project) visit project_merge_request_path(project, merge_request) end diff --git a/spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb b/spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb index e5592ae9535..23b03e33f5d 100644 --- a/spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb +++ b/spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb @@ -137,7 +137,7 @@ RSpec.describe 'Merge request < User sees mini pipeline graph', :js do build_item.click find('.build-page') - expect(current_path).to eql(project_job_path(project, build)) + expect(page).to have_current_path(project_job_path(project, build), ignore_query: true) end it 'shows tooltip when hovered' do diff --git a/spec/features/merge_request/user_sees_pipelines_spec.rb b/spec/features/merge_request/user_sees_pipelines_spec.rb index 266ae0d8c37..9696b1ff551 100644 --- a/spec/features/merge_request/user_sees_pipelines_spec.rb +++ b/spec/features/merge_request/user_sees_pipelines_spec.rb @@ -125,7 +125,6 @@ RSpec.describe 'Merge request > User sees pipelines', :js do before do stub_feature_flags(ci_disallow_to_create_merge_request_pipelines_in_target_project: false) - stub_feature_flags(rearrange_pipelines_table: false) end it 'creates a pipeline in the parent project when user proceeds with the warning' do @@ -186,7 +185,7 @@ RSpec.describe 'Merge request > User sees pipelines', :js do page.within(first('.commit')) do page.within('.pipeline-tags') do expect(page.find('[data-testid="pipeline-url-link"]')[:href]).to include(expected_project.full_path) - expect(page).to have_content('detached') + expect(page).to have_content('merge request') end page.within('.pipeline-triggerer') do expect(page).to have_link(href: user_path(actor)) @@ -232,7 +231,7 @@ RSpec.describe 'Merge request > User sees pipelines', :js do sign_in user end - context 'when pipeline and merge request were created simultaneously' do + context 'when pipeline and merge request were created simultaneously', :delete do before do stub_ci_pipeline_to_return_yaml_file diff --git a/spec/features/merge_request/user_sees_suggest_pipeline_spec.rb b/spec/features/merge_request/user_sees_suggest_pipeline_spec.rb index 2191849edd9..448ef750508 100644 --- a/spec/features/merge_request/user_sees_suggest_pipeline_spec.rb +++ b/spec/features/merge_request/user_sees_suggest_pipeline_spec.rb @@ -42,9 +42,6 @@ RSpec.describe 'Merge request > User sees suggest pipeline', :js do wait_for_requests - # Drawer is open - expect(page).to have_content('This template creates a simple test pipeline. To use it:') - # Editor shows template expect(page).to have_content('This file is a template, and might need editing before it works on your project.') |