diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-01-18 19:00:14 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-01-18 19:00:14 +0000 |
commit | 05f0ebba3a2c8ddf39e436f412dc2ab5bf1353b2 (patch) | |
tree | 11d0f2a6ec31c7793c184106cedc2ded3d9a2cc5 /spec/features | |
parent | ec73467c23693d0db63a797d10194da9e72a74af (diff) | |
download | gitlab-ce-05f0ebba3a2c8ddf39e436f412dc2ab5bf1353b2.tar.gz |
Add latest changes from gitlab-org/gitlab@15-8-stable-eev15.8.0-rc42
Diffstat (limited to 'spec/features')
185 files changed, 1027 insertions, 989 deletions
diff --git a/spec/features/abuse_report_spec.rb b/spec/features/abuse_report_spec.rb index fdd11b59938..e0a61656a88 100644 --- a/spec/features/abuse_report_spec.rb +++ b/spec/features/abuse_report_spec.rb @@ -2,25 +2,155 @@ require 'spec_helper' -RSpec.describe 'Abuse reports', feature_category: :not_owned do - let(:another_user) { create(:user) } +RSpec.describe 'Abuse reports', :js, feature_category: :insider_threat do + let_it_be(:abusive_user) { create(:user) } + + let_it_be(:reporter1) { create(:user) } + + let_it_be(:project) { create(:project, :public, :repository) } + let_it_be(:issue) { create(:issue, project: project, author: abusive_user) } before do - sign_in(create(:user)) + sign_in(reporter1) end - it 'report abuse' do - visit user_path(another_user) + describe 'report abuse to administrator' do + shared_examples 'reports the user with an abuse category' do + it do + fill_and_submit_abuse_category_form + fill_and_submit_report_abuse_form - click_link 'Report abuse' + expect(page).to have_content 'Thank you for your report' + end + end - fill_in 'abuse_report_message', with: 'This user sends spam' - click_button 'Send report' + shared_examples 'reports the user without an abuse category' do + it do + click_link 'Report abuse to administrator' + + fill_and_submit_report_abuse_form + + expect(page).to have_content 'Thank you for your report' + end + end + + context 'when reporting an issue for abuse' do + before do + visit project_issue_path(project, issue) + + click_button 'Issue actions' + end + + it_behaves_like 'reports the user with an abuse category' + + it 'redirects backs to the issue when cancel button is clicked' do + fill_and_submit_abuse_category_form + + click_link 'Cancel' + + expect(page).to have_current_path(project_issue_path(project, issue)) + end + end + + context 'when reporting an incident for abuse' do + let_it_be(:incident) { create(:incident, project: project, author: abusive_user) } + + before do + visit project_issues_incident_path(project, incident) + click_button 'Incident actions' + end + + it_behaves_like 'reports the user with an abuse category' + end + + context 'when reporting a user profile for abuse' do + let_it_be(:reporter2) { create(:user) } + + before do + visit user_path(abusive_user) + end + + it_behaves_like 'reports the user with an abuse category' + + it 'allows the reporter to report the same user for different abuse categories' do + visit user_path(abusive_user) + + fill_and_submit_abuse_category_form + fill_and_submit_report_abuse_form + + expect(page).to have_content 'Thank you for your report' + + visit user_path(abusive_user) - expect(page).to have_content 'Thank you for your report' + fill_and_submit_abuse_category_form("They're being offsensive or abusive.") + fill_and_submit_report_abuse_form - visit user_path(another_user) + expect(page).to have_content 'Thank you for your report' + end - expect(page).to have_button("Already reported for abuse") + it 'allows multiple users to report the same user' do + fill_and_submit_abuse_category_form + fill_and_submit_report_abuse_form + + expect(page).to have_content 'Thank you for your report' + + gitlab_sign_out + gitlab_sign_in(reporter2) + + visit user_path(abusive_user) + + fill_and_submit_abuse_category_form + fill_and_submit_report_abuse_form + + expect(page).to have_content 'Thank you for your report' + end + + it 'redirects backs to user profile when cancel button is clicked' do + fill_and_submit_abuse_category_form + + click_link 'Cancel' + + expect(page).to have_current_path(user_path(abusive_user)) + end + end + + context 'when reporting an merge request for abuse' do + let_it_be(:merge_request) { create(:merge_request, source_project: project, author: abusive_user) } + + before do + visit project_merge_request_path(project, merge_request) + find('[data-testid="merge-request-actions"]').click + end + + it_behaves_like 'reports the user with an abuse category' + end + + context 'when reporting a comment' do + let_it_be(:issue) { create(:issue, project: project, author: abusive_user) } + let_it_be(:comment) do + create(:discussion_note_on_issue, author: abusive_user, project: project, noteable: issue, note: 'some note') + end + + before do + visit project_issue_path(project, issue) + click_button 'More actions' + end + + it_behaves_like 'reports the user without an abuse category' + end + end + + private + + def fill_and_submit_abuse_category_form(category = "They're posting spam.") + click_button 'Report abuse to administrator' + + choose category + click_button 'Next' + end + + def fill_and_submit_report_abuse_form + fill_in 'abuse_report_message', with: 'This user sends spam' + click_button 'Send report' end end diff --git a/spec/features/admin/admin_broadcast_messages_spec.rb b/spec/features/admin/admin_broadcast_messages_spec.rb deleted file mode 100644 index a6bbdd70fc3..00000000000 --- a/spec/features/admin/admin_broadcast_messages_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Admin Broadcast Messages', feature_category: :onboarding do - before do - admin = create(:admin) - sign_in(admin) - stub_feature_flags(vue_broadcast_messages: false) - gitlab_enable_admin_mode_sign_in(admin) - create( - :broadcast_message, - :expired, - message: 'Migration to new server', - target_access_levels: [Gitlab::Access::DEVELOPER] - ) - visit admin_broadcast_messages_path - end - - it 'see broadcast messages list' do - expect(page).to have_content 'Migration to new server' - end - - it 'creates a customized broadcast banner message' do - fill_in 'broadcast_message_message', with: 'Application update from **4:00 CST to 5:00 CST**' - fill_in 'broadcast_message_target_path', with: '*/user_onboarded' - select 'light-indigo', from: 'broadcast_message_theme' - select Date.today.next_year.year, from: 'broadcast_message_ends_at_1i' - check 'Guest' - check 'Owner' - click_button 'Add broadcast message' - - expect(page).to have_current_path admin_broadcast_messages_path, ignore_query: true - expect(page).to have_content 'Application update from 4:00 CST to 5:00 CST' - expect(page).to have_content 'Guest, Owner' - expect(page).to have_content '*/user_onboarded' - expect(page).to have_selector 'strong', text: '4:00 CST to 5:00 CST' - expect(page).to have_selector %(.light-indigo[role=alert]) - end - - it 'creates a customized broadcast notification message' do - fill_in 'broadcast_message_message', with: 'Application update from **4:00 CST to 5:00 CST**' - fill_in 'broadcast_message_target_path', with: '*/user_onboarded' - select 'Notification', from: 'broadcast_message_broadcast_type' - select Date.today.next_year.year, from: 'broadcast_message_ends_at_1i' - check 'Reporter' - check 'Developer' - check 'Maintainer' - click_button 'Add broadcast message' - - expect(page).to have_current_path admin_broadcast_messages_path, ignore_query: true - expect(page).to have_content 'Application update from 4:00 CST to 5:00 CST' - expect(page).to have_content 'Reporter, Developer, Maintainer' - expect(page).to have_content '*/user_onboarded' - expect(page).to have_content 'Notification' - expect(page).to have_selector 'strong', text: '4:00 CST to 5:00 CST' - end - - it 'edit an existing broadcast message' do - click_link 'Edit' - fill_in 'broadcast_message_message', with: 'Application update RIGHT NOW' - check 'Reporter' - click_button 'Update broadcast message' - - expect(page).to have_current_path admin_broadcast_messages_path, ignore_query: true - expect(page).to have_content 'Application update RIGHT NOW' - - page.within('.table-responsive') do - expect(page).to have_content 'Reporter, Developer' - end - end - - it 'remove an existing broadcast message' do - click_link 'Remove' - - expect(page).to have_current_path admin_broadcast_messages_path, ignore_query: true - expect(page).not_to have_content 'Migration to new server' - end - - it 'updates a preview of a customized broadcast banner message', :js do - fill_in 'broadcast_message_message', with: "Live **Markdown** previews. :tada:" - - page.within('.js-broadcast-banner-message-preview') do - expect(page).to have_selector('strong', text: 'Markdown') - expect(page).to have_emoji('tada') - end - end - - it 'updates a preview of a customized broadcast notification message', :js do - fill_in 'broadcast_message_message', with: "Live **Markdown** previews. :tada:" - select 'Notification', from: 'broadcast_message_broadcast_type' - - page.within('#broadcast-message-preview') do - expect(page).to have_selector('strong', text: 'Markdown') - expect(page).to have_emoji('tada') - end - end -end diff --git a/spec/features/admin/admin_groups_spec.rb b/spec/features/admin/admin_groups_spec.rb index c36a742af6b..119e09f9b09 100644 --- a/spec/features/admin/admin_groups_spec.rb +++ b/spec/features/admin/admin_groups_spec.rb @@ -204,6 +204,17 @@ RSpec.describe 'Admin Groups', feature_category: :subgroups do expect(page).to have_content(new_admin_note_text) end + + it 'hides removed note' do + group = create(:group, :private) + group.create_admin_note(note: 'A note by an administrator') + + visit admin_group_edit_path(group) + fill_in 'group_admin_note_attributes_note', with: '' + click_button 'Save changes' + + expect(page).not_to have_content(s_('Admin|Admin notes')) + end end describe 'add user into a group', :js do @@ -258,9 +269,12 @@ RSpec.describe 'Admin Groups', feature_category: :subgroups do expect(page).to have_content('Developer') end - find_member_row(current_user).click_button(title: 'Leave') + show_actions_for_username(current_user) + click_button _('Leave group') - accept_gl_confirm(button_text: 'Leave') + within_modal do + click_button _('Leave') + end wait_for_all_requests diff --git a/spec/features/admin/admin_projects_spec.rb b/spec/features/admin/admin_projects_spec.rb index 0cb813c40f4..3c7eba2cc97 100644 --- a/spec/features/admin/admin_projects_spec.rb +++ b/spec/features/admin/admin_projects_spec.rb @@ -151,12 +151,11 @@ RSpec.describe "Admin::Projects", feature_category: :projects do expect(find_member_row(current_user)).to have_content('Developer') - page.within find_member_row(current_user) do - click_button 'Leave' - end + show_actions_for_username(current_user) + click_button _('Leave group') within_modal do - click_button('Leave') + click_button _('Leave') end expect(page).to have_current_path(dashboard_projects_path, ignore_query: true, url: false) diff --git a/spec/features/admin/admin_sees_background_migrations_spec.rb b/spec/features/admin/admin_sees_background_migrations_spec.rb index e1746dad196..4b8636da6b4 100644 --- a/spec/features/admin/admin_sees_background_migrations_spec.rb +++ b/spec/features/admin/admin_sees_background_migrations_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe "Admin > Admin sees background migrations", feature_category: :database do + include ListboxHelpers + let_it_be(:admin) { create(:admin) } let(:job_class) { Gitlab::BackgroundMigration::CopyColumnUsingBackgroundMigrationJob } @@ -204,7 +206,7 @@ RSpec.describe "Admin > Admin sees background migrations", feature_category: :da it 'does not render the database listbox' do visit admin_background_migrations_path - expect(page).not_to have_selector('[data-testid="database-listbox"]') + expect(page).not_to have_button('main') end end @@ -215,41 +217,26 @@ RSpec.describe "Admin > Admin sees background migrations", feature_category: :da allow(Gitlab::Database).to receive(:db_config_names).and_return(%w[main ci]) end - it 'does render the database listbox' do - visit admin_background_migrations_path - - expect(page).to have_selector('[data-testid="database-listbox"]') - end - - it 'defaults to main when no parameter is passed' do + it 'renders the database listbox' do visit admin_background_migrations_path - listbox = page.find('[data-testid="database-listbox"]') - - expect(listbox).to have_text('main') + expect(page).to have_button('main') end it 'shows correct database when a parameter is passed' do visit admin_background_migrations_path(database: 'ci') - listbox = page.find('[data-testid="database-listbox"]') - - expect(listbox).to have_text('ci') + expect(page).to have_button('ci') end it 'updates the path to correct database when clicking on listbox option' do visit admin_background_migrations_path - listbox = page.find('[data-testid="database-listbox"]') - expect(listbox).to have_text('main') - - listbox.find('button').click - listbox.find('li', text: 'ci').click - wait_for_requests + click_button 'main' + select_listbox_item('ci') expect(page).to have_current_path(admin_background_migrations_path(database: 'ci')) - listbox = page.find('[data-testid="database-listbox"]') - expect(listbox).to have_text('ci') + expect(page).to have_button('ci') end end end diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb index 1f40f1f1bce..ca08bc9e577 100644 --- a/spec/features/admin/admin_users_spec.rb +++ b/spec/features/admin/admin_users_spec.rb @@ -69,13 +69,9 @@ RSpec.describe "Admin::Users", feature_category: :user_management do expect(page).not_to have_content(message) end - context 'with no license and service ping disabled' do + context 'with no license and service ping disabled', :without_license do before do stub_application_setting(usage_ping_enabled: false) - - if Gitlab.ee? - allow(License).to receive(:current).and_return(nil) - end end it 'renders registration features CTA' do diff --git a/spec/features/admin/dashboard_spec.rb b/spec/features/admin/dashboard_spec.rb index baca60134b9..06f9c531e74 100644 --- a/spec/features/admin/dashboard_spec.rb +++ b/spec/features/admin/dashboard_spec.rb @@ -49,8 +49,7 @@ RSpec.describe 'admin visits dashboard' do end expect(page).to have_content('Blocked users 7') - expect(page).to have_content('Total users 78') - expect(page).to have_content('Active users 71') + expect(page).to have_content('Total users (active users + blocked users) 78') end end diff --git a/spec/features/admin/users/users_spec.rb b/spec/features/admin/users/users_spec.rb index 4b49e8f4bc6..975af84969d 100644 --- a/spec/features/admin/users/users_spec.rb +++ b/spec/features/admin/users/users_spec.rb @@ -28,7 +28,7 @@ RSpec.describe 'Admin::Users', feature_category: :user_management do expect(page).to have_content(current_user.email) expect(page).to have_content(current_user.name) - expect(page).to have_content(current_user.created_at.strftime('%e %b, %Y')) + expect(page).to have_content(current_user.created_at.strftime('%b %d, %Y')) expect(page).to have_content(user.email) expect(page).to have_content(user.name) expect(page).to have_content('Projects') @@ -367,6 +367,8 @@ RSpec.describe 'Admin::Users', feature_category: :user_management do .to eq(Gitlab.config.gitlab.default_projects_limit) expect(user.can_create_group) .to eq(Gitlab::CurrentSettings.can_create_group) + expect(user.private_profile) + .to eq(Gitlab::CurrentSettings.user_defaults_to_private_profile) end it 'creates user with valid data' do @@ -564,6 +566,7 @@ RSpec.describe 'Admin::Users', feature_category: :user_management do fill_in 'user_password', with: 'AValidPassword1' fill_in 'user_password_confirmation', with: 'AValidPassword1' choose 'user_access_level_admin' + check 'Private profile' click_button 'Save changes' end @@ -577,6 +580,7 @@ RSpec.describe 'Admin::Users', feature_category: :user_management do expect(user.name).to eq('Big Bang') expect(user.admin?).to be_truthy expect(user.password_expires_at).to be <= Time.zone.now + expect(user.private_profile).to eq(true) end end diff --git a/spec/features/callouts/registration_enabled_spec.rb b/spec/features/callouts/registration_enabled_spec.rb index 1ea52dbf12a..ac7b68876da 100644 --- a/spec/features/callouts/registration_enabled_spec.rb +++ b/spec/features/callouts/registration_enabled_spec.rb @@ -13,7 +13,7 @@ RSpec.describe 'Registration enabled callout', feature_category: :authentication stub_application_setting(signup_enabled: true) end - context 'when an admin is logged in' do + context 'when an admin is logged in', :do_not_mock_admin_mode_setting do before do sign_in(admin) end diff --git a/spec/features/commit_spec.rb b/spec/features/commit_spec.rb index 649b67e7fd0..a9672569a4a 100644 --- a/spec/features/commit_spec.rb +++ b/spec/features/commit_spec.rb @@ -22,6 +22,8 @@ RSpec.describe 'Commit', feature_category: :source_code_management do end describe "commit details" do + subject { page } + before do visit project_commit_path(project, commit) end @@ -37,6 +39,8 @@ RSpec.describe 'Commit', feature_category: :source_code_management do it 'renders diff stats', :js do expect(page).to have_selector(".diff-stats") end + + it_behaves_like 'code highlight' end describe "pagination" do diff --git a/spec/features/dashboard/activity_spec.rb b/spec/features/dashboard/activity_spec.rb index b1734cb353b..edb3dacc2cc 100644 --- a/spec/features/dashboard/activity_spec.rb +++ b/spec/features/dashboard/activity_spec.rb @@ -9,6 +9,8 @@ RSpec.describe 'Dashboard > Activity', feature_category: :users do sign_in(user) end + it_behaves_like 'a dashboard page with sidebar', :activity_dashboard_path, :activity + context 'tabs' do it 'shows Your Projects' do visit activity_dashboard_path diff --git a/spec/features/dashboard/groups_list_spec.rb b/spec/features/dashboard/groups_list_spec.rb index b28e2ccf787..a45e0a58ed6 100644 --- a/spec/features/dashboard/groups_list_spec.rb +++ b/spec/features/dashboard/groups_list_spec.rb @@ -19,6 +19,8 @@ RSpec.describe 'Dashboard Groups page', :js, feature_category: :subgroups do page.find("[data-testid='group-#{group.id}-dropdown-button'").click end + it_behaves_like 'a dashboard page with sidebar', :dashboard_groups_path, :groups + it 'shows groups user is member of' do group.add_owner(user) nested_group.add_owner(user) diff --git a/spec/features/dashboard/issuables_counter_spec.rb b/spec/features/dashboard/issuables_counter_spec.rb index 5c7285f0491..5dc59cfa841 100644 --- a/spec/features/dashboard/issuables_counter_spec.rb +++ b/spec/features/dashboard/issuables_counter_spec.rb @@ -12,7 +12,6 @@ RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching, issue.assignees = [user] merge_request.update!(assignees: [user]) sign_in(user) - stub_feature_flags(limit_assigned_issues_count: false) end it 'reflects dashboard issues count' do @@ -20,9 +19,9 @@ RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching, expect_counters('issues', '1', n_("%d assigned issue", "%d assigned issues", 1) % 1) - issue.assignees = [] + issue.update!(assignees: []) - user.invalidate_cache_counts + Users::AssignedIssuesCountService.new(current_user: user).delete_cache travel_to(3.minutes.from_now) do visit issues_path @@ -31,28 +30,6 @@ RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching, end end - context 'when :limit_assigned_issues_count FF is used' do - before do - stub_feature_flags(limit_assigned_issues_count: true) - end - - it 'reflects dashboard issues count' do - visit issues_path - - expect_counters('issues', '1', n_("%d assigned issue", "%d assigned issues", 1) % 1) - - issue.update!(assignees: []) - - Users::AssignedIssuesCountService.new(current_user: user).delete_cache - - travel_to(3.minutes.from_now) do - visit issues_path - - expect_counters('issues', '0', n_("%d assigned issue", "%d assigned issues", 0) % 0) - end - end - end - it 'reflects dashboard merge requests count', :js do visit merge_requests_path diff --git a/spec/features/dashboard/issues_spec.rb b/spec/features/dashboard/issues_spec.rb index d74965f58fa..ae375bd3e13 100644 --- a/spec/features/dashboard/issues_spec.rb +++ b/spec/features/dashboard/issues_spec.rb @@ -21,6 +21,8 @@ RSpec.describe 'Dashboard Issues', feature_category: :team_planning do visit issues_dashboard_path(assignee_username: current_user.username) end + it_behaves_like 'a dashboard page with sidebar', :issues_dashboard_path, :issues + describe 'issues' do it 'shows issues assigned to current user' do expect(page).to have_content(assigned_issue.title) diff --git a/spec/features/dashboard/merge_requests_spec.rb b/spec/features/dashboard/merge_requests_spec.rb index 56d7c45de5d..a146a6987bc 100644 --- a/spec/features/dashboard/merge_requests_spec.rb +++ b/spec/features/dashboard/merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Merge Requests', feature_category: :code_review do +RSpec.describe 'Dashboard Merge Requests', feature_category: :code_review_workflow do include Spec::Support::Helpers::Features::SortingHelpers include FilteredSearchHelpers include ProjectForksHelper @@ -19,6 +19,8 @@ RSpec.describe 'Dashboard Merge Requests', feature_category: :code_review do sign_in(current_user) end + it_behaves_like 'a dashboard page with sidebar', :merge_requests_dashboard_path, :merge_requests + it 'disables target branch filter' do visit merge_requests_dashboard_path diff --git a/spec/features/dashboard/milestones_spec.rb b/spec/features/dashboard/milestones_spec.rb index b4d0d9c5812..a9f23f90bb1 100644 --- a/spec/features/dashboard/milestones_spec.rb +++ b/spec/features/dashboard/milestones_spec.rb @@ -26,6 +26,8 @@ RSpec.describe 'Dashboard > Milestones', feature_category: :team_planning do visit dashboard_milestones_path end + it_behaves_like 'a dashboard page with sidebar', :dashboard_milestones_path, :milestones + it 'sees milestones' do expect(page).to have_current_path dashboard_milestones_path, ignore_query: true expect(page).to have_content(milestone.title) diff --git a/spec/features/dashboard/navbar_spec.rb b/spec/features/dashboard/navbar_spec.rb new file mode 100644 index 00000000000..ff0ff899fc2 --- /dev/null +++ b/spec/features/dashboard/navbar_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe '"Your work" navbar', feature_category: :navigation do + include_context 'dashboard navbar structure' + + let_it_be(:user) { create(:user) } + + it_behaves_like 'verified navigation bar' do + before do + sign_in(user) + visit root_path + end + end +end diff --git a/spec/features/dashboard/projects_spec.rb b/spec/features/dashboard/projects_spec.rb index 2b89f16bbff..779fbb48ddb 100644 --- a/spec/features/dashboard/projects_spec.rb +++ b/spec/features/dashboard/projects_spec.rb @@ -18,6 +18,8 @@ RSpec.describe 'Dashboard Projects', feature_category: :projects do end end + it_behaves_like "a dashboard page with sidebar", :dashboard_projects_path, :projects + context 'when user has access to the project' do it 'shows role badge' do visit dashboard_projects_path diff --git a/spec/features/dashboard/snippets_spec.rb b/spec/features/dashboard/snippets_spec.rb index ab2cfc0573e..ba40290d866 100644 --- a/spec/features/dashboard/snippets_spec.rb +++ b/spec/features/dashboard/snippets_spec.rb @@ -5,6 +5,8 @@ require 'spec_helper' RSpec.describe 'Dashboard snippets', feature_category: :source_code_management do let_it_be(:user) { create(:user) } + it_behaves_like 'a dashboard page with sidebar', :dashboard_snippets_path, :snippets + context 'when the project has snippets' do let(:project) { create(:project, :public, creator: user) } let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.first_owner, project: project) } diff --git a/spec/features/dashboard/todos/todos_spec.rb b/spec/features/dashboard/todos/todos_spec.rb index 606bc82a7bb..59bb1a452c9 100644 --- a/spec/features/dashboard/todos/todos_spec.rb +++ b/spec/features/dashboard/todos/todos_spec.rb @@ -15,6 +15,8 @@ RSpec.describe 'Dashboard Todos', feature_category: :team_planning do project.add_developer(user) end + it_behaves_like 'a dashboard page with sidebar', :dashboard_todos_path, :todos + context 'User does not have todos' do before do sign_in(user) @@ -152,6 +154,22 @@ RSpec.describe 'Dashboard Todos', feature_category: :team_planning do it_behaves_like 'deleting the todo' it_behaves_like 'deleting and restoring the todo' end + + context 'when todo has a note' do + let(:note) { create(:note, project: project, note: "Check out stuff", noteable: create(:issue, project: project)) } + let!(:todo) { create(:todo, :mentioned, user: user, project: project, author: author, note: note, target: note.noteable) } + + before do + sign_in(user) + visit dashboard_todos_path + end + + it 'shows note preview' do + expect(page).to have_no_content('mentioned you:') + expect(page).to have_no_content('"Check out stuff"') + expect(page).to have_content('Check out stuff') + end + end end context 'User created todos for themself' do @@ -446,27 +464,30 @@ RSpec.describe 'Dashboard Todos', feature_category: :team_planning do end end - context 'User has a todo for an access requested raised for group membership' do - let_it_be(:group) { create(:group, :public) } + context 'User requested access' do + shared_examples 'has todo present with access request content' do + specify do + create(:todo, :member_access_requested, + user: user, + target: target, + author: author + ) + target.add_owner(user) - let_it_be(:todo) do - create(:todo, :member_access_requested, - user: user, - target: group, - author: author, - group: group) - end - - before do - group.add_owner(user) - sign_in(user) + sign_in(user) + visit dashboard_todos_path - visit dashboard_todos_path + expect(page).to have_selector('.todos-list .todo', count: 1) + expect(page).to have_content "#{author.name} has requested access to #{target.class.name.downcase} #{target.name}" + end end - it 'has todo present with access request content' do - expect(page).to have_selector('.todos-list .todo', count: 1) - expect(page).to have_content "#{author.name} has requested access to group #{group.name}" + context 'when user requests access to project or group' do + %i[project group].each do |target_type| + it_behaves_like 'has todo present with access request content' do + let_it_be(:target) { create(target_type, :public) } + end + end end end end diff --git a/spec/features/dashboard/user_filters_projects_spec.rb b/spec/features/dashboard/user_filters_projects_spec.rb index 1168a6827fd..8ec9b98c3b3 100644 --- a/spec/features/dashboard/user_filters_projects_spec.rb +++ b/spec/features/dashboard/user_filters_projects_spec.rb @@ -40,7 +40,7 @@ RSpec.describe 'Dashboard > User filters projects', feature_category: :projects it 'returns message when starred projects fitler returns no results' do fill_in 'project-filter-form-field', with: 'Beta\n' - expect(page).to have_content('This user doesn\'t have any personal projects') + expect(page).to have_content('There are no projects available to be displayed here.') expect(page).not_to have_content('You don\'t have starred projects yet') end end diff --git a/spec/features/error_tracking/user_sees_error_index_spec.rb b/spec/features/error_tracking/user_sees_error_index_spec.rb index b7dfb6afc18..f83c8ffe439 100644 --- a/spec/features/error_tracking/user_sees_error_index_spec.rb +++ b/spec/features/error_tracking/user_sees_error_index_spec.rb @@ -50,7 +50,7 @@ feature_category: :error_tracking do end it 'renders call to action' do - expect(page).to have_content('Enable error tracking') + expect(page).to have_content('Monitor your errors directly in GitLab.') end end diff --git a/spec/features/global_search_spec.rb b/spec/features/global_search_spec.rb index 7c55551e9c3..15393ec4cd6 100644 --- a/spec/features/global_search_spec.rb +++ b/spec/features/global_search_spec.rb @@ -72,10 +72,6 @@ RSpec.describe 'Global search', :js, feature_category: :global_search do # TODO: Remove this along with feature flag #339348 stub_feature_flags(new_header_search: true) visit dashboard_projects_path - - # initialize javascript loaded input search input field - find('#search').click - find('body').click end it 'renders updated search bar' do diff --git a/spec/features/groups/import_export/connect_instance_spec.rb b/spec/features/groups/import_export/connect_instance_spec.rb index 11cc4bb9b37..8aea18a268b 100644 --- a/spec/features/groups/import_export/connect_instance_spec.rb +++ b/spec/features/groups/import_export/connect_instance_spec.rb @@ -25,7 +25,7 @@ RSpec.describe 'Import/Export - Connect to another instance', :js, feature_categ it 'successfully connects to remote instance' do pat = 'demo-pat' - expect(page).to have_content 'Import groups from another instance of GitLab' + expect(page).to have_content 'Import groups by direct transfer' expect(page).to have_content 'Not all related objects are migrated' fill_in :bulk_import_gitlab_url, with: source_url @@ -64,7 +64,7 @@ RSpec.describe 'Import/Export - Connect to another instance', :js, feature_categ click_on 'Connect instance' - expect(page).to have_content 'Please fill in GitLab source URL' + expect(page).to have_content 'Enter the URL for the source instance' end end @@ -89,7 +89,7 @@ RSpec.describe 'Import/Export - Connect to another instance', :js, feature_categ end it 'renders fields and button disabled' do - expect(page).to have_field('GitLab source URL', disabled: true) + expect(page).to have_field('GitLab source instance URL', disabled: true) expect(page).to have_field('Personal access token', disabled: true) expect(page).to have_button('Connect instance', disabled: true) end diff --git a/spec/features/groups/import_export/migration_history_spec.rb b/spec/features/groups/import_export/migration_history_spec.rb index f851c5e2ec5..9fc9c7898d1 100644 --- a/spec/features/groups/import_export/migration_history_spec.rb +++ b/spec/features/groups/import_export/migration_history_spec.rb @@ -12,6 +12,8 @@ RSpec.describe 'Import/Export - GitLab migration history', :js, feature_category let_it_be(:failed_entity_2) { create(:bulk_import_entity, :failed, bulk_import: user_import_2) } before do + stub_application_setting(bulk_import_enabled: true) + gitlab_sign_in(user) visit new_group_path @@ -24,7 +26,7 @@ RSpec.describe 'Import/Export - GitLab migration history', :js, feature_category wait_for_requests - expect(page).to have_content 'Group import history' + expect(page).to have_content 'GitLab Migration history' expect(page.find('tbody')).to have_css('tr', count: 2) end end diff --git a/spec/features/groups/labels/sort_labels_spec.rb b/spec/features/groups/labels/sort_labels_spec.rb index c2410246fe1..e177461701e 100644 --- a/spec/features/groups/labels/sort_labels_spec.rb +++ b/spec/features/groups/labels/sort_labels_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Sort labels', :js, feature_category: :team_planning do + include ListboxHelpers + let(:user) { create(:user) } let(:group) { create(:group) } let!(:label1) { create(:group_label, title: 'Foo', description: 'Lorem ipsum', group: group) } @@ -28,16 +30,16 @@ RSpec.describe 'Sort labels', :js, feature_category: :team_planning do it 'sorts by date' do click_button 'Name' - sort_options = find('ul[role="listbox"]').all('li').collect(&:text) - - expect(sort_options[0]).to eq('Name') - expect(sort_options[1]).to eq('Name, descending') - expect(sort_options[2]).to eq('Last created') - expect(sort_options[3]).to eq('Oldest created') - expect(sort_options[4]).to eq('Updated date') - expect(sort_options[5]).to eq('Oldest updated') + expect_listbox_items([ + 'Name', + 'Name, descending', + 'Last created', + 'Oldest created', + 'Updated date', + 'Oldest updated' + ]) - find('li', text: 'Name, descending').click + select_listbox_item('Name, descending') # assert default sorting within '.other-labels' do diff --git a/spec/features/groups/members/manage_members_spec.rb b/spec/features/groups/members/manage_members_spec.rb index 4211f2b6265..5cd5908b359 100644 --- a/spec/features/groups/members/manage_members_spec.rb +++ b/spec/features/groups/members/manage_members_spec.rb @@ -50,12 +50,13 @@ RSpec.describe 'Groups > Members > Manage members', feature_category: :subgroups # Open modal page.within(second_row) do - click_button 'Remove member' + show_actions + click_button _('Remove member') end within_modal do expect(page).to have_unchecked_field 'Also unassign this user from related issues and merge requests' - click_button('Remove member') + click_button _('Remove member') end wait_for_requests diff --git a/spec/features/groups/members/sort_members_spec.rb b/spec/features/groups/members/sort_members_spec.rb index 4e9adda5f2b..5634122ec16 100644 --- a/spec/features/groups/members/sort_members_spec.rb +++ b/spec/features/groups/members/sort_members_spec.rb @@ -56,7 +56,7 @@ RSpec.describe 'Groups > Members > Sort members', :js, feature_category: :subgro expect(first_row.text).to include(owner.name) expect(second_row.text).to include(developer.name) - expect_sort_by('Created on', :asc) + expect_sort_by('User created', :asc) end it 'sorts by user created on descending' do @@ -65,7 +65,7 @@ RSpec.describe 'Groups > Members > Sort members', :js, feature_category: :subgro expect(first_row.text).to include(developer.name) expect(second_row.text).to include(owner.name) - expect_sort_by('Created on', :desc) + expect_sort_by('User created', :desc) end it 'sorts by last activity ascending' do diff --git a/spec/features/groups/merge_requests_spec.rb b/spec/features/groups/merge_requests_spec.rb index 87f1f422e90..8a3401d0572 100644 --- a/spec/features/groups/merge_requests_spec.rb +++ b/spec/features/groups/merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group merge requests page', feature_category: :code_review do +RSpec.describe 'Group merge requests page', feature_category: :code_review_workflow do include FilteredSearchHelpers let(:path) { merge_requests_group_path(group) } diff --git a/spec/features/groups/milestones_sorting_spec.rb b/spec/features/groups/milestones_sorting_spec.rb index 5543938957a..0f0ecb8f5f3 100644 --- a/spec/features/groups/milestones_sorting_spec.rb +++ b/spec/features/groups/milestones_sorting_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Milestones sorting', :js, feature_category: :team_planning do + include ListboxHelpers + let(:group) { create(:group) } let!(:project) { create(:project_empty_repo, group: group) } let!(:other_project) { create(:project_empty_repo, group: group) } @@ -27,13 +29,13 @@ RSpec.describe 'Milestones sorting', :js, feature_category: :team_planning do expect(page.all('ul.content-list > li strong > a').map(&:text)).to eq(['v2.0', 'v2.0', 'v3.0', 'v1.0', 'v1.0']) end - within '[data-testid=milestone_sort_by_dropdown]' do - click_button 'Due soon' - expect(find('ul[role="listbox"]').all('li').map(&:text)).to eq(['Due soon', 'Due later', 'Start soon', 'Start later', 'Name, ascending', 'Name, descending']) + click_button 'Due soon' - find('li', text: 'Due later').click - expect(page).to have_button('Due later') - end + expect_listbox_items(['Due soon', 'Due later', 'Start soon', 'Start later', 'Name, ascending', 'Name, descending']) + + select_listbox_item('Due later') + + expect(page).to have_button('Due later') # assert descending sorting within '.milestones' do diff --git a/spec/features/groups/navbar_spec.rb b/spec/features/groups/navbar_spec.rb index 180ccab78bc..a52e2d95fed 100644 --- a/spec/features/groups/navbar_spec.rb +++ b/spec/features/groups/navbar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group navbar', feature_category: :navigation do +RSpec.describe 'Group navbar', :with_license, feature_category: :navigation do include NavbarStructureHelper include WikiHelpers diff --git a/spec/features/groups/new_group_page_spec.rb b/spec/features/groups/new_group_page_spec.rb index 662ef734299..a07c27331d9 100644 --- a/spec/features/groups/new_group_page_spec.rb +++ b/spec/features/groups/new_group_page_spec.rb @@ -10,6 +10,8 @@ RSpec.describe 'New group page', :js, feature_category: :subgroups do sign_in(user) end + it_behaves_like 'a dashboard page with sidebar', :new_group_path, :groups + describe 'new top level group alert' do context 'when a user visits the new group page' do it 'shows the new top level group alert' do diff --git a/spec/features/incidents/user_views_incident_spec.rb b/spec/features/incidents/user_views_incident_spec.rb index 8216aca787a..49041d187dd 100644 --- a/spec/features/incidents/user_views_incident_spec.rb +++ b/spec/features/incidents/user_views_incident_spec.rb @@ -57,7 +57,7 @@ RSpec.describe "User views incident", feature_category: :incident_management do it 'shows incident actions', :js do click_button 'Incident actions' - expect(page).to have_link 'Report abuse to administrator' + expect(page).to have_button 'Report abuse to administrator' end end end diff --git a/spec/features/issues/group_label_sidebar_spec.rb b/spec/features/issues/group_label_sidebar_spec.rb index b26030fe8d0..41450ba3373 100644 --- a/spec/features/issues/group_label_sidebar_spec.rb +++ b/spec/features/issues/group_label_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group label on issue', feature_category: :team_planning do +RSpec.describe 'Group label on issue', :with_license, feature_category: :team_planning do it 'renders link to the project issues page', :js do group = create(:group) project = create(:project, :public, namespace: group) diff --git a/spec/features/issues/issue_header_spec.rb b/spec/features/issues/issue_header_spec.rb index 090067fc4ac..6c5daa29631 100644 --- a/spec/features/issues/issue_header_spec.rb +++ b/spec/features/issues/issue_header_spec.rb @@ -27,7 +27,7 @@ RSpec.describe 'issue header', :js, feature_category: :team_planning do it 'shows the "New related issue", "Report abuse", and "Delete issue" items', :aggregate_failures do expect(page).to have_link 'New related issue' - expect(page).to have_link 'Report abuse to administrator' + expect(page).to have_button 'Report abuse to administrator' expect(page).to have_button 'Delete issue' expect(page).not_to have_link 'Submit as spam' end @@ -68,10 +68,10 @@ RSpec.describe 'issue header', :js, feature_category: :team_planning do visit project_issue_path(project, authored_issue) end - it 'does not show "Report abuse" link in dropdown' do + it 'does not show "Report abuse" button in dropdown' do click_button 'Issue actions' - expect(page).not_to have_link 'Report abuse to administrator' + expect(page).not_to have_button 'Report abuse to administrator' end end end @@ -116,7 +116,7 @@ RSpec.describe 'issue header', :js, feature_category: :team_planning do it 'only shows the "New related issue" and "Report abuse" items', :aggregate_failures do expect(page).to have_link 'New related issue' - expect(page).to have_link 'Report abuse to administrator' + expect(page).to have_button 'Report abuse to administrator' expect(page).not_to have_link 'Submit as spam' expect(page).not_to have_button 'Delete issue' end @@ -157,10 +157,10 @@ RSpec.describe 'issue header', :js, feature_category: :team_planning do visit project_issue_path(project, authored_issue) end - it 'does not show "Report abuse" link in dropdown' do + it 'does not show "Report abuse" button in dropdown' do click_button 'Issue actions' - expect(page).not_to have_link 'Report abuse to administrator' + expect(page).not_to have_button 'Report abuse to administrator' end end end diff --git a/spec/features/issues/user_creates_issue_spec.rb b/spec/features/issues/user_creates_issue_spec.rb index a4b8cb91999..df039493cec 100644 --- a/spec/features/issues/user_creates_issue_spec.rb +++ b/spec/features/issues/user_creates_issue_spec.rb @@ -161,6 +161,11 @@ RSpec.describe "User creates issue", feature_category: :team_planning do let(:project) { create(:project, :public, :repository) } before do + # With multistore feature flags enabled (using an actual Redis store instead of NullStore), + # it somehow writes an invalid content to Redis and the specs would fail. + stub_feature_flags(use_primary_and_secondary_stores_for_repository_cache: false) + stub_feature_flags(use_primary_store_as_default_for_repository_cache: false) + project.repository.create_file( user, '.gitlab/issue_templates/bug.md', diff --git a/spec/features/issues/user_edits_issue_spec.rb b/spec/features/issues/user_edits_issue_spec.rb index 223832a6ede..19b2633969d 100644 --- a/spec/features/issues/user_edits_issue_spec.rb +++ b/spec/features/issues/user_edits_issue_spec.rb @@ -107,14 +107,14 @@ RSpec.describe "Issues > User edits issue", :js, feature_category: :team_plannin end it 'places focus on the web editor' do - toggle_editing_mode_selector = '[data-testid="toggle-editing-mode-button"] label' content_editor_focused_selector = '[data-testid="content-editor"].is-focused' markdown_field_focused_selector = 'textarea:focus' click_edit_issue_description expect(page).to have_selector(markdown_field_focused_selector) - find(toggle_editing_mode_selector, text: 'Rich text').click + click_on _('View rich text') + click_on _('Rich text') expect(page).not_to have_selector(content_editor_focused_selector) @@ -124,7 +124,8 @@ RSpec.describe "Issues > User edits issue", :js, feature_category: :team_plannin expect(page).to have_selector(content_editor_focused_selector) - find(toggle_editing_mode_selector, text: 'Source').click + click_on _('View markdown') + click_on _('Markdown') expect(page).not_to have_selector(markdown_field_focused_selector) end diff --git a/spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb b/spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb index b9a25f47da9..91b18454af5 100644 --- a/spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb +++ b/spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues > Real-time sidebar', :js, feature_category: :team_planning do +RSpec.describe 'Issues > Real-time sidebar', :js, :with_license, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } let_it_be(:issue) { create(:issue, project: project) } let_it_be(:user) { create(:user) } diff --git a/spec/features/jira_connect/branches_spec.rb b/spec/features/jira_connect/branches_spec.rb index 489d3743a2a..8cf07f2ade2 100644 --- a/spec/features/jira_connect/branches_spec.rb +++ b/spec/features/jira_connect/branches_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Create GitLab branches from Jira', :js, feature_category: :integrations do + include ListboxHelpers + let_it_be(:alice) { create(:user, name: 'Alice') } let_it_be(:bob) { create(:user, name: 'Bob') } @@ -42,7 +44,7 @@ RSpec.describe 'Create GitLab branches from Jira', :js, feature_category: :integ expect(page).not_to have_text('Alice / bar') - click_on 'Alice / foo' + find('span', text: 'Alice / foo', match: :first).click end expect(page).to have_field('Branch name', with: 'ACME-123-my-issue-title') @@ -57,11 +59,11 @@ RSpec.describe 'Create GitLab branches from Jira', :js, feature_category: :integ # Switch to project2 - click_on 'Alice / foo' + find('span', text: 'Alice / foo', match: :first).click within_dropdown do fill_in 'Search', with: '' - click_on 'Alice / bar' + find('span', text: 'Alice / bar', match: :first).click end click_on 'master' @@ -70,9 +72,7 @@ RSpec.describe 'Create GitLab branches from Jira', :js, feature_category: :integ fill_in 'Search', with: source_branch wait_for_requests - within '[role="listbox"]' do - find('li', text: source_branch).click - end + select_listbox_item(source_branch) fill_in 'Branch name', with: new_branch click_on 'Create branch' diff --git a/spec/features/markdown/observability_spec.rb b/spec/features/markdown/observability_spec.rb index 0c7d8cc006b..86caf3eb1b1 100644 --- a/spec/features/markdown/observability_spec.rb +++ b/spec/features/markdown/observability_spec.rb @@ -80,4 +80,78 @@ RSpec.describe 'Observability rendering', :js do end end end + + context 'when feature flag is disabled' do + before do + stub_feature_flags(observability_group_tab: false) + end + + context 'when embedding in an issue' do + let(:issue) do + create(:issue, project: project, description: observable_url) + end + + before do + visit project_issue_path(project, issue) + wait_for_requests + end + + it 'does not render iframe in description' do + page.within('.description') do + expect(page.html).not_to include(expected) + expect(page.html).to include(observable_url) + end + end + + it 'does not render iframe in comment' do + expect(page).not_to have_css('.note-text') + + page.within('.js-main-target-form') do + fill_in('note[note]', with: observable_url) + click_button('Comment') + end + + wait_for_requests + + page.within('.note-text') do + expect(page.html).not_to include(expected) + expect(page.html).to include(observable_url) + end + end + end + + context 'when embedding in an MR' do + let(:merge_request) do + create(:merge_request, source_project: project, target_project: project, description: observable_url) + end + + before do + visit merge_request_path(merge_request) + wait_for_requests + end + + it 'does not render iframe in description' do + page.within('.description') do + expect(page.html).not_to include(expected) + expect(page.html).to include(observable_url) + end + end + + it 'does not render iframe in comment' do + expect(page).not_to have_css('.note-text') + + page.within('.js-main-target-form') do + fill_in('note[note]', with: observable_url) + click_button('Comment') + end + + wait_for_requests + + page.within('.note-text') do + expect(page.html).not_to include(expected) + expect(page.html).to include(observable_url) + end + end + end + end end diff --git a/spec/features/markdown/sandboxed_mermaid_spec.rb b/spec/features/markdown/sandboxed_mermaid_spec.rb index 26b397a1fd5..0282d02d809 100644 --- a/spec/features/markdown/sandboxed_mermaid_spec.rb +++ b/spec/features/markdown/sandboxed_mermaid_spec.rb @@ -23,7 +23,7 @@ RSpec.describe 'Sandboxed Mermaid rendering', :js, feature_category: :team_plann context 'in an issue' do let(:issue) { create(:issue, project: project, description: description) } - it 'includes mermaid frame correctly' do + it 'includes mermaid frame correctly', :with_license do visit project_issue_path(project, issue) wait_for_requests diff --git a/spec/features/merge_request/admin_views_hidden_merge_request_spec.rb b/spec/features/merge_request/admin_views_hidden_merge_request_spec.rb new file mode 100644 index 00000000000..0dbb42a633b --- /dev/null +++ b/spec/features/merge_request/admin_views_hidden_merge_request_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Admin views hidden merge request', feature_category: :insider_threat do + context 'when signed in as admin and viewing a hidden merge request', :js do + let_it_be(:admin) { create(:admin) } + let_it_be(:author) { create(:user, :banned) } + let_it_be(:project) { create(:project, :repository) } + let!(:merge_request) { create(:merge_request, source_project: project, author: author) } + + before do + sign_in(admin) + gitlab_enable_admin_mode_sign_in(admin) + visit(project_merge_request_path(project, merge_request)) + end + + it 'shows a hidden merge request icon' do + page.within('.detail-page-header-body') do + tooltip = format(_('This %{issuable} is hidden because its author has been banned'), + issuable: _('merge request')) + expect(page).to have_css("div[data-testid='hidden'][title='#{tooltip}']") + expect(page).to have_css('svg[data-testid="spam-icon"]') + end + end + end +end diff --git a/spec/features/merge_request/batch_comments_spec.rb b/spec/features/merge_request/batch_comments_spec.rb index e16c1ae094b..736c986d0fe 100644 --- a/spec/features/merge_request/batch_comments_spec.rb +++ b/spec/features/merge_request/batch_comments_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > Batch comments', :js, feature_category: :code_review do +RSpec.describe 'Merge request > Batch comments', :js, feature_category: :code_review_workflow do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/close_reopen_report_toggle_spec.rb b/spec/features/merge_request/close_reopen_report_toggle_spec.rb index 63ed355b16e..9b8e50a31e3 100644 --- a/spec/features/merge_request/close_reopen_report_toggle_spec.rb +++ b/spec/features/merge_request/close_reopen_report_toggle_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_review do +RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_review_workflow do include IssuablesHelper let(:user) { create(:user) } @@ -27,12 +27,12 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_r find('[data-testid="merge-request-actions"]').click expect(container).to have_link("Close merge request") - expect(container).to have_link('Report abuse to administrator') + expect(container).to have_button('Report abuse to administrator') end it 'links to Report Abuse' do find('[data-testid="merge-request-actions"]').click - click_link 'Report abuse to administrator' + click_button 'Report abuse to administrator' expect(page).to have_content('Report abuse to administrator') end @@ -47,7 +47,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_r expect(container).to have_link('Edit') expect(container).to have_link('Mark as draft') expect(container).to have_link('Close merge request') - expect(container).to have_link('Report abuse to administrator') + expect(container).to have_button('Report abuse to administrator') expect(container).not_to have_link('Reopen merge request') end end @@ -59,7 +59,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_r find('[data-testid="merge-request-actions"]').click expect(container).to have_link('Edit') - expect(container).to have_link('Report abuse to administrator') + expect(container).to have_button('Report abuse to administrator') expect(container).to have_link('Reopen merge request') expect(container).not_to have_link('Close merge request') end @@ -73,7 +73,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_r expect(container).to have_link('Edit') expect(container).to have_link('Reopen merge request') expect(container).not_to have_link('Close merge request') - expect(container).not_to have_link('Report abuse to administrator') + expect(container).not_to have_button('Report abuse to administrator') end end end @@ -83,7 +83,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_r it 'shows only the `Edit` button' do expect(container).to have_link(exact_text: 'Edit') - expect(container).not_to have_link('Report abuse to administrator') + expect(container).not_to have_button('Report abuse to administrator') expect(container).not_to have_button('Close merge request') expect(container).not_to have_button('Reopen merge request') end @@ -93,7 +93,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_r it 'shows only the `Edit` button' do expect(container).to have_link(exact_text: 'Edit') - expect(container).not_to have_link('Report abuse to administrator') + expect(container).not_to have_button('Report abuse to administrator') expect(container).not_to have_button('Close merge request') expect(container).not_to have_button('Reopen merge request') end @@ -101,7 +101,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_r end end - context 'when user doesnt have permission to update' do + context 'when user doesnt have permission to update', :js do let(:cant_project) { create(:project, :repository) } let(:cant_issuable) { create(:merge_request, source_project: cant_project) } @@ -112,7 +112,9 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_r end it 'only shows a `Report abuse` button' do - expect(container).to have_link('Report abuse to administrator') + find('[data-testid="merge-request-actions"]').click + + expect(container).to have_button('Report abuse to administrator') expect(container).not_to have_button('Close merge request') expect(container).not_to have_button('Reopen merge request') expect(container).not_to have_link(exact_text: 'Edit') diff --git a/spec/features/merge_request/maintainer_edits_fork_spec.rb b/spec/features/merge_request/maintainer_edits_fork_spec.rb index bd040a5b894..b8dc3af8a6a 100644 --- a/spec/features/merge_request/maintainer_edits_fork_spec.rb +++ b/spec/features/merge_request/maintainer_edits_fork_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'a maintainer edits files on a source-branch of an MR from a fork', :js, :sidekiq_might_not_need_inline, -feature_category: :code_review do +feature_category: :code_review_workflow do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers include ProjectForksHelper let(:user) { create(:user, username: 'the-maintainer') } diff --git a/spec/features/merge_request/merge_request_discussion_lock_spec.rb b/spec/features/merge_request/merge_request_discussion_lock_spec.rb index b48d4d80647..11ec2a86b43 100644 --- a/spec/features/merge_request/merge_request_discussion_lock_spec.rb +++ b/spec/features/merge_request/merge_request_discussion_lock_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' -RSpec.describe 'Merge Request Discussion Lock', :js, feature_category: :code_review do +RSpec.describe 'Merge Request Discussion Lock', :js, feature_category: :code_review_workflow do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project, author: user) } diff --git a/spec/features/merge_request/user_accepts_merge_request_spec.rb b/spec/features/merge_request/user_accepts_merge_request_spec.rb index dda22abada0..8ff0c294b24 100644 --- a/spec/features/merge_request/user_accepts_merge_request_spec.rb +++ b/spec/features/merge_request/user_accepts_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User accepts a merge request', :js, :sidekiq_might_not_need_inline, feature_category: :code_review do +RSpec.describe 'User accepts a merge request', :js, :sidekiq_might_not_need_inline, feature_category: :code_review_workflow do let(:merge_request) { create(:merge_request, :simple, source_project: project) } let(:project) { create(:project, :public, :repository) } let(:user) { create(:user) } diff --git a/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb b/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb index cf6836b544b..0ff773ef02d 100644 --- a/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb +++ b/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'create a merge request, allowing commits from members who can merge to the target branch', :js, -feature_category: :code_review do +feature_category: :code_review_workflow do include ProjectForksHelper let(:user) { create(:user) } let(:target_project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_approves_spec.rb b/spec/features/merge_request/user_approves_spec.rb index bfb6a3ec8de..5b5ad4468ec 100644 --- a/spec/features/merge_request/user_approves_spec.rb +++ b/spec/features/merge_request/user_approves_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User approves', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User approves', :js, feature_category: :code_review_workflow do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_assigns_themselves_reviewer_spec.rb b/spec/features/merge_request/user_assigns_themselves_reviewer_spec.rb index 2b93f88e96b..711b2db8a32 100644 --- a/spec/features/merge_request/user_assigns_themselves_reviewer_spec.rb +++ b/spec/features/merge_request/user_assigns_themselves_reviewer_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User assigns themselves as a reviewer', feature_category: :code_review do +RSpec.describe 'Merge request > User assigns themselves as a reviewer', feature_category: :code_review_workflow do let_it_be(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, :simple, source_project: project, author: user, description: "test mr") } diff --git a/spec/features/merge_request/user_assigns_themselves_spec.rb b/spec/features/merge_request/user_assigns_themselves_spec.rb index 826904bd165..ed4ea91f704 100644 --- a/spec/features/merge_request/user_assigns_themselves_spec.rb +++ b/spec/features/merge_request/user_assigns_themselves_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User assigns themselves', feature_category: :code_review do +RSpec.describe 'Merge request > User assigns themselves', feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:issue1) { create(:issue, project: project) } diff --git a/spec/features/merge_request/user_awards_emoji_spec.rb b/spec/features/merge_request/user_awards_emoji_spec.rb index dceac8d6a69..f43672942ff 100644 --- a/spec/features/merge_request/user_awards_emoji_spec.rb +++ b/spec/features/merge_request/user_awards_emoji_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User awards emoji', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User awards emoji', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project, author: create(:user)) } diff --git a/spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb b/spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb index 3e3ff91ad19..90cf07831ba 100644 --- a/spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb +++ b/spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User clicks on merge request tabs', :js, feature_category: :code_review do +RSpec.describe 'User clicks on merge request tabs', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } diff --git a/spec/features/merge_request/user_closes_reopens_merge_request_state_spec.rb b/spec/features/merge_request/user_closes_reopens_merge_request_state_spec.rb index c5ef6b912fe..537702df12d 100644 --- a/spec/features/merge_request/user_closes_reopens_merge_request_state_spec.rb +++ b/spec/features/merge_request/user_closes_reopens_merge_request_state_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'User closes/reopens a merge request', :js, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/297500', - feature_category: :code_review do + feature_category: :code_review_workflow do let_it_be(:project) { create(:project, :repository) } let_it_be(:user) { create(:user) } diff --git a/spec/features/merge_request/user_comments_on_commit_spec.rb b/spec/features/merge_request/user_comments_on_commit_spec.rb index 64fe144cd0d..0538f367022 100644 --- a/spec/features/merge_request/user_comments_on_commit_spec.rb +++ b/spec/features/merge_request/user_comments_on_commit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User comments on a commit', :js, feature_category: :code_review do +RSpec.describe 'User comments on a commit', :js, feature_category: :code_review_workflow do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_comments_on_diff_spec.rb b/spec/features/merge_request/user_comments_on_diff_spec.rb index f1a942d5708..66b87148eb2 100644 --- a/spec/features/merge_request/user_comments_on_diff_spec.rb +++ b/spec/features/merge_request/user_comments_on_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User comments on a diff', :js, feature_category: :code_review do +RSpec.describe 'User comments on a diff', :js, feature_category: :code_review_workflow do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_comments_on_merge_request_spec.rb b/spec/features/merge_request/user_comments_on_merge_request_spec.rb index d5ad78746f4..9335615b4c7 100644 --- a/spec/features/merge_request/user_comments_on_merge_request_spec.rb +++ b/spec/features/merge_request/user_comments_on_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User comments on a merge request', :js, feature_category: :code_review do +RSpec.describe 'User comments on a merge request', :js, feature_category: :code_review_workflow do include RepoHelpers let(:project) { create(:project, :repository) } diff --git a/spec/features/merge_request/user_creates_image_diff_notes_spec.rb b/spec/features/merge_request/user_creates_image_diff_notes_spec.rb index eb7894f4ef7..1d7a3fae371 100644 --- a/spec/features/merge_request/user_creates_image_diff_notes_spec.rb +++ b/spec/features/merge_request/user_creates_image_diff_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User creates image diff notes', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User creates image diff notes', :js, feature_category: :code_review_workflow do include NoteInteractionHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_creates_merge_request_spec.rb b/spec/features/merge_request/user_creates_merge_request_spec.rb index 50629f11959..1717069a259 100644 --- a/spec/features/merge_request/user_creates_merge_request_spec.rb +++ b/spec/features/merge_request/user_creates_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User creates a merge request', :js, feature_category: :code_review do +RSpec.describe 'User creates a merge request', :js, feature_category: :code_review_workflow do include ProjectForksHelper shared_examples 'creates a merge request' do diff --git a/spec/features/merge_request/user_creates_mr_spec.rb b/spec/features/merge_request/user_creates_mr_spec.rb index 5effde234cd..523027582b3 100644 --- a/spec/features/merge_request/user_creates_mr_spec.rb +++ b/spec/features/merge_request/user_creates_mr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User creates MR', feature_category: :code_review do +RSpec.describe 'Merge request > User creates MR', feature_category: :code_review_workflow do include ProjectForksHelper before do diff --git a/spec/features/merge_request/user_customizes_merge_commit_message_spec.rb b/spec/features/merge_request/user_customizes_merge_commit_message_spec.rb index 4f1119d6c33..3c30ef02a19 100644 --- a/spec/features/merge_request/user_customizes_merge_commit_message_spec.rb +++ b/spec/features/merge_request/user_customizes_merge_commit_message_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request < User customizes merge commit message', :js, feature_category: :code_review do +RSpec.describe 'Merge request < User customizes merge commit message', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:issue_1) { create(:issue, project: project) } 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 c04040dd6fd..60631027d9d 100644 --- a/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb +++ b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User edits assignees sidebar', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User edits assignees sidebar', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:protected_branch) { create(:protected_branch, :maintainers_can_push, name: 'master', project: project) } let(:merge_request) { create(:merge_request, :simple, source_project: project, target_branch: protected_branch.name) } diff --git a/spec/features/merge_request/user_edits_merge_request_spec.rb b/spec/features/merge_request/user_edits_merge_request_spec.rb index 6701c7d91ae..839081d00dc 100644 --- a/spec/features/merge_request/user_edits_merge_request_spec.rb +++ b/spec/features/merge_request/user_edits_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User edits a merge request', :js, feature_category: :code_review do +RSpec.describe 'User edits a merge request', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :repository) } let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:user) { create(:user) } diff --git a/spec/features/merge_request/user_edits_mr_spec.rb b/spec/features/merge_request/user_edits_mr_spec.rb index 18e6827a872..6fcbfd309e2 100644 --- a/spec/features/merge_request/user_edits_mr_spec.rb +++ b/spec/features/merge_request/user_edits_mr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User edits MR', feature_category: :code_review do +RSpec.describe 'Merge request > User edits MR', feature_category: :code_review_workflow do include ProjectForksHelper before do diff --git a/spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb b/spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb index 38c76314b9e..26a9b955e2d 100644 --- a/spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb +++ b/spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User edits reviewers sidebar', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User edits reviewers sidebar', :js, feature_category: :code_review_workflow do context 'with invite members considerations' do let_it_be(:merge_request) { create(:merge_request) } let_it_be(:project) { merge_request.project } diff --git a/spec/features/merge_request/user_expands_diff_spec.rb b/spec/features/merge_request/user_expands_diff_spec.rb index 8adbdcd310c..9fbb5773eae 100644 --- a/spec/features/merge_request/user_expands_diff_spec.rb +++ b/spec/features/merge_request/user_expands_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User expands diff', :js, feature_category: :code_review do +RSpec.describe 'User expands diff', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_branch: 'expand-collapse-files', source_project: project, target_project: project) } diff --git a/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb b/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb index 1b9b3941714..a013666a496 100644 --- a/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb +++ b/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Batch diffs', :js, feature_category: :code_review do +RSpec.describe 'Batch diffs', :js, feature_category: :code_review_workflow do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_locks_discussion_spec.rb b/spec/features/merge_request/user_locks_discussion_spec.rb index 1bfd52d49e8..a603a5c1e0b 100644 --- a/spec/features/merge_request/user_locks_discussion_spec.rb +++ b/spec/features/merge_request/user_locks_discussion_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User locks discussion', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User locks discussion', :js, feature_category: :code_review_workflow do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_manages_subscription_spec.rb b/spec/features/merge_request/user_manages_subscription_spec.rb index 16d869fc5a1..d4ccc4a93b5 100644 --- a/spec/features/merge_request/user_manages_subscription_spec.rb +++ b/spec/features/merge_request/user_manages_subscription_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User manages subscription', :js, feature_category: :code_review do +RSpec.describe 'User manages subscription', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:user) { create(:user) } diff --git a/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb b/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb index 201cdc94b56..8cbc2b975e4 100644 --- a/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb +++ b/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User marks merge request as draft', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User marks merge request as draft', :js, feature_category: :code_review_workflow do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_merges_immediately_spec.rb b/spec/features/merge_request/user_merges_immediately_spec.rb index b0aeea997f0..79c166434aa 100644 --- a/spec/features/merge_request/user_merges_immediately_spec.rb +++ b/spec/features/merge_request/user_merges_immediately_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge requests > User merges immediately', :js, feature_category: :code_review do +RSpec.describe 'Merge requests > User merges immediately', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let!(:merge_request) do diff --git a/spec/features/merge_request/user_merges_merge_request_spec.rb b/spec/features/merge_request/user_merges_merge_request_spec.rb index 4196fdd5dac..6ffb33603d5 100644 --- a/spec/features/merge_request/user_merges_merge_request_spec.rb +++ b/spec/features/merge_request/user_merges_merge_request_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User merges a merge request", :js, feature_category: :code_review do +RSpec.describe "User merges a merge request", :js, feature_category: :code_review_workflow do let(:user) { project.first_owner } before do diff --git a/spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb b/spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb index 447418b5a4b..c73ba1bdbe5 100644 --- a/spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb +++ b/spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User merges only if pipeline succeeds', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User merges only if pipeline succeeds', :js, feature_category: :code_review_workflow do let(:merge_request) { create(:merge_request_with_diffs) } let(:project) { merge_request.target_project } diff --git a/spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb b/spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb index 78a21527794..6d2c8f15a82 100644 --- a/spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb +++ b/spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User merges when pipeline succeeds', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User merges when pipeline succeeds', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) do diff --git a/spec/features/merge_request/user_opens_checkout_branch_modal_spec.rb b/spec/features/merge_request/user_opens_checkout_branch_modal_spec.rb index 116de50f2a2..7cb1c95f6dc 100644 --- a/spec/features/merge_request/user_opens_checkout_branch_modal_spec.rb +++ b/spec/features/merge_request/user_opens_checkout_branch_modal_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User opens checkout branch modal', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User opens checkout branch modal', :js, feature_category: :code_review_workflow do include ProjectForksHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_opens_context_commits_modal_spec.rb b/spec/features/merge_request/user_opens_context_commits_modal_spec.rb index f32a51cfcd4..99764e2c052 100644 --- a/spec/features/merge_request/user_opens_context_commits_modal_spec.rb +++ b/spec/features/merge_request/user_opens_context_commits_modal_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > Context commits', :js, feature_category: :code_review do +RSpec.describe 'Merge request > Context commits', :js, feature_category: :code_review_workflow do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_posts_diff_notes_spec.rb b/spec/features/merge_request/user_posts_diff_notes_spec.rb index f2ec0e2df6d..a74a8b1cd5a 100644 --- a/spec/features/merge_request/user_posts_diff_notes_spec.rb +++ b/spec/features/merge_request/user_posts_diff_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User posts diff notes', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User posts diff notes', :js, feature_category: :code_review_workflow do include MergeRequestDiffHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/merge_request/user_posts_notes_spec.rb b/spec/features/merge_request/user_posts_notes_spec.rb index 194e04a9544..f167ab8fe8a 100644 --- a/spec/features/merge_request/user_posts_notes_spec.rb +++ b/spec/features/merge_request/user_posts_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User posts notes', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User posts notes', :js, feature_category: :code_review_workflow do include NoteInteractionHelpers let_it_be(:project) { create(:project, :repository) } diff --git a/spec/features/merge_request/user_rebases_merge_request_spec.rb b/spec/features/merge_request/user_rebases_merge_request_spec.rb index c3ee5ddc3b1..1b46b4e1d7f 100644 --- a/spec/features/merge_request/user_rebases_merge_request_spec.rb +++ b/spec/features/merge_request/user_rebases_merge_request_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User rebases a merge request", :js, feature_category: :code_review do +RSpec.describe "User rebases a merge request", :js, feature_category: :code_review_workflow do let(:merge_request) { create(:merge_request, :simple, source_project: project) } let(:user) { project.first_owner } diff --git a/spec/features/merge_request/user_resolves_conflicts_spec.rb b/spec/features/merge_request/user_resolves_conflicts_spec.rb index d4c80c1e9e2..7b1afd786f7 100644 --- a/spec/features/merge_request/user_resolves_conflicts_spec.rb +++ b/spec/features/merge_request/user_resolves_conflicts_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User resolves conflicts', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User resolves conflicts', :js, feature_category: :code_review_workflow do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers let(:project) { create(:project, :repository) } 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 f0507e94424..c3b9068d708 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 @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User resolves diff notes and threads', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User resolves diff notes and threads', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:guest) { create(:user) } diff --git a/spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb b/spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb index a7508ede1a1..5c41ac79552 100644 --- a/spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb +++ b/spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Merge request > User resolves outdated diff discussions', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User resolves outdated diff discussions', + :js, feature_category: :code_review_workflow do let(:project) { create(:project, :repository, :public) } let(:merge_request) do diff --git a/spec/features/merge_request/user_resolves_wip_mr_spec.rb b/spec/features/merge_request/user_resolves_wip_mr_spec.rb index b7f20a16a3f..8a19a72f6ae 100644 --- a/spec/features/merge_request/user_resolves_wip_mr_spec.rb +++ b/spec/features/merge_request/user_resolves_wip_mr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User resolves Draft', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User resolves Draft', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) do diff --git a/spec/features/merge_request/user_reverts_merge_request_spec.rb b/spec/features/merge_request/user_reverts_merge_request_spec.rb index edfa9267871..43ce473b407 100644 --- a/spec/features/merge_request/user_reverts_merge_request_spec.rb +++ b/spec/features/merge_request/user_reverts_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User reverts a merge request', :js, feature_category: :code_review do +RSpec.describe 'User reverts a merge request', :js, feature_category: :code_review_workflow do let(:merge_request) { create(:merge_request, :simple, source_project: project) } let(:project) { create(:project, :public, :repository) } let(:user) { create(:user) } diff --git a/spec/features/merge_request/user_reviews_image_spec.rb b/spec/features/merge_request/user_reviews_image_spec.rb index 5814dc6b58c..815b006d029 100644 --- a/spec/features/merge_request/user_reviews_image_spec.rb +++ b/spec/features/merge_request/user_reviews_image_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > image review', :js, feature_category: :code_review do +RSpec.describe 'Merge request > image review', :js, feature_category: :code_review_workflow do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb b/spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb index fdd2aeec274..1c8bb903f7d 100644 --- a/spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb +++ b/spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User scrolls to note on load', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User scrolls to note on load', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project, author: user) } 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 8c2fc62d16f..94393ea00e4 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 @@ -3,7 +3,7 @@ require 'spec_helper' include Spec::Support::Helpers::ModalHelpers # rubocop:disable Style/MixinUsage -RSpec.describe 'Merge request > User sees avatars on diff notes', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees avatars on diff notes', :js, feature_category: :code_review_workflow do include NoteInteractionHelpers include Spec::Support::Helpers::ModalHelpers include MergeRequestDiffHelpers diff --git a/spec/features/merge_request/user_sees_breadcrumb_links_spec.rb b/spec/features/merge_request/user_sees_breadcrumb_links_spec.rb index 0b6aefcdab6..4d91669f206 100644 --- a/spec/features/merge_request/user_sees_breadcrumb_links_spec.rb +++ b/spec/features/merge_request/user_sees_breadcrumb_links_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New merge request breadcrumb', feature_category: :code_review do +RSpec.describe 'New merge request breadcrumb', feature_category: :code_review_workflow do let(:project) { create(:project, :repository) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb b/spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb index bbfa2be47cc..ad2ceeb23e2 100644 --- a/spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb +++ b/spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb @@ -2,10 +2,11 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees check out branch modal', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees check out branch modal', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project) } + let(:modal_window_title) { 'Check out, review, and resolve locally' } before do sign_in(user) @@ -17,12 +18,12 @@ RSpec.describe 'Merge request > User sees check out branch modal', :js, feature_ end it 'shows the check out branch modal' do - expect(page).to have_content('Check out, review, and merge locally') + expect(page).to have_content(modal_window_title) end it 'closes the check out branch modal with the close action' do find('.modal button[aria-label="Close"]').click - expect(page).not_to have_content('Check out, review, and merge locally') + expect(page).not_to have_content(modal_window_title) end end diff --git a/spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb b/spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb index 07b7cb1e8d8..411a2865b1a 100644 --- a/spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb +++ b/spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User cherry-picks', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User cherry-picks', :js, feature_category: :code_review_workflow do let(:group) { create(:group) } let(:project) { create(:project, :repository, namespace: group) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_closing_issues_message_spec.rb b/spec/features/merge_request/user_sees_closing_issues_message_spec.rb index 9a1d47a13b5..3d41d5e24b2 100644 --- a/spec/features/merge_request/user_sees_closing_issues_message_spec.rb +++ b/spec/features/merge_request/user_sees_closing_issues_message_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees closing issues message', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees closing issues message', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:issue_1) { create(:issue, project: project) } diff --git a/spec/features/merge_request/user_sees_deleted_target_branch_spec.rb b/spec/features/merge_request/user_sees_deleted_target_branch_spec.rb index 16ae8b4304b..5011bd6de14 100644 --- a/spec/features/merge_request/user_sees_deleted_target_branch_spec.rb +++ b/spec/features/merge_request/user_sees_deleted_target_branch_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees deleted target branch', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees deleted target branch', :js, feature_category: :code_review_workflow do let(:merge_request) { create(:merge_request) } let(:project) { merge_request.project } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_diff_spec.rb b/spec/features/merge_request/user_sees_diff_spec.rb index 101ff8fc152..daeeaa1bd88 100644 --- a/spec/features/merge_request/user_sees_diff_spec.rb +++ b/spec/features/merge_request/user_sees_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees diff', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees diff', :js, feature_category: :code_review_workflow do include ProjectForksHelper include RepoHelpers include MergeRequestDiffHelpers diff --git a/spec/features/merge_request/user_sees_discussions_navigation_spec.rb b/spec/features/merge_request/user_sees_discussions_navigation_spec.rb index a22fb2cff00..9d3046a9a72 100644 --- a/spec/features/merge_request/user_sees_discussions_navigation_spec.rb +++ b/spec/features/merge_request/user_sees_discussions_navigation_spec.rb @@ -2,14 +2,12 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees discussions navigation', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees discussions navigation', :js, feature_category: :code_review_workflow do let_it_be(:project) { create(:project, :public, :repository) } let_it_be(:user) { project.creator } let_it_be(:merge_request) { create(:merge_request, source_project: project) } before do - # FIXME: before removing this please fix discussions navigation with this flag enabled - stub_feature_flags(moved_mr_sidebar: false) project.add_maintainer(user) sign_in(user) end @@ -194,29 +192,10 @@ RSpec.describe 'Merge request > User sees discussions navigation', :js, feature_ end def goto_next_thread - begin - # this is required when moved_mr_sidebar is enabled - page.within('.issue-sticky-header') do - click_button 'Go to next unresolved thread' - end - rescue StandardError - click_button 'Go to next unresolved thread' - end - wait_for_scroll_end + click_button 'Go to next unresolved thread', obscured: false end def goto_previous_thread - begin - page.within('.issue-sticky-header') do - click_button 'Go to previous unresolved thread' - end - rescue StandardError - click_button 'Go to previous unresolved thread' - end - wait_for_scroll_end - end - - def wait_for_scroll_end - sleep(1) + click_button 'Go to previous unresolved thread', obscured: false end end diff --git a/spec/features/merge_request/user_sees_discussions_spec.rb b/spec/features/merge_request/user_sees_discussions_spec.rb index 0eae6e39eec..3ca5ac23ddb 100644 --- a/spec/features/merge_request/user_sees_discussions_spec.rb +++ b/spec/features/merge_request/user_sees_discussions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees threads', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees threads', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_sees_merge_button_depending_on_unresolved_discussions_spec.rb b/spec/features/merge_request/user_sees_merge_button_depending_on_unresolved_discussions_spec.rb index 6db5480abb4..b83580565e4 100644 --- a/spec/features/merge_request/user_sees_merge_button_depending_on_unresolved_discussions_spec.rb +++ b/spec/features/merge_request/user_sees_merge_button_depending_on_unresolved_discussions_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'Merge request > User sees merge button depending on unresolved threads', :js, -feature_category: :code_review do +feature_category: :code_review_workflow do let(:project) { create(:project, :repository) } let(:user) { project.creator } let!(:merge_request) { create(:merge_request_with_diff_notes, source_project: project, author: user) } 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 f7594c717d1..458746f0854 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 @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees pipelines triggered by merge request', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees pipelines triggered by merge request', :js, feature_category: :code_review_workflow do include ProjectForksHelper include TestReportsHelper 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 e5aa0f6e64d..237f361bd72 100644 --- a/spec/features/merge_request/user_sees_merge_widget_spec.rb +++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees merge widget', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees merge widget', :js, feature_category: :code_review_workflow do include ProjectForksHelper include TestReportsHelper include ReactiveCachingHelpers diff --git a/spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb b/spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb index 4bfdce29c6a..fac0a84f155 100644 --- a/spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb +++ b/spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees MR from deleted forked project', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees MR from deleted forked project', + :js, feature_category: :code_review_workflow do include ProjectForksHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb b/spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb index 8e6f6d04676..9b46cf37648 100644 --- a/spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb +++ b/spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb @@ -5,7 +5,8 @@ require 'spec_helper' # This test serves as a regression test for a bug that caused an error # message to be shown by JavaScript when the source branch was deleted. # Please do not remove ":js". -RSpec.describe 'Merge request > User sees MR with deleted source branch', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees MR with deleted source branch', + :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb b/spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb index 8f011f5616b..ac195dd9873 100644 --- a/spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb +++ b/spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees notes from forked project', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees notes from forked project', :js, feature_category: :code_review_workflow do include ProjectForksHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_sees_page_metadata_spec.rb b/spec/features/merge_request/user_sees_page_metadata_spec.rb index f97732f91a7..50fc60e342e 100644 --- a/spec/features/merge_request/user_sees_page_metadata_spec.rb +++ b/spec/features/merge_request/user_sees_page_metadata_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees page metadata', feature_category: :code_review do +RSpec.describe 'Merge request > User sees page metadata', feature_category: :code_review_workflow do let(:merge_request) { create(:merge_request, description: '**Lorem** _ipsum_ dolor sit [amet](https://example.com)') } let(:project) { merge_request.target_project } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_pipelines_spec.rb b/spec/features/merge_request/user_sees_pipelines_spec.rb index 8faaf6bf39b..cab940ba704 100644 --- a/spec/features/merge_request/user_sees_pipelines_spec.rb +++ b/spec/features/merge_request/user_sees_pipelines_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees pipelines', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees pipelines', :js, feature_category: :code_review_workflow do describe 'pipeline tab' do let(:merge_request) { create(:merge_request) } let(:project) { merge_request.target_project } diff --git a/spec/features/merge_request/user_sees_system_notes_spec.rb b/spec/features/merge_request/user_sees_system_notes_spec.rb index 40402c95d6f..d547aa84bdd 100644 --- a/spec/features/merge_request/user_sees_system_notes_spec.rb +++ b/spec/features/merge_request/user_sees_system_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees system notes', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees system notes', :js, feature_category: :code_review_workflow do let(:public_project) { create(:project, :public, :repository) } let(:private_project) { create(:project, :private, :repository) } let(:user) { private_project.creator } diff --git a/spec/features/merge_request/user_sees_versions_spec.rb b/spec/features/merge_request/user_sees_versions_spec.rb index f0ff6e1769a..f94b288300a 100644 --- a/spec/features/merge_request/user_sees_versions_spec.rb +++ b/spec/features/merge_request/user_sees_versions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees versions', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User sees versions', :js, feature_category: :code_review_workflow do include MergeRequestDiffHelpers let(:merge_request) do diff --git a/spec/features/merge_request/user_sees_wip_help_message_spec.rb b/spec/features/merge_request/user_sees_wip_help_message_spec.rb index 1a751af6ded..fdefe5ffb06 100644 --- a/spec/features/merge_request/user_sees_wip_help_message_spec.rb +++ b/spec/features/merge_request/user_sees_wip_help_message_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees draft help message', feature_category: :code_review do +RSpec.describe 'Merge request > User sees draft help message', feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb b/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb index 8b6c9dc18f6..b7784de12b9 100644 --- a/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb +++ b/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User selects branches for new MR', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User selects branches for new MR', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_squashes_merge_request_spec.rb b/spec/features/merge_request/user_squashes_merge_request_spec.rb index 43590aed3cc..63faf830f7e 100644 --- a/spec/features/merge_request/user_squashes_merge_request_spec.rb +++ b/spec/features/merge_request/user_squashes_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User squashes a merge request', :js, feature_category: :code_review do +RSpec.describe 'User squashes a merge request', :js, feature_category: :code_review_workflow do let(:user) { create(:user) } let(:project) { create(:project, :repository) } let(:source_branch) { 'csv' } diff --git a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb index 5a5494a2fe9..efd88df0f97 100644 --- a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb +++ b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User comments on a diff', :js, feature_category: :code_review do +RSpec.describe 'User comments on a diff', :js, feature_category: :code_review_workflow do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_toggles_whitespace_changes_spec.rb b/spec/features/merge_request/user_toggles_whitespace_changes_spec.rb index 993eb59cb74..15715a6d775 100644 --- a/spec/features/merge_request/user_toggles_whitespace_changes_spec.rb +++ b/spec/features/merge_request/user_toggles_whitespace_changes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User toggles whitespace changes', :js, feature_category: :code_review do +RSpec.describe 'Merge request > User toggles whitespace changes', :js, feature_category: :code_review_workflow do let(:merge_request) { create(:merge_request) } let(:project) { merge_request.project } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb b/spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb index 5095457509a..5770f5ab94d 100644 --- a/spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb +++ b/spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'Merge Request > User tries to access private project information through the new mr page', -feature_category: :code_review do +feature_category: :code_review_workflow do let(:current_user) { create(:user) } let(:private_project) do create(:project, :public, :repository, diff --git a/spec/features/merge_request/user_uses_quick_actions_spec.rb b/spec/features/merge_request/user_uses_quick_actions_spec.rb index 99befbace74..1a88918da65 100644 --- a/spec/features/merge_request/user_uses_quick_actions_spec.rb +++ b/spec/features/merge_request/user_uses_quick_actions_spec.rb @@ -8,7 +8,7 @@ require 'spec_helper' # Because this kind of spec takes more time to run there is no need to add new ones # for each existing quick action unless they test something not tested by existing tests. RSpec.describe 'Merge request > User uses quick actions', :js, :use_clean_rails_redis_caching, -feature_category: :code_review do +feature_category: :code_review_workflow do include Spec::Support::Helpers::Features::NotesHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_views_auto_expanding_diff_spec.rb b/spec/features/merge_request/user_views_auto_expanding_diff_spec.rb index 19a77a9192c..57072421986 100644 --- a/spec/features/merge_request/user_views_auto_expanding_diff_spec.rb +++ b/spec/features/merge_request/user_views_auto_expanding_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views diffs file-by-file', :js, feature_category: :code_review do +RSpec.describe 'User views diffs file-by-file', :js, feature_category: :code_review_workflow do let(:merge_request) do create(:merge_request, source_branch: 'squash-large-files', source_project: project, target_project: project) end diff --git a/spec/features/merge_request/user_views_diffs_commit_spec.rb b/spec/features/merge_request/user_views_diffs_commit_spec.rb index 84cbfb35539..ba1b41982c9 100644 --- a/spec/features/merge_request/user_views_diffs_commit_spec.rb +++ b/spec/features/merge_request/user_views_diffs_commit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views diff by commit', :js, feature_category: :code_review do +RSpec.describe 'User views diff by commit', :js, feature_category: :code_review_workflow do let(:merge_request) do create(:merge_request_with_diffs, source_project: project, target_project: project, source_branch: 'merge-test') end diff --git a/spec/features/merge_request/user_views_diffs_file_by_file_spec.rb b/spec/features/merge_request/user_views_diffs_file_by_file_spec.rb index 9db6f86e14d..4d59bd4ccb0 100644 --- a/spec/features/merge_request/user_views_diffs_file_by_file_spec.rb +++ b/spec/features/merge_request/user_views_diffs_file_by_file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views diffs file-by-file', :js, feature_category: :code_review do +RSpec.describe 'User views diffs file-by-file', :js, feature_category: :code_review_workflow do let(:merge_request) do create(:merge_request_with_diffs, source_project: project, target_project: project, source_branch: 'merge-test') end diff --git a/spec/features/merge_request/user_views_diffs_spec.rb b/spec/features/merge_request/user_views_diffs_spec.rb index 7363f6dfb32..6b759625c61 100644 --- a/spec/features/merge_request/user_views_diffs_spec.rb +++ b/spec/features/merge_request/user_views_diffs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views diffs', :js, feature_category: :code_review do +RSpec.describe 'User views diffs', :js, feature_category: :code_review_workflow do let(:merge_request) do create(:merge_request_with_diffs, source_project: project, target_project: project, source_branch: 'merge-test') end diff --git a/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb b/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb index 2a9275adfcf..8f448d06db1 100644 --- a/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb +++ b/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb @@ -6,7 +6,7 @@ require 'spec_helper' # updated. # This can occur when the fork a merge request is created from is in the process # of being destroyed. -RSpec.describe 'User views merged merge request from deleted fork', feature_category: :code_review do +RSpec.describe 'User views merged merge request from deleted fork', feature_category: :code_review_workflow do include ProjectForksHelper let(:project) { create(:project, :repository) } diff --git a/spec/features/merge_request/user_views_open_merge_request_spec.rb b/spec/features/merge_request/user_views_open_merge_request_spec.rb index 8b9e973217d..e481e3f2dfb 100644 --- a/spec/features/merge_request/user_views_open_merge_request_spec.rb +++ b/spec/features/merge_request/user_views_open_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views an open merge request', feature_category: :code_review do +RSpec.describe 'User views an open merge request', feature_category: :code_review_workflow do let(:merge_request) do create(:merge_request, source_project: project, target_project: project, description: '# Description header') end diff --git a/spec/features/merge_requests/admin_views_hidden_merge_requests_spec.rb b/spec/features/merge_requests/admin_views_hidden_merge_requests_spec.rb new file mode 100644 index 00000000000..e7727fbb9dc --- /dev/null +++ b/spec/features/merge_requests/admin_views_hidden_merge_requests_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Admin views hidden merge requests', feature_category: :insider_threat do + context 'when signed in as admin and viewing a hidden merge request' do + let_it_be(:admin) { create(:admin) } + let_it_be(:author) { create(:user, :banned) } + let_it_be(:project) { create(:project) } + let!(:merge_request) { create(:merge_request, source_project: project, author: author) } + + before do + sign_in(admin) + gitlab_enable_admin_mode_sign_in(admin) + visit(project_merge_requests_path(project)) + end + + it 'shows a hidden merge request icon' do + page.within("#merge_request_#{merge_request.id}") do + tooltip = format(_('This %{issuable} is hidden because its author has been banned'), + issuable: _('merge request')) + expect(page).to have_css("span[title='#{tooltip}']") + expect(page).to have_css('svg[data-testid="spam-icon"]') + end + end + end +end diff --git a/spec/features/merge_requests/filters_generic_behavior_spec.rb b/spec/features/merge_requests/filters_generic_behavior_spec.rb index 0d6b5edcbab..197b9fa770d 100644 --- a/spec/features/merge_requests/filters_generic_behavior_spec.rb +++ b/spec/features/merge_requests/filters_generic_behavior_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > Filters generic behavior', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > Filters generic behavior', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/rss_spec.rb b/spec/features/merge_requests/rss_spec.rb index 4c73ce3b684..9c9f46278f6 100644 --- a/spec/features/merge_requests/rss_spec.rb +++ b/spec/features/merge_requests/rss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Merge Requests RSS', feature_category: :code_review do +RSpec.describe 'Project Merge Requests RSS', feature_category: :code_review_workflow do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, :repository, group: group, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } diff --git a/spec/features/merge_requests/user_exports_as_csv_spec.rb b/spec/features/merge_requests/user_exports_as_csv_spec.rb index aedd7ef4d79..23ac1b264ad 100644 --- a/spec/features/merge_requests/user_exports_as_csv_spec.rb +++ b/spec/features/merge_requests/user_exports_as_csv_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > Exports as CSV', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > Exports as CSV', :js, feature_category: :code_review_workflow do let!(:project) { create(:project, :public, :repository) } let!(:user) { project.creator } let!(:open_mr) { create(:merge_request, title: 'Bugfix1', source_project: project, target_project: project, source_branch: 'bugfix1') } diff --git a/spec/features/merge_requests/user_filters_by_approvals_spec.rb b/spec/features/merge_requests/user_filters_by_approvals_spec.rb index 56c8a65385c..f2748c2549f 100644 --- a/spec/features/merge_requests/user_filters_by_approvals_spec.rb +++ b/spec/features/merge_requests/user_filters_by_approvals_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > User filters', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let_it_be(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_assignees_spec.rb b/spec/features/merge_requests/user_filters_by_assignees_spec.rb index 818cf6f076f..22e38679c0f 100644 --- a/spec/features/merge_requests/user_filters_by_assignees_spec.rb +++ b/spec/features/merge_requests/user_filters_by_assignees_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by assignees', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > User filters by assignees', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_deployments_spec.rb b/spec/features/merge_requests/user_filters_by_deployments_spec.rb index 5f7d2fa9f9a..06997806a74 100644 --- a/spec/features/merge_requests/user_filters_by_deployments_spec.rb +++ b/spec/features/merge_requests/user_filters_by_deployments_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by deployments', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > User filters by deployments', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let!(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_draft_spec.rb b/spec/features/merge_requests/user_filters_by_draft_spec.rb index d50d7edaefb..2b6a2062893 100644 --- a/spec/features/merge_requests/user_filters_by_draft_spec.rb +++ b/spec/features/merge_requests/user_filters_by_draft_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by draft', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > User filters by draft', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_labels_spec.rb b/spec/features/merge_requests/user_filters_by_labels_spec.rb index 030eb1b6431..84d75eb221e 100644 --- a/spec/features/merge_requests/user_filters_by_labels_spec.rb +++ b/spec/features/merge_requests/user_filters_by_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by labels', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > User filters by labels', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_milestones_spec.rb b/spec/features/merge_requests/user_filters_by_milestones_spec.rb index abdb6c7787b..75bbc3a14a8 100644 --- a/spec/features/merge_requests/user_filters_by_milestones_spec.rb +++ b/spec/features/merge_requests/user_filters_by_milestones_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by milestones', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > User filters by milestones', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb b/spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb index ae171f47ec3..9f10533bb72 100644 --- a/spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb +++ b/spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge requests > User filters by multiple criteria', :js, feature_category: :code_review do +RSpec.describe 'Merge requests > User filters by multiple criteria', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let!(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_target_branch_spec.rb b/spec/features/merge_requests/user_filters_by_target_branch_spec.rb index e0755695f5c..cc30c274b51 100644 --- a/spec/features/merge_requests/user_filters_by_target_branch_spec.rb +++ b/spec/features/merge_requests/user_filters_by_target_branch_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by target branch', :js, feature_category: :code_review do +RSpec.describe 'Merge Requests > User filters by target branch', :js, feature_category: :code_review_workflow do include FilteredSearchHelpers let!(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_lists_merge_requests_spec.rb b/spec/features/merge_requests/user_lists_merge_requests_spec.rb index d9c3bcda0d3..3171ae89fe6 100644 --- a/spec/features/merge_requests/user_lists_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_lists_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge requests > User lists merge requests', feature_category: :code_review do +RSpec.describe 'Merge requests > User lists merge requests', feature_category: :code_review_workflow do include MergeRequestHelpers include SortingHelper diff --git a/spec/features/merge_requests/user_mass_updates_spec.rb b/spec/features/merge_requests/user_mass_updates_spec.rb index 133017d5b25..5a9054ece48 100644 --- a/spec/features/merge_requests/user_mass_updates_spec.rb +++ b/spec/features/merge_requests/user_mass_updates_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge requests > User mass updates', :js, feature_category: :code_review do +RSpec.describe 'Merge requests > User mass updates', :js, feature_category: :code_review_workflow do let(:project) { create(:project, :repository) } let(:user) { project.creator } let(:user2) { create(:user) } diff --git a/spec/features/merge_requests/user_sees_empty_state_spec.rb b/spec/features/merge_requests/user_sees_empty_state_spec.rb index a50ea300249..f5803a47b2c 100644 --- a/spec/features/merge_requests/user_sees_empty_state_spec.rb +++ b/spec/features/merge_requests/user_sees_empty_state_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees empty state', feature_category: :code_review do +RSpec.describe 'Merge request > User sees empty state', feature_category: :code_review_workflow do include ProjectForksHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_sorts_merge_requests_spec.rb b/spec/features/merge_requests/user_sorts_merge_requests_spec.rb index d268cfc59f3..cf99f2cb94a 100644 --- a/spec/features/merge_requests/user_sorts_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_sorts_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User sorts merge requests', :js, feature_category: :code_review do +RSpec.describe 'User sorts merge requests', :js, feature_category: :code_review_workflow do include CookieHelper include Spec::Support::Helpers::Features::SortingHelpers diff --git a/spec/features/merge_requests/user_views_all_merge_requests_spec.rb b/spec/features/merge_requests/user_views_all_merge_requests_spec.rb index b55e4bd153f..c2eb43d7476 100644 --- a/spec/features/merge_requests/user_views_all_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_views_all_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views all merge requests', feature_category: :code_review do +RSpec.describe 'User views all merge requests', feature_category: :code_review_workflow do let!(:closed_merge_request) { create(:closed_merge_request, source_project: project, target_project: project) } let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:project) { create(:project, :public) } diff --git a/spec/features/merge_requests/user_views_closed_merge_requests_spec.rb b/spec/features/merge_requests/user_views_closed_merge_requests_spec.rb index 4c2598dcc9c..175e6bacba5 100644 --- a/spec/features/merge_requests/user_views_closed_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_views_closed_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views closed merge requests', feature_category: :code_review do +RSpec.describe 'User views closed merge requests', feature_category: :code_review_workflow do let!(:closed_merge_request) { create(:closed_merge_request, source_project: project, target_project: project) } let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:project) { create(:project, :public) } diff --git a/spec/features/merge_requests/user_views_merged_merge_requests_spec.rb b/spec/features/merge_requests/user_views_merged_merge_requests_spec.rb index 2526f1a855b..54b11c1ee1e 100644 --- a/spec/features/merge_requests/user_views_merged_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_views_merged_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views merged merge requests', feature_category: :code_review do +RSpec.describe 'User views merged merge requests', feature_category: :code_review_workflow do let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let!(:merged_merge_request) { create(:merged_merge_request, source_project: project, target_project: project) } let(:project) { create(:project, :public) } diff --git a/spec/features/merge_requests/user_views_open_merge_requests_spec.rb b/spec/features/merge_requests/user_views_open_merge_requests_spec.rb index 3c53bc5e283..1a2024a5511 100644 --- a/spec/features/merge_requests/user_views_open_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_views_open_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views open merge requests', feature_category: :code_review do +RSpec.describe 'User views open merge requests', feature_category: :code_review_workflow do let_it_be(:user) { create(:user) } shared_examples_for 'shows merge requests' do diff --git a/spec/features/milestone_spec.rb b/spec/features/milestone_spec.rb index 50cd6b9e801..61098a8f2cd 100644 --- a/spec/features/milestone_spec.rb +++ b/spec/features/milestone_spec.rb @@ -128,8 +128,8 @@ RSpec.describe 'Milestone', feature_category: :team_planning do click_link 'Reopen Milestone' - expect(page).not_to have_selector('.gl-bg-red-500') - expect(page).to have_selector('.gl-bg-green-500') + expect(page).not_to have_selector('.badge-danger') + expect(page).to have_selector('.badge-success') end end @@ -139,8 +139,8 @@ RSpec.describe 'Milestone', feature_category: :team_planning do click_link 'Reopen Milestone' - expect(page).not_to have_selector('.gl-bg-red-500') - expect(page).to have_selector('.gl-bg-green-500') + expect(page).not_to have_selector('.badge-danger') + expect(page).to have_selector('.badge-success') end end end diff --git a/spec/features/nav/new_nav_toggle_spec.rb b/spec/features/nav/new_nav_toggle_spec.rb index f040d801cfb..8e5cc7df053 100644 --- a/spec/features/nav/new_nav_toggle_spec.rb +++ b/spec/features/nav/new_nav_toggle_spec.rb @@ -48,14 +48,19 @@ RSpec.describe 'new navigation toggle', :js, feature_category: :navigation do expect(user.reload.use_new_navigation).to eq true end + + it 'shows the old navigation' do + expect(page).to have_selector('.js-navbar') + expect(page).not_to have_selector('[data-testid="super-sidebar"]') + end end context 'when user has new nav enabled' do let(:user_preference) { true } it 'allows to disable new nav', :aggregate_failures do - within '.js-nav-user-dropdown' do - find('a[data-toggle="dropdown"]').click + within '[data-testid="super-sidebar"] [data-testid="user-dropdown"]' do + find('button').click expect(page).to have_content('Navigation redesign') toggle = page.find('.gl-toggle.is-checked') @@ -66,6 +71,11 @@ RSpec.describe 'new navigation toggle', :js, feature_category: :navigation do expect(user.reload.use_new_navigation).to eq false end + + it 'shows the new navigation' do + expect(page).not_to have_selector('.js-navbar') + expect(page).to have_selector('[data-testid="super-sidebar"]') + end end end end diff --git a/spec/features/oauth_registration_spec.rb b/spec/features/oauth_registration_spec.rb index 48996164bd3..6e1445a9ed6 100644 --- a/spec/features/oauth_registration_spec.rb +++ b/spec/features/oauth_registration_spec.rb @@ -32,7 +32,6 @@ RSpec.describe 'OAuth Registration', :js, :allow_forgery_protection, feature_cat with_them do before do stub_omniauth_provider(provider) - stub_feature_flags(update_oauth_registration_flow: true) end context 'when block_auto_created_users is true' do @@ -120,22 +119,6 @@ RSpec.describe 'OAuth Registration', :js, :allow_forgery_protection, feature_cat end end - context 'when update_oauth_registration_flow is disabled' do - before do - stub_omniauth_provider(:github) - stub_omniauth_setting(block_auto_created_users: false) - stub_feature_flags(update_oauth_registration_flow: false) - - enforce_terms - end - - it 'presents the terms page' do - register_via(:github, uid, email) - - expect(page).to have_content('These are the terms') - end - end - def fill_in_welcome_form select 'Software Developer', from: 'user_role' click_button 'Get started!' diff --git a/spec/features/profiles/chat_names_spec.rb b/spec/features/profiles/chat_names_spec.rb index b3d65ab3a3c..14fdb8ba56f 100644 --- a/spec/features/profiles/chat_names_spec.rb +++ b/spec/features/profiles/chat_names_spec.rb @@ -15,7 +15,7 @@ RSpec.describe 'Profile > Chat', feature_category: :users do { team_id: 'T00', team_domain: 'my_chat_team', user_id: 'U01', user_name: 'my_chat_user' } end - let!(:authorize_url) { ChatNames::AuthorizeUserService.new(integration, params).execute } + let!(:authorize_url) { ChatNames::AuthorizeUserService.new(params).execute } let(:authorize_path) { URI.parse(authorize_url).request_uri } before do diff --git a/spec/features/profiles/user_visits_profile_preferences_page_spec.rb b/spec/features/profiles/user_visits_profile_preferences_page_spec.rb index 9eee1b85e5e..e3940973c46 100644 --- a/spec/features/profiles/user_visits_profile_preferences_page_spec.rb +++ b/spec/features/profiles/user_visits_profile_preferences_page_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'User visits the profile preferences page', :js, feature_category: :users do - include Select2Helper + include ListboxHelpers let(:user) { create(:user) } @@ -30,7 +30,7 @@ RSpec.describe 'User visits the profile preferences page', :js, feature_category describe 'User changes their default dashboard', :js do it 'creates a flash message' do - select2('stars', from: '#user_dashboard') + select_from_listbox 'Starred Projects', from: 'Your Projects', exact_item_text: true click_button 'Save changes' wait_for_requests @@ -39,7 +39,7 @@ RSpec.describe 'User visits the profile preferences page', :js, feature_category end it 'updates their preference' do - select2('stars', from: '#user_dashboard') + select_from_listbox 'Starred Projects', from: 'Your Projects', exact_item_text: true click_button 'Save changes' wait_for_requests @@ -58,7 +58,7 @@ RSpec.describe 'User visits the profile preferences page', :js, feature_category describe 'User changes their language', :js do it 'creates a flash message', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/31404' do - select2('en', from: '#user_preferred_language') + select_from_listbox 'English', from: 'English' click_button 'Save changes' wait_for_requests @@ -68,7 +68,7 @@ RSpec.describe 'User visits the profile preferences page', :js, feature_category it 'updates their preference' do wait_for_requests - select2('pt_BR', from: '#user_preferred_language') + select_from_listbox 'Portuguese', from: 'English' click_button 'Save changes' wait_for_requests diff --git a/spec/features/project_variables_spec.rb b/spec/features/project_variables_spec.rb index d1258937ce6..1a951980141 100644 --- a/spec/features/project_variables_spec.rb +++ b/spec/features/project_variables_spec.rb @@ -24,8 +24,9 @@ RSpec.describe 'Project variables', :js, feature_category: :pipeline_authoring d page.within('#add-ci-variable') do fill_in 'Key', with: 'akey' find('#ci-variable-value').set('akey_value') - find('[data-testid="environment-scope"]').click - find('[data-testid="ci-environment-search"]').set('review/*') + + click_button('All (default)') + fill_in 'Search', with: 'review/*' find('[data-testid="create-wildcard-button"]').click click_button('Add variable') diff --git a/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb b/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb index a497be4cbc3..b723bd5690a 100644 --- a/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb +++ b/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb @@ -24,12 +24,6 @@ RSpec.describe 'User follows pipeline suggest nudge spec when feature is enabled expect(file_name.value).to have_content('.gitlab-ci.yml') end - it 'chooses the .gitlab-ci.yml Template Type' do - template_type = page.find(:css, '.template-type-selector .dropdown-toggle-text') - - expect(template_type.text).to have_content('.gitlab-ci.yml') - end - it 'displays suggest_gitlab_ci_yml popover' do page.find(:css, '.gitlab-ci-yml-selector').click @@ -60,12 +54,6 @@ RSpec.describe 'User follows pipeline suggest nudge spec when feature is enabled expect(file_name.value).not_to have_content('.gitlab-ci.yml') end - it 'does not choose the .gitlab-ci.yml Template Type' do - template_type = page.find(:css, '.template-type-selector .dropdown-toggle-text') - - expect(template_type.text).to have_content('Select a template type') - end - it 'does not display suggest_gitlab_ci_yml popover' do popover_selector = '.b-popover.suggest-gitlab-ci-yml' diff --git a/spec/features/projects/commit/cherry_pick_spec.rb b/spec/features/projects/commit/cherry_pick_spec.rb index dc8b84283a1..4b9b692b652 100644 --- a/spec/features/projects/commit/cherry_pick_spec.rb +++ b/spec/features/projects/commit/cherry_pick_spec.rb @@ -78,9 +78,9 @@ RSpec.describe 'Cherry-pick Commits', :js, feature_category: :source_code_manage end page.within("#{modal_selector} .dropdown-menu") do - find('[data-testid="dropdown-search-box"]').set('feature') + fill_in 'Search branches', with: 'feature' wait_for_requests - click_button 'feature' + find('.gl-dropdown-item-text-wrapper', exact_text: 'feature').click end submit_cherry_pick diff --git a/spec/features/projects/diffs/diff_show_spec.rb b/spec/features/projects/diffs/diff_show_spec.rb index 973c61de31d..eb700e10141 100644 --- a/spec/features/projects/diffs/diff_show_spec.rb +++ b/spec/features/projects/diffs/diff_show_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Diff file viewer', :js, :with_clean_rails_cache, feature_category: :code_review do +RSpec.describe 'Diff file viewer', :js, :with_clean_rails_cache, feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } def visit_commit(sha, anchor: nil) diff --git a/spec/features/projects/environments/environment_spec.rb b/spec/features/projects/environments/environment_spec.rb index 75913082803..91401d19fd1 100644 --- a/spec/features/projects/environments/environment_spec.rb +++ b/spec/features/projects/environments/environment_spec.rb @@ -52,6 +52,16 @@ RSpec.describe 'Environment', feature_category: :projects do end end + context 'without deployments' do + before do + visit_environment(environment) + end + + it 'does not show deployments', :js do + expect(page).to have_content('You don\'t have any deployments right now.') + end + end + context 'with deployments' do before do visit_environment(environment) diff --git a/spec/features/projects/files/template_type_dropdown_spec.rb b/spec/features/projects/files/template_type_dropdown_spec.rb deleted file mode 100644 index 990b118d172..00000000000 --- a/spec/features/projects/files/template_type_dropdown_spec.rb +++ /dev/null @@ -1,143 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Projects > Files > Template type dropdown selector', :js, feature_category: :projects do - let(:project) { create(:project, :repository) } - let(:user) { project.first_owner } - - before do - sign_in user - end - - context 'editing a non-matching file' do - before do - create_and_edit_file('.random-file.js') - end - - it 'not displayed' do - check_type_selector_display(false) - end - - it 'selects every template type correctly' do - fill_in 'file_path', with: '.gitignore' - try_selecting_all_types - end - - it 'updates template type toggle value when template is chosen' do - fill_in 'file_path', with: '.gitignore' - select_template('gitignore', 'Actionscript') - check_type_selector_toggle_text('.gitignore') - end - end - - context 'editing a matching file' do - before do - visit project_edit_blob_path(project, File.join(project.default_branch, 'LICENSE')) - end - - it 'displayed' do - check_type_selector_display(true) - end - - it 'selects every template type correctly' do - try_selecting_all_types - end - - context 'user previews changes' do - before do - click_link 'Preview changes' - end - - it 'type selector is hidden and shown correctly' do - check_type_selector_display(false) - click_link 'Write' - check_type_selector_display(true) - end - end - end - - context 'creating a matching file' do - before do - visit project_new_blob_path(project, 'master', file_name: '.gitignore') - end - - it 'is displayed' do - check_type_selector_display(true) - end - - it 'toggle is set to the correct value' do - select_template('gitignore', 'Actionscript') - check_type_selector_toggle_text('.gitignore') - end - - it 'sets the toggle text when selecting the template type' do - select_template_type('.gitignore') - check_type_selector_toggle_text('.gitignore') - end - - it 'selects every template type correctly' do - try_selecting_all_types - end - end - - context 'creating a file' do - before do - visit project_new_blob_path(project, project.default_branch) - end - - it 'type selector is shown' do - check_type_selector_display(true) - end - - it 'toggle is set to the proper value' do - check_type_selector_toggle_text('Select a template type') - end - - it 'selects every template type correctly' do - try_selecting_all_types - end - end -end - -def check_type_selector_display(is_visible) - count = is_visible ? 1 : 0 - expect(page).to have_css('.js-template-type-selector', count: count) -end - -def try_selecting_all_types - try_selecting_template_type('LICENSE', 'Apply a template') - try_selecting_template_type('Dockerfile', 'Apply a template') - try_selecting_template_type('.gitlab-ci.yml', 'Apply a template') - try_selecting_template_type('.gitignore', 'Apply a template') -end - -def try_selecting_template_type(template_type, selector_label) - select_template_type(template_type) - check_template_selector_display(selector_label) -end - -def select_template_type(template_type) - find('.js-template-type-selector').click - find('.dropdown-content li', text: template_type).click -end - -def select_template(type, template) - find(".js-#{type}-selector-wrap").click - find('.dropdown-content li', text: template).click -end - -def check_template_selector_display(content) - expect(page).to have_content(content) -end - -def check_type_selector_toggle_text(template_type) - dropdown_toggle_button = find('.template-type-selector .dropdown-toggle-text') - expect(dropdown_toggle_button).to have_content(template_type) -end - -def create_and_edit_file(file_name) - visit project_new_blob_path(project, 'master', file_name: file_name) - click_button "Commit changes" - visit project_edit_blob_path(project, File.join(project.default_branch, file_name)) -end diff --git a/spec/features/projects/files/undo_template_spec.rb b/spec/features/projects/files/undo_template_spec.rb index afc9a5fd232..0dfed209ce9 100644 --- a/spec/features/projects/files/undo_template_spec.rb +++ b/spec/features/projects/files/undo_template_spec.rb @@ -13,19 +13,6 @@ RSpec.describe 'Projects > Files > Template Undo Button', :js, feature_category: context 'editing a matching file and applying a template' do before do visit project_edit_blob_path(project, File.join(project.default_branch, "LICENSE")) - select_file_template_type('LICENSE') - select_file_template('.js-license-selector', 'Apache License 2.0') - end - - it 'reverts template application' do - try_template_undo('http://www.apache.org/licenses/', 'Apply a template') - end - end - - context 'creating a non-matching file' do - before do - visit project_new_blob_path(project, 'master') - select_file_template_type('LICENSE') select_file_template('.js-license-selector', 'Apache License 2.0') end @@ -53,7 +40,6 @@ end def check_content_reverted(template_content) find('.b-toaster a', text: 'Undo').click expect(page).not_to have_content(template_content) - expect(page).to have_css('.template-type-selector .dropdown-toggle-text') end def select_file_template(template_selector_selector, template_name) @@ -61,8 +47,3 @@ def select_file_template(template_selector_selector, template_name) find('.dropdown-content li', text: template_name).click wait_for_requests end - -def select_file_template_type(template_type) - find('.js-template-type-selector').click - find('.dropdown-content li', text: template_type).click -end diff --git a/spec/features/projects/fork_spec.rb b/spec/features/projects/fork_spec.rb index 3867f7fd086..8b484141a95 100644 --- a/spec/features/projects/fork_spec.rb +++ b/spec/features/projects/fork_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' RSpec.describe 'Project fork', feature_category: :projects do + include ListboxHelpers include ProjectForksHelper let(:user) { create(:user) } @@ -137,10 +138,9 @@ RSpec.describe 'Project fork', feature_category: :projects do let(:user) { create(:group_member, :maintainer, user: create(:user), group: group).user } def submit_form(group_obj = group) - find('[data-testid="select_namespace_dropdown"]').click - find('[data-testid="select_namespace_dropdown_search_field"]').fill_in(with: group_obj.name) - click_button group_obj.name - + click_button(s_('ForkProject|Select a namespace')) + send_keys group_obj.name + select_listbox_item(group_obj.name) click_button 'Fork project' end @@ -151,6 +151,13 @@ RSpec.describe 'Project fork', feature_category: :projects do expect(page).to have_content 'Forked from' end + it 'redirects to the source project when cancel is clicked' do + visit new_project_fork_path(project) + click_on 'Cancel' + + expect(page).to have_current_path(project_path(project)) + end + it 'shows the new forked project on the forks page' do visit new_project_fork_path(project) submit_form diff --git a/spec/features/projects/import_export/export_file_spec.rb b/spec/features/projects/import_export/export_file_spec.rb index 8986ce91ae3..0230c9e835b 100644 --- a/spec/features/projects/import_export/export_file_spec.rb +++ b/spec/features/projects/import_export/export_file_spec.rb @@ -20,7 +20,9 @@ RSpec.describe 'Import/Export - project export integration test', :js, feature_c } end - let(:safe_hashes) { { yaml_variables: %w[key value public] } } + let(:safe_hashes) do + { yaml_variables: %w[key value public] } + end let(:project) { setup_project } diff --git a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb index 858d6751afa..55aa6db23c7 100644 --- a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb @@ -18,7 +18,7 @@ RSpec.describe 'User uploads new design', :js, feature_category: :design_managem context "when the feature is available" do let(:feature_enabled) { true } - it 'uploads designs' do + it 'uploads designs', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/358845' do upload_design(logo_fixture, count: 1) expect(page).to have_selector('.js-design-list-item', count: 1) diff --git a/spec/features/projects/jobs_spec.rb b/spec/features/projects/jobs_spec.rb index 557a20ff2d6..4734a607ef1 100644 --- a/spec/features/projects/jobs_spec.rb +++ b/spec/features/projects/jobs_spec.rb @@ -739,7 +739,12 @@ RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state, feature_category: :proj it 'shows manual action empty state', :js do expect(page).to have_content(job.detailed_status(user).illustration[:title]) expect(page).to have_content('This job requires a manual action') - expect(page).to have_content('This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes.') + expect(page).to have_content( + _( + 'This job does not start automatically and must be started manually. ' \ + 'You can add CI/CD variables below for last-minute configuration changes before starting the job.' + ) + ) expect(page).to have_button('Trigger this manual action') end @@ -772,7 +777,12 @@ RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state, feature_category: :proj wait_for_requests expect(page).to have_content('This job requires a manual action') - expect(page).to have_content('This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes.') + expect(page).to have_content( + _( + 'This job does not start automatically and must be started manually. ' \ + 'You can add CI/CD variables below for last-minute configuration changes before starting the job.' + ) + ) expect(page).to have_button('Trigger this manual action') end end diff --git a/spec/features/projects/labels/sort_labels_spec.rb b/spec/features/projects/labels/sort_labels_spec.rb index 378a575348e..74ce2f40df8 100644 --- a/spec/features/projects/labels/sort_labels_spec.rb +++ b/spec/features/projects/labels/sort_labels_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Sort labels', :js, feature_category: :team_planning do + include ListboxHelpers + let(:user) { create(:user) } let(:project) { create(:project) } let!(:label1) { create(:label, title: 'Foo', description: 'Lorem ipsum', project: project) } @@ -28,16 +30,16 @@ RSpec.describe 'Sort labels', :js, feature_category: :team_planning do it 'sorts by date' do click_button 'Name' - sort_options = find('ul[role="listbox"]').all('li').collect(&:text) - - expect(sort_options[0]).to eq('Name') - expect(sort_options[1]).to eq('Name, descending') - expect(sort_options[2]).to eq('Last created') - expect(sort_options[3]).to eq('Oldest created') - expect(sort_options[4]).to eq('Updated date') - expect(sort_options[5]).to eq('Oldest updated') + expect_listbox_items([ + 'Name', + 'Name, descending', + 'Last created', + 'Oldest created', + 'Updated date', + 'Oldest updated' + ]) - find('li', text: 'Name, descending').click + select_listbox_item('Name, descending') # assert default sorting within '.other-labels' do diff --git a/spec/features/projects/members/manage_members_spec.rb b/spec/features/projects/members/manage_members_spec.rb index 3ffa402dc2c..615ef1b03dd 100644 --- a/spec/features/projects/members/manage_members_spec.rb +++ b/spec/features/projects/members/manage_members_spec.rb @@ -139,17 +139,15 @@ RSpec.describe 'Projects > Members > Manage members', :js, feature_category: :on it 'can only remove non-Owner members' do page.within find_member_row(project_owner) do - expect(page).not_to have_button('Remove member') + expect(page).not_to have_selector user_action_dropdown end - # Open modal - page.within find_member_row(project_developer) do - click_button 'Remove member' - end + show_actions_for_username(project_developer) + click_button _('Remove member') within_modal do expect(page).to have_unchecked_field 'Also unassign this user from related issues and merge requests' - click_button('Remove member') + click_button _('Remove member') end wait_for_requests @@ -163,18 +161,12 @@ RSpec.describe 'Projects > Members > Manage members', :js, feature_category: :on let(:current_user) { group_owner } it 'can remove any direct member' do - page.within find_member_row(project_owner) do - expect(page).to have_button('Remove member') - end - - # Open modal - page.within find_member_row(project_owner) do - click_button 'Remove member' - end + show_actions_for_username(project_owner) + click_button _('Remove member') within_modal do expect(page).to have_unchecked_field 'Also unassign this user from related issues and merge requests' - click_button('Remove member') + click_button _('Remove member') end wait_for_requests diff --git a/spec/features/projects/members/sorting_spec.rb b/spec/features/projects/members/sorting_spec.rb index 5c72d9efeb3..6df1e974f42 100644 --- a/spec/features/projects/members/sorting_spec.rb +++ b/spec/features/projects/members/sorting_spec.rb @@ -48,7 +48,7 @@ RSpec.describe 'Projects > Members > Sorting', :js, feature_category: :subgroups expect(first_row.text).to have_content(maintainer.name) expect(second_row.text).to have_content(developer.name) - expect_sort_by('Created on', :asc) + expect_sort_by('User created', :asc) end it 'sorts by user created on descending' do @@ -57,7 +57,7 @@ RSpec.describe 'Projects > Members > Sorting', :js, feature_category: :subgroups expect(first_row.text).to have_content(developer.name) expect(second_row.text).to have_content(maintainer.name) - expect_sort_by('Created on', :desc) + expect_sort_by('User created', :desc) end it 'sorts by last activity ascending' do diff --git a/spec/features/projects/milestones/milestones_sorting_spec.rb b/spec/features/projects/milestones/milestones_sorting_spec.rb index 8a8e7d07435..9bf04164a09 100644 --- a/spec/features/projects/milestones/milestones_sorting_spec.rb +++ b/spec/features/projects/milestones/milestones_sorting_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Milestones sorting', :js, feature_category: :team_planning do + include ListboxHelpers + let(:user) { create(:user) } let(:project) { create(:project, name: 'test', namespace: user.namespace) } let(:milestones_for_sort_by) do @@ -40,14 +42,13 @@ RSpec.describe 'Milestones sorting', :js, feature_category: :team_planning do # assert milestones listed for given sort order selected_sort_order = 'Due soon' milestones_for_sort_by.each do |sort_by, expected_milestones| - within '[data-testid=milestone_sort_by_dropdown]' do - click_button selected_sort_order - milestones = find('ul[role="listbox"]').all('li').map(&:text) - expect(milestones).to eq(ordered_milestones) + click_button selected_sort_order - find('li', text: sort_by).click - expect(page).to have_button(sort_by) - end + expect_listbox_items(ordered_milestones) + + select_listbox_item(sort_by) + + expect(page).to have_button(sort_by) within '.milestones' do expect(page.all('ul.content-list > li strong > a').map(&:text)).to eq(expected_milestones) diff --git a/spec/features/projects/navbar_spec.rb b/spec/features/projects/navbar_spec.rb index 4d85b5cfb2e..6090d132e3a 100644 --- a/spec/features/projects/navbar_spec.rb +++ b/spec/features/projects/navbar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project navbar', feature_category: :projects do +RSpec.describe 'Project navbar', :with_license, feature_category: :projects do include NavbarStructureHelper include WaitForRequests @@ -15,6 +15,8 @@ RSpec.describe 'Project navbar', feature_category: :projects do before do sign_in(user) + stub_feature_flags(show_pages_in_deployments_menu: false) + stub_config(registry: { enabled: false }) stub_feature_flags(harbor_registry_integration: false) insert_package_nav(_('Deployments')) diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb index 769ad5bf61a..c6a6ee68185 100644 --- a/spec/features/projects/new_project_spec.rb +++ b/spec/features/projects/new_project_spec.rb @@ -552,7 +552,7 @@ RSpec.describe 'New project', :js, feature_category: :projects do it_behaves_like 'has instructions to enable OAuth' end - context 'as an admin' do + context 'as an admin', :do_not_mock_admin_mode_setting do let(:user) { create(:admin) } let(:oauth_config_instructions) { 'To enable importing projects from Bitbucket, as administrator you need to configure OAuth integration' } @@ -571,7 +571,7 @@ RSpec.describe 'New project', :js, feature_category: :projects do it_behaves_like 'has instructions to enable OAuth' end - context 'as an admin' do + context 'as an admin', :do_not_mock_admin_mode_setting do let(:user) { create(:admin) } let(:oauth_config_instructions) { 'To enable importing projects from GitLab.com, as administrator you need to configure OAuth integration' } diff --git a/spec/features/projects/pages/user_edits_settings_spec.rb b/spec/features/projects/pages/user_edits_settings_spec.rb index 7ceefdecbae..8c713b6f73a 100644 --- a/spec/features/projects/pages/user_edits_settings_spec.rb +++ b/spec/features/projects/pages/user_edits_settings_spec.rb @@ -10,6 +10,8 @@ RSpec.describe 'Pages edits pages settings', :js, feature_category: :pages do before do allow(Gitlab.config.pages).to receive(:enabled).and_return(true) + stub_feature_flags(show_pages_in_deployments_menu: false) + project.add_maintainer(user) sign_in(user) diff --git a/spec/features/projects/pipelines/legacy_pipelines_spec.rb b/spec/features/projects/pipelines/legacy_pipelines_spec.rb new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/spec/features/projects/pipelines/legacy_pipelines_spec.rb diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb index d6067e22952..d5739386a30 100644 --- a/spec/features/projects/pipelines/pipeline_spec.rb +++ b/spec/features/projects/pipelines/pipeline_spec.rb @@ -18,6 +18,8 @@ RSpec.describe 'Pipeline', :js, feature_category: :projects do end shared_context 'pipeline builds' do + let!(:external_stage) { create(:ci_stage, name: 'external', pipeline: pipeline) } + let!(:build_passed) do create(:ci_build, :success, pipeline: pipeline, stage: 'build', stage_idx: 0, name: 'build') @@ -52,7 +54,7 @@ RSpec.describe 'Pipeline', :js, feature_category: :projects do create(:generic_commit_status, status: 'success', pipeline: pipeline, name: 'jenkins', - stage: 'external', + ci_stage: external_stage, ref: 'master', target_url: 'http://gitlab.com/status') end @@ -98,42 +100,16 @@ RSpec.describe 'Pipeline', :js, feature_category: :projects do end end - context 'with pipeline_name feature flag enabled' do - before do - stub_feature_flags(pipeline_name: true) - end - - it 'displays pipeline name instead of commit title' do - visit_pipeline - - within 'h3' do - expect(page).to have_content(pipeline.name) - end - - within '.well-segment[data-testid="commit-row"]' do - expect(page).to have_content(project.commit.title) - expect(page).to have_content(project.commit.short_id) - end - end - end + it 'displays pipeline name instead of commit title' do + visit_pipeline - context 'with pipeline_name feature flag disabled' do - before do - stub_feature_flags(pipeline_name: false) + within 'h3' do + expect(page).to have_content(pipeline.name) end - it 'displays commit title' do - visit_pipeline - - within 'h3' do - expect(page).not_to have_content(pipeline.name) - expect(page).to have_content(project.commit.title) - end - - within '.well-segment[data-testid="commit-row"]' do - expect(page).not_to have_content(project.commit.title) - expect(page).to have_content(project.commit.short_id) - end + within '.well-segment[data-testid="commit-row"]' do + expect(page).to have_content(project.commit.title) + expect(page).to have_content(project.commit.short_id) end end diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb index 3bdabd672c7..6a44f421249 100644 --- a/spec/features/projects/pipelines/pipelines_spec.rb +++ b/spec/features/projects/pipelines/pipelines_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' RSpec.describe 'Pipelines', :js, feature_category: :projects do + include ListboxHelpers include ProjectForksHelper include Spec::Support::Helpers::ModalHelpers @@ -594,7 +595,7 @@ RSpec.describe 'Pipelines', :js, feature_category: :projects do end it 'changes the Pipeline ID column for Pipeline IID' do - page.find('[data-testid="pipeline-key-dropdown"]').click + page.find('[data-testid="pipeline-key-collapsible-box"]').click within '.gl-dropdown-contents' do dropdown_options = page.find_all '.gl-dropdown-item' @@ -618,6 +619,8 @@ RSpec.describe 'Pipelines', :js, feature_category: :projects do user: user) end + let(:external_stage) { create(:ci_stage, name: 'external', pipeline: pipeline) } + before do create_build('build', 0, 'build', :success) create_build('test', 1, 'rspec 0:2', :pending) @@ -627,7 +630,7 @@ RSpec.describe 'Pipelines', :js, feature_category: :projects do create_build('test', 1, 'audit', :created) create_build('deploy', 2, 'production', :created) - create(:generic_commit_status, pipeline: pipeline, stage: 'external', name: 'jenkins', stage_idx: 3, ref: 'master') + create(:generic_commit_status, pipeline: pipeline, ci_stage: external_stage, name: 'jenkins', ref: 'master') visit project_pipeline_path(project, pipeline) wait_for_requests @@ -672,7 +675,7 @@ RSpec.describe 'Pipelines', :js, feature_category: :projects do click_button project.default_branch wait_for_requests - find('p', text: 'master').click + find('.gl-dropdown-item', text: 'master').click wait_for_requests end @@ -776,8 +779,7 @@ RSpec.describe 'Pipelines', :js, feature_category: :projects do describe 'new pipeline page' do it 'has field to add a new pipeline' do - expect(page).to have_selector('[data-testid="ref-select"]') - expect(find('[data-testid="ref-select"]')).to have_content project.default_branch + expect(page).to have_button project.default_branch expect(page).to have_content('Run for') end end @@ -785,14 +787,9 @@ RSpec.describe 'Pipelines', :js, feature_category: :projects do describe 'find pipelines' do it 'shows filtered pipelines', :js do click_button project.default_branch + send_keys('fix') - page.within '[data-testid="ref-select"]' do - find('[data-testid="search-refs"]').native.send_keys('fix') - - page.within '.gl-dropdown-contents' do - expect(page).to have_content('fix') - end - end + expect_listbox_item('fix') end end end diff --git a/spec/features/projects/settings/monitor_settings_spec.rb b/spec/features/projects/settings/monitor_settings_spec.rb index 2cdcf86757e..4b553b57331 100644 --- a/spec/features/projects/settings/monitor_settings_spec.rb +++ b/spec/features/projects/settings/monitor_settings_spec.rb @@ -113,7 +113,7 @@ RSpec.describe 'Projects > Settings > For a forked project', :js, feature_catego within('div#project-dropdown') do click_button('Select project') - click_button('Sentry | internal') + find('li', text: 'Sentry | internal').click end click_button('Save changes') diff --git a/spec/features/projects/settings/pipelines_settings_spec.rb b/spec/features/projects/settings/pipelines_settings_spec.rb index 37973c9b8d6..51858ddf8c5 100644 --- a/spec/features/projects/settings/pipelines_settings_spec.rb +++ b/spec/features/projects/settings/pipelines_settings_spec.rb @@ -149,29 +149,5 @@ RSpec.describe "Projects > Settings > Pipelines settings", feature_category: :pr end end end - - describe 'runners registration token' do - let!(:token) { project.runners_token } - - before do - visit project_settings_ci_cd_path(project) - end - - it 'has a registration token' do - expect(page.find('#registration_token')).to have_content(token) - end - - describe 'reload registration token' do - let(:page_token) { find('#registration_token').text } - - before do - click_link 'Reset registration token' - end - - it 'changes registration token' do - expect(page_token).not_to eq token - end - end - end end end diff --git a/spec/features/projects/settings/user_manages_project_members_spec.rb b/spec/features/projects/settings/user_manages_project_members_spec.rb index ee832da48d9..fac4d5a99a5 100644 --- a/spec/features/projects/settings/user_manages_project_members_spec.rb +++ b/spec/features/projects/settings/user_manages_project_members_spec.rb @@ -22,13 +22,12 @@ RSpec.describe 'Projects > Settings > User manages project members', feature_cat it 'cancels a team member', :js do visit(project_project_members_path(project)) - page.within find_member_row(user_dmitriy) do - click_button 'Remove member' - end + show_actions_for_username(user_dmitriy) + click_button _('Remove member') within_modal do expect(page).to have_unchecked_field 'Also unassign this user from related issues and merge requests' - click_button('Remove member') + click_button _('Remove member') end visit(project_project_members_path(project)) diff --git a/spec/features/projects/settings/user_searches_in_settings_spec.rb b/spec/features/projects/settings/user_searches_in_settings_spec.rb index 8a11507d064..923a6a10671 100644 --- a/spec/features/projects/settings/user_searches_in_settings_spec.rb +++ b/spec/features/projects/settings/user_searches_in_settings_spec.rb @@ -68,6 +68,7 @@ RSpec.describe 'User searches project settings', :js, feature_category: :project context 'in Pages page' do before do + stub_feature_flags(show_pages_in_deployments_menu: false) allow(Gitlab.config.pages).to receive(:enabled).and_return(true) visit project_pages_path(project) diff --git a/spec/features/projects/terraform_spec.rb b/spec/features/projects/terraform_spec.rb index bbc7f675c55..5e2f65165c2 100644 --- a/spec/features/projects/terraform_spec.rb +++ b/spec/features/projects/terraform_spec.rb @@ -56,9 +56,9 @@ RSpec.describe 'Terraform', :js, feature_category: :projects do end context 'when clicking on the delete button' do - let(:additional_state) { create(:terraform_state, project: project) } + let!(:additional_state) { create(:terraform_state, project: project) } - it 'removes the state', :aggregate_failures, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/333640' do + it 'removes the state', :aggregate_failures do visit project_terraform_index_path(project) expect(page).to have_content(additional_state.name) @@ -69,7 +69,12 @@ RSpec.describe 'Terraform', :js, feature_category: :projects do click_button 'Remove' expect(page).to have_content("#{additional_state.name} successfully removed") - expect { additional_state.reload }.to raise_error ActiveRecord::RecordNotFound + + find("[data-testid='remove-icon']").hover + expect(page).to have_content("Deletion in progress") + + additional_state.reload + expect(additional_state.deleted_at).not_to be_nil end end diff --git a/spec/features/projects/tree/create_directory_spec.rb b/spec/features/projects/tree/create_directory_spec.rb index 3a0160c42fb..58f572bc021 100644 --- a/spec/features/projects/tree/create_directory_spec.rb +++ b/spec/features/projects/tree/create_directory_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Multi-file editor new directory', :js, feature_category: :web_ide do + include WebIdeSpecHelpers + let(:user) { create(:user) } let(:project) { create(:project, :repository) } @@ -16,9 +18,7 @@ RSpec.describe 'Multi-file editor new directory', :js, feature_category: :web_id wait_for_requests - click_link('Web IDE') - - wait_for_requests + ide_visit_from_link end after do @@ -26,6 +26,8 @@ RSpec.describe 'Multi-file editor new directory', :js, feature_category: :web_id end it 'creates directory in current directory' do + wait_for_all_requests + all('.ide-tree-actions button').last.click page.within('.modal') do diff --git a/spec/features/projects/tree/create_file_spec.rb b/spec/features/projects/tree/create_file_spec.rb index 61240150658..674aef8e6f4 100644 --- a/spec/features/projects/tree/create_file_spec.rb +++ b/spec/features/projects/tree/create_file_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Multi-file editor new file', :js, feature_category: :web_ide do + include WebIdeSpecHelpers + let(:user) { create(:user) } let(:project) { create(:project, :repository) } @@ -16,9 +18,7 @@ RSpec.describe 'Multi-file editor new file', :js, feature_category: :web_ide do wait_for_requests - click_link('Web IDE') - - wait_for_requests + ide_visit_from_link end after do @@ -26,6 +26,7 @@ RSpec.describe 'Multi-file editor new file', :js, feature_category: :web_ide do end it 'creates file in current directory' do + wait_for_requests first('.ide-tree-actions button').click page.within('.modal') do diff --git a/spec/features/projects/tree/tree_show_spec.rb b/spec/features/projects/tree/tree_show_spec.rb index 21932cae58b..835a3cda65e 100644 --- a/spec/features/projects/tree/tree_show_spec.rb +++ b/spec/features/projects/tree/tree_show_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' RSpec.describe 'Projects tree', :js, feature_category: :web_ide do + include WebIdeSpecHelpers include RepoHelpers let(:user) { create(:user) } @@ -123,10 +124,9 @@ RSpec.describe 'Projects tree', :js, feature_category: :web_ide do it 'opens folder in IDE' do visit project_tree_path(project, File.join('master', 'bar')) + ide_visit_from_link - click_link 'Web IDE' - - wait_for_requests + wait_for_all_requests find('.ide-file-list') wait_for_requests expect(page).to have_selector('.is-open', text: 'bar') diff --git a/spec/features/projects/tree/upload_file_spec.rb b/spec/features/projects/tree/upload_file_spec.rb index 1e4abc789c2..42fa88a0d3e 100644 --- a/spec/features/projects/tree/upload_file_spec.rb +++ b/spec/features/projects/tree/upload_file_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Multi-file editor upload file', :js, feature_category: :web_ide do + include WebIdeSpecHelpers + let(:user) { create(:user) } let(:project) { create(:project, :repository) } let(:txt_file) { File.join(Rails.root, 'spec', 'fixtures', 'doc_sample.txt') } @@ -18,9 +20,7 @@ RSpec.describe 'Multi-file editor upload file', :js, feature_category: :web_ide wait_for_requests - click_link('Web IDE') - - wait_for_requests + ide_visit_from_link end after do @@ -28,6 +28,7 @@ RSpec.describe 'Multi-file editor upload file', :js, feature_category: :web_ide end it 'uploads text file' do + wait_for_all_requests # make the field visible so capybara can use it execute_script('document.querySelector("#file-upload").classList.remove("hidden")') attach_file('file-upload', txt_file) diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index ec0b3f9d81b..84702b3a6bb 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -213,7 +213,7 @@ RSpec.describe 'Project', feature_category: :projects do end end - describe 'showing information about source of a project fork' do + describe 'showing information about source of a project fork', :js do let(:user) { create(:user) } let(:base_project) { create(:project, :public, :repository) } let(:forked_project) { fork_project(base_project, user, repository: true) } @@ -224,6 +224,7 @@ RSpec.describe 'Project', feature_category: :projects do it 'shows a link to the source project when it is available', :sidekiq_might_not_need_inline do visit project_path(forked_project) + wait_for_requests expect(page).to have_content('Forked from') expect(page).to have_link(base_project.full_name) @@ -233,6 +234,7 @@ RSpec.describe 'Project', feature_category: :projects do forked_project visit project_path(base_project) + wait_for_requests expect(page).not_to have_content('In fork network of') expect(page).not_to have_content('Forked from') @@ -243,7 +245,7 @@ RSpec.describe 'Project', feature_category: :projects do Projects::DestroyService.new(base_project, base_project.first_owner).execute visit project_path(forked_project) - + wait_for_requests expect(page).to have_content('Forked from an inaccessible project') end @@ -255,7 +257,7 @@ RSpec.describe 'Project', feature_category: :projects do Projects::DestroyService.new(forked_project, user).execute visit project_path(fork_of_fork) - + wait_for_requests expect(page).to have_content("Forked from") expect(page).to have_link(base_project.full_name) end diff --git a/spec/features/protected_branches_spec.rb b/spec/features/protected_branches_spec.rb index c549d99a51f..04096b3e4f9 100644 --- a/spec/features/protected_branches_spec.rb +++ b/spec/features/protected_branches_spec.rb @@ -117,7 +117,7 @@ RSpec.describe 'Protected Branches', :js, feature_category: :source_code_managem set_protected_branch_name('some-branch') click_on "Protect" - within(".protected-branches-list") { expect(page).to have_content('Branch was deleted') } + within(".protected-branches-list") { expect(page).to have_content('Branch does not exist') } end end diff --git a/spec/features/protected_tags_spec.rb b/spec/features/protected_tags_spec.rb index 1aadc7ce90a..c2058a5c345 100644 --- a/spec/features/protected_tags_spec.rb +++ b/spec/features/protected_tags_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Protected Tags', :js, feature_category: :source_code_management do +RSpec.describe 'Protected Tags', :js, :with_license, feature_category: :source_code_management do include ProtectedTagHelpers let(:project) { create(:project, :repository) } diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb index 40ba0fa9ebb..e7c2452af93 100644 --- a/spec/features/runners_spec.rb +++ b/spec/features/runners_spec.rb @@ -9,370 +9,402 @@ RSpec.describe 'Runners', feature_category: :runner_fleet do sign_in(user) end - context 'when user opens runners page' do - let(:project) { create(:project) } - + context 'when project_runners_vue_ui is disabled' do before do - project.add_maintainer(user) + stub_feature_flags(project_runners_vue_ui: false) end - it 'user can see a link with instructions on how to install GitLab Runner' do - visit project_runners_path(project) + context 'when user opens runners page' do + let(:project) { create(:project) } - expect(page).to have_link('Install GitLab Runner and ensure it\'s running.', href: "https://docs.gitlab.com/runner/install/") - end - end + before do + project.add_maintainer(user) + end - context 'when a project has enabled shared_runners' do - let_it_be(:project) { create(:project) } + it 'user can see a link with instructions on how to install GitLab Runner' do + visit project_runners_path(project) - before do - project.add_maintainer(user) - end + expect(page).to have_link('Install GitLab Runner and ensure it\'s running.', href: "https://docs.gitlab.com/runner/install/") + end - context 'when a project_type runner is activated on the project' do - let_it_be(:project_runner) { create(:ci_runner, :project, projects: [project]) } + describe 'runners registration token' do + let!(:token) { project.runners_token } - it 'user sees the specific runner' do - visit project_runners_path(project) + context 'when project_runners_vue_ui is disabled' do + before do + visit project_runners_path(project) + end - within '.activated-specific-runners' do - expect(page).to have_content(project_runner.display_name) - end + it 'has a registration token' do + expect(page.find('#registration_token')).to have_content(token) + end - click_on project_runner.short_sha + describe 'reload registration token' do + let(:page_token) { find('#registration_token').text } - expect(page).to have_content(project_runner.platform) + before do + click_link 'Reset registration token' + end + + it 'changes registration token' do + expect(page_token).not_to eq token + end + end + end end + end - it 'user can pause and resume the specific runner' do - visit project_runners_path(project) + context 'when a project has enabled shared_runners' do + let_it_be(:project) { create(:project) } - within '.activated-specific-runners' do - expect(page).to have_link('Pause') - end + before do + project.add_maintainer(user) + end - click_on 'Pause' + context 'when a project_type runner is activated on the project' do + let_it_be(:project_runner) { create(:ci_runner, :project, projects: [project]) } - within '.activated-specific-runners' do - expect(page).to have_link('Resume') - end + it 'user sees the specific runner' do + visit project_runners_path(project) - click_on 'Resume' + within '.activated-specific-runners' do + expect(page).to have_content(project_runner.display_name) + end + + click_on project_runner.short_sha - within '.activated-specific-runners' do - expect(page).to have_link('Pause') + expect(page).to have_content(project_runner.platform) end - end - it 'user removes an activated specific runner if this is last project for that runners' do - visit project_runners_path(project) + it 'user can pause and resume the specific runner' do + visit project_runners_path(project) - within '.activated-specific-runners' do - click_on 'Remove runner' - end + within '.activated-specific-runners' do + expect(page).to have_link('Pause') + end - expect(page).not_to have_content(project_runner.display_name) - end + click_on 'Pause' - it 'user edits the runner to be protected' do - visit project_runners_path(project) + within '.activated-specific-runners' do + expect(page).to have_link('Resume') + end - within '.activated-specific-runners' do - first('[data-testid="edit-runner-link"]').click - end + click_on 'Resume' - expect(page.find_field('runner[access_level]')).not_to be_checked + within '.activated-specific-runners' do + expect(page).to have_link('Pause') + end + end - check 'runner_access_level' - click_button 'Save changes' + it 'user removes an activated specific runner if this is last project for that runners' do + visit project_runners_path(project) - expect(page).to have_content 'Protected Yes' - end + within '.activated-specific-runners' do + click_on 'Remove runner' + end - context 'when a runner has a tag' do - before do - project_runner.update!(tag_list: ['tag']) + expect(page).not_to have_content(project_runner.display_name) end - it 'user edits runner not to run untagged jobs' do + it 'user edits the runner to be protected' do visit project_runners_path(project) within '.activated-specific-runners' do first('[data-testid="edit-runner-link"]').click end - expect(page.find_field('runner[run_untagged]')).to be_checked + expect(page.find_field('runner[access_level]')).not_to be_checked - uncheck 'runner_run_untagged' + check 'runner_access_level' click_button 'Save changes' - expect(page).to have_content 'Can run untagged jobs No' + expect(page).to have_content 'Protected Yes' end - end - - context 'when a shared runner is activated on the project' do - let!(:shared_runner) { create(:ci_runner, :instance) } - it 'user sees CI/CD setting page' do - visit project_runners_path(project) - - within '[data-testid="available-shared-runners"]' do - expect(page).to have_content(shared_runner.display_name) + context 'when a runner has a tag' do + before do + project_runner.update!(tag_list: ['tag']) end - end - context 'when multiple shared runners are configured' do - let_it_be(:shared_runner_2) { create(:ci_runner, :instance) } - - it 'shows the runner count' do + it 'user edits runner not to run untagged jobs' do visit project_runners_path(project) - within '[data-testid="available-shared-runners"]' do - expect(page).to have_content format(_('Available shared runners: %{count}'), { count: 2 }) + within '.activated-specific-runners' do + first('[data-testid="edit-runner-link"]').click end + + expect(page.find_field('runner[run_untagged]')).to be_checked + + uncheck 'runner_run_untagged' + click_button 'Save changes' + + expect(page).to have_content 'Can run untagged jobs No' end + end - it 'adds pagination to the shared runner list' do - stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) + context 'when a shared runner is activated on the project' do + let!(:shared_runner) { create(:ci_runner, :instance) } + it 'user sees CI/CD setting page' do visit project_runners_path(project) within '[data-testid="available-shared-runners"]' do - expect(find('.pagination')).not_to be_nil + expect(page).to have_content(shared_runner.display_name) end end - end - end - context 'when multiple project runners are configured' do - let!(:project_runner_2) { create(:ci_runner, :project, projects: [project]) } + context 'when multiple shared runners are configured' do + let_it_be(:shared_runner_2) { create(:ci_runner, :instance) } - it 'adds pagination to the runner list' do - stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) + it 'shows the runner count' do + visit project_runners_path(project) - visit project_runners_path(project) + within '[data-testid="available-shared-runners"]' do + expect(page).to have_content format(_('Available shared runners: %{count}'), { count: 2 }) + end + end - expect(find('.pagination')).not_to be_nil - end - end - end + it 'adds pagination to the shared runner list' do + stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) - context 'when a specific runner exists in another project' do - let(:another_project) { create(:project) } - let!(:project_runner) { create(:ci_runner, :project, projects: [another_project]) } + visit project_runners_path(project) - before do - another_project.add_maintainer(user) - end + within '[data-testid="available-shared-runners"]' do + expect(find('.pagination')).not_to be_nil + end + end + end + end - it 'user enables and disables a specific runner' do - visit project_runners_path(project) + context 'when multiple project runners are configured' do + let!(:project_runner_2) { create(:ci_runner, :project, projects: [project]) } - within '.available-specific-runners' do - click_on 'Enable for this project' - end + it 'adds pagination to the runner list' do + stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) - expect(page.find('.activated-specific-runners')).to have_content(project_runner.display_name) + visit project_runners_path(project) - within '.activated-specific-runners' do - click_on 'Disable for this project' + expect(find('.pagination')).not_to be_nil + end end - - expect(page.find('.available-specific-runners')).to have_content(project_runner.display_name) end - end - context 'shared runner text' do - context 'when application settings have shared_runners_text' do - let(:shared_runners_text) { 'custom **shared** runners description' } - let(:shared_runners_html) { 'custom shared runners description' } + context 'when a specific runner exists in another project' do + let(:another_project) { create(:project) } + let!(:project_runner) { create(:ci_runner, :project, projects: [another_project]) } before do - stub_application_setting(shared_runners_text: shared_runners_text) + another_project.add_maintainer(user) end - it 'user sees shared runners description' do + it 'user enables and disables a specific runner' do visit project_runners_path(project) - page.within("[data-testid='shared-runners-description']") do - expect(page).not_to have_content('The same shared runner executes code from multiple projects') - expect(page).to have_content(shared_runners_html) + within '.available-specific-runners' do + click_on 'Enable for this project' + end + + expect(page.find('.activated-specific-runners')).to have_content(project_runner.display_name) + + within '.activated-specific-runners' do + click_on 'Disable for this project' end + + expect(page.find('.available-specific-runners')).to have_content(project_runner.display_name) end end - context 'when application settings have an unsafe link in shared_runners_text' do - let(:shared_runners_text) { '<a href="javascript:alert(\'xss\')">link</a>' } + context 'shared runner text' do + context 'when application settings have shared_runners_text' do + let(:shared_runners_text) { 'custom **shared** runners description' } + let(:shared_runners_html) { 'custom shared runners description' } - before do - stub_application_setting(shared_runners_text: shared_runners_text) - end + before do + stub_application_setting(shared_runners_text: shared_runners_text) + end - it 'user sees no link' do - visit project_runners_path(project) + it 'user sees shared runners description' do + visit project_runners_path(project) - page.within("[data-testid='shared-runners-description']") do - expect(page).to have_content('link') - expect(page).not_to have_link('link') + page.within("[data-testid='shared-runners-description']") do + expect(page).not_to have_content('The same shared runner executes code from multiple projects') + expect(page).to have_content(shared_runners_html) + end end end - end - context 'when application settings have an unsafe image in shared_runners_text' do - let(:shared_runners_text) { '<img src="404.png" onerror="alert(\'xss\')"/>' } + context 'when application settings have an unsafe link in shared_runners_text' do + let(:shared_runners_text) { '<a href="javascript:alert(\'xss\')">link</a>' } - before do - stub_application_setting(shared_runners_text: shared_runners_text) - end + before do + stub_application_setting(shared_runners_text: shared_runners_text) + end - it 'user sees image safely' do - visit project_runners_path(project) + it 'user sees no link' do + visit project_runners_path(project) - page.within("[data-testid='shared-runners-description']") do - expect(page).to have_css('img') - expect(page).not_to have_css('img[onerror]') + page.within("[data-testid='shared-runners-description']") do + expect(page).to have_content('link') + expect(page).not_to have_link('link') + end end end - end - end - end - context 'enable shared runners in project settings', :js do - before do - project.add_maintainer(user) + context 'when application settings have an unsafe image in shared_runners_text' do + let(:shared_runners_text) { '<img src="404.png" onerror="alert(\'xss\')"/>' } - visit project_runners_path(project) - end + before do + stub_application_setting(shared_runners_text: shared_runners_text) + end - context 'when a project has enabled shared_runners' do - let(:project) { create(:project, shared_runners_enabled: true) } + it 'user sees image safely' do + visit project_runners_path(project) - it 'shared runners toggle is on' do - expect(page).to have_selector('[data-testid="toggle-shared-runners"]') - expect(page).to have_selector('[data-testid="toggle-shared-runners"] .is-checked') + page.within("[data-testid='shared-runners-description']") do + expect(page).to have_css('img') + expect(page).not_to have_css('img[onerror]') + end + end + end end end - context 'when a project has disabled shared_runners' do - let(:project) { create(:project, shared_runners_enabled: false) } + context 'enable shared runners in project settings', :js do + before do + project.add_maintainer(user) - it 'shared runners toggle is off' do - expect(page).not_to have_selector('[data-testid="toggle-shared-runners"] .is-checked') + visit project_runners_path(project) end - end - end - - context 'group runners in project settings' do - before do - project.add_maintainer(user) - end - let_it_be(:group) { create :group } - let_it_be(:project) { create :project, group: group } + context 'when a project has enabled shared_runners' do + let(:project) { create(:project, shared_runners_enabled: true) } - context 'as project and group maintainer' do - before do - group.add_maintainer(user) + it 'shared runners toggle is on' do + expect(page).to have_selector('[data-testid="toggle-shared-runners"]') + expect(page).to have_selector('[data-testid="toggle-shared-runners"] .is-checked') + end end - context 'project with a group but no group runner' do - it 'group runners are not available' do - visit project_runners_path(project) + context 'when a project has disabled shared_runners' do + let(:project) { create(:project, shared_runners_enabled: false) } - expect(page).not_to have_content 'To register them, go to the group\'s Runners page.' - expect(page).to have_content 'Ask your group owner to set up a group runner' + it 'shared runners toggle is off' do + expect(page).not_to have_selector('[data-testid="toggle-shared-runners"] .is-checked') end end end - context 'as project maintainer and group owner' do + context 'group runners in project settings' do before do - group.add_owner(user) + project.add_maintainer(user) end - context 'project with a group but no group runner' do - it 'group runners are available' do - visit project_runners_path(project) - - expect(page).to have_content 'This group does not have any group runners yet.' + let_it_be(:group) { create :group } + let_it_be(:project) { create :project, group: group } - expect(page).to have_content 'To register them, go to the group\'s Runners page.' - expect(page).not_to have_content 'Ask your group owner to set up a group runner' + context 'as project and group maintainer' do + before do + group.add_maintainer(user) end - end - end - - context 'as project maintainer' do - context 'project without a group' do - let(:project) { create :project } - it 'group runners are not available' do - visit project_runners_path(project) + context 'project with a group but no group runner' do + it 'group runners are not available' do + visit project_runners_path(project) - expect(page).to have_content 'This project does not belong to a group and cannot make use of group runners.' + expect(page).not_to have_content 'To register them, go to the group\'s Runners page.' + expect(page).to have_content 'Ask your group owner to set up a group runner' + end end end - context 'with group project' do - let_it_be(:group) { create(:group) } - let_it_be(:project) { create(:project, group: group) } + context 'as project maintainer and group owner' do + before do + group.add_owner(user) + end context 'project with a group but no group runner' do - it 'group runners are not available' do + it 'group runners are available' do visit project_runners_path(project) expect(page).to have_content 'This group does not have any group runners yet.' - expect(page).not_to have_content 'To register them, go to the group\'s Runners page.' - expect(page).to have_content 'Ask your group owner to set up a group runner.' + expect(page).to have_content 'To register them, go to the group\'s Runners page.' + expect(page).not_to have_content 'Ask your group owner to set up a group runner' end end + end - context 'project with a group and a group runner' do - let_it_be(:group_runner) do - create(:ci_runner, :group, groups: [group], description: 'group-runner') - end + context 'as project maintainer' do + context 'project without a group' do + let(:project) { create :project } - it 'group runners are available' do + it 'group runners are not available' do visit project_runners_path(project) - expect(page).to have_content 'Available group runners: 1' - expect(page).to have_content 'group-runner' + expect(page).to have_content 'This project does not belong to a group and cannot make use of group runners.' end + end - it 'group runners may be disabled for a project' do - visit project_runners_path(project) - - click_on 'Disable group runners' + context 'with group project' do + let_it_be(:group) { create(:group) } + let_it_be(:project) { create(:project, group: group) } - expect(page).to have_content 'Enable group runners' - expect(project.reload.group_runners_enabled).to be false + context 'project with a group but no group runner' do + it 'group runners are not available' do + visit project_runners_path(project) - click_on 'Enable group runners' + expect(page).to have_content 'This group does not have any group runners yet.' - expect(page).to have_content 'Disable group runners' - expect(project.reload.group_runners_enabled).to be true + expect(page).not_to have_content 'To register them, go to the group\'s Runners page.' + expect(page).to have_content 'Ask your group owner to set up a group runner.' + end end - context 'when multiple group runners are configured' do - let_it_be(:group_runner_2) { create(:ci_runner, :group, groups: [group]) } + context 'project with a group and a group runner' do + let_it_be(:group_runner) do + create(:ci_runner, :group, groups: [group], description: 'group-runner') + end - it 'shows the runner count' do + it 'group runners are available' do visit project_runners_path(project) - within '[data-testid="group-runners"]' do - expect(page).to have_content format(_('Available group runners: %{runners}'), { runners: 2 }) - end + expect(page).to have_content 'Available group runners: 1' + expect(page).to have_content 'group-runner' end - it 'adds pagination to the group runner list' do - stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) - + it 'group runners may be disabled for a project' do visit project_runners_path(project) - within '[data-testid="group-runners"]' do - expect(find('.pagination')).not_to be_nil + click_on 'Disable group runners' + + expect(page).to have_content 'Enable group runners' + expect(project.reload.group_runners_enabled).to be false + + click_on 'Enable group runners' + + expect(page).to have_content 'Disable group runners' + expect(project.reload.group_runners_enabled).to be true + end + + context 'when multiple group runners are configured' do + let_it_be(:group_runner_2) { create(:ci_runner, :group, groups: [group]) } + + it 'shows the runner count' do + visit project_runners_path(project) + + within '[data-testid="group-runners"]' do + expect(page).to have_content format(_('Available group runners: %{runners}'), { runners: 2 }) + end + end + + it 'adds pagination to the group runner list' do + stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) + + visit project_runners_path(project) + + within '[data-testid="group-runners"]' do + expect(find('.pagination')).not_to be_nil + end end end end diff --git a/spec/features/search/user_searches_for_code_spec.rb b/spec/features/search/user_searches_for_code_spec.rb index 14d67bac85f..dd7095107f4 100644 --- a/spec/features/search/user_searches_for_code_spec.rb +++ b/spec/features/search/user_searches_for_code_spec.rb @@ -17,20 +17,24 @@ RSpec.describe 'User searches for code', :js, :disable_rate_limiter, feature_cat sign_in(user) end - it 'finds a file' do - visit(project_path(project)) + context 'when on a project page' do + before do + visit(project_path(project)) + end - submit_search('application.js') - select_search_scope('Code') + it 'finds a file' do + submit_search('application.js') + select_search_scope('Code') - expect(page).to have_selector('.results', text: 'application.js') - expect(page).to have_selector('.file-content .code') - expect(page).to have_selector("span.line[lang='javascript']") - expect(page).to have_link('application.js', href: %r{master/files/js/application.js}) - expect(page).to have_button('Copy file path') + expect(page).to have_selector('.results', text: 'application.js') + expect(page).to have_selector('.file-content .code') + expect(page).to have_selector("span.line[lang='javascript']") + expect(page).to have_link('application.js', href: %r{master/files/js/application.js}) + expect(page).to have_button('Copy file path') + end end - context 'when on a project page' do + context 'when on a project search page' do before do visit(search_path) find('[data-testid="project-filter"]').click @@ -47,28 +51,31 @@ RSpec.describe 'User searches for code', :js, :disable_rate_limiter, feature_cat let(:additional_params) { { project_id: project.id } } end - it 'finds code and links to blob' do - expected_result = 'Update capybara, rspec-rails, poltergeist to recent versions' - - fill_in('dashboard_search', with: 'rspec') - find('.gl-search-box-by-click-search-button').click + context 'when searching code' do + let(:expected_result) { 'Update capybara, rspec-rails, poltergeist to recent versions' } - expect(page).to have_selector('.results', text: expected_result) + before do + fill_in('dashboard_search', with: 'rspec') + find('.gl-search-box-by-click-search-button').click + end - find("#blob-L3").click - expect(current_url).to match(%r{blob/master/.gitignore#L3}) - end + it 'finds code and links to blob' do + expect(page).to have_selector('.results', text: expected_result) - it 'finds code and links to blame' do - expected_result = 'Update capybara, rspec-rails, poltergeist to recent versions' + find("#blob-L3").click + expect(current_url).to match(%r{blob/master/.gitignore#L3}) + end - fill_in('dashboard_search', with: 'rspec') - find('.gl-search-box-by-click-search-button').click + it 'finds code and links to blame' do + expect(page).to have_selector('.results', text: expected_result) - expect(page).to have_selector('.results', text: expected_result) + find("#blame-L3").click + expect(current_url).to match(%r{blame/master/.gitignore#L3}) + end - find("#blame-L3").click - expect(current_url).to match(%r{blame/master/.gitignore#L3}) + it_behaves_like 'code highlight' do + subject { page } + end end it 'search multiple words with refs switching' do diff --git a/spec/features/signed_commits_spec.rb b/spec/features/signed_commits_spec.rb index 34127787e47..bc82afc70a3 100644 --- a/spec/features/signed_commits_spec.rb +++ b/spec/features/signed_commits_spec.rb @@ -94,8 +94,6 @@ RSpec.describe 'GPG signed commits', feature_category: :source_code_management d within '.popover' do expect(page).to have_content 'This commit was signed with a verified signature, but the committer email is not associated with the GPG Key.' - expect(page).to have_content 'Bette Cartwright' - expect(page).to have_content '@bette.cartwright' expect(page).to have_content "GPG Key ID: #{GpgHelpers::User2.primary_keyid}" end end @@ -110,8 +108,6 @@ RSpec.describe 'GPG signed commits', feature_category: :source_code_management d within '.popover' do expect(page).to have_content "This commit was signed with a different user's verified signature." - expect(page).to have_content 'Bette Cartwright' - expect(page).to have_content '@bette.cartwright' expect(page).to have_content "GPG Key ID: #{GpgHelpers::User2.primary_keyid}" end end @@ -138,9 +134,7 @@ RSpec.describe 'GPG signed commits', feature_category: :source_code_management d page.find('.gpg-status-box', text: 'Verified').click within '.popover' do - expect(page).to have_content 'This commit was signed with a verified signature and the committer email is verified to belong to the same user.' - expect(page).to have_content 'Nannie Bernhard' - expect(page).to have_content '@nannie.bernhard' + expect(page).to have_content 'This commit was signed with a verified signature and the committer email was verified to belong to the same user.' expect(page).to have_content "GPG Key ID: #{GpgHelpers::User1.primary_keyid}" end end @@ -162,9 +156,7 @@ RSpec.describe 'GPG signed commits', feature_category: :source_code_management d page.find('.gpg-status-box', text: 'Verified').click within '.popover' do - expect(page).to have_content 'This commit was signed with a verified signature and the committer email is verified to belong to the same user.' - expect(page).to have_content 'Nannie Bernhard' - expect(page).to have_content 'nannie.bernhard@example.com' + expect(page).to have_content 'This commit was signed with a verified signature and the committer email was verified to belong to the same user.' expect(page).to have_content "GPG Key ID: #{GpgHelpers::User1.primary_keyid}" end end diff --git a/spec/features/snippets/show_spec.rb b/spec/features/snippets/show_spec.rb index a6e0bc32d42..dc2fcdd7305 100644 --- a/spec/features/snippets/show_spec.rb +++ b/spec/features/snippets/show_spec.rb @@ -24,4 +24,25 @@ RSpec.describe 'Snippet', :js, feature_category: :source_code_management do subject { visit snippet_path(snippet) } end + + it_behaves_like 'a dashboard page with sidebar', :dashboard_snippets_path, :snippets + + context 'when unauthenticated' do + it 'does not have the sidebar' do + visit snippet_path(snippet) + + expect(page).to have_title _('Snippets') + expect(page).not_to have_css('aside.nav-sidebar') + end + end + + context 'when authenticated as a different user' do + let_it_be(:different_user) { create(:user) } + + before do + sign_in(different_user) + end + + it_behaves_like 'a dashboard page with sidebar', :dashboard_snippets_path, :snippets + end end diff --git a/spec/features/snippets/user_creates_snippet_spec.rb b/spec/features/snippets/user_creates_snippet_spec.rb index 064250c5673..03f569fe4b0 100644 --- a/spec/features/snippets/user_creates_snippet_spec.rb +++ b/spec/features/snippets/user_creates_snippet_spec.rb @@ -21,6 +21,8 @@ RSpec.describe 'User creates snippet', :js, feature_category: :source_code_manag visit new_snippet_path end + it_behaves_like 'a dashboard page with sidebar', :new_snippet_path, :snippets + def fill_form snippet_fill_in_form(title: title, content: file_content, description: md_description) end diff --git a/spec/features/triggers_spec.rb b/spec/features/triggers_spec.rb index 3616fdb2e8e..23a13994fa4 100644 --- a/spec/features/triggers_spec.rb +++ b/spec/features/triggers_spec.rb @@ -23,7 +23,7 @@ RSpec.describe 'Triggers', :js, feature_category: :continuous_integration do wait_for_requests end - shared_examples 'triggers page' do + describe 'triggers page' do describe 'create trigger workflow' do it 'prevents adding new trigger with no description' do fill_in 'trigger_description', with: '' @@ -139,16 +139,4 @@ RSpec.describe 'Triggers', :js, feature_category: :continuous_integration do end end end - - context 'when ci_pipeline_triggers_settings_vue_ui is enabled' do - it_behaves_like 'triggers page' - end - - context 'when ci_pipeline_triggers_settings_vue_ui is disabled' do - before do - stub_feature_flags(ci_pipeline_triggers_settings_vue_ui: false) - end - - it_behaves_like 'triggers page' - end end diff --git a/spec/features/user_sees_revert_modal_spec.rb b/spec/features/user_sees_revert_modal_spec.rb index ea5fd537c5b..ae3158e4270 100644 --- a/spec/features/user_sees_revert_modal_spec.rb +++ b/spec/features/user_sees_revert_modal_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'Merge request > User sees revert modal', :js, :sidekiq_might_not_need_inline, -feature_category: :code_review do +feature_category: :code_review_workflow do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/user_sorts_things_spec.rb b/spec/features/user_sorts_things_spec.rb index 708caf79090..b45de88832c 100644 --- a/spec/features/user_sorts_things_spec.rb +++ b/spec/features/user_sorts_things_spec.rb @@ -34,7 +34,7 @@ RSpec.describe "User sorts things", :js do expect(page).to have_button(sort_option) end - it "merge requests -> dashboard merge requests", feature_category: :code_review do + it "merge requests -> dashboard merge requests", feature_category: :code_review_workflow do sort_option = s_('SortOptions|Updated date') visit(project_merge_requests_path(project)) diff --git a/spec/features/users/login_spec.rb b/spec/features/users/login_spec.rb index 105e9f97989..5e683befeec 100644 --- a/spec/features/users/login_spec.rb +++ b/spec/features/users/login_spec.rb @@ -926,7 +926,8 @@ RSpec.describe 'Login', :clean_gitlab_redis_sessions, feature_category: :system_ stub_omniauth_saml_config(enabled: true, auto_link_saml_user: true, allow_single_sign_on: ['saml'], providers: [mock_saml_config]) end - it 'asks the user to accept the terms before setting an email' do + it 'asks the user to accept the terms before setting an email', + quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/388049', type: :flaky } do expect(authentication_metrics) .to increment(:user_authenticated_counter) |