Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features')
-rw-r--r--spec/features/admin/admin_abuse_reports_spec.rb18
-rw-r--r--spec/features/admin/admin_mode/login_spec.rb4
-rw-r--r--spec/features/admin/admin_mode/logout_spec.rb2
-rw-r--r--spec/features/admin/admin_mode_spec.rb2
-rw-r--r--spec/features/admin/admin_runners_spec.rb34
-rw-r--r--spec/features/admin/admin_settings_spec.rb9
-rw-r--r--spec/features/admin/users/user_spec.rb2
-rw-r--r--spec/features/boards/boards_spec.rb2
-rw-r--r--spec/features/boards/user_adds_lists_to_board_spec.rb2
-rw-r--r--spec/features/clusters/create_agent_spec.rb2
-rw-r--r--spec/features/dashboard/issues_filter_spec.rb3
-rw-r--r--spec/features/dashboard/merge_requests_spec.rb20
-rw-r--r--spec/features/dashboard/projects_spec.rb4
-rw-r--r--spec/features/dashboard/todos/todos_spec.rb10
-rw-r--r--spec/features/environments/environments_folder_spec.rb142
-rw-r--r--spec/features/explore/catalog/catalog_settings_spec.rb78
-rw-r--r--spec/features/explore/catalog/catalog_spec.rb137
-rw-r--r--spec/features/explore/catalog_spec.rb80
-rw-r--r--spec/features/explore/navbar_spec.rb12
-rw-r--r--spec/features/explore/user_explores_projects_spec.rb2
-rw-r--r--spec/features/file_uploads/graphql_add_design_spec.rb2
-rw-r--r--spec/features/frequently_visited_projects_and_groups_spec.rb2
-rw-r--r--spec/features/groups/board_sidebar_spec.rb4
-rw-r--r--spec/features/groups/board_spec.rb2
-rw-r--r--spec/features/groups/clusters/user_spec.rb25
-rw-r--r--spec/features/groups/dependency_proxy_spec.rb2
-rw-r--r--spec/features/groups/group_runners_spec.rb30
-rw-r--r--spec/features/groups/group_settings_spec.rb8
-rw-r--r--spec/features/groups/import_export/connect_instance_spec.rb2
-rw-r--r--spec/features/groups/import_export/migration_history_spec.rb2
-rw-r--r--spec/features/groups/issues_spec.rb4
-rw-r--r--spec/features/groups/members/leave_group_spec.rb20
-rw-r--r--spec/features/groups/members/manage_groups_spec.rb2
-rw-r--r--spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb2
-rw-r--r--spec/features/groups/members/request_access_spec.rb42
-rw-r--r--spec/features/groups/members/search_members_spec.rb2
-rw-r--r--spec/features/groups/members/sort_members_spec.rb2
-rw-r--r--spec/features/groups/members/tabs_spec.rb4
-rw-r--r--spec/features/groups/merge_requests_spec.rb2
-rw-r--r--spec/features/groups/milestone_spec.rb4
-rw-r--r--spec/features/groups/packages_spec.rb2
-rw-r--r--spec/features/groups/settings/ci_cd_spec.rb2
-rw-r--r--spec/features/groups/settings/group_badges_spec.rb2
-rw-r--r--spec/features/groups/settings/packages_and_registries_spec.rb8
-rw-r--r--spec/features/groups/show_spec.rb8
-rw-r--r--spec/features/groups_spec.rb8
-rw-r--r--spec/features/incidents/incident_details_spec.rb25
-rw-r--r--spec/features/incidents/incident_timeline_events_spec.rb4
-rw-r--r--spec/features/integrations_settings_spec.rb6
-rw-r--r--spec/features/invites_spec.rb111
-rw-r--r--spec/features/issuables/shortcuts_issuable_spec.rb2
-rw-r--r--spec/features/issuables/sorting_list_spec.rb4
-rw-r--r--spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb6
-rw-r--r--spec/features/issues/create_issue_for_single_discussion_in_merge_request_spec.rb2
-rw-r--r--spec/features/issues/discussion_lock_spec.rb254
-rw-r--r--spec/features/issues/form_spec.rb22
-rw-r--r--spec/features/issues/incident_issue_spec.rb2
-rw-r--r--spec/features/issues/issue_detail_spec.rb8
-rw-r--r--spec/features/issues/service_desk_spec.rb6
-rw-r--r--spec/features/issues/user_interacts_with_awards_spec.rb12
-rw-r--r--spec/features/issues/user_sorts_issues_spec.rb4
-rw-r--r--spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb10
-rw-r--r--spec/features/merge_request/user_posts_diff_notes_spec.rb2
-rw-r--r--spec/features/merge_request/user_rebases_merge_request_spec.rb6
-rw-r--r--spec/features/merge_request/user_resolves_conflicts_spec.rb10
-rw-r--r--spec/features/merge_request/user_resolves_wip_mr_spec.rb3
-rw-r--r--spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb2
-rw-r--r--spec/features/merge_request/user_sees_merge_button_depending_on_unresolved_discussions_spec.rb5
-rw-r--r--spec/features/merge_request/user_sees_merge_request_file_tree_sidebar_spec.rb5
-rw-r--r--spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb2
-rw-r--r--spec/features/merge_request/user_sees_merge_widget_spec.rb9
-rw-r--r--spec/features/merge_request/user_sees_versions_spec.rb8
-rw-r--r--spec/features/merge_requests/user_sorts_merge_requests_spec.rb6
-rw-r--r--spec/features/profile_spec.rb4
-rw-r--r--spec/features/profiles/keys_spec.rb2
-rw-r--r--spec/features/profiles/two_factor_auths_spec.rb2
-rw-r--r--spec/features/profiles/user_edit_profile_spec.rb14
-rw-r--r--spec/features/profiles/user_manages_applications_spec.rb2
-rw-r--r--spec/features/projects/blobs/blob_show_spec.rb11
-rw-r--r--spec/features/projects/blobs/edit_spec.rb2
-rw-r--r--spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb2
-rw-r--r--spec/features/projects/branches/download_buttons_spec.rb9
-rw-r--r--spec/features/projects/branches/new_branch_ref_dropdown_spec.rb2
-rw-r--r--spec/features/projects/branches/user_creates_branch_spec.rb2
-rw-r--r--spec/features/projects/branches/user_deletes_branch_spec.rb2
-rw-r--r--spec/features/projects/branches/user_views_branches_spec.rb2
-rw-r--r--spec/features/projects/branches_spec.rb2
-rw-r--r--spec/features/projects/cluster_agents_spec.rb4
-rw-r--r--spec/features/projects/clusters/user_spec.rb19
-rw-r--r--spec/features/projects/clusters_spec.rb2
-rw-r--r--spec/features/projects/commits/user_browses_commits_spec.rb4
-rw-r--r--spec/features/projects/environments/environment_spec.rb2
-rw-r--r--spec/features/projects/environments/environments_spec.rb16
-rw-r--r--spec/features/projects/files/download_buttons_spec.rb12
-rw-r--r--spec/features/projects/files/find_file_keyboard_spec.rb2
-rw-r--r--spec/features/projects/files/project_owner_creates_license_file_spec.rb2
-rw-r--r--spec/features/projects/files/template_selector_menu_spec.rb2
-rw-r--r--spec/features/projects/files/user_browses_files_spec.rb2
-rw-r--r--spec/features/projects/files/user_browses_lfs_files_spec.rb2
-rw-r--r--spec/features/projects/files/user_creates_directory_spec.rb2
-rw-r--r--spec/features/projects/files/user_creates_files_spec.rb7
-rw-r--r--spec/features/projects/files/user_deletes_files_spec.rb2
-rw-r--r--spec/features/projects/files/user_edits_files_spec.rb10
-rw-r--r--spec/features/projects/files/user_find_file_spec.rb2
-rw-r--r--spec/features/projects/files/user_reads_pipeline_status_spec.rb2
-rw-r--r--spec/features/projects/files/user_replaces_files_spec.rb2
-rw-r--r--spec/features/projects/files/user_searches_for_files_spec.rb2
-rw-r--r--spec/features/projects/fork_spec.rb2
-rw-r--r--spec/features/projects/gfm_autocomplete_load_spec.rb2
-rw-r--r--spec/features/projects/graph_spec.rb2
-rw-r--r--spec/features/projects/infrastructure_registry_spec.rb2
-rw-r--r--spec/features/projects/integrations/user_activates_issue_tracker_spec.rb6
-rw-r--r--spec/features/projects/integrations/user_activates_jira_spec.rb2
-rw-r--r--spec/features/projects/integrations/user_activates_mattermost_slash_command_spec.rb2
-rw-r--r--spec/features/projects/issuable_templates_spec.rb2
-rw-r--r--spec/features/projects/jobs/permissions_spec.rb5
-rw-r--r--spec/features/projects/jobs/user_browses_job_spec.rb2
-rw-r--r--spec/features/projects/jobs/user_browses_jobs_spec.rb2
-rw-r--r--spec/features/projects/jobs/user_triggers_manual_job_with_variables_spec.rb2
-rw-r--r--spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb9
-rw-r--r--spec/features/projects/members/manage_groups_spec.rb2
-rw-r--r--spec/features/projects/members/manage_members_spec.rb11
-rw-r--r--spec/features/projects/members/member_leaves_project_spec.rb7
-rw-r--r--spec/features/projects/members/user_requests_access_spec.rb25
-rw-r--r--spec/features/projects/new_project_spec.rb20
-rw-r--r--spec/features/projects/packages_spec.rb2
-rw-r--r--spec/features/projects/pipeline_schedules_spec.rb2
-rw-r--r--spec/features/projects/pipelines/pipelines_spec.rb60
-rw-r--r--spec/features/projects/settings/branch_names_settings_spec.rb2
-rw-r--r--spec/features/projects/settings/forked_project_settings_spec.rb2
-rw-r--r--spec/features/projects/settings/merge_requests_settings_spec.rb2
-rw-r--r--spec/features/projects/settings/monitor_settings_spec.rb2
-rw-r--r--spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb2
-rw-r--r--spec/features/projects/settings/repository_settings_spec.rb2
-rw-r--r--spec/features/projects/settings/secure_files_spec.rb2
-rw-r--r--spec/features/projects/settings/service_desk_setting_spec.rb6
-rw-r--r--spec/features/projects/settings/user_changes_default_branch_spec.rb2
-rw-r--r--spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb2
-rw-r--r--spec/features/projects/settings/user_manages_merge_requests_settings_spec.rb2
-rw-r--r--spec/features/projects/settings/webhooks_settings_spec.rb2
-rw-r--r--spec/features/projects/show/download_buttons_spec.rb18
-rw-r--r--spec/features/projects/show/user_interacts_with_auto_devops_banner_spec.rb2
-rw-r--r--spec/features/projects/show/user_sees_git_instructions_spec.rb1
-rw-r--r--spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb3
-rw-r--r--spec/features/projects/tags/download_buttons_spec.rb12
-rw-r--r--spec/features/projects/tags/user_views_tags_spec.rb3
-rw-r--r--spec/features/projects/terraform_spec.rb2
-rw-r--r--spec/features/projects/user_creates_project_spec.rb39
-rw-r--r--spec/features/projects/user_sees_sidebar_spec.rb2
-rw-r--r--spec/features/projects/work_items/work_item_children_spec.rb2
-rw-r--r--spec/features/projects_spec.rb10
-rw-r--r--spec/features/registrations/oauth_registration_spec.rb4
-rw-r--r--spec/features/registrations/registration_spec.rb29
-rw-r--r--spec/features/runners_spec.rb2
-rw-r--r--spec/features/search/user_searches_for_code_spec.rb55
-rw-r--r--spec/features/search/user_searches_for_issues_spec.rb6
-rw-r--r--spec/features/search/user_searches_for_merge_requests_spec.rb6
-rw-r--r--spec/features/search/user_searches_for_milestones_spec.rb9
-rw-r--r--spec/features/search/user_searches_for_projects_spec.rb8
-rw-r--r--spec/features/search/user_searches_for_wiki_pages_spec.rb6
-rw-r--r--spec/features/search/user_uses_header_search_field_spec.rb2
-rw-r--r--spec/features/search/user_uses_search_filters_spec.rb34
-rw-r--r--spec/features/uploads/user_uploads_avatar_to_group_spec.rb2
-rw-r--r--spec/features/uploads/user_uploads_avatar_to_profile_spec.rb6
-rw-r--r--spec/features/user_sees_active_nav_items_spec.rb2
-rw-r--r--spec/features/user_settings/active_sessions_spec.rb (renamed from spec/features/profiles/active_sessions_spec.rb)6
-rw-r--r--spec/features/user_settings/password_spec.rb (renamed from spec/features/profiles/password_spec.rb)44
-rw-r--r--spec/features/user_settings/personal_access_tokens_spec.rb (renamed from spec/features/profiles/personal_access_tokens_spec.rb)32
-rw-r--r--spec/features/user_sorts_things_spec.rb17
-rw-r--r--spec/features/users/login_spec.rb11
-rw-r--r--spec/features/users/show_spec.rb4
-rw-r--r--spec/features/users/signup_spec.rb33
172 files changed, 1282 insertions, 777 deletions
diff --git a/spec/features/admin/admin_abuse_reports_spec.rb b/spec/features/admin/admin_abuse_reports_spec.rb
index 973988560b3..5e98d2ffcf3 100644
--- a/spec/features/admin/admin_abuse_reports_spec.rb
+++ b/spec/features/admin/admin_abuse_reports_spec.rb
@@ -3,6 +3,8 @@
require 'spec_helper'
RSpec.describe "Admin::AbuseReports", :js, feature_category: :insider_threat do
+ include Features::SortingHelpers
+
let_it_be(:user) { create(:user) }
let_it_be(:admin) { create(:admin) }
@@ -79,7 +81,7 @@ RSpec.describe "Admin::AbuseReports", :js, feature_category: :insider_threat do
expect(report_rows[1].text).to include(report_text(open_report2))
# updated_at asc
- sort_by 'Updated date'
+ sort_by 'Updated date', from: 'Created date'
expect(report_rows[0].text).to include(report_text(open_report2))
expect(report_rows[1].text).to include(report_text(open_report))
@@ -120,7 +122,7 @@ RSpec.describe "Admin::AbuseReports", :js, feature_category: :insider_threat do
expect(report_rows[1].text).to include(report_text(open_report2))
# created_at desc
- sort_by 'Created date'
+ sort_by 'Created date', from: 'Number of Reports'
expect(report_rows[0].text).to include(report_text(open_report2))
expect(report_rows[1].text).to include(aggregated_report_text(open_report, 2))
@@ -131,7 +133,7 @@ RSpec.describe "Admin::AbuseReports", :js, feature_category: :insider_threat do
expect(report_rows[0].text).to include(aggregated_report_text(open_report, 2))
expect(report_rows[1].text).to include(report_text(open_report2))
- sort_by 'Updated date'
+ sort_by 'Updated date', from: 'Created date'
# updated_at asc
expect(report_rows[0].text).to include(report_text(open_report2))
@@ -193,14 +195,10 @@ RSpec.describe "Admin::AbuseReports", :js, feature_category: :insider_threat do
select_tokens(*tokens, submit: true, input_text: 'Filter reports')
end
- def sort_by(sort)
+ def sort_by(sort, from: 'Number of Reports')
page.within('.vue-filtered-search-bar-container .sort-dropdown-container') do
- page.find('.gl-dropdown-toggle').click
-
- page.within('.dropdown-menu') do
- click_button sort
- wait_for_requests
- end
+ pajamas_sort_by sort, from: from
+ wait_for_requests
end
end
end
diff --git a/spec/features/admin/admin_mode/login_spec.rb b/spec/features/admin/admin_mode/login_spec.rb
index 72c7083f459..f2262464386 100644
--- a/spec/features/admin/admin_mode/login_spec.rb
+++ b/spec/features/admin/admin_mode/login_spec.rb
@@ -30,7 +30,7 @@ RSpec.describe 'Admin Mode Login', feature_category: :system_access do
repeated_otp = user.current_otp
enter_code(repeated_otp)
- gitlab_enable_admin_mode_sign_in(user)
+ gitlab_enable_admin_mode_sign_in(user, use_mock_admin_mode: false)
expect(page).to have_content(_('Enter verification code'))
@@ -47,7 +47,7 @@ RSpec.describe 'Admin Mode Login', feature_category: :system_access do
expect(page).to have_content('Enter verification code')
enter_code(user.current_otp)
- gitlab_enable_admin_mode_sign_in(user)
+ gitlab_enable_admin_mode_sign_in(user, use_mock_admin_mode: false)
expect(page).to have_content(_('Enter verification code'))
end
diff --git a/spec/features/admin/admin_mode/logout_spec.rb b/spec/features/admin/admin_mode/logout_spec.rb
index 7a33256e7a8..584151726a6 100644
--- a/spec/features/admin/admin_mode/logout_spec.rb
+++ b/spec/features/admin/admin_mode/logout_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe 'Admin Mode Logout', :js, feature_category: :system_access do
# TODO: This used to use gitlab_sign_in, instead of sign_in, but that is buggy. See
# this issue to look into why: https://gitlab.com/gitlab-org/gitlab/-/issues/331851
sign_in(user)
- gitlab_enable_admin_mode_sign_in(user)
+ gitlab_enable_admin_mode_sign_in(user, use_mock_admin_mode: false)
visit admin_root_path
end
diff --git a/spec/features/admin/admin_mode_spec.rb b/spec/features/admin/admin_mode_spec.rb
index b1b44ce143f..2a655cdb1f4 100644
--- a/spec/features/admin/admin_mode_spec.rb
+++ b/spec/features/admin/admin_mode_spec.rb
@@ -69,7 +69,7 @@ RSpec.describe 'Admin mode', :js, feature_category: :shared do
context 'when in admin_mode' do
before do
- gitlab_enable_admin_mode_sign_in(admin)
+ gitlab_enable_admin_mode_sign_in(admin, use_mock_admin_mode: false)
end
it 'contains link to leave admin mode' do
diff --git a/spec/features/admin/admin_runners_spec.rb b/spec/features/admin/admin_runners_spec.rb
index 750f5f8d4b9..653458710e3 100644
--- a/spec/features/admin/admin_runners_spec.rb
+++ b/spec/features/admin/admin_runners_spec.rb
@@ -2,7 +2,8 @@
require 'spec_helper'
-RSpec.describe "Admin Runners", feature_category: :runner_fleet do
+RSpec.describe "Admin Runners", feature_category: :fleet_visibility do
+ include Features::SortingHelpers
include Features::RunnersHelpers
include Spec::Support::Helpers::ModalHelpers
@@ -11,8 +12,6 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
before do
sign_in(admin)
gitlab_enable_admin_mode_sign_in(admin)
-
- wait_for_requests
end
describe "Admin Runners page", :js do
@@ -21,7 +20,7 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
let_it_be(:namespace) { create(:namespace) }
let_it_be(:project) { create(:project, namespace: namespace, creator: user) }
- describe "runners creation" do
+ describe "runners creation and registration" do
before do
visit admin_runners_path
end
@@ -29,12 +28,6 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
it 'shows a create button' do
expect(page).to have_link s_('Runner|New instance runner'), href: new_admin_runner_path
end
- end
-
- describe "runners registration" do
- before do
- visit admin_runners_path
- end
it_behaves_like "shows and resets runner registration token" do
let(:dropdown_text) { s_('Runners|Register an instance runner') }
@@ -50,11 +43,7 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
visit admin_runners_path
end
- it_behaves_like 'shows runner in list' do
- let(:runner) { instance_runner }
- end
-
- it_behaves_like 'shows runner details from list' do
+ it_behaves_like 'shows runner summary and navigates to details' do
let(:runner) { instance_runner }
let(:runner_page_path) { admin_runner_path(instance_runner) }
end
@@ -404,11 +393,8 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
it_behaves_like 'shows no runners found'
- it 'shows active tab with no runner' do
+ it 'shows active tab' do
expect(page).to have_link('Instance', class: 'active')
-
- expect(page).not_to have_content 'runner-project'
- expect(page).not_to have_content 'runner-group'
end
end
end
@@ -443,10 +429,6 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
end
it_behaves_like 'shows no runners found'
-
- it 'shows no runner' do
- expect(page).not_to have_content 'runner-blue'
- end
end
it 'shows correct runner when tag is selected and search term is entered' do
@@ -480,8 +462,7 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
end
end
- click_on 'Created date' # Open "sort by" dropdown
- click_on 'Last contact'
+ pajamas_sort_by 'Last contact', from: 'Created date'
click_on 'Sort direction: Descending'
within_testid('runner-list') do
@@ -602,8 +583,6 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
before do
visit edit_admin_runner_path(project_runner)
-
- wait_for_requests
end
it_behaves_like 'submits edit runner form' do
@@ -633,7 +612,6 @@ RSpec.describe "Admin Runners", feature_category: :runner_fleet do
context 'when a runner is updated', :js do
before do
click_on _('Save changes')
- wait_for_requests
end
it 'show success alert and redirects to runner page' do
diff --git a/spec/features/admin/admin_settings_spec.rb b/spec/features/admin/admin_settings_spec.rb
index 4e0198b1f2b..77707a67d58 100644
--- a/spec/features/admin/admin_settings_spec.rb
+++ b/spec/features/admin/admin_settings_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe 'Admin updates settings', feature_category: :shared do
before do
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
sign_in(admin)
- gitlab_enable_admin_mode_sign_in(admin)
+ gitlab_enable_admin_mode_sign_in(admin, use_mock_admin_mode: false)
end
context 'General page' do
@@ -261,7 +261,7 @@ RSpec.describe 'Admin updates settings', feature_category: :shared do
expect(page).to have_content "Application settings saved successfully"
end
- it 'terms of Service' do
+ it 'terms of Service', :js do
# Already have the admin accept terms, so they don't need to accept in this spec.
_existing_terms = create(:term)
accept_terms(admin)
@@ -274,7 +274,10 @@ RSpec.describe 'Admin updates settings', feature_category: :shared do
expect(current_settings.enforce_terms).to be(true)
expect(current_settings.terms).to eq 'Be nice!'
- expect(page).to have_content 'Application settings saved successfully'
+
+ click_button 'Accept terms'
+
+ expect(page).to have_current_path(general_admin_application_settings_path, ignore_query: true)
end
it 'modify oauth providers' do
diff --git a/spec/features/admin/users/user_spec.rb b/spec/features/admin/users/user_spec.rb
index b8dc725c17f..d0110b3e013 100644
--- a/spec/features/admin/users/user_spec.rb
+++ b/spec/features/admin/users/user_spec.rb
@@ -11,7 +11,7 @@ RSpec.describe 'Admin::Users::User', feature_category: :user_management do
before do
sign_in(current_user)
- gitlab_enable_admin_mode_sign_in(current_user)
+ gitlab_enable_admin_mode_sign_in(current_user, use_mock_admin_mode: false)
end
describe 'GET /admin/users/:id' do
diff --git a/spec/features/boards/boards_spec.rb b/spec/features/boards/boards_spec.rb
index 48b978f7245..314a3fbd5f2 100644
--- a/spec/features/boards/boards_spec.rb
+++ b/spec/features/boards/boards_spec.rb
@@ -38,8 +38,6 @@ RSpec.describe 'Project issue boards', :js, feature_category: :team_planning do
project.add_maintainer(user2)
sign_in(user)
-
- set_cookie('sidebar_collapsed', 'true')
end
context 'no lists' do
diff --git a/spec/features/boards/user_adds_lists_to_board_spec.rb b/spec/features/boards/user_adds_lists_to_board_spec.rb
index d202c2a1f7d..22ee43895f4 100644
--- a/spec/features/boards/user_adds_lists_to_board_spec.rb
+++ b/spec/features/boards/user_adds_lists_to_board_spec.rb
@@ -31,8 +31,6 @@ RSpec.describe 'User adds lists', :js, feature_category: :team_planning do
before do
sign_in(user)
- set_cookie('sidebar_collapsed', 'true')
-
case board_type
when :project
visit project_board_path(project, project_board)
diff --git a/spec/features/clusters/create_agent_spec.rb b/spec/features/clusters/create_agent_spec.rb
index 79eaecdf582..960d5c78d43 100644
--- a/spec/features/clusters/create_agent_spec.rb
+++ b/spec/features/clusters/create_agent_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe 'Cluster agent registration', :js, feature_category: :deployment_
double(agent_name: 'example-agent-1', path: '.gitlab/agents/example-agent-1/config.yaml'),
double(agent_name: 'example-agent-2', path: '.gitlab/agents/example-agent-2/config.yaml')
])
- allow(client).to receive(:get_connected_agents).and_return([])
+ allow(client).to receive(:get_connected_agents_by_agent_ids).and_return([])
end
allow(Devise).to receive(:friendly_token).and_return(token)
diff --git a/spec/features/dashboard/issues_filter_spec.rb b/spec/features/dashboard/issues_filter_spec.rb
index ab3aa29a3aa..9bc412d6bf4 100644
--- a/spec/features/dashboard/issues_filter_spec.rb
+++ b/spec/features/dashboard/issues_filter_spec.rb
@@ -111,8 +111,7 @@ RSpec.describe 'Dashboard Issues filtering', :js, feature_category: :team_planni
end
it 'keeps sorting issues after visiting Projects Issues page' do
- click_button 'Created date'
- click_button 'Due date'
+ pajamas_sort_by 'Due date', from: 'Created date'
visit project_issues_path(project)
diff --git a/spec/features/dashboard/merge_requests_spec.rb b/spec/features/dashboard/merge_requests_spec.rb
index 8a7652858b8..ba42b3e099b 100644
--- a/spec/features/dashboard/merge_requests_spec.rb
+++ b/spec/features/dashboard/merge_requests_spec.rb
@@ -41,6 +41,18 @@ RSpec.describe 'Dashboard Merge Requests', :js, feature_category: :code_review_w
expect(page).not_to have_selector('#js-dropdown-target-branch', visible: false)
end
+ it 'disables releases filter' do
+ visit merge_requests_dashboard_path
+
+ expect(page).not_to have_selector('#js-dropdown-release', visible: false)
+ end
+
+ it 'disables environments filter' do
+ visit merge_requests_dashboard_path
+
+ expect(page).not_to have_selector('#js-dropdown-environment', visible: false)
+ end
+
context 'new merge request dropdown' do
let(:project_with_disabled_merge_requests) { create(:project, :merge_requests_disabled) }
@@ -199,19 +211,19 @@ RSpec.describe 'Dashboard Merge Requests', :js, feature_category: :code_review_w
end
it 'shows sorted merge requests' do
- pajamas_sort_by(s_('SortOptions|Created date'))
+ pajamas_sort_by(s_('SortOptions|Priority'), from: s_('SortOptions|Created date'))
visit merge_requests_dashboard_path(assignee_username: current_user.username)
- expect(find('.issues-filters')).to have_content('Created date')
+ expect(find('.issues-filters')).to have_content(s_('SortOptions|Priority'))
end
it 'keeps sorting merge requests after visiting Projects MR page' do
- pajamas_sort_by(s_('SortOptions|Created date'))
+ pajamas_sort_by(s_('SortOptions|Priority'), from: s_('SortOptions|Created date'))
visit project_merge_requests_path(project)
- expect(find('.issues-filters')).to have_content('Created date')
+ expect(find('.issues-filters')).to have_content(s_('SortOptions|Priority'))
end
end
diff --git a/spec/features/dashboard/projects_spec.rb b/spec/features/dashboard/projects_spec.rb
index 5379dabc713..e9b55ab2900 100644
--- a/spec/features/dashboard/projects_spec.rb
+++ b/spec/features/dashboard/projects_spec.rb
@@ -151,7 +151,7 @@ RSpec.describe 'Dashboard Projects', :js, feature_category: :groups_and_projects
it 'shows that the last pipeline passed' do
visit dashboard_projects_path
- page.within('[data-testid="project_controls"]') do
+ within_testid('project_controls') do
expect(page).to have_xpath("//a[@href='#{pipelines_project_commit_path(project, project.commit, ref: pipeline.ref)}']")
expect(page).to have_css("[data-testid='ci-icon']")
expect(page).to have_css('[data-testid="status_success_borderless-icon"]')
@@ -163,7 +163,7 @@ RSpec.describe 'Dashboard Projects', :js, feature_category: :groups_and_projects
it 'does not show the pipeline status' do
visit dashboard_projects_path
- page.within('[data-testid="project_controls"]') do
+ within_testid('project_controls') do
expect(page).not_to have_xpath("//a[@href='#{pipelines_project_commit_path(project, project.commit, ref: pipeline.ref)}']")
expect(page).not_to have_css("[data-testid='ci-icon']")
expect(page).not_to have_css('[data-testid="status_success_borderless-icon"]')
diff --git a/spec/features/dashboard/todos/todos_spec.rb b/spec/features/dashboard/todos/todos_spec.rb
index 59ce873905a..21dfa1cbc0b 100644
--- a/spec/features/dashboard/todos/todos_spec.rb
+++ b/spec/features/dashboard/todos/todos_spec.rb
@@ -95,7 +95,7 @@ RSpec.describe 'Dashboard Todos', :js, feature_category: :team_planning do
shared_examples 'deleting the todo' do
before do
within first('.todo') do
- find('[data-testid="check-icon"]').click
+ find_by_testid('check-icon').click
end
end
@@ -121,9 +121,9 @@ RSpec.describe 'Dashboard Todos', :js, feature_category: :team_planning do
shared_examples 'deleting and restoring the todo' do
before do
within first('.todo') do
- find('[data-testid="check-icon"]').click
+ find_by_testid('check-icon').click
wait_for_requests
- find('[data-testid="redo-icon"]').click
+ find_by_testid('redo-icon').click
end
end
@@ -301,7 +301,7 @@ RSpec.describe 'Dashboard Todos', :js, feature_category: :team_planning do
describe 'restoring the todo' do
before do
within first('.todo') do
- find('[data-testid="todo-add-icon"]').click
+ find_by_testid('todo-add-icon').click
end
end
@@ -407,7 +407,7 @@ RSpec.describe 'Dashboard Todos', :js, feature_category: :team_planning do
context 'User has deleted a todo' do
before do
within first('.todo') do
- find('[data-testid="check-icon"]').click
+ find_by_testid('check-icon').click
end
end
diff --git a/spec/features/environments/environments_folder_spec.rb b/spec/features/environments/environments_folder_spec.rb
new file mode 100644
index 00000000000..da9de6fba0c
--- /dev/null
+++ b/spec/features/environments/environments_folder_spec.rb
@@ -0,0 +1,142 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Environments Folder page', :js, feature_category: :environment_management do
+ let(:folder_name) { 'folder' }
+
+ let_it_be(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
+ let!(:envs) { create_list(:environment, 4, :with_folders, project: project, folder: folder_name) }
+ let!(:stopped_env) { create(:environment, :stopped, :with_folders, project: project, folder: folder_name) }
+
+ def get_env_name(environment)
+ environment.name.split('/').last
+ end
+
+ def find_env_element(environment)
+ find_by_id(environment.name)
+ end
+
+ def stop_environment(environment)
+ environment_item = find_env_element(environment)
+ within(environment_item) do
+ click_button 'Stop'
+ end
+
+ within('.modal') do
+ click_button 'Stop environment'
+ end
+
+ wait_for_requests
+ end
+
+ def redeploy_environment(environment)
+ environment_item = find_env_element(environment)
+ within(environment_item) do
+ click_button 'More actions'
+ click_button 'Delete environment'
+ end
+
+ within('.modal') do
+ click_button 'Delete environment'
+ end
+
+ wait_for_requests
+ end
+
+ before_all do
+ project.add_role(user, :developer)
+ end
+
+ before do
+ create(:environment, :production, project: project)
+ end
+
+ describe 'new folders page' do
+ before do
+ sign_in(user)
+ visit folder_project_environments_path(project, folder_name)
+ wait_for_requests
+ end
+
+ it 'renders the header with a folder name' do
+ expect(page).to have_content("Environments / #{folder_name}")
+ end
+
+ it 'renders the environments' do
+ expect(page).not_to have_content('production')
+ envs.each { |env| expect(page).to have_content(get_env_name(env)) }
+ end
+
+ it 'shows scope tabs' do
+ expect(page).to have_content("Active")
+ expect(page).to have_content("Stopped")
+ end
+
+ it 'can stop the environment' do
+ environment_to_stop = envs.first
+
+ stop_environment(environment_to_stop)
+
+ expect(page).not_to have_content(get_env_name(environment_to_stop))
+ end
+
+ describe 'stopped environments tab' do
+ before do
+ element = find('a', text: 'Stopped')
+ element.click
+ wait_for_requests
+ end
+
+ it 'shows stopped environments on stopped tab' do
+ expect(page).to have_content(get_env_name(stopped_env))
+ end
+
+ it 'can re-start the environment' do
+ redeploy_environment(stopped_env)
+
+ expect(page).not_to have_content(get_env_name(stopped_env))
+ end
+ end
+
+ describe 'pagination' do
+ # rubocop:disable RSpec/FactoryBot/ExcessiveCreateList -- need >20 items to test pagination
+ let!(:envs) { create_list(:environment, 25, :with_folders, project: project, folder: folder_name) }
+
+ # rubocop:enable RSpec/FactoryBot/ExcessiveCreateList
+ it 'shows pagination' do
+ pagination = find('.pagination')
+
+ expect(pagination).to have_content('2')
+ end
+
+ it 'can navigate to the next page and updates the url' do
+ pagination = find('.pagination')
+ pagination.scroll_to(:bottom)
+ within(pagination) do
+ click_link 'Next'
+ end
+
+ wait_for_requests
+
+ expect(current_url).to include('page=2')
+ end
+ end
+ end
+
+ describe 'legacy folders page' do
+ before do
+ stub_feature_flags(environments_folder_new_look: false)
+ sign_in(user)
+ visit folder_project_environments_path(project, folder_name)
+ wait_for_requests
+ end
+
+ it 'user opens folder view' do
+ expect(page).to have_content("Environments / #{folder_name}")
+ expect(page).not_to have_content('production')
+ envs.each { |env| expect(page).to have_content(get_env_name(env)) }
+ end
+ end
+end
diff --git a/spec/features/explore/catalog/catalog_settings_spec.rb b/spec/features/explore/catalog/catalog_settings_spec.rb
new file mode 100644
index 00000000000..bf324eafd7f
--- /dev/null
+++ b/spec/features/explore/catalog/catalog_settings_spec.rb
@@ -0,0 +1,78 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'CI/CD Catalog settings', :js, feature_category: :pipeline_composition do
+ let_it_be(:user) { create(:user) }
+ let_it_be_with_reload(:namespace) { create(:group) }
+ let_it_be_with_reload(:new_project) { create(:project, :repository, namespace: namespace) }
+
+ context 'when user is not the owner' do
+ before do
+ sign_in(user)
+ visit edit_project_path(new_project)
+ wait_for_requests
+ end
+
+ it 'does not show the CI/CD toggle settings' do
+ expect(page).not_to have_content('CI/CD Catalog resource')
+ end
+ end
+
+ context 'when user is the owner' do
+ before_all do
+ namespace.add_owner(user)
+ end
+
+ before do
+ sign_in(user)
+ end
+
+ it 'shows the CI/CD toggle settings' do
+ visit edit_project_path(new_project)
+ wait_for_requests
+
+ expect(page).to have_content('CI/CD Catalog resource')
+ end
+
+ describe 'when setting a project as a Catalog resource' do
+ before do
+ visit project_path(new_project)
+ wait_for_requests
+ end
+
+ it 'adds the project to the CI/CD Catalog' do
+ expect(page).not_to have_content('CI/CD catalog resource')
+
+ visit edit_project_path(new_project)
+
+ find('[data-testid="catalog-resource-toggle"] button').click
+
+ visit project_path(new_project)
+
+ expect(page).to have_content('CI/CD catalog resource')
+ end
+ end
+
+ describe 'when unlisting a project from the CI/CD Catalog' do
+ before do
+ create(:ci_catalog_resource, project: new_project, state: :published)
+ visit project_path(new_project)
+ wait_for_requests
+ end
+
+ it 'removes the project to the CI/CD Catalog' do
+ expect(page).to have_content('CI/CD catalog resource')
+
+ visit edit_project_path(new_project)
+
+ find('[data-testid="catalog-resource-toggle"] button').click
+ click_button 'Remove from the CI/CD catalog'
+
+ visit project_path(new_project)
+
+ expect(page).not_to have_content('CI/CD catalog resource')
+ end
+ end
+ end
+end
diff --git a/spec/features/explore/catalog/catalog_spec.rb b/spec/features/explore/catalog/catalog_spec.rb
new file mode 100644
index 00000000000..00bbb02ebbf
--- /dev/null
+++ b/spec/features/explore/catalog/catalog_spec.rb
@@ -0,0 +1,137 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'CI/CD Catalog', :js, feature_category: :pipeline_composition do
+ let_it_be(:namespace) { create(:group) }
+ let_it_be(:user) { create(:user) }
+
+ before_all do
+ namespace.add_developer(user)
+ end
+
+ before do
+ sign_in(user)
+ end
+
+ describe 'GET explore/catalog' do
+ let_it_be(:project) { create(:project, :repository, namespace: namespace) }
+
+ let_it_be(:ci_resource_projects) do
+ create_list(
+ :project,
+ 3,
+ :repository,
+ description: 'A simple component',
+ namespace: namespace
+ )
+ end
+
+ let_it_be(:ci_catalog_resources) do
+ ci_resource_projects.map do |current_project|
+ create(:ci_catalog_resource, :published, project: current_project)
+ end
+ end
+
+ before do
+ visit explore_catalog_index_path
+ wait_for_requests
+ end
+
+ it 'shows CI Catalog title and description', :aggregate_failures do
+ expect(page).to have_content('CI/CD Catalog')
+ expect(page).to have_content(
+ 'Discover CI/CD components that can improve your pipeline with additional functionality'
+ )
+ end
+
+ it 'renders CI Catalog resources list' do
+ expect(find_all('[data-testid="catalog-resource-item"]').length).to be(3)
+ end
+
+ context 'when searching for a resource' do
+ let(:project_name) { ci_resource_projects[0].name }
+
+ before do
+ find('input[data-testid="catalog-search-bar"]').send_keys project_name
+ find('input[data-testid="catalog-search-bar"]').send_keys :enter
+ wait_for_requests
+ end
+
+ it 'renders only a subset of items' do
+ expect(find_all('[data-testid="catalog-resource-item"]').length).to be(1)
+ within_testid('catalog-resource-item', match: :first) do
+ expect(page).to have_content(project_name)
+ end
+ end
+ end
+
+ context 'when sorting' do
+ context 'with the creation date option' do
+ it 'sorts resources from last to first by default' do
+ expect(find_all('[data-testid="catalog-resource-item"]').length).to be(3)
+ expect(find_all('[data-testid="catalog-resource-item"]')[0]).to have_content(ci_resource_projects[2].name)
+ expect(find_all('[data-testid="catalog-resource-item"]')[2]).to have_content(ci_resource_projects[0].name)
+ end
+
+ context 'when changing the sort direction' do
+ before do
+ find('.sorting-direction-button').click
+ wait_for_requests
+ end
+
+ it 'sorts resources from first to last' do
+ expect(find_all('[data-testid="catalog-resource-item"]').length).to be(3)
+ expect(find_all('[data-testid="catalog-resource-item"]')[0]).to have_content(ci_resource_projects[0].name)
+ expect(find_all('[data-testid="catalog-resource-item"]')[2]).to have_content(ci_resource_projects[2].name)
+ end
+ end
+ end
+ end
+
+ context 'for a single CI/CD catalog resource' do
+ it 'renders resource details', :aggregate_failures do
+ within_testid('catalog-resource-item', match: :first) do
+ expect(page).to have_content(ci_resource_projects[2].name)
+ expect(page).to have_content(ci_resource_projects[2].description)
+ expect(page).to have_content(namespace.name)
+ end
+ end
+
+ context 'when clicked' do
+ before do
+ find_by_testid('ci-resource-link', match: :first).click
+ end
+
+ it 'navigates to the details page' do
+ expect(page).to have_content('Go to the project')
+ end
+ end
+ end
+ end
+
+ describe 'GET explore/catalog/:id' do
+ let_it_be(:project) { create(:project, :repository, namespace: namespace) }
+
+ before do
+ visit explore_catalog_path(new_ci_resource)
+ end
+
+ context 'when the resource is published' do
+ let(:new_ci_resource) { create(:ci_catalog_resource, :published, project: project) }
+
+ it 'navigates to the details page' do
+ expect(page).to have_content('Go to the project')
+ end
+ end
+
+ context 'when the resource is not published' do
+ let(:new_ci_resource) { create(:ci_catalog_resource, project: project, state: :draft) }
+
+ it 'returns a 404' do
+ expect(page).to have_title('Not Found')
+ expect(page).to have_content('Page Not Found')
+ end
+ end
+ end
+end
diff --git a/spec/features/explore/catalog_spec.rb b/spec/features/explore/catalog_spec.rb
deleted file mode 100644
index 52ce52e43fe..00000000000
--- a/spec/features/explore/catalog_spec.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'Global Catalog', :js, feature_category: :pipeline_composition do
- let_it_be(:namespace) { create(:group) }
- let_it_be(:user) { create(:user) }
-
- before_all do
- namespace.add_developer(user)
- end
-
- before do
- sign_in(user)
- end
-
- describe 'GET explore/catalog' do
- let_it_be(:project) { create(:project, :repository, namespace: namespace) }
- let_it_be(:ci_resource_projects) do
- create_list(
- :project,
- 3,
- :repository,
- description: 'A simple component',
- namespace: namespace
- )
- end
-
- before do
- ci_resource_projects.each do |current_project|
- create(:ci_catalog_resource, project: current_project)
- end
-
- visit explore_catalog_index_path
- wait_for_requests
- end
-
- it 'shows CI Catalog title and description', :aggregate_failures do
- expect(page).to have_content('CI/CD Catalog')
- expect(page).to have_content('Discover CI configuration resources for a seamless CI/CD experience.')
- end
-
- it 'renders CI Catalog resources list' do
- expect(find_all('[data-testid="catalog-resource-item"]').length).to be(3)
- end
-
- context 'for a single CI/CD catalog resource' do
- it 'renders resource details', :aggregate_failures do
- within_testid('catalog-resource-item', match: :first) do
- expect(page).to have_content(ci_resource_projects[2].name)
- expect(page).to have_content(ci_resource_projects[2].description)
- expect(page).to have_content(namespace.name)
- end
- end
-
- context 'when clicked' do
- before do
- find_by_testid('ci-resource-link', match: :first).click
- end
-
- it 'navigate to the details page' do
- expect(page).to have_content('Go to the project')
- end
- end
- end
- end
-
- describe 'GET explore/catalog/:id' do
- let_it_be(:project) { create(:project, :repository, namespace: namespace) }
- let_it_be(:new_ci_resource) { create(:ci_catalog_resource, project: project) }
-
- before do
- visit explore_catalog_path(id: new_ci_resource["id"])
- end
-
- it 'navigates to the details page' do
- expect(page).to have_content('Go to the project')
- end
- end
-end
diff --git a/spec/features/explore/navbar_spec.rb b/spec/features/explore/navbar_spec.rb
index c172760eb2c..f8fe9bc9af3 100644
--- a/spec/features/explore/navbar_spec.rb
+++ b/spec/features/explore/navbar_spec.rb
@@ -7,19 +7,7 @@ RSpec.describe '"Explore" navbar', :js, feature_category: :navigation do
it_behaves_like 'verified navigation bar' do
before do
- stub_feature_flags(global_ci_catalog: false)
visit explore_projects_path
end
end
-
- context "with 'global_ci_catalog' enabled" do
- include_context '"Explore" navbar structure with global_ci_catalog FF'
-
- it_behaves_like 'verified navigation bar', global_ci_catalog: true do
- before do
- stub_feature_flags(global_ci_catalog: true)
- visit explore_projects_path
- end
- end
- end
end
diff --git a/spec/features/explore/user_explores_projects_spec.rb b/spec/features/explore/user_explores_projects_spec.rb
index e1341824bfd..369297ff04a 100644
--- a/spec/features/explore/user_explores_projects_spec.rb
+++ b/spec/features/explore/user_explores_projects_spec.rb
@@ -25,7 +25,7 @@ RSpec.describe 'User explores projects', feature_category: :user_profile do
describe 'breadcrumbs' do
it 'has "Explore" as its root breadcrumb' do
- within '.breadcrumbs-list li:first' do
+ within '.gl-breadcrumb-list li:first' do
expect(page).to have_link('Explore', href: explore_root_path)
end
end
diff --git a/spec/features/file_uploads/graphql_add_design_spec.rb b/spec/features/file_uploads/graphql_add_design_spec.rb
index 0b61c952b55..714a2a29ee2 100644
--- a/spec/features/file_uploads/graphql_add_design_spec.rb
+++ b/spec/features/file_uploads/graphql_add_design_spec.rb
@@ -53,7 +53,7 @@ RSpec.describe 'Upload a design through graphQL', :js, feature_category: :design
RSpec.shared_examples 'for a design upload through graphQL' do
it 'creates proper objects' do
expect { subject }
- .to change { ::DesignManagement::Design.count }.by(1)
+ .to change { DesignManagement::Design.count }.by(1)
.and change { ::LfsObject.count }.by(1)
end
diff --git a/spec/features/frequently_visited_projects_and_groups_spec.rb b/spec/features/frequently_visited_projects_and_groups_spec.rb
index 514b642a2d4..764e88882a8 100644
--- a/spec/features/frequently_visited_projects_and_groups_spec.rb
+++ b/spec/features/frequently_visited_projects_and_groups_spec.rb
@@ -3,8 +3,6 @@
require 'spec_helper'
RSpec.describe 'Frequently visited items', :js, feature_category: :shared do
- include Features::TopNavSpecHelpers
-
let_it_be(:user) { create(:user) }
before do
diff --git a/spec/features/groups/board_sidebar_spec.rb b/spec/features/groups/board_sidebar_spec.rb
index 3fe520ea2ea..51d2e85f779 100644
--- a/spec/features/groups/board_sidebar_spec.rb
+++ b/spec/features/groups/board_sidebar_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Group Issue Boards', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Group Issue Boards', :js, feature_category: :team_planning do
include BoardHelpers
let(:group) { create(:group) }
@@ -34,7 +34,7 @@ RSpec.describe 'Group Issue Boards', :js, feature_category: :groups_and_projects
wait_for_requests
- page.within('[data-testid="dropdown-content"]') do
+ within_testid('dropdown-content') do
expect(page).to have_content(project_1_label.title)
expect(page).to have_content(group_label.title)
expect(page).not_to have_content(project_2_label.title)
diff --git a/spec/features/groups/board_spec.rb b/spec/features/groups/board_spec.rb
index e6dc6055e27..1a9a53a7421 100644
--- a/spec/features/groups/board_spec.rb
+++ b/spec/features/groups/board_spec.rb
@@ -32,7 +32,7 @@ RSpec.describe 'Group Boards', feature_category: :team_planning do
fill_in 'issue_title', with: issue_title
- page.within("[data-testid='project-select-dropdown']") do
+ within_testid('project-select-dropdown') do
find('button.gl-new-dropdown-toggle').click
find('.gl-new-dropdown-item').click
diff --git a/spec/features/groups/clusters/user_spec.rb b/spec/features/groups/clusters/user_spec.rb
index d876a5804bd..9089fba1886 100644
--- a/spec/features/groups/clusters/user_spec.rb
+++ b/spec/features/groups/clusters/user_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'User Cluster', :js, feature_category: :user_profile do
+RSpec.describe 'User Cluster', :js, feature_category: :environment_management do
include GoogleApi::CloudPlatformHelpers
let(:group) { create(:group) }
@@ -112,14 +112,33 @@ RSpec.describe 'User Cluster', :js, feature_category: :user_profile do
context 'when user destroys the cluster' do
before do
click_link 'Advanced Settings'
- find('[data-testid="remove-integration-button"]').click
+ find_by_testid('remove-integration-button').click
fill_in 'confirm_cluster_name_input', with: cluster.name
- find('[data-testid="remove-integration-modal-button"]').click
+ find_by_testid('remove-integration-modal-button').click
end
it 'user sees creation form with the successful message' do
expect(page).to have_content('Kubernetes cluster integration was successfully removed.')
end
end
+
+ context 'when signed in user is an admin in admin_mode' do
+ let(:admin) { create(:admin) }
+
+ before do
+ # signs out the user with `maintainer` role in the project
+ gitlab_sign_out
+
+ gitlab_sign_in(admin)
+ gitlab_enable_admin_mode_sign_in(admin)
+
+ visit group_clusters_path(group)
+ end
+
+ it 'can visit the clusters index page', :aggregate_failures do
+ expect(page).to have_title("Kubernetes Clusters · #{group.name} · #{_('GitLab')}")
+ expect(page).to have_content('Connect a cluster')
+ end
+ end
end
end
diff --git a/spec/features/groups/dependency_proxy_spec.rb b/spec/features/groups/dependency_proxy_spec.rb
index 12c480a46b0..136c1ff0335 100644
--- a/spec/features/groups/dependency_proxy_spec.rb
+++ b/spec/features/groups/dependency_proxy_spec.rb
@@ -62,7 +62,7 @@ RSpec.describe 'Group Dependency Proxy', feature_category: :dependency_proxy do
visit settings_path
wait_for_requests
- proxy_toggle = find('[data-testid="dependency-proxy-setting-toggle"]')
+ proxy_toggle = find_by_testid('dependency-proxy-setting-toggle')
proxy_toggle_button = proxy_toggle.find('button')
expect(proxy_toggle).to have_css("button.is-checked")
diff --git a/spec/features/groups/group_runners_spec.rb b/spec/features/groups/group_runners_spec.rb
index 4e5d7c6f8e8..b9a68b75962 100644
--- a/spec/features/groups/group_runners_spec.rb
+++ b/spec/features/groups/group_runners_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe "Group Runners", feature_category: :runner_fleet do
+RSpec.describe "Group Runners", feature_category: :fleet_visibility do
include Features::RunnersHelpers
include Spec::Support::Helpers::ModalHelpers
@@ -11,7 +11,7 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do
let_it_be(:group) { create(:group) }
let_it_be(:project) { create(:project, group: group) }
- before do
+ before_all do
group.add_owner(group_owner)
group.add_maintainer(group_maintainer)
end
@@ -45,11 +45,7 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do
visit group_runners_path(group)
end
- it_behaves_like 'shows runner in list' do
- let(:runner) { group_runner }
- end
-
- it_behaves_like 'shows runner details from list' do
+ it_behaves_like 'shows runner summary and navigates to details' do
let(:runner) { group_runner }
let(:runner_page_path) { group_runner_path(group, group_runner) }
end
@@ -66,10 +62,6 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do
end
it_behaves_like 'shows no runners found'
-
- it 'shows no runner' do
- expect(page).not_to have_content 'runner-foo'
- end
end
end
@@ -82,11 +74,7 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do
visit group_runners_path(group)
end
- it_behaves_like 'shows runner in list' do
- let(:runner) { project_runner }
- end
-
- it_behaves_like 'shows runner details from list' do
+ it_behaves_like 'shows runner summary and navigates to details' do
let(:runner) { project_runner }
let(:runner_page_path) { group_runner_path(group, project_runner) }
end
@@ -110,15 +98,9 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do
context "when selecting 'Show only inherited'" do
before do
find("[data-testid='runner-membership-toggle'] button").click
-
- wait_for_requests
- end
-
- it_behaves_like 'shows runner in list' do
- let(:runner) { instance_runner }
end
- it_behaves_like 'shows runner details from list' do
+ it_behaves_like 'shows runner summary and navigates to details' do
let(:runner) { instance_runner }
let(:runner_page_path) { group_runner_path(group, instance_runner) }
end
@@ -287,7 +269,6 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do
before do
visit edit_group_runner_path(group, group_runner)
- wait_for_requests
end
it_behaves_like 'submits edit runner form' do
@@ -301,7 +282,6 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do
before do
visit edit_group_runner_path(group, project_runner)
- wait_for_requests
end
it_behaves_like 'submits edit runner form' do
diff --git a/spec/features/groups/group_settings_spec.rb b/spec/features/groups/group_settings_spec.rb
index 0437e5df6e9..a7710ea04ab 100644
--- a/spec/features/groups/group_settings_spec.rb
+++ b/spec/features/groups/group_settings_spec.rb
@@ -141,8 +141,8 @@ RSpec.describe 'Edit group settings', feature_category: :groups_and_projects do
end
describe 'transfer group', :js do
- let(:namespace_select) { page.find('[data-testid="transfer-group-namespace-select"]') }
- let(:confirm_modal) { page.find('[data-testid="confirm-danger-modal"]') }
+ let(:namespace_select) { find_by_testid('transfer-group-namespace-select') }
+ let(:confirm_modal) { find_by_testid('confirm-danger-modal') }
shared_examples 'can transfer the group' do
before do
@@ -154,7 +154,7 @@ RSpec.describe 'Edit group settings', feature_category: :groups_and_projects do
visit edit_group_path(selected_group)
- page.within('[data-testid="transfer-locations-dropdown"]') do
+ within_testid('transfer-locations-dropdown') do
click_button _('Select parent group')
fill_in _('Search'), with: target_group&.name || ''
wait_for_requests
@@ -170,7 +170,7 @@ RSpec.describe 'Edit group settings', feature_category: :groups_and_projects do
click_button 'Confirm'
end
- within('[data-testid="breadcrumb-links"]') do
+ within_testid('breadcrumb-links') do
expect(page).to have_content(target_group.name) if target_group
expect(page).to have_content(selected_group.name)
end
diff --git a/spec/features/groups/import_export/connect_instance_spec.rb b/spec/features/groups/import_export/connect_instance_spec.rb
index f6548c035f0..f3c89cce633 100644
--- a/spec/features/groups/import_export/connect_instance_spec.rb
+++ b/spec/features/groups/import_export/connect_instance_spec.rb
@@ -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 instance URL', disabled: true)
+ expect(page).to have_field('GitLab source instance base 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 9fc9c7898d1..87b38221ad6 100644
--- a/spec/features/groups/import_export/migration_history_spec.rb
+++ b/spec/features/groups/import_export/migration_history_spec.rb
@@ -26,7 +26,7 @@ RSpec.describe 'Import/Export - GitLab migration history', :js, feature_category
wait_for_requests
- expect(page).to have_content 'GitLab Migration history'
+ expect(page).to have_content 'Direct transfer history'
expect(page.find('tbody')).to have_css('tr', count: 2)
end
end
diff --git a/spec/features/groups/issues_spec.rb b/spec/features/groups/issues_spec.rb
index 0d7e9df031c..e4f9fe34823 100644
--- a/spec/features/groups/issues_spec.rb
+++ b/spec/features/groups/issues_spec.rb
@@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe 'Group issues page', feature_category: :groups_and_projects do
+ include Features::SortingHelpers
include FilteredSearchHelpers
include DragTo
@@ -180,8 +181,7 @@ RSpec.describe 'Group issues page', feature_category: :groups_and_projects do
end
def select_manual_sort
- click_button 'Created date'
- click_button 'Manual'
+ pajamas_sort_by 'Manual', from: 'Created date'
wait_for_requests
end
diff --git a/spec/features/groups/members/leave_group_spec.rb b/spec/features/groups/members/leave_group_spec.rb
index d864852e0d4..632155cd7e4 100644
--- a/spec/features/groups/members/leave_group_spec.rb
+++ b/spec/features/groups/members/leave_group_spec.rb
@@ -9,17 +9,22 @@ RSpec.describe 'Groups > Members > Leave group', feature_category: :groups_and_p
let(:user) { create(:user) }
let(:other_user) { create(:user) }
let(:group) { create(:group) }
+ let(:more_actions_dropdown) do
+ find('[data-testid="groups-projects-more-actions-dropdown"] .gl-new-dropdown-custom-toggle')
+ end
before do
sign_in(user)
end
- it 'guest leaves the group' do
+ it 'guest leaves the group', :js do
group.add_guest(user)
group.add_owner(other_user)
visit group_path(group)
+ more_actions_dropdown.click
click_link 'Leave group'
+ accept_gl_confirm(button_text: 'Leave group')
expect(page).to have_current_path(dashboard_groups_path, ignore_query: true)
expect(page).to have_content left_group_message(group)
@@ -31,31 +36,33 @@ RSpec.describe 'Groups > Members > Leave group', feature_category: :groups_and_p
group.add_owner(other_user)
visit group_path(group, leave: 1)
-
accept_gl_confirm(button_text: 'Leave group')
- wait_for_all_requests
expect(page).to have_current_path(dashboard_groups_path, ignore_query: true)
expect(group.users).not_to include(user)
end
- it 'guest leaves the group as last member' do
+ it 'guest leaves the group as last member', :js do
group.add_guest(user)
visit group_path(group)
+ more_actions_dropdown.click
click_link 'Leave group'
+ accept_gl_confirm(button_text: 'Leave group')
expect(page).to have_current_path(dashboard_groups_path, ignore_query: true)
expect(page).to have_content left_group_message(group)
expect(group.users).not_to include(user)
end
- it 'owner leaves the group if they are not the last owner' do
+ it 'owner leaves the group if they are not the last owner', :js do
group.add_owner(user)
group.add_owner(other_user)
visit group_path(group)
+ more_actions_dropdown.click
click_link 'Leave group'
+ accept_gl_confirm(button_text: 'Leave group')
expect(page).to have_current_path(dashboard_groups_path, ignore_query: true)
expect(page).to have_content left_group_message(group)
@@ -66,6 +73,7 @@ RSpec.describe 'Groups > Members > Leave group', feature_category: :groups_and_p
group.add_owner(user)
visit group_path(group)
+ more_actions_dropdown.click
expect(page).not_to have_content 'Leave group'
@@ -79,7 +87,7 @@ RSpec.describe 'Groups > Members > Leave group', feature_category: :groups_and_p
visit group_path(group, leave: 1)
- expect(find('[data-testid="alert-danger"]')).to have_content 'You do not have permission to leave this group'
+ expect(find_by_testid('alert-danger')).to have_content 'You do not have permission to leave this group'
end
def left_group_message(group)
diff --git a/spec/features/groups/members/manage_groups_spec.rb b/spec/features/groups/members/manage_groups_spec.rb
index 87de0e2e46b..9531ebd3c35 100644
--- a/spec/features/groups/members/manage_groups_spec.rb
+++ b/spec/features/groups/members/manage_groups_spec.rb
@@ -106,7 +106,7 @@ RSpec.describe 'Groups > Members > Manage groups', :js, feature_category: :group
page.within first_row do
expect(page).to have_field('Expiration date', with: expiration_date)
- find('[data-testid="clear-button"]').click
+ find_by_testid('clear-button').click
wait_for_requests
diff --git a/spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb b/spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb
index c2eedfb4063..38eb226690c 100644
--- a/spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb
+++ b/spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb
@@ -48,7 +48,7 @@ RSpec.describe 'Groups > Members > Owner adds member with expiration date', :js,
page.within second_row do
expect(page).to have_field('Expiration date', with: expiration_date)
- find('[data-testid="clear-button"]').click
+ find_by_testid('clear-button').click
wait_for_requests
diff --git a/spec/features/groups/members/request_access_spec.rb b/spec/features/groups/members/request_access_spec.rb
index 2d0b2e483c5..e6da2ce7cec 100644
--- a/spec/features/groups/members/request_access_spec.rb
+++ b/spec/features/groups/members/request_access_spec.rb
@@ -3,10 +3,15 @@
require 'spec_helper'
RSpec.describe 'Groups > Members > Request access', feature_category: :groups_and_projects do
+ include Spec::Support::Helpers::ModalHelpers
+
let(:user) { create(:user) }
let(:owner) { create(:user) }
let(:group) { create(:group, :public) }
let!(:project) { create(:project, :private, namespace: group) }
+ let(:more_actions_dropdown) do
+ find('[data-testid="groups-projects-more-actions-dropdown"] .gl-new-dropdown-custom-toggle')
+ end
before do
group.add_owner(owner)
@@ -14,15 +19,19 @@ RSpec.describe 'Groups > Members > Request access', feature_category: :groups_an
visit group_path(group)
end
- it 'request access feature is disabled' do
+ it 'request access feature is disabled', :js do
group.update!(request_access_enabled: false)
visit group_path(group)
+ more_actions_dropdown.click
expect(page).not_to have_content 'Request Access'
end
- it 'user can request access to a group' do
- perform_enqueued_jobs { click_link 'Request Access' }
+ it 'user can request access to a group', :js do
+ perform_enqueued_jobs do
+ more_actions_dropdown.click
+ click_link 'Request Access'
+ end
expect(ActionMailer::Base.deliveries.last.to).to eq [owner.notification_email_or_default]
expect(ActionMailer::Base.deliveries.last.subject).to match "Request to join the #{group.name} group"
@@ -30,18 +39,26 @@ RSpec.describe 'Groups > Members > Request access', feature_category: :groups_an
expect(group.requesters.exists?(user_id: user)).to be_truthy
expect(page).to have_content 'Your request for access has been queued for review.'
+ more_actions_dropdown.click
+
expect(page).to have_content 'Withdraw Access Request'
expect(page).not_to have_content 'Leave group'
end
- it 'user does not see private projects' do
- perform_enqueued_jobs { click_link 'Request Access' }
+ it 'user does not see private projects', :js do
+ perform_enqueued_jobs do
+ more_actions_dropdown.click
+ click_link 'Request Access'
+ end
expect(page).not_to have_content project.name
end
- it 'user does not see group in the Dashboard > Groups page' do
- perform_enqueued_jobs { click_link 'Request Access' }
+ it 'user does not see group in the Dashboard > Groups page', :js do
+ perform_enqueued_jobs do
+ more_actions_dropdown.click
+ click_link 'Request Access'
+ end
visit dashboard_groups_path
@@ -49,6 +66,7 @@ RSpec.describe 'Groups > Members > Request access', feature_category: :groups_an
end
it 'user is not listed in the group members page', :js do
+ more_actions_dropdown.click
click_link 'Request Access'
expect(group.requesters.exists?(user_id: user)).to be_truthy
@@ -63,20 +81,24 @@ RSpec.describe 'Groups > Members > Request access', feature_category: :groups_an
end
end
- it 'user can withdraw its request for access' do
+ it 'user can withdraw its request for access', :js do
+ more_actions_dropdown.click
click_link 'Request Access'
expect(group.requesters.exists?(user_id: user)).to be_truthy
+ more_actions_dropdown.click
click_link 'Withdraw Access Request'
+ accept_gl_confirm
- expect(group.requesters.exists?(user_id: user)).to be_falsey
expect(page).to have_content 'Your access request to the group has been withdrawn.'
+ expect(group.requesters.exists?(user_id: user)).to be_falsey
end
- it 'member does not see the request access button' do
+ it 'member does not see the request access button', :js do
group.add_owner(user)
visit group_path(group)
+ more_actions_dropdown.click
expect(page).not_to have_content 'Request Access'
end
diff --git a/spec/features/groups/members/search_members_spec.rb b/spec/features/groups/members/search_members_spec.rb
index ed2e0cd7b09..5f4ff8023c6 100644
--- a/spec/features/groups/members/search_members_spec.rb
+++ b/spec/features/groups/members/search_members_spec.rb
@@ -21,7 +21,7 @@ RSpec.describe 'Search group member', :js, feature_category: :groups_and_project
end
it 'renders member users' do
- page.within '[data-testid="members-filtered-search-bar"]' do
+ within_testid('members-filtered-search-bar') do
find_field('Filter members').click
find('input').native.send_keys(member.name)
click_button 'Search'
diff --git a/spec/features/groups/members/sort_members_spec.rb b/spec/features/groups/members/sort_members_spec.rb
index ea6f3ae1966..1cc9862ff3b 100644
--- a/spec/features/groups/members/sort_members_spec.rb
+++ b/spec/features/groups/members/sort_members_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe 'Groups > Members > Sort members', :js, feature_category: :groups
end
def expect_sort_by(text, sort_direction)
- within('[data-testid="members-sort-dropdown"]') do
+ within_testid('members-sort-dropdown') do
expect(page).to have_css('button[aria-haspopup="menu"]', text: text)
expect(page).to have_button("Sort direction: #{sort_direction == :asc ? 'Ascending' : 'Descending'}")
end
diff --git a/spec/features/groups/members/tabs_spec.rb b/spec/features/groups/members/tabs_spec.rb
index cc97b367313..b96aa9293f2 100644
--- a/spec/features/groups/members/tabs_spec.rb
+++ b/spec/features/groups/members/tabs_spec.rb
@@ -62,7 +62,7 @@ RSpec.describe 'Groups > Members > Tabs', :js, feature_category: :groups_and_pro
click_link 'Invited'
- page.within '[data-testid="members-filtered-search-bar"]' do
+ within_testid('members-filtered-search-bar') do
find_field('Search invited').click
find('input').native.send_keys('email')
click_button 'Search'
@@ -75,7 +75,7 @@ RSpec.describe 'Groups > Members > Tabs', :js, feature_category: :groups_and_pro
before do
click_link 'Members'
- page.within '[data-testid="members-filtered-search-bar"]' do
+ within_testid 'members-filtered-search-bar' do
find_field('Filter members').click
find('input').native.send_keys('test')
click_button 'Search'
diff --git a/spec/features/groups/merge_requests_spec.rb b/spec/features/groups/merge_requests_spec.rb
index 0a830e6715c..84a6bc96df0 100644
--- a/spec/features/groups/merge_requests_spec.rb
+++ b/spec/features/groups/merge_requests_spec.rb
@@ -81,7 +81,7 @@ RSpec.describe 'Group merge requests page', feature_category: :code_review_workf
it 'shows projects only with merge requests feature enabled', :js do
click_button 'Select project to create merge request'
- page.within('[data-testid="new-resource-dropdown"]') do
+ within_testid('new-resource-dropdown') do
expect(page).to have_content(project.name_with_namespace)
expect(page).not_to have_content(project_with_merge_requests_disabled.name_with_namespace)
end
diff --git a/spec/features/groups/milestone_spec.rb b/spec/features/groups/milestone_spec.rb
index bb7cc3db452..3f03f62604d 100644
--- a/spec/features/groups/milestone_spec.rb
+++ b/spec/features/groups/milestone_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Group milestones', feature_category: :groups_and_projects do
+RSpec.describe 'Group milestones', feature_category: :team_planning do
let_it_be(:group) { create(:group) }
let_it_be(:project) { create(:project_empty_repo, group: group) }
let_it_be(:user) { create(:group_member, :maintainer, user: create(:user), group: group).user }
@@ -98,7 +98,7 @@ RSpec.describe 'Group milestones', feature_category: :groups_and_projects do
end
it 'counts milestones correctly' do
- page.within '[data-testid="milestones-filter"]' do
+ within_testid 'milestones-filter' do
expect(page).to have_content('Open 3')
expect(page).to have_content('Closed 3')
expect(page).to have_content('All 6')
diff --git a/spec/features/groups/packages_spec.rb b/spec/features/groups/packages_spec.rb
index 7819b1f0ab6..6b2a15daf72 100644
--- a/spec/features/groups/packages_spec.rb
+++ b/spec/features/groups/packages_spec.rb
@@ -52,7 +52,7 @@ RSpec.describe 'Group Packages', feature_category: :package_registry do
it_behaves_like 'package details link'
it 'allows you to navigate to the project page' do
- find('[data-testid="root-link"]', text: project.name).click
+ find_by_testid('root-link', text: project.name).click
expect(page).to have_current_path(project_path(project))
expect(page).to have_content(project.name)
diff --git a/spec/features/groups/settings/ci_cd_spec.rb b/spec/features/groups/settings/ci_cd_spec.rb
index a1acb73178b..bf056f535f2 100644
--- a/spec/features/groups/settings/ci_cd_spec.rb
+++ b/spec/features/groups/settings/ci_cd_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe 'Group CI/CD settings', feature_category: :continuous_integration
end
describe 'Runners section' do
- let(:shared_runners_toggle) { page.find('[data-testid="shared-runners-toggle"]') }
+ let(:shared_runners_toggle) { find_by_testid('shared-runners-toggle') }
before do
visit group_settings_ci_cd_path(group)
diff --git a/spec/features/groups/settings/group_badges_spec.rb b/spec/features/groups/settings/group_badges_spec.rb
index 1f16a288882..1ae61853748 100644
--- a/spec/features/groups/settings/group_badges_spec.rb
+++ b/spec/features/groups/settings/group_badges_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Group Badges', feature_category: :groups_and_projects do
+RSpec.describe 'Group Badges', feature_category: :groups_and_projects, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/430713' do
include WaitForRequests
let(:user) { create(:user) }
diff --git a/spec/features/groups/settings/packages_and_registries_spec.rb b/spec/features/groups/settings/packages_and_registries_spec.rb
index cbd26441e2b..934234aa171 100644
--- a/spec/features/groups/settings/packages_and_registries_spec.rb
+++ b/spec/features/groups/settings/packages_and_registries_spec.rb
@@ -65,8 +65,10 @@ RSpec.describe 'Group Package and registry settings', feature_category: :package
wait_for_requests
+ # rubocop:disable Capybara/TestidFinders -- Helper within_testid doesn't cover use case
expect(page).to be_axe_clean.within('[data-testid="packages-and-registries-group-settings"]')
.skipping :'link-in-text-block', :'heading-order'
+ # rubocop:enable Capybara/TestidFinders
end
it 'has a Duplicate packages section', :js do
@@ -81,7 +83,7 @@ RSpec.describe 'Group Package and registry settings', feature_category: :package
visit_settings_page
wait_for_requests
- within '[data-testid="maven-settings"]' do
+ within_testid 'maven-settings' do
expect(page).to have_field _('Exceptions'), disabled: true
click_button class: 'gl-toggle'
@@ -98,7 +100,7 @@ RSpec.describe 'Group Package and registry settings', feature_category: :package
visit_settings_page
wait_for_requests
- within '[data-testid="maven-settings"]' do
+ within_testid 'maven-settings' do
click_button class: 'gl-toggle'
fill_in _('Exceptions'), with: ')'
@@ -115,7 +117,7 @@ RSpec.describe 'Group Package and registry settings', feature_category: :package
visit_sub_group_settings_page
wait_for_requests
- within '[data-testid="maven-settings"]' do
+ within_testid 'maven-settings' do
expect(page).to have_content('Allow duplicates')
expect(page).to have_field _('Exceptions'), disabled: true
diff --git a/spec/features/groups/show_spec.rb b/spec/features/groups/show_spec.rb
index cf18f3cb4e5..c2ab5edf79c 100644
--- a/spec/features/groups/show_spec.rb
+++ b/spec/features/groups/show_spec.rb
@@ -38,7 +38,7 @@ RSpec.describe 'Group show page', feature_category: :groups_and_projects do
expect(page).to have_content('Collaborate with your team')
- page.within(find('[data-testid="invite-members-banner"]')) do
+ within_testid('invite-members-banner') do
click_button('Invite your colleagues')
end
@@ -48,8 +48,8 @@ RSpec.describe 'Group show page', feature_category: :groups_and_projects do
click_button('Cancel')
end
- page.within(find('[data-testid="invite-members-banner"]')) do
- find('[data-testid="close-icon"]').click
+ within_testid('invite-members-banner') do
+ find_by_testid('close-icon').click
end
expect(page).not_to have_content('Collaborate with your team')
@@ -119,7 +119,7 @@ RSpec.describe 'Group show page', feature_category: :groups_and_projects do
wait_for_requests
- page.within("[data-testid=\"group-overview-item-#{public_project.id}\"]") do
+ within_testid("group-overview-item-#{public_project.id}") do
click_button _('Less restrictive visibility')
end
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index 578f39181d1..c0aaa7f818a 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -485,7 +485,7 @@ RSpec.describe 'Group', feature_category: :groups_and_projects do
it 'only displays "New subgroup" button' do
visit group_path(group)
- page.within '[data-testid="group-buttons"]' do
+ within_testid 'group-buttons' do
expect(page).to have_link('New subgroup')
expect(page).not_to have_link('New project')
end
@@ -502,7 +502,7 @@ RSpec.describe 'Group', feature_category: :groups_and_projects do
sign_in(user)
visit group_path(group)
- page.within '[data-testid="group-buttons"]' do
+ within_testid 'group-buttons' do
expect(page).to have_link('New project')
expect(page).not_to have_link('New subgroup')
end
@@ -515,7 +515,7 @@ RSpec.describe 'Group', feature_category: :groups_and_projects do
visit group_path(group)
- page.within '[data-testid="group-buttons"]' do
+ within_testid 'group-buttons' do
expect(page).to have_link('New subgroup')
expect(page).to have_link('New project')
end
@@ -542,7 +542,7 @@ RSpec.describe 'Group', feature_category: :groups_and_projects do
it 'does not display the "New project" button' do
visit group_path(group)
- page.within '[data-testid="group-buttons"]' do
+ within_testid 'group-buttons' do
expect(page).not_to have_link('New project')
end
end
diff --git a/spec/features/incidents/incident_details_spec.rb b/spec/features/incidents/incident_details_spec.rb
index 693f2599de5..bc0674c4886 100644
--- a/spec/features/incidents/incident_details_spec.rb
+++ b/spec/features/incidents/incident_details_spec.rb
@@ -46,7 +46,7 @@ RSpec.describe 'Incident details', :js, feature_category: :incident_management d
# shows the incident tabs
page.within('.issuable-details') do
- incident_tabs = find('[data-testid="incident-tabs"]')
+ incident_tabs = find_by_testid('incident-tabs')
expect(find('h1')).to have_content(incident.title)
expect(incident_tabs).to have_content('Summary')
@@ -66,14 +66,21 @@ RSpec.describe 'Incident details', :js, feature_category: :incident_management d
describe 'escalation status' do
let(:sidebar) { page.find('.right-sidebar') }
- let(:widget) { sidebar.find('[data-testid="escalation_status_container"]') }
+ let(:widget) do
+ within sidebar do
+ find_by_testid('escalation_status_container')
+ end
+ end
+
let(:expected_dropdown_options) { escalation_status.class::STATUSES.keys.take(3).map { |key| key.to_s.titleize } }
it 'has an interactable escalation status widget', :aggregate_failures do
expect(current_status).to have_text(escalation_status.status_name.to_s.titleize)
# list the available statuses
- widget.find('[data-testid="edit-button"]').click
+ within widget do
+ find_by_testid('edit-button').click
+ end
expect(dropdown_options.map(&:text)).to eq(expected_dropdown_options)
expect(widget).not_to have_selector('#escalation-status-help')
@@ -95,7 +102,9 @@ RSpec.describe 'Incident details', :js, feature_category: :incident_management d
end
def current_status
- widget.find('[data-testid="collapsed-content"]')
+ within widget do
+ find_by_testid('collapsed-content')
+ end
end
end
end
@@ -108,9 +117,9 @@ RSpec.describe 'Incident details', :js, feature_category: :incident_management d
click_button 'Edit title and description'
wait_for_requests
- page.within('[data-testid="issuable-form"]') do
+ within_testid('issuable-form') do
click_button 'Issue'
- find('[data-testid="issue-type-list-item"]', text: 'Incident').click
+ find_by_testid('issue-type-list-item', text: 'Incident').click
click_button 'Save changes'
end
@@ -130,9 +139,9 @@ RSpec.describe 'Incident details', :js, feature_category: :incident_management d
click_button 'Edit title and description'
wait_for_requests
- page.within('[data-testid="issuable-form"]') do
+ within_testid('issuable-form') do
click_button 'Incident'
- find('[data-testid="issue-type-list-item"]', text: 'Issue').click
+ find_by_testid('issue-type-list-item', text: 'Issue').click
click_button 'Save changes'
end
diff --git a/spec/features/incidents/incident_timeline_events_spec.rb b/spec/features/incidents/incident_timeline_events_spec.rb
index bd3658ab60f..4ceae0f8780 100644
--- a/spec/features/incidents/incident_timeline_events_spec.rb
+++ b/spec/features/incidents/incident_timeline_events_spec.rb
@@ -86,8 +86,8 @@ RSpec.describe 'Incident timeline events', :js, feature_category: :incident_mana
def trigger_dropdown_action(text)
click_button _('More actions')
- page.within '[data-testid="disclosure-content"]' do
- page.find('[data-testid="disclosure-dropdown-item"]', text: text).click
+ within_testid 'disclosure-content' do
+ find_by_testid('disclosure-dropdown-item', text: text).click
end
end
end
diff --git a/spec/features/integrations_settings_spec.rb b/spec/features/integrations_settings_spec.rb
index 70ce2f55161..f460e051516 100644
--- a/spec/features/integrations_settings_spec.rb
+++ b/spec/features/integrations_settings_spec.rb
@@ -11,19 +11,17 @@ RSpec.describe 'Integration settings', feature_category: :integrations do
sign_in(user)
end
- context 'with Shimo Zentao integration records' do
+ context 'with Zentao integration records' do
before do
- create(:integration, project: project, type_new: 'Integrations::Shimo', category: 'issue_tracker')
create(:integration, project: project, type_new: 'Integrations::Zentao', category: 'issue_tracker')
end
- it 'shows settings without Shimo Zentao', :js do
+ it 'shows settings without Zentao', :js do
visit namespace_project_settings_integrations_path(namespace_id: project.namespace.full_path,
project_id: project.path)
expect(page).to have_content('Add an integration')
expect(page).not_to have_content('ZenTao')
- expect(page).not_to have_content('Shimo')
end
end
end
diff --git a/spec/features/invites_spec.rb b/spec/features/invites_spec.rb
index bc6efb63f6f..04ac94685cf 100644
--- a/spec/features/invites_spec.rb
+++ b/spec/features/invites_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_category: :acquisition do
let_it_be(:owner) { create(:user, name: 'John Doe') }
- # private will ensure we really have access to the group when we land on the activity page
+ # private will ensure we really have access to the group when we land on the group page
let_it_be(:group) { create(:group, :private, name: 'Owned') }
let_it_be(:project) { create(:project, :repository, namespace: group) }
@@ -17,17 +17,6 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
group.add_owner(owner)
end
- def confirm_email(new_user)
- new_user_token = User.find_by_email(new_user.email).confirmation_token
-
- visit user_confirmation_path(confirmation_token: new_user_token)
- end
-
- def fill_in_welcome_form
- select 'Software Developer', from: 'user_role'
- click_button 'Get started!'
- end
-
context 'when inviting a registered user' do
let(:invite_email) { 'user@example.com' }
@@ -53,8 +42,8 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
expect(find_field('Username or primary email').value).to eq(group_invite.invite_email)
end
- it 'pre-fills the Email field on the sign up box with the invite_email from the invite' do
- expect(find_field('Email').value).to eq(group_invite.invite_email)
+ it 'shows the Email to be the invite_email from the invite' do
+ expect(find_by_testid('invite-email').text).to eq(group_invite.invite_email)
end
end
@@ -66,12 +55,12 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
visit invite_path(group_invite.raw_invite_token, invite_type: Emails::Members::INITIAL_INVITE)
end
- it 'sign in, grants access and redirects to group activity page' do
+ it 'sign in, grants access and redirects to group page' do
click_link 'Sign in'
gitlab_sign_in(user, remember: true, visit: false)
- expect_to_be_on_group_activity_page(group)
+ expect_to_be_on_group_page(group)
end
end
@@ -132,8 +121,8 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
end
end
- def expect_to_be_on_group_activity_page(group)
- expect(page).to have_current_path(activity_group_path(group))
+ def expect_to_be_on_group_page(group)
+ expect(page).to have_current_path(group_path(group))
end
end
end
@@ -160,7 +149,7 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
end
it 'does not sign the user in' do
- fill_in_sign_up_form(new_user)
+ fill_in_sign_up_form(new_user, invite: true)
expect(page).to have_current_path(new_user_session_path, ignore_query: true)
sign_up_message = 'You have signed up successfully. However, we could not sign you in because your account ' \
@@ -175,23 +164,13 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
end
context 'when the user signs up for an account with the invitation email address' do
- it 'redirects to the most recent membership activity page with all invitations automatically accepted' do
- fill_in_sign_up_form(new_user)
+ it 'redirects to the most recent membership group page with all invitations automatically accepted' do
+ fill_in_sign_up_form(new_user, invite: true)
- expect(page).to have_current_path(activity_group_path(group), ignore_query: true)
+ expect(page).to have_current_path(group_path(group), ignore_query: true)
expect(page).to have_content('You have been granted Owner access to group Owned.')
end
end
-
- context 'when the user sign-up using a different email address' do
- let(:invite_email) { build_stubbed(:user).email }
-
- it 'signs up and redirects to the projects dashboard' do
- fill_in_sign_up_form(new_user)
-
- expect_to_be_on_projects_dashboard_with_zero_authorized_projects
- end
- end
end
context 'with email confirmation enabled' do
@@ -199,16 +178,16 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
let(:new_user) { build_stubbed(:user, password: '11111111') }
it 'fails sign up and redirects back to sign up', :aggregate_failures do
- expect { fill_in_sign_up_form(new_user) }.not_to change { User.count }
+ expect { fill_in_sign_up_form(new_user, invite: true) }.not_to change { User.count }
expect(page).to have_content('prohibited this user from being saved')
expect(page).to have_current_path(user_registration_path, ignore_query: true)
- expect(find_field('Email').value).to eq(group_invite.invite_email)
+ expect(find_by_testid('invite-email').text).to eq(group_invite.invite_email)
end
end
context 'with invite email acceptance', :snowplow do
it 'tracks the accepted invite' do
- fill_in_sign_up_form(new_user)
+ fill_in_sign_up_form(new_user, invite: true)
expect_snowplow_event(
category: 'RegistrationsController',
@@ -221,51 +200,25 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
end
context 'when the user signs up for an account with the invitation email address' do
- it 'redirects to the most recent membership activity page with all invitations automatically accepted' do
- fill_in_sign_up_form(new_user)
+ it 'redirects to the most recent membership group page with all invitations automatically accepted' do
+ fill_in_sign_up_form(new_user, invite: true)
- expect(page).to have_current_path(activity_group_path(group), ignore_query: true)
+ expect(page).to have_current_path(group_path(group), ignore_query: true)
end
end
+ end
- context 'when the user signs up using a different email address' do
- let(:invite_email) { build_stubbed(:user).email }
-
- context 'when email confirmation is not set to `soft`' do
- before do
- allow(User).to receive(:allow_unconfirmed_access_for).and_return 0
- stub_feature_flags(identity_verification: false)
- end
-
- it 'signs up and redirects to the projects dashboard' do
- fill_in_sign_up_form(new_user)
- confirm_email(new_user)
- gitlab_sign_in(new_user, remember: true, visit: false)
-
- expect_to_be_on_projects_dashboard_with_zero_authorized_projects
- end
- end
-
- context 'when email confirmation setting is set to `soft`' do
- before do
- stub_application_setting_enum('email_confirmation_setting', 'soft')
- allow(User).to receive(:allow_unconfirmed_access_for).and_return 2.days
- end
-
- it 'signs up and redirects to the projects dashboard' do
- fill_in_sign_up_form(new_user)
-
- expect_to_be_on_projects_dashboard_with_zero_authorized_projects
- end
- end
+ context 'when the email is already taken by a registered user' do
+ before do
+ create(:user, email: invite_email)
end
- end
- def expect_to_be_on_projects_dashboard_with_zero_authorized_projects
- expect(page).to have_current_path(dashboard_projects_path)
+ it 'shows error state of email already used' do
+ fill_in_sign_up_form(new_user, invite: true)
- expect(page).to have_content _('Welcome to GitLab')
- expect(page).to have_content _('Faster releases. Better code. Less pain.')
+ expect(page).to have_content('Email has already been taken')
+ expect(find_by_testid('invite-email').text).to eq(group_invite.invite_email)
+ end
end
end
@@ -275,9 +228,9 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
expect(page).to have_current_path(new_user_registration_path, ignore_query: true)
- fill_in_sign_up_form(new_user, 'Register')
+ fill_in_sign_up_form(new_user, 'Register', invite: true)
- expect(page).to have_current_path(activity_group_path(group))
+ expect(page).to have_current_path(group_path(group))
expect(page).to have_content('You have been granted Owner access to group Owned.')
end
end
@@ -301,16 +254,16 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_cate
gitlab_sign_in(user)
end
- it 'does not accept the pending invitation and does not redirect to the groups activity path' do
- expect(page).not_to have_current_path(activity_group_path(group), ignore_query: true)
+ it 'does not accept the pending invitation and does not redirect to the group path' do
+ expect(page).not_to have_current_path(group_path(group), ignore_query: true)
expect(group.reload.users).not_to include(user)
end
context 'when the secondary email address is confirmed' do
let(:secondary_email) { create(:email, :confirmed, user: user) }
- it 'accepts the pending invitation and redirects to the groups activity path' do
- expect(page).to have_current_path(activity_group_path(group), ignore_query: true)
+ it 'accepts the pending invitation and redirects to the group path' do
+ expect(page).to have_current_path(group_path(group), ignore_query: true)
expect(group.reload.users).to include(user)
end
end
diff --git a/spec/features/issuables/shortcuts_issuable_spec.rb b/spec/features/issuables/shortcuts_issuable_spec.rb
index 6bb453c34e6..13bec61e4da 100644
--- a/spec/features/issuables/shortcuts_issuable_spec.rb
+++ b/spec/features/issuables/shortcuts_issuable_spec.rb
@@ -86,7 +86,7 @@ RSpec.describe 'Blob shortcuts', :js, feature_category: :team_planning do
it "opens milestones dropdown for editing" do
find('body').native.send_key('m')
- expect(find('[data-testid="milestone-edit"]')).to have_selector('.gl-dropdown-inner')
+ expect(find_by_testid('milestone-edit')).to have_selector('.gl-dropdown-inner')
end
end
diff --git a/spec/features/issuables/sorting_list_spec.rb b/spec/features/issuables/sorting_list_spec.rb
index 9045124cc8c..d960081c517 100644
--- a/spec/features/issuables/sorting_list_spec.rb
+++ b/spec/features/issuables/sorting_list_spec.rb
@@ -2,6 +2,7 @@
require 'spec_helper'
RSpec.describe 'Sort Issuable List', feature_category: :team_planning do
+ include Features::SortingHelpers
include ListboxHelpers
let(:project) { create(:project, :public) }
@@ -195,8 +196,7 @@ RSpec.describe 'Sort Issuable List', feature_category: :team_planning do
it 'supports sorting in asc and desc order' do
visit_issues_with_state(project, 'opened')
- click_button('Created date')
- click_on('Updated date')
+ pajamas_sort_by 'Updated date', from: 'Created date'
expect(page).to have_css('.issue:first-child', text: last_updated_issuable.title)
expect(page).to have_css('.issue:last-child', text: first_updated_issuable.title)
diff --git a/spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb b/spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb
index 4c4a5624d00..a671edb3ceb 100644
--- a/spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb
+++ b/spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb
@@ -47,7 +47,7 @@ RSpec.describe 'Resolving all open threads in a merge request from an issue', :j
end
end
- context 'creating an issue for threads' do
+ context 'creating an issue for threads', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/420845' do
before do
find('.discussions-counter .gl-new-dropdown-toggle').click
find(resolve_all_discussions_link_selector).click
@@ -79,7 +79,9 @@ RSpec.describe 'Resolving all open threads in a merge request from an issue', :j
end
it 'shows a warning that the merge request contains unresolved threads' do
- expect(page).to have_content 'all threads must be resolved'
+ click_button 'Expand merge checks'
+
+ expect(page).to have_content 'Unresolved discussions must be resolved'
end
end
end
diff --git a/spec/features/issues/create_issue_for_single_discussion_in_merge_request_spec.rb b/spec/features/issues/create_issue_for_single_discussion_in_merge_request_spec.rb
index 73a920421a3..52a8f0b105a 100644
--- a/spec/features/issues/create_issue_for_single_discussion_in_merge_request_spec.rb
+++ b/spec/features/issues/create_issue_for_single_discussion_in_merge_request_spec.rb
@@ -57,6 +57,8 @@ RSpec.describe 'Resolve an open thread in a merge request by creating an issue',
context 'creating the issue' do
before do
+ allow(Gitlab::QueryLimiting::Transaction).to receive(:threshold).and_return(105)
+
find(resolve_discussion_selector, match: :first).click
end
diff --git a/spec/features/issues/discussion_lock_spec.rb b/spec/features/issues/discussion_lock_spec.rb
index 04d59854ddc..2ef912061e6 100644
--- a/spec/features/issues/discussion_lock_spec.rb
+++ b/spec/features/issues/discussion_lock_spec.rb
@@ -6,104 +6,240 @@ RSpec.describe 'Discussion Lock', :js, feature_category: :team_planning do
let(:user) { create(:user) }
let(:issue) { create(:issue, project: project, author: user) }
let(:project) { create(:project, :public) }
+ let(:more_dropdown) { find_by_testid('desktop-dropdown') }
+ let(:issuable_lock) { find_by_testid('issuable-lock') }
+ let(:locked_badge) { '[data-testid="locked-badge"]' }
+ let(:issuable_note_warning) { '[data-testid="issuable-note-warning"]' }
- before do
- sign_in(user)
- stub_feature_flags(moved_mr_sidebar: false)
- end
-
- context 'when a user is a team member' do
+ context 'when feature flag is disabled' do
before do
- project.add_developer(user)
+ sign_in(user)
+ stub_feature_flags(moved_mr_sidebar: false)
end
- context 'when the discussion is unlocked' do
- it 'the user can lock the issue' do
- visit project_issue_path(project, issue)
+ context 'when a user is a team member' do
+ before do
+ project.add_developer(user)
+ end
- expect(find('.issuable-sidebar')).to have_content('Unlocked')
+ context 'when the discussion is unlocked' do
+ it 'the user can lock the issue' do
+ visit project_issue_path(project, issue)
- page.within('.issuable-sidebar') do
- find('.lock-edit').click
- click_button('Lock')
- end
+ expect(find('.issuable-sidebar')).to have_content('Unlocked')
+
+ page.within('.issuable-sidebar') do
+ find('.lock-edit').click
+ click_button('Lock')
+ end
- expect(find('#notes')).to have_content('locked the discussion in this issue')
+ expect(find('#notes')).to have_content('locked the discussion in this issue')
+ end
end
- end
- context 'when the discussion is locked' do
- before do
- issue.update_attribute(:discussion_locked, true)
- visit project_issue_path(project, issue)
+ context 'when the discussion is locked' do
+ before do
+ issue.update_attribute(:discussion_locked, true)
+ visit project_issue_path(project, issue)
+ end
+
+ it 'the user can unlock the issue' do
+ expect(find('.issuable-sidebar')).to have_content('Locked')
+
+ page.within('.issuable-sidebar') do
+ find('.lock-edit').click
+ click_button('Unlock')
+ end
+
+ expect(find('#notes')).to have_content('unlocked the discussion in this issue')
+ expect(find('.issuable-sidebar')).to have_content('Unlocked')
+ end
+
+ it 'the user can create a comment' do
+ page.within('#notes .js-main-target-form') do
+ fill_in 'note[note]', with: 'Some new comment'
+ click_button 'Comment'
+ end
+
+ wait_for_requests
+
+ expect(find('div#notes')).to have_content('Some new comment')
+ end
end
+ end
- it 'the user can unlock the issue' do
- expect(find('.issuable-sidebar')).to have_content('Locked')
+ context 'when a user is not a team member' do
+ context 'when the discussion is unlocked' do
+ before do
+ visit project_issue_path(project, issue)
+ end
- page.within('.issuable-sidebar') do
- find('.lock-edit').click
- click_button('Unlock')
+ it 'the user can not lock the issue' do
+ expect(find('.issuable-sidebar')).to have_content('Unlocked')
+ expect(find('.issuable-sidebar')).not_to have_selector('.lock-edit')
end
- expect(find('#notes')).to have_content('unlocked the discussion in this issue')
- expect(find('.issuable-sidebar')).to have_content('Unlocked')
+ it 'the user can create a comment' do
+ page.within('#notes .js-main-target-form') do
+ fill_in 'note[note]', with: 'Some new comment'
+ click_button 'Comment'
+ end
+
+ wait_for_requests
+
+ expect(find('div#notes')).to have_content('Some new comment')
+ end
end
- it 'the user can create a comment' do
- page.within('#notes .js-main-target-form') do
- fill_in 'note[note]', with: 'Some new comment'
- click_button 'Comment'
+ context 'when the discussion is locked' do
+ before do
+ issue.update_attribute(:discussion_locked, true)
+ visit project_issue_path(project, issue)
end
- wait_for_requests
+ it 'the user can not unlock the issue' do
+ expect(find('.issuable-sidebar')).to have_content('Locked')
+ expect(find('.issuable-sidebar')).not_to have_selector('.lock-edit')
+ end
- expect(find('div#notes')).to have_content('Some new comment')
+ it 'the user can not create a comment' do
+ page.within('#notes') do
+ expect(page).not_to have_selector('.js-main-target-form')
+ expect(find_by_testid('disabled-comments'))
+ .to have_content('The discussion in this issue is locked. Only project members can comment.')
+ end
+ end
end
end
- end
- context 'when a user is not a team member' do
- context 'when the discussion is unlocked' do
+ context 'for axe automated accessibility testing' do
before do
+ project.add_developer(user)
+ issue.update_attribute(:discussion_locked, true)
visit project_issue_path(project, issue)
end
- it 'the user can not lock the issue' do
- expect(find('.issuable-sidebar')).to have_content('Unlocked')
- expect(find('.issuable-sidebar')).not_to have_selector('.lock-edit')
+ it 'passes tests' do
+ # rubocop:disable Capybara/TestidFinders -- within_testid does not work here
+ expect(page).to be_axe_clean.within(locked_badge)
+ expect(page).to be_axe_clean.within(issuable_note_warning)
+ # rubocop:enable Capybara/TestidFinders
+ page.within('.issuable-sidebar') do
+ find('.lock-edit').click
+ expect(page).to be_axe_clean.within('.lock-edit')
+ end
end
+ end
+ end
+
+ context 'when feature flag is enabled' do
+ before do
+ sign_in(user)
+ stub_feature_flags(moved_mr_sidebar: true)
+ end
+
+ context 'when a user is a team member' do
+ before do
+ project.add_developer(user)
+ end
+
+ context 'when the discussion is unlocked' do
+ it 'the user can lock the issue' do
+ visit project_issue_path(project, issue)
+
+ more_dropdown.click
+ expect(issuable_lock).to have_content('Lock discussion')
- it 'the user can create a comment' do
- page.within('#notes .js-main-target-form') do
- fill_in 'note[note]', with: 'Some new comment'
- click_button 'Comment'
+ issuable_lock.click
+ expect(find('#notes')).to have_content('locked the discussion in this issue')
+ end
+ end
+
+ context 'when the discussion is locked' do
+ before do
+ issue.update_attribute(:discussion_locked, true)
+ visit project_issue_path(project, issue)
end
- wait_for_requests
+ it 'the user can unlock the issue' do
+ more_dropdown.click
+ expect(issuable_lock).to have_content('Unlock discussion')
+
+ issuable_lock.click
+ expect(find('#notes')).to have_content('unlocked the discussion in this issue')
+ expect(issuable_lock).to have_content('Lock discussion')
+ end
- expect(find('div#notes')).to have_content('Some new comment')
+ it 'the user can create a comment' do
+ page.within('#notes .js-main-target-form') do
+ fill_in 'note[note]', with: 'Some new comment'
+ click_button 'Comment'
+ end
+
+ wait_for_requests
+
+ expect(find('div#notes')).to have_content('Some new comment')
+ end
end
end
- context 'when the discussion is locked' do
- before do
- issue.update_attribute(:discussion_locked, true)
- visit project_issue_path(project, issue)
- end
+ context 'when a user is not a team member' do
+ context 'when the discussion is unlocked' do
+ before do
+ visit project_issue_path(project, issue)
+ end
- it 'the user can not unlock the issue' do
- expect(find('.issuable-sidebar')).to have_content('Locked')
- expect(find('.issuable-sidebar')).not_to have_selector('.lock-edit')
+ it 'the user can not lock the issue' do
+ more_dropdown.click
+ expect(issuable_lock).to have_content('Lock discussion')
+ end
+
+ it 'the user can create a comment' do
+ page.within('#notes .js-main-target-form') do
+ fill_in 'note[note]', with: 'Some new comment'
+ click_button 'Comment'
+ end
+
+ wait_for_requests
+
+ expect(find('div#notes')).to have_content('Some new comment')
+ end
end
- it 'the user can not create a comment' do
- page.within('#notes') do
- expect(page).not_to have_selector('js-main-target-form')
- expect(page.find('.disabled-comments'))
- .to have_content('The discussion in this issue is locked. Only project members can comment.')
+ context 'when the discussion is locked' do
+ before do
+ issue.update_attribute(:discussion_locked, true)
+ visit project_issue_path(project, issue)
+ end
+
+ it 'the user can not unlock the issue' do
+ more_dropdown.click
+ expect(issuable_lock).to have_content('Unlock discussion')
+ end
+
+ it 'the user can not create a comment' do
+ page.within('#notes') do
+ expect(page).not_to have_selector('js-main-target-form')
+ expect(find_by_testid('disabled-comments'))
+ .to have_content('The discussion in this issue is locked. Only project members can comment.')
+ end
end
end
end
+
+ it 'passes axe automated accessibility testing' do
+ project.add_developer(user)
+ issue.update_attribute(:discussion_locked, true)
+ visit project_issue_path(project, issue)
+ wait_for_all_requests
+
+ # rubocop:disable Capybara/TestidFinders -- within_testid does not work here
+ expect(page).to be_axe_clean.within(locked_badge)
+ expect(page).to be_axe_clean.within(issuable_note_warning)
+
+ more_dropdown.click
+ expect(page).to be_axe_clean.within('[data-testid="lock-issue-toggle"] button')
+ # rubocop:enable Capybara/TestidFinders
+ end
end
end
diff --git a/spec/features/issues/form_spec.rb b/spec/features/issues/form_spec.rb
index 2fb30469691..896d86e4004 100644
--- a/spec/features/issues/form_spec.rb
+++ b/spec/features/issues/form_spec.rb
@@ -148,12 +148,12 @@ RSpec.describe 'New/edit issue', :js, feature_category: :team_planning do
click_button _('Select label')
wait_for_all_requests
- page.within '[data-testid="sidebar-labels"]' do
+ within_testid('sidebar-labels') do
click_button label.title
click_button label2.title
click_button _('Close')
wait_for_requests
- page.within('[data-testid="embedded-labels-list"]') do
+ within_testid('embedded-labels-list') do
expect(page).to have_content(label.title)
expect(page).to have_content(label2.title)
end
@@ -188,13 +188,13 @@ RSpec.describe 'New/edit issue', :js, feature_category: :team_planning do
wait_for_all_requests
- page.within '[data-testid="sidebar-labels"]' do
+ within_testid 'sidebar-labels' do
click_button label.title
click_button _('Close')
wait_for_requests
- page.within('[data-testid="embedded-labels-list"]') do
+ within_testid('embedded-labels-list') do
expect(page).to have_content(label.title)
end
@@ -205,7 +205,7 @@ RSpec.describe 'New/edit issue', :js, feature_category: :team_planning do
wait_for_all_requests
- page.within '[data-testid="sidebar-labels"]' do
+ within_testid 'sidebar-labels' do
click_button label.title, class: 'dropdown-item'
click_button _('Close')
@@ -221,7 +221,7 @@ RSpec.describe 'New/edit issue', :js, feature_category: :team_planning do
wait_for_all_requests
- page.within '[data-testid="sidebar-labels"]' do
+ within_testid 'sidebar-labels' do
search_field = find('input[type="search"]')
search_field.native.send_keys(label.title)
@@ -238,7 +238,7 @@ RSpec.describe 'New/edit issue', :js, feature_category: :team_planning do
it 'displays an error message when submitting an invalid form' do
click_button 'Create issue'
- page.within('[data-testid="issue-title-input-field"]') do
+ within_testid('issue-title-input-field') do
expect(page).to have_text(_('This field is required.'))
end
end
@@ -463,14 +463,14 @@ RSpec.describe 'New/edit issue', :js, feature_category: :team_planning do
wait_for_all_requests
- page.within '[data-testid="sidebar-labels"]' do
+ within_testid 'sidebar-labels' do
click_button label.title
click_button label2.title
click_button _('Close')
wait_for_requests
- page.within('[data-testid="embedded-labels-list"]') do
+ within_testid('embedded-labels-list') do
expect(page).to have_content(label.title)
expect(page).to have_content(label2.title)
end
@@ -580,14 +580,14 @@ RSpec.describe 'New/edit issue', :js, feature_category: :team_planning do
wait_for_all_requests
- page.within '[data-testid="sidebar-labels"]' do
+ within_testid 'sidebar-labels' do
click_button _('Create project label')
wait_for_requests
end
page.within '.js-labels-create' do
- find('[data-testid="label-title-input"]').fill_in with: 'test label'
+ find_by_testid('label-title-input').fill_in with: 'test label'
first('.suggest-colors-dropdown a').click
click_button 'Create'
diff --git a/spec/features/issues/incident_issue_spec.rb b/spec/features/issues/incident_issue_spec.rb
index 5197f5d1e33..9225ba03003 100644
--- a/spec/features/issues/incident_issue_spec.rb
+++ b/spec/features/issues/incident_issue_spec.rb
@@ -35,7 +35,7 @@ RSpec.describe 'Incident Detail', :js, feature_category: :team_planning do
it 'shows incident and alert data' do
page.within('.issuable-details') do
- incident_tabs = find('[data-testid="incident-tabs"]')
+ incident_tabs = find_by_testid('incident-tabs')
aggregate_failures 'shows title and Summary tab' do
expect(find('h1')).to have_content(incident.title)
diff --git a/spec/features/issues/issue_detail_spec.rb b/spec/features/issues/issue_detail_spec.rb
index c8802a9cc71..15cb1678c55 100644
--- a/spec/features/issues/issue_detail_spec.rb
+++ b/spec/features/issues/issue_detail_spec.rb
@@ -138,7 +138,7 @@ RSpec.describe 'Issue Detail', :js, feature_category: :team_planning do
it 'cannot see Incident option' do
open_issue_edit_form
- page.within('[data-testid="issuable-form"]') do
+ within_testid('issuable-form') do
expect(page).to have_content('Issue')
expect(page).not_to have_content('Incident')
end
@@ -151,7 +151,7 @@ RSpec.describe 'Issue Detail', :js, feature_category: :team_planning do
it 'routes the user to the incident details page when the `issue_type` is set to incident' do
open_issue_edit_form
- page.within('[data-testid="issuable-form"]') do
+ within_testid('issuable-form') do
update_type_select('Issue', 'Incident')
expect(page).to have_current_path(incident_project_issues_path(project, issue))
@@ -181,7 +181,7 @@ RSpec.describe 'Issue Detail', :js, feature_category: :team_planning do
it 'routes the user to the issue details page when the `issue_type` is set to issue' do
open_issue_edit_form
- page.within('[data-testid="issuable-form"]') do
+ within_testid('issuable-form') do
update_type_select('Incident', 'Issue')
expect(page).to have_current_path(project_issue_path(project, incident))
@@ -193,7 +193,7 @@ RSpec.describe 'Issue Detail', :js, feature_category: :team_planning do
def update_type_select(from, to)
click_button from
- find('[data-testid="issue-type-list-item"]', text: to).click
+ find_by_testid('issue-type-list-item', text: to).click
click_button 'Save changes'
wait_for_requests
diff --git a/spec/features/issues/service_desk_spec.rb b/spec/features/issues/service_desk_spec.rb
index 8662f0f98f5..3a2074b9b13 100644
--- a/spec/features/issues/service_desk_spec.rb
+++ b/spec/features/issues/service_desk_spec.rb
@@ -52,7 +52,7 @@ RSpec.describe 'Service Desk Issue Tracker', :js, feature_category: :service_des
aggregate_failures do
expect(page).to have_css('.empty-state')
expect(page).to have_text('Use Service Desk to connect with your users')
- expect(page).to have_link('Learn more.', href: help_page_path('user/project/service_desk'))
+ expect(page).to have_link('Learn more.', href: help_page_path('user/project/service_desk/index'))
expect(page).not_to have_link('Enable Service Desk')
expect(page).to have_content(project.service_desk_address)
end
@@ -71,7 +71,7 @@ RSpec.describe 'Service Desk Issue Tracker', :js, feature_category: :service_des
aggregate_failures do
expect(page).to have_css('.empty-state')
expect(page).to have_text('Use Service Desk to connect with your users')
- expect(page).to have_link('Learn more.', href: help_page_path('user/project/service_desk'))
+ expect(page).to have_link('Learn more.', href: help_page_path('user/project/service_desk/index'))
expect(page).not_to have_link('Enable Service Desk')
expect(page).not_to have_content(project.service_desk_address)
end
@@ -93,7 +93,7 @@ RSpec.describe 'Service Desk Issue Tracker', :js, feature_category: :service_des
it 'displays the small info box, documentation, a button to configure service desk, and the address' do
aggregate_failures do
- expect(page).to have_link('Learn more.', href: help_page_path('user/project/service_desk'))
+ expect(page).to have_link('Learn more.', href: help_page_path('user/project/service_desk/index'))
expect(page).not_to have_link('Enable Service Desk')
expect(page).to have_content(project.service_desk_address)
end
diff --git a/spec/features/issues/user_interacts_with_awards_spec.rb b/spec/features/issues/user_interacts_with_awards_spec.rb
index 813fdeea0a1..d47b6535688 100644
--- a/spec/features/issues/user_interacts_with_awards_spec.rb
+++ b/spec/features/issues/user_interacts_with_awards_spec.rb
@@ -306,18 +306,6 @@ RSpec.describe 'User interacts with awards', feature_category: :team_planning do
expect(page).not_to have_selector(emoji_counter)
end
end
-
- context 'execute /award quick action' do
- xit 'toggles the emoji award on noteable', :js do
- execute_quick_action('/award :100:')
-
- expect(find(noteable_award_counter)).to have_text("1")
-
- execute_quick_action('/award :100:')
-
- expect(page).not_to have_selector(noteable_award_counter)
- end
- end
end
end
diff --git a/spec/features/issues/user_sorts_issues_spec.rb b/spec/features/issues/user_sorts_issues_spec.rb
index 206544b32a4..5c6198785d0 100644
--- a/spec/features/issues/user_sorts_issues_spec.rb
+++ b/spec/features/issues/user_sorts_issues_spec.rb
@@ -3,6 +3,7 @@
require "spec_helper"
RSpec.describe "User sorts issues", feature_category: :team_planning do
+ include Features::SortingHelpers
include SortingHelper
include IssueHelpers
@@ -46,8 +47,7 @@ RSpec.describe "User sorts issues", feature_category: :team_planning do
it 'sorts by popularity', :js do
visit(project_issues_path(project))
- click_button 'Created date'
- click_on 'Popularity'
+ pajamas_sort_by 'Popularity', from: 'Created date'
page.within(".issues-list") do
page.within("li.issue:nth-child(1)") 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 78814e36cfe..1a7b72e6809 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
@@ -62,7 +62,10 @@ RSpec.describe 'Merge request > User merges only if pipeline succeeds', :js, fea
wait_for_requests
expect(page).not_to have_button('Merge', exact: true)
- expect(page).to have_content('Merge blocked: pipeline must succeed. Push a commit that fixes the failure or learn about other solutions.')
+
+ click_button 'Expand merge checks'
+
+ expect(page).to have_content('Pipeline must succeed.')
end
end
@@ -75,7 +78,10 @@ RSpec.describe 'Merge request > User merges only if pipeline succeeds', :js, fea
wait_for_requests
expect(page).not_to have_button('Merge', exact: true)
- expect(page).to have_content('Merge blocked: pipeline must succeed. Push a commit that fixes the failure or learn about other solutions.')
+
+ click_button 'Expand merge checks'
+
+ expect(page).to have_content('Pipeline must succeed.')
end
end
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 f13c68a60ee..e5eabd7e510 100644
--- a/spec/features/merge_request/user_posts_diff_notes_spec.rb
+++ b/spec/features/merge_request/user_posts_diff_notes_spec.rb
@@ -15,8 +15,6 @@ RSpec.describe 'Merge request > User posts diff notes', :js, feature_category: :
let(:test_note_comment) { 'this is a test note!' }
before do
- set_cookie('sidebar_collapsed', 'true')
-
project.add_developer(user)
sign_in(user)
end
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 1b46b4e1d7f..1dc785724d3 100644
--- a/spec/features/merge_request/user_rebases_merge_request_spec.rb
+++ b/spec/features/merge_request/user_rebases_merge_request_spec.rb
@@ -14,11 +14,15 @@ RSpec.describe "User rebases a merge request", :js, feature_category: :code_revi
it "rebases" do
visit(merge_request_path(merge_request))
+ wait_for_requests
+
+ click_button 'Expand merge checks'
+
expect(page).to have_button("Rebase")
click_button("Rebase")
- expect(page).to have_content("Rebase in progress")
+ expect(find_by_testid('standard-rebase-button')).to have_selector(".gl-spinner")
end
end
diff --git a/spec/features/merge_request/user_resolves_conflicts_spec.rb b/spec/features/merge_request/user_resolves_conflicts_spec.rb
index 0f283f1194f..2fdd0a7dd51 100644
--- a/spec/features/merge_request/user_resolves_conflicts_spec.rb
+++ b/spec/features/merge_request/user_resolves_conflicts_spec.rb
@@ -96,6 +96,8 @@ RSpec.describe 'Merge request > User resolves conflicts', :js, feature_category:
before do
visit project_merge_request_path(project, merge_request)
+
+ click_button 'Expand merge checks'
end
it 'shows a link to the conflict resolution page' do
@@ -127,6 +129,9 @@ RSpec.describe 'Merge request > User resolves conflicts', :js, feature_category:
before do
visit project_merge_request_path(project, merge_request)
+
+ click_button 'Expand merge checks'
+
click_link('conflicts', href: %r{/conflicts\Z})
end
@@ -169,6 +174,9 @@ RSpec.describe 'Merge request > User resolves conflicts', :js, feature_category:
before do
visit project_merge_request_path(project, merge_request)
+
+ click_button 'Expand merge checks'
+
click_link('conflicts', href: %r{/conflicts\Z})
end
@@ -193,6 +201,8 @@ RSpec.describe 'Merge request > User resolves conflicts', :js, feature_category:
project.add_developer(user)
sign_in(user)
visit project_merge_request_path(project, merge_request)
+
+ click_button 'Expand merge checks'
end
it 'does not show a link to the conflict resolution page' 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 15a7755429b..dd1e73cf57f 100644
--- a/spec/features/merge_request/user_resolves_wip_mr_spec.rb
+++ b/spec/features/merge_request/user_resolves_wip_mr_spec.rb
@@ -32,6 +32,9 @@ RSpec.describe 'Merge request > User resolves Draft', :js, feature_category: :co
context 'when there is active pipeline for merge request' do
before do
create(:ci_build, pipeline: pipeline)
+
+ stub_feature_flags(merge_blocked_component: false)
+
sign_in(user)
visit project_merge_request_path(project, merge_request)
wait_for_requests
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 98ea72b9569..7c73eed5c1f 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
@@ -29,8 +29,6 @@ RSpec.describe 'Merge request > User sees avatars on diff notes', :js, feature_c
before do
sign_in user
-
- set_cookie('sidebar_collapsed', 'true')
end
context 'discussion tab' do
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 9955c13b769..5843585a95c 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
@@ -22,7 +22,10 @@ RSpec.describe 'Merge request > User sees merge button depending on unresolved t
context 'with unresolved threads' do
it 'does not allow to merge' do
expect(page).not_to have_button('Merge', exact: true)
- expect(page).to have_content('all threads must be resolved')
+
+ click_button 'Expand merge checks'
+
+ expect(page).to have_content('Unresolved discussions must be resolved')
end
end
diff --git a/spec/features/merge_request/user_sees_merge_request_file_tree_sidebar_spec.rb b/spec/features/merge_request/user_sees_merge_request_file_tree_sidebar_spec.rb
index 8caa13c6297..8a039bf9840 100644
--- a/spec/features/merge_request/user_sees_merge_request_file_tree_sidebar_spec.rb
+++ b/spec/features/merge_request/user_sees_merge_request_file_tree_sidebar_spec.rb
@@ -62,6 +62,11 @@ RSpec.describe 'Merge request > User sees merge request file tree sidebar', :js,
context 'when navigating to the next file' do
before do
click_link 'Next'
+ wait_for_requests
+ # when we click the Next button the viewport will be scrolled a bit into the diffs view
+ # this will cause for the file tree sidebar height to be recalculated
+ # because this logic is async and debounced twice we have to wait for the layout to stabilize
+ sleep(1)
end
it_behaves_like 'last entry clickable'
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 5e683ddf7ba..b5c0c163f98 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
@@ -371,7 +371,7 @@ RSpec.describe 'Merge request > User sees pipelines triggered by merge request',
sha: merge_request.diff_head_sha,
user: user,
merge_request: merge_request,
- status: :running)
+ status: :pending)
merge_request.update_head_pipeline
end
diff --git a/spec/features/merge_request/user_sees_merge_widget_spec.rb b/spec/features/merge_request/user_sees_merge_widget_spec.rb
index c18b2c97f96..4327a08efb9 100644
--- a/spec/features/merge_request/user_sees_merge_widget_spec.rb
+++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb
@@ -173,9 +173,10 @@ RSpec.describe 'Merge request > User sees merge widget', :js, feature_category:
end
it 'shows information about blocked pipeline' do
+ click_button 'Expand merge checks'
+
expect(page).to have_content("Merge blocked")
- expect(page).to have_content(
- "pipeline must succeed. It's waiting for a manual action to continue.")
+ expect(page).to have_content("Pipeline must succeed.")
expect(page).to have_css('[data-testid="status_manual_borderless-icon"]')
end
end
@@ -399,7 +400,9 @@ RSpec.describe 'Merge request > User sees merge widget', :js, feature_category:
# Wait for the `ci_status` and `merge_check` requests
wait_for_requests
- expect(page).to have_content('Merge blocked: fast-forward merge is not possible. To merge this request, first rebase locally.')
+ click_button 'Expand merge checks'
+
+ expect(page).to have_content('Merge request must be rebased, because a fast-forward merge is not possible.')
end
end
diff --git a/spec/features/merge_request/user_sees_versions_spec.rb b/spec/features/merge_request/user_sees_versions_spec.rb
index 715cc2f73be..2df9d91c8ee 100644
--- a/spec/features/merge_request/user_sees_versions_spec.rb
+++ b/spec/features/merge_request/user_sees_versions_spec.rb
@@ -56,6 +56,10 @@ RSpec.describe 'Merge request > User sees versions', :js, feature_category: :cod
expect(page).to have_content '8 files'
end
+ it 'has the correct count for changes' do
+ expect(page).to have_content 'Changes 8'
+ end
+
it_behaves_like 'allows commenting',
file_name: '.gitmodules',
line_text: '[submodule "six"]',
@@ -123,6 +127,10 @@ RSpec.describe 'Merge request > User sees versions', :js, feature_category: :cod
end
end
+ it 'has the correct count for changes' do
+ expect(page).to have_content 'Changes 4'
+ end
+
it 'has a path with comparison context and shows comments that were last relevant at that version' do
expect(page).to have_current_path diffs_project_merge_request_path(
project,
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 5ccc24ebca1..3c2e1c4b37e 100644
--- a/spec/features/merge_requests/user_sorts_merge_requests_spec.rb
+++ b/spec/features/merge_requests/user_sorts_merge_requests_spec.rb
@@ -23,7 +23,7 @@ RSpec.describe 'User sorts merge requests', :js, feature_category: :code_review_
end
it 'keeps the sort option' do
- pajamas_sort_by(s_('SortOptions|Milestone'))
+ pajamas_sort_by(s_('SortOptions|Milestone'), from: s_('SortOptions|Created date'))
visit(merge_requests_dashboard_path(assignee_username: user.username))
@@ -49,7 +49,7 @@ RSpec.describe 'User sorts merge requests', :js, feature_category: :code_review_
it 'separates remember sorting with issues', :js do
create(:issue, project: project)
- pajamas_sort_by(s_('SortOptions|Milestone'))
+ pajamas_sort_by(s_('SortOptions|Milestone'), from: s_('SortOptions|Created date'))
visit(project_issues_path(project))
@@ -66,7 +66,7 @@ RSpec.describe 'User sorts merge requests', :js, feature_category: :code_review_
end
it 'sorts by popularity' do
- pajamas_sort_by(s_('SortOptions|Popularity'))
+ pajamas_sort_by(s_('SortOptions|Popularity'), from: s_('SortOptions|Created date'))
page.within('.mr-list') do
page.within('li.merge-request:nth-child(1)') do
diff --git a/spec/features/profile_spec.rb b/spec/features/profile_spec.rb
index b6c96555767..6c6deef5b74 100644
--- a/spec/features/profile_spec.rb
+++ b/spec/features/profile_spec.rb
@@ -66,7 +66,7 @@ RSpec.describe 'Profile account page', :js, feature_category: :user_profile do
end
it 'allows resetting of feed token' do
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
previous_token = ''
@@ -88,7 +88,7 @@ RSpec.describe 'Profile account page', :js, feature_category: :user_profile do
it 'allows resetting of incoming email token' do
allow(Gitlab.config.incoming_email).to receive(:enabled).and_return(true)
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
previous_token = ''
diff --git a/spec/features/profiles/keys_spec.rb b/spec/features/profiles/keys_spec.rb
index cb270b669d3..65b65c356fa 100644
--- a/spec/features/profiles/keys_spec.rb
+++ b/spec/features/profiles/keys_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Profile > SSH Keys', feature_category: :user_profile do
+RSpec.describe 'Profile > SSH Keys', feature_category: :source_code_management do
let(:user) { create(:user) }
before do
diff --git a/spec/features/profiles/two_factor_auths_spec.rb b/spec/features/profiles/two_factor_auths_spec.rb
index 15ab79684d9..cea3172898f 100644
--- a/spec/features/profiles/two_factor_auths_spec.rb
+++ b/spec/features/profiles/two_factor_auths_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Two factor auths', feature_category: :user_profile do
+RSpec.describe 'Two factor auths', feature_category: :system_access do
include Spec::Support::Helpers::ModalHelpers
context 'when signed in' do
diff --git a/spec/features/profiles/user_edit_profile_spec.rb b/spec/features/profiles/user_edit_profile_spec.rb
index 439839cfad5..e60589a161b 100644
--- a/spec/features/profiles/user_edit_profile_spec.rb
+++ b/spec/features/profiles/user_edit_profile_spec.rb
@@ -188,7 +188,7 @@ RSpec.describe 'User edit profile', feature_category: :user_profile do
end
context 'user status', :js do
- def select_emoji(emoji_name, is_modal = false)
+ def select_emoji(emoji_name)
toggle_button = find('.emoji-menu-toggle-button')
toggle_button.click
emoji_button = find("gl-emoji[data-name=\"#{emoji_name}\"]")
@@ -330,10 +330,12 @@ RSpec.describe 'User edit profile', feature_category: :user_profile do
find_by_testid('user-dropdown').click
within_testid('user-dropdown') do
- find('.js-set-status-modal-trigger.ready')
+ expect(page).to have_button(text: button_text, visible: :visible)
click_button button_text
end
+
+ expect(page.find('#set-user-status-modal')).to be_visible
end
def open_user_status_modal
@@ -386,7 +388,7 @@ RSpec.describe 'User edit profile', feature_category: :user_profile do
it 'adds emoji to user status' do
emoji = 'grinning'
open_user_status_modal
- select_emoji(emoji, true)
+ select_emoji(emoji)
set_user_status_in_modal
visit_user
@@ -415,7 +417,7 @@ RSpec.describe 'User edit profile', feature_category: :user_profile do
it 'opens the emoji modal again after closing it' do
open_user_status_modal
- select_emoji('grinning', true)
+ select_emoji('grinning')
find('.emoji-menu-toggle-button').click
@@ -428,7 +430,7 @@ RSpec.describe 'User edit profile', feature_category: :user_profile do
emoji = 'grinning'
open_user_status_modal
- select_emoji(emoji, true)
+ select_emoji(emoji)
expect(page.all('.award-control .js-counter')).to all(have_content('0'))
end
@@ -451,7 +453,7 @@ RSpec.describe 'User edit profile', feature_category: :user_profile do
emoji = 'grinning'
message = 'Playing outside'
open_user_status_modal
- select_emoji(emoji, true)
+ select_emoji(emoji)
find_field(s_("SetStatusModal|What's your status?")).native.send_keys(message)
set_user_status_in_modal
diff --git a/spec/features/profiles/user_manages_applications_spec.rb b/spec/features/profiles/user_manages_applications_spec.rb
index e3c4a797431..b4010cccbbc 100644
--- a/spec/features/profiles/user_manages_applications_spec.rb
+++ b/spec/features/profiles/user_manages_applications_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
RSpec.describe 'User manages applications', feature_category: :user_profile do
let_it_be(:user) { create(:user) }
- let_it_be(:new_application_path) { applications_profile_path }
+ let_it_be(:new_application_path) { user_settings_applications_path }
let_it_be(:index_path) { oauth_applications_path }
before do
diff --git a/spec/features/projects/blobs/blob_show_spec.rb b/spec/features/projects/blobs/blob_show_spec.rb
index 36665f2b77d..2089c9df145 100644
--- a/spec/features/projects/blobs/blob_show_spec.rb
+++ b/spec/features/projects/blobs/blob_show_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'File blob', :js, feature_category: :groups_and_projects do
+RSpec.describe 'File blob', :js, feature_category: :source_code_management do
include MobileHelpers
let(:project) { create(:project, :public, :repository) }
@@ -42,9 +42,6 @@ RSpec.describe 'File blob', :js, feature_category: :groups_and_projects do
expect(page).to have_css(".js-syntax-highlight")
expect(page).to have_content("require 'fileutils'")
- # does not show a viewer switcher
- expect(page).not_to have_selector('.js-blob-viewer-switcher')
-
# shows an enabled copy button
expect(page).to have_selector('.js-copy-blob-source-btn:not(.disabled)')
@@ -299,9 +296,6 @@ RSpec.describe 'File blob', :js, feature_category: :groups_and_projects do
# shows text
expect(page).to have_content('size 1575078')
- # does not show a viewer switcher
- expect(page).not_to have_selector('.js-blob-viewer-switcher')
-
# shows an enabled copy button
expect(page).to have_selector('.js-copy-blob-source-btn:not(.disabled)')
@@ -430,9 +424,6 @@ RSpec.describe 'File blob', :js, feature_category: :groups_and_projects do
# shows text
expect(page).to have_content('size 1575078')
- # does not show a viewer switcher
- expect(page).not_to have_selector('.js-blob-viewer-switcher')
-
# shows an enabled copy button
expect(page).to have_selector('.js-copy-blob-source-btn:not(.disabled)')
diff --git a/spec/features/projects/blobs/edit_spec.rb b/spec/features/projects/blobs/edit_spec.rb
index 9c4f70a68b8..e70e155bd01 100644
--- a/spec/features/projects/blobs/edit_spec.rb
+++ b/spec/features/projects/blobs/edit_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Editing file blob', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Editing file blob', :js, feature_category: :source_code_management do
include Features::SourceEditorSpecHelpers
include TreeHelper
include Features::BlobSpecHelpers
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 cd7601aa94e..cc819ccb5b9 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
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'User follows pipeline suggest nudge spec when feature is enabled', :js, feature_category: :groups_and_projects do
+RSpec.describe 'User follows pipeline suggest nudge spec when feature is enabled', :js, feature_category: :source_code_management do
include CookieHelper
let(:project) { create(:project, :empty_repo) }
diff --git a/spec/features/projects/branches/download_buttons_spec.rb b/spec/features/projects/branches/download_buttons_spec.rb
index a888b5b977d..89d9cfff1e0 100644
--- a/spec/features/projects/branches/download_buttons_spec.rb
+++ b/spec/features/projects/branches/download_buttons_spec.rb
@@ -40,15 +40,14 @@ RSpec.describe 'Download buttons in branches page', feature_category: :groups_an
let(:path_to_visit) { project_branches_filtered_path(project, state: 'all', search: ref) }
end
- context 'with artifacts' do
+ context 'with download source code button' do
before do
visit project_branches_filtered_path(project, state: 'all', search: 'binary-encoding')
end
- it 'shows download artifacts button' do
- href = latest_succeeded_project_artifacts_path(project, 'binary-encoding/download', job: 'build')
-
- expect(page).to have_link build.name, href: href
+ it 'passes axe automated accessibility testing', :js do
+ find_by_testid('download-source-code-button').click
+ expect(page).to be_axe_clean.within('.project-action-button')
end
end
end
diff --git a/spec/features/projects/branches/new_branch_ref_dropdown_spec.rb b/spec/features/projects/branches/new_branch_ref_dropdown_spec.rb
index 0badde99bdb..c1b468a3746 100644
--- a/spec/features/projects/branches/new_branch_ref_dropdown_spec.rb
+++ b/spec/features/projects/branches/new_branch_ref_dropdown_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'New Branch Ref Dropdown', :js, feature_category: :groups_and_projects do
+RSpec.describe 'New Branch Ref Dropdown', :js, feature_category: :source_code_management do
include ListboxHelpers
let(:user) { create(:user) }
diff --git a/spec/features/projects/branches/user_creates_branch_spec.rb b/spec/features/projects/branches/user_creates_branch_spec.rb
index 8d636dacb75..70a387e3ceb 100644
--- a/spec/features/projects/branches/user_creates_branch_spec.rb
+++ b/spec/features/projects/branches/user_creates_branch_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'User creates branch', :js, feature_category: :groups_and_projects do
+RSpec.describe 'User creates branch', :js, feature_category: :source_code_management do
include Features::BranchesHelpers
let_it_be(:group) { create(:group, :public) }
diff --git a/spec/features/projects/branches/user_deletes_branch_spec.rb b/spec/features/projects/branches/user_deletes_branch_spec.rb
index 7e7ab4b2a47..d468d3ec7e7 100644
--- a/spec/features/projects/branches/user_deletes_branch_spec.rb
+++ b/spec/features/projects/branches/user_deletes_branch_spec.rb
@@ -2,7 +2,7 @@
require "spec_helper"
-RSpec.describe "User deletes branch", :js, feature_category: :groups_and_projects do
+RSpec.describe "User deletes branch", :js, feature_category: :source_code_management do
include Spec::Support::Helpers::ModalHelpers
let_it_be(:user) { create(:user) }
diff --git a/spec/features/projects/branches/user_views_branches_spec.rb b/spec/features/projects/branches/user_views_branches_spec.rb
index e396455b371..7cb27abc260 100644
--- a/spec/features/projects/branches/user_views_branches_spec.rb
+++ b/spec/features/projects/branches/user_views_branches_spec.rb
@@ -2,7 +2,7 @@
require "spec_helper"
-RSpec.describe "User views branches", :js, feature_category: :groups_and_projects do
+RSpec.describe "User views branches", :js, feature_category: :source_code_management do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:user) { project.first_owner }
diff --git a/spec/features/projects/branches_spec.rb b/spec/features/projects/branches_spec.rb
index 7915f446ee0..a29d643b15b 100644
--- a/spec/features/projects/branches_spec.rb
+++ b/spec/features/projects/branches_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Branches', feature_category: :groups_and_projects do
+RSpec.describe 'Branches', feature_category: :source_code_management do
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project, :public, :repository) }
let(:repository) { project.repository }
diff --git a/spec/features/projects/cluster_agents_spec.rb b/spec/features/projects/cluster_agents_spec.rb
index dcda24eb2e4..ab566b3b433 100644
--- a/spec/features/projects/cluster_agents_spec.rb
+++ b/spec/features/projects/cluster_agents_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'ClusterAgents', :js, feature_category: :groups_and_projects do
+RSpec.describe 'ClusterAgents', :js, feature_category: :environment_management do
let_it_be(:token) { create(:cluster_agent_token, description: 'feature test token') }
let(:agent) { token.agent }
@@ -12,7 +12,7 @@ RSpec.describe 'ClusterAgents', :js, feature_category: :groups_and_projects do
before do
allow(Gitlab::Kas).to receive(:enabled?).and_return(true)
allow_next_instance_of(Gitlab::Kas::Client) do |client|
- allow(client).to receive(:get_connected_agents).and_return([])
+ allow(client).to receive(:get_connected_agents_by_agent_ids).and_return([])
end
gitlab_sign_in(user)
diff --git a/spec/features/projects/clusters/user_spec.rb b/spec/features/projects/clusters/user_spec.rb
index e256b44c4dc..067963e06e0 100644
--- a/spec/features/projects/clusters/user_spec.rb
+++ b/spec/features/projects/clusters/user_spec.rb
@@ -111,4 +111,23 @@ RSpec.describe 'User Cluster', :js, feature_category: :deployment_management do
end
end
end
+
+ context 'when signed in user is an admin in admin_mode' do
+ let(:admin) { create(:admin) }
+
+ before do
+ # signs out the user with `maintainer` role in the project
+ gitlab_sign_out
+
+ gitlab_sign_in(admin)
+ gitlab_enable_admin_mode_sign_in(admin)
+
+ visit project_clusters_path(project)
+ end
+
+ it 'can visit the clusters index page', :aggregate_failures do
+ expect(page).to have_title("Kubernetes Clusters · #{project.full_name} · #{_('GitLab')}")
+ expect(page).to have_content('Connect a cluster')
+ end
+ end
end
diff --git a/spec/features/projects/clusters_spec.rb b/spec/features/projects/clusters_spec.rb
index d799fbc49ef..241d18d5223 100644
--- a/spec/features/projects/clusters_spec.rb
+++ b/spec/features/projects/clusters_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Clusters', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Clusters', :js, feature_category: :environment_management do
include GoogleApi::CloudPlatformHelpers
let(:project) { create(:project) }
diff --git a/spec/features/projects/commits/user_browses_commits_spec.rb b/spec/features/projects/commits/user_browses_commits_spec.rb
index 3513e249b63..5a0b70532aa 100644
--- a/spec/features/projects/commits/user_browses_commits_spec.rb
+++ b/spec/features/projects/commits/user_browses_commits_spec.rb
@@ -42,8 +42,8 @@ RSpec.describe 'User browses commits', feature_category: :source_code_management
it 'renders breadcrumbs on specific commit path' do
visit project_commits_path(project, project.repository.root_ref + '/files/ruby/regex.rb', limit: 5)
- expect(page).to have_selector('ul.breadcrumb')
- .and have_selector('ul.breadcrumb a', count: 4)
+ expect(page).to have_selector('#content-body ul.breadcrumb')
+ .and have_selector('#content-body ul.breadcrumb a', count: 4)
end
it 'renders diff links to both the previous and current image', :js do
diff --git a/spec/features/projects/environments/environment_spec.rb b/spec/features/projects/environments/environment_spec.rb
index fdedaa3f469..de4ce3a23b6 100644
--- a/spec/features/projects/environments/environment_spec.rb
+++ b/spec/features/projects/environments/environment_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Environment', feature_category: :groups_and_projects do
+RSpec.describe 'Environment', feature_category: :environment_management do
let_it_be(:project) { create(:project, :repository) }
let(:user) { create(:user) }
let(:role) { :developer }
diff --git a/spec/features/projects/environments/environments_spec.rb b/spec/features/projects/environments/environments_spec.rb
index 0a54f5923f2..c7e0fdb3fc8 100644
--- a/spec/features/projects/environments/environments_spec.rb
+++ b/spec/features/projects/environments/environments_spec.rb
@@ -461,22 +461,6 @@ RSpec.describe 'Environments page', :js, feature_category: :continuous_delivery
end
end
- describe 'environments folders view' do
- before do
- create(:environment, project: project, name: 'staging.review/review-1', state: :available)
- create(:environment, project: project, name: 'staging.review/review-2', state: :available)
- end
-
- it 'user opens folder view' do
- visit folder_project_environments_path(project, 'staging.review')
- wait_for_requests
-
- expect(page).to have_content('Environments / staging.review')
- expect(page).to have_content('review-1')
- expect(page).to have_content('review-2')
- end
- end
-
def have_terminal_button
have_link(_('Terminal'), href: terminal_project_environment_path(project, environment))
end
diff --git a/spec/features/projects/files/download_buttons_spec.rb b/spec/features/projects/files/download_buttons_spec.rb
index 81bd0523c70..c731cdab1ad 100644
--- a/spec/features/projects/files/download_buttons_spec.rb
+++ b/spec/features/projects/files/download_buttons_spec.rb
@@ -22,16 +22,4 @@ RSpec.describe 'Projects > Files > Download buttons in files tree', feature_cate
it_behaves_like 'archive download buttons' do
let(:path_to_visit) { project_tree_path(project, project.default_branch) }
end
-
- context 'with artifacts' do
- before do
- visit project_tree_path(project, project.default_branch)
- end
-
- it 'shows download artifacts button' do
- href = latest_succeeded_project_artifacts_path(project, "#{project.default_branch}/download", job: 'build')
-
- expect(page).to have_link build.name, href: href
- end
- end
end
diff --git a/spec/features/projects/files/find_file_keyboard_spec.rb b/spec/features/projects/files/find_file_keyboard_spec.rb
index 85ecd1c2d96..ec2fe146b3f 100644
--- a/spec/features/projects/files/find_file_keyboard_spec.rb
+++ b/spec/features/projects/files/find_file_keyboard_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > Find file keyboard shortcuts', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > Find file keyboard shortcuts', :js, feature_category: :source_code_management do
let(:project) { create(:project, :repository) }
let(:user) { project.first_owner }
diff --git a/spec/features/projects/files/project_owner_creates_license_file_spec.rb b/spec/features/projects/files/project_owner_creates_license_file_spec.rb
index 18041bbb00a..2e6b470dd7d 100644
--- a/spec/features/projects/files/project_owner_creates_license_file_spec.rb
+++ b/spec/features/projects/files/project_owner_creates_license_file_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > Project owner creates a license file', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > Project owner creates a license file', :js, feature_category: :source_code_management do
let_it_be(:project_maintainer) { create(:user) }
let_it_be(:project) { create(:project, :repository, namespace: project_maintainer.namespace) }
diff --git a/spec/features/projects/files/template_selector_menu_spec.rb b/spec/features/projects/files/template_selector_menu_spec.rb
index 920da6e72ce..e8aa59a262c 100644
--- a/spec/features/projects/files/template_selector_menu_spec.rb
+++ b/spec/features/projects/files/template_selector_menu_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Template selector menu', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Template selector menu', :js, feature_category: :team_planning do
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
diff --git a/spec/features/projects/files/user_browses_files_spec.rb b/spec/features/projects/files/user_browses_files_spec.rb
index e93c9427c91..7c7e5811ad9 100644
--- a/spec/features/projects/files/user_browses_files_spec.rb
+++ b/spec/features/projects/files/user_browses_files_spec.rb
@@ -2,7 +2,7 @@
require "spec_helper"
-RSpec.describe "User browses files", :js, feature_category: :groups_and_projects do
+RSpec.describe "User browses files", :js, feature_category: :source_code_management do
include RepoHelpers
include ListboxHelpers
diff --git a/spec/features/projects/files/user_browses_lfs_files_spec.rb b/spec/features/projects/files/user_browses_lfs_files_spec.rb
index d8c1c8e4f2a..12acb98684c 100644
--- a/spec/features/projects/files/user_browses_lfs_files_spec.rb
+++ b/spec/features/projects/files/user_browses_lfs_files_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > User browses LFS files', feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > User browses LFS files', feature_category: :source_code_management do
let(:project) { create(:project, :repository) }
let(:user) { project.first_owner }
diff --git a/spec/features/projects/files/user_creates_directory_spec.rb b/spec/features/projects/files/user_creates_directory_spec.rb
index d824b3b1759..2c3b6e6d2a5 100644
--- a/spec/features/projects/files/user_creates_directory_spec.rb
+++ b/spec/features/projects/files/user_creates_directory_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > User creates a directory', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > User creates a directory', :js, feature_category: :source_code_management do
let(:fork_message) do
"You're not allowed to make changes to this project directly. "\
"A fork of this project has been created that you can make changes in, so you can submit a merge request."
diff --git a/spec/features/projects/files/user_creates_files_spec.rb b/spec/features/projects/files/user_creates_files_spec.rb
index de82f3062a2..edc504240a7 100644
--- a/spec/features/projects/files/user_creates_files_spec.rb
+++ b/spec/features/projects/files/user_creates_files_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > User creates files', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > User creates files', :js, feature_category: :source_code_management do
include Features::SourceEditorSpecHelpers
include Features::BlobSpecHelpers
@@ -65,6 +65,11 @@ RSpec.describe 'Projects > Files > User creates files', :js, feature_category: :
expect(page).to have_selector('.file-editor')
end
+ it 'shows full path instead of ref when creating a file' do
+ expect(page).to have_selector('#editor_path')
+ expect(page).not_to have_selector('#editor_ref')
+ end
+
def submit_new_file(options)
file_name = find('#file_name')
file_name.set options[:file_name] || 'README.md'
diff --git a/spec/features/projects/files/user_deletes_files_spec.rb b/spec/features/projects/files/user_deletes_files_spec.rb
index c526084b35d..68a996451f6 100644
--- a/spec/features/projects/files/user_deletes_files_spec.rb
+++ b/spec/features/projects/files/user_deletes_files_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > User deletes files', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > User deletes files', :js, feature_category: :source_code_management do
let(:fork_message) do
"You're not allowed to make changes to this project directly. "\
"A fork of this project has been created that you can make changes in, so you can submit a merge request."
diff --git a/spec/features/projects/files/user_edits_files_spec.rb b/spec/features/projects/files/user_edits_files_spec.rb
index 5612f6a53b2..b7fe8b3e5bb 100644
--- a/spec/features/projects/files/user_edits_files_spec.rb
+++ b/spec/features/projects/files/user_edits_files_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > User edits files', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > User edits files', :js, feature_category: :source_code_management do
include Features::SourceEditorSpecHelpers
include ProjectForksHelper
include Features::BlobSpecHelpers
@@ -53,6 +53,14 @@ RSpec.describe 'Projects > Files > User edits files', :js, feature_category: :gr
expect(find('.monaco-editor')).to have_content('*.rbca')
end
+ it 'shows ref instead of full path when editing a file' do
+ click_link('.gitignore')
+ edit_in_single_file_editor
+
+ expect(page).not_to have_selector('#editor_path')
+ expect(page).to have_selector('#editor_ref')
+ end
+
it 'does not show the edit link if a file is binary' do
binary_file = File.join(project.repository.root_ref, 'files/images/logo-black.png')
visit(project_blob_path(project, binary_file))
diff --git a/spec/features/projects/files/user_find_file_spec.rb b/spec/features/projects/files/user_find_file_spec.rb
index b6e739e8082..bf6680cd57a 100644
--- a/spec/features/projects/files/user_find_file_spec.rb
+++ b/spec/features/projects/files/user_find_file_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'User find project file', feature_category: :groups_and_projects do
+RSpec.describe 'User find project file', feature_category: :source_code_management do
include ListboxHelpers
let(:user) { create :user }
diff --git a/spec/features/projects/files/user_reads_pipeline_status_spec.rb b/spec/features/projects/files/user_reads_pipeline_status_spec.rb
index 24dd673501c..610c583f060 100644
--- a/spec/features/projects/files/user_reads_pipeline_status_spec.rb
+++ b/spec/features/projects/files/user_reads_pipeline_status_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'user reads pipeline status', :js, feature_category: :groups_and_projects do
+RSpec.describe 'user reads pipeline status', :js, feature_category: :continuous_integration do
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
let(:v110_pipeline) { create_pipeline('v1.1.0', 'success') }
diff --git a/spec/features/projects/files/user_replaces_files_spec.rb b/spec/features/projects/files/user_replaces_files_spec.rb
index bd951b974d1..a5d80c387d5 100644
--- a/spec/features/projects/files/user_replaces_files_spec.rb
+++ b/spec/features/projects/files/user_replaces_files_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > User replaces files', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > User replaces files', :js, feature_category: :source_code_management do
include DropzoneHelper
let(:fork_message) do
diff --git a/spec/features/projects/files/user_searches_for_files_spec.rb b/spec/features/projects/files/user_searches_for_files_spec.rb
index 030d5a8ec40..587e87a21dd 100644
--- a/spec/features/projects/files/user_searches_for_files_spec.rb
+++ b/spec/features/projects/files/user_searches_for_files_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Files > User searches for files', feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Files > User searches for files', feature_category: :source_code_management do
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project, :repository, namespace: user.namespace) }
diff --git a/spec/features/projects/fork_spec.rb b/spec/features/projects/fork_spec.rb
index c159b40003c..e849f110014 100644
--- a/spec/features/projects/fork_spec.rb
+++ b/spec/features/projects/fork_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Project fork', feature_category: :groups_and_projects do
+RSpec.describe 'Project fork', feature_category: :source_code_management do
include ListboxHelpers
include ProjectForksHelper
diff --git a/spec/features/projects/gfm_autocomplete_load_spec.rb b/spec/features/projects/gfm_autocomplete_load_spec.rb
index 35ab0094d51..9e23c05a739 100644
--- a/spec/features/projects/gfm_autocomplete_load_spec.rb
+++ b/spec/features/projects/gfm_autocomplete_load_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'GFM autocomplete loading', :js, feature_category: :groups_and_projects do
+RSpec.describe 'GFM autocomplete loading', :js, feature_category: :team_planning do
let(:project) { create(:project) }
before do
diff --git a/spec/features/projects/graph_spec.rb b/spec/features/projects/graph_spec.rb
index e9c05fd7f7f..effe743ac81 100644
--- a/spec/features/projects/graph_spec.rb
+++ b/spec/features/projects/graph_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Project Graph', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Project Graph', :js, feature_category: :source_code_management do
let(:user) { create(:user) }
let(:project) { create(:project, :repository, namespace: user.namespace) }
let(:branch_name) { 'master' }
diff --git a/spec/features/projects/infrastructure_registry_spec.rb b/spec/features/projects/infrastructure_registry_spec.rb
index a648a4fc1ce..10ac61973fb 100644
--- a/spec/features/projects/infrastructure_registry_spec.rb
+++ b/spec/features/projects/infrastructure_registry_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Infrastructure Registry', feature_category: :groups_and_projects do
+RSpec.describe 'Infrastructure Registry', feature_category: :package_registry do
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project) }
diff --git a/spec/features/projects/integrations/user_activates_issue_tracker_spec.rb b/spec/features/projects/integrations/user_activates_issue_tracker_spec.rb
index 944a2c164d5..02cec948127 100644
--- a/spec/features/projects/integrations/user_activates_issue_tracker_spec.rb
+++ b/spec/features/projects/integrations/user_activates_issue_tracker_spec.rb
@@ -10,10 +10,10 @@ RSpec.describe 'User activates issue tracker', :js, feature_category: :integrati
def fill_form(disable: false, skip_new_issue_url: false)
click_active_checkbox if disable
- fill_in 'service_project_url', with: url
- fill_in 'service_issues_url', with: "#{url}/:id"
+ fill_in 'service-project_url', with: url
+ fill_in 'service-issues_url', with: "#{url}/:id"
- fill_in 'service_new_issue_url', with: url unless skip_new_issue_url
+ fill_in 'service-new_issue_url', with: url unless skip_new_issue_url
end
shared_examples 'external issue tracker activation' do |tracker:, skip_new_issue_url: false, skip_test: false|
diff --git a/spec/features/projects/integrations/user_activates_jira_spec.rb b/spec/features/projects/integrations/user_activates_jira_spec.rb
index cc0d4c6f564..704e959ff0e 100644
--- a/spec/features/projects/integrations/user_activates_jira_spec.rb
+++ b/spec/features/projects/integrations/user_activates_jira_spec.rb
@@ -39,7 +39,7 @@ RSpec.describe 'User activates Jira', :js, feature_category: :integrations do
it 'shows errors when some required fields are not filled in' do
visit_project_integration('Jira')
- fill_in 'service_password', with: 'password'
+ fill_in 'service-password', with: 'password'
click_test_integration
page.within('[data-testid="integration-settings-form"]') do
diff --git a/spec/features/projects/integrations/user_activates_mattermost_slash_command_spec.rb b/spec/features/projects/integrations/user_activates_mattermost_slash_command_spec.rb
index e490e32149e..14a94152a94 100644
--- a/spec/features/projects/integrations/user_activates_mattermost_slash_command_spec.rb
+++ b/spec/features/projects/integrations/user_activates_mattermost_slash_command_spec.rb
@@ -143,7 +143,7 @@ RSpec.describe 'Set up Mattermost slash commands', :js, feature_category: :integ
end
it 'shows a token placeholder' do
- token_placeholder = find_field('service_token')['placeholder']
+ token_placeholder = find_field('service-token')['placeholder']
expect(token_placeholder).to eq('')
end
diff --git a/spec/features/projects/issuable_templates_spec.rb b/spec/features/projects/issuable_templates_spec.rb
index bc67cdbfad1..59fea7d7265 100644
--- a/spec/features/projects/issuable_templates_spec.rb
+++ b/spec/features/projects/issuable_templates_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'issuable templates', :js, feature_category: :groups_and_projects do
+RSpec.describe 'issuable templates', :js, feature_category: :team_planning do
include ProjectForksHelper
let(:user) { create(:user) }
diff --git a/spec/features/projects/jobs/permissions_spec.rb b/spec/features/projects/jobs/permissions_spec.rb
index 73635480b95..7759875c2a5 100644
--- a/spec/features/projects/jobs/permissions_spec.rb
+++ b/spec/features/projects/jobs/permissions_spec.rb
@@ -89,7 +89,10 @@ RSpec.describe 'Project Jobs Permissions', feature_category: :groups_and_project
it_behaves_like 'recent job page details responds with status', 200 do
it 'renders job details', :js do
expect(page).to have_content(job.name)
- expect(page).to have_css '.log-line'
+
+ within_testid('job-log-content') do
+ expect(page).to have_content('Job succeeded')
+ end
end
end
diff --git a/spec/features/projects/jobs/user_browses_job_spec.rb b/spec/features/projects/jobs/user_browses_job_spec.rb
index 448db8b6d89..1be1a58d212 100644
--- a/spec/features/projects/jobs/user_browses_job_spec.rb
+++ b/spec/features/projects/jobs/user_browses_job_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'User browses a job', :js, feature_category: :groups_and_projects do
+RSpec.describe 'User browses a job', :js, feature_category: :continuous_integration do
include Spec::Support::Helpers::ModalHelpers
let(:user) { create(:user) }
diff --git a/spec/features/projects/jobs/user_browses_jobs_spec.rb b/spec/features/projects/jobs/user_browses_jobs_spec.rb
index 115b3dda5b2..5c1dc36a31c 100644
--- a/spec/features/projects/jobs/user_browses_jobs_spec.rb
+++ b/spec/features/projects/jobs/user_browses_jobs_spec.rb
@@ -8,7 +8,7 @@ def visit_jobs_page
wait_for_requests
end
-RSpec.describe 'User browses jobs', feature_category: :groups_and_projects do
+RSpec.describe 'User browses jobs', feature_category: :continuous_integration do
describe 'Jobs', :js do
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
diff --git a/spec/features/projects/jobs/user_triggers_manual_job_with_variables_spec.rb b/spec/features/projects/jobs/user_triggers_manual_job_with_variables_spec.rb
index 41a21b1155b..21274572352 100644
--- a/spec/features/projects/jobs/user_triggers_manual_job_with_variables_spec.rb
+++ b/spec/features/projects/jobs/user_triggers_manual_job_with_variables_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'User triggers manual job with variables', :js, feature_category: :groups_and_projects do
+RSpec.describe 'User triggers manual job with variables', :js, feature_category: :continuous_integration do
let(:user) { create(:user) }
let(:user_access_level) { :developer }
let(:project) { create(:project, :repository, namespace: user.namespace) }
diff --git a/spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb b/spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb
index 47cd0d612b5..08de3d95060 100644
--- a/spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb
+++ b/spec/features/projects/members/group_requester_cannot_request_access_to_project_spec.rb
@@ -8,16 +8,23 @@ RSpec.describe 'Projects > Members > Group requester cannot request access to pr
let(:owner) { create(:user) }
let(:group) { create(:group, :public) }
let(:project) { create(:project, :public, namespace: group) }
+ let(:more_actions_dropdown) do
+ find('[data-testid="groups-projects-more-actions-dropdown"] .gl-new-dropdown-custom-toggle')
+ end
before do
group.add_owner(owner)
sign_in(user)
visit group_path(group)
- perform_enqueued_jobs { click_link 'Request Access' }
+ perform_enqueued_jobs do
+ more_actions_dropdown.click
+ click_link 'Request Access'
+ end
visit project_path(project)
end
it 'group requester does not see the request access / withdraw access request button' do
+ expect(page).not_to have_css '[data-testid="groups-projects-more-actions-dropdown"]'
expect(page).not_to have_content 'Request Access'
expect(page).not_to have_content 'Withdraw Access Request'
end
diff --git a/spec/features/projects/members/manage_groups_spec.rb b/spec/features/projects/members/manage_groups_spec.rb
index 63ff1ba8455..7bd7c822a5d 100644
--- a/spec/features/projects/members/manage_groups_spec.rb
+++ b/spec/features/projects/members/manage_groups_spec.rb
@@ -228,6 +228,6 @@ RSpec.describe 'Project > Members > Manage groups', :js, feature_category: :grou
end
def invite_group_selector
- 'button[data-test-id="invite-group-button"]'
+ 'button[data-testid="invite-group-button"]'
end
end
diff --git a/spec/features/projects/members/manage_members_spec.rb b/spec/features/projects/members/manage_members_spec.rb
index 76b2a73e170..3423c636c2b 100644
--- a/spec/features/projects/members/manage_members_spec.rb
+++ b/spec/features/projects/members/manage_members_spec.rb
@@ -108,7 +108,10 @@ RSpec.describe 'Projects > Members > Manage members', :js, feature_category: :on
let(:current_user) { project_owner }
it 'shows Owner in the dropdown' do
- expect(page).to have_select('Select a role', options: %w[Guest Reporter Developer Maintainer Owner])
+ within_modal do
+ toggle_listbox
+ expect_listbox_items(%w[Guest Reporter Developer Maintainer Owner])
+ end
end
end
@@ -116,8 +119,10 @@ RSpec.describe 'Projects > Members > Manage members', :js, feature_category: :on
let(:current_user) { project_maintainer }
it 'does not show the Owner option' do
- expect(page).to have_select('Select a role', options: %w[Guest Reporter Developer Maintainer])
- expect(page).not_to have_select('Select a role', options: %w[Owner])
+ within_modal do
+ toggle_listbox
+ expect_listbox_items(%w[Guest Reporter Developer Maintainer])
+ end
end
end
end
diff --git a/spec/features/projects/members/member_leaves_project_spec.rb b/spec/features/projects/members/member_leaves_project_spec.rb
index e0c64547e9f..43c6ba48906 100644
--- a/spec/features/projects/members/member_leaves_project_spec.rb
+++ b/spec/features/projects/members/member_leaves_project_spec.rb
@@ -8,16 +8,21 @@ RSpec.describe 'Projects > Members > Member leaves project', feature_category: :
let(:user) { create(:user) }
let(:project) { create(:project, :repository, :with_namespace_settings) }
+ let(:more_actions_dropdown) do
+ find('[data-testid="groups-projects-more-actions-dropdown"] .gl-new-dropdown-custom-toggle')
+ end
before do
project.add_developer(user)
sign_in(user)
end
- it 'user leaves project' do
+ it 'user leaves project', :js do
visit project_path(project)
+ more_actions_dropdown.click
click_link 'Leave project'
+ accept_gl_confirm(button_text: 'Leave project')
expect(page).to have_current_path(dashboard_projects_path, ignore_query: true)
expect(project.users.exists?(user.id)).to be_falsey
diff --git a/spec/features/projects/members/user_requests_access_spec.rb b/spec/features/projects/members/user_requests_access_spec.rb
index e7f99a4048c..14df7e7bafe 100644
--- a/spec/features/projects/members/user_requests_access_spec.rb
+++ b/spec/features/projects/members/user_requests_access_spec.rb
@@ -10,6 +10,9 @@ RSpec.describe 'Projects > Members > User requests access', :js, feature_categor
let_it_be(:project) { create(:project, :public, :repository) }
let(:owner) { project.first_owner }
+ let(:more_actions_dropdown) do
+ find('[data-testid="groups-projects-more-actions-dropdown"] .gl-new-dropdown-custom-toggle')
+ end
before do
sign_in(user)
@@ -17,39 +20,46 @@ RSpec.describe 'Projects > Members > User requests access', :js, feature_categor
visit project_path(project)
end
- it 'request access feature is disabled' do
+ it 'request access feature is disabled', :js do
project.update!(request_access_enabled: false)
visit project_path(project)
+ more_actions_dropdown.click
expect(page).not_to have_content 'Request Access'
end
- it 'user can request access to a project' do
- perform_enqueued_jobs { click_link 'Request Access' }
+ it 'user can request access to a project', :js do
+ perform_enqueued_jobs do
+ more_actions_dropdown.click
+ click_link 'Request Access'
+ end
expect(ActionMailer::Base.deliveries.map(&:to)).to match_array([[owner.notification_email_or_default], [maintainer.notification_email_or_default]])
expect(ActionMailer::Base.deliveries.last.subject).to eq "Request to join the #{project.full_name} project"
expect(project.requesters.exists?(user_id: user)).to be_truthy
+ more_actions_dropdown.click
expect(page).to have_content 'Withdraw Access Request'
expect(page).not_to have_content 'Leave Project'
end
context 'code access is restricted' do
- it 'user can request access' do
+ it 'user can request access', :js do
project.project_feature.update!(
repository_access_level: ProjectFeature::PRIVATE,
builds_access_level: ProjectFeature::PRIVATE,
merge_requests_access_level: ProjectFeature::PRIVATE
)
visit project_path(project)
+ more_actions_dropdown.click
expect(page).to have_content 'Request Access'
end
end
- it 'user is not listed in the project members page' do
+ it 'user is not listed in the project members page', :js do
+ more_actions_dropdown.click
click_link 'Request Access'
expect(project.requesters.exists?(user_id: user)).to be_truthy
@@ -64,13 +74,16 @@ RSpec.describe 'Projects > Members > User requests access', :js, feature_categor
end
end
- it 'user can withdraw its request for access' do
+ it 'user can withdraw its request for access', :js do
+ more_actions_dropdown.click
click_link 'Request Access'
expect(project.requesters.exists?(user_id: user)).to be_truthy
+ more_actions_dropdown.click
accept_gl_confirm { click_link 'Withdraw Access Request' }
+ more_actions_dropdown.click
expect(page).not_to have_content 'Withdraw Access Request'
expect(page).to have_content 'Request Access'
end
diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb
index a3cbb86da2c..a0df18ea6f3 100644
--- a/spec/features/projects/new_project_spec.rb
+++ b/spec/features/projects/new_project_spec.rb
@@ -3,8 +3,6 @@
require 'spec_helper'
RSpec.describe 'New project', :js, feature_category: :groups_and_projects do
- include Features::TopNavSpecHelpers
-
before do
stub_application_setting(import_sources: Gitlab::ImportSources.values)
end
@@ -81,21 +79,13 @@ RSpec.describe 'New project', :js, feature_category: :groups_and_projects do
expect(page).to have_content 'Other visibility settings have been disabled by the administrator.'
end
- context 'with prevent_visibility_restriction feature flag off' do
- before do
- stub_feature_flags(prevent_visibility_restriction: false)
- end
+ it 'shows a message if all levels are restricted' do
+ stub_application_setting(restricted_visibility_levels: Gitlab::VisibilityLevel.values)
- it 'shows a message if all levels are restricted' do
- Gitlab::CurrentSettings.update!(
- restricted_visibility_levels: Gitlab::VisibilityLevel.values
- )
-
- visit new_project_path
- click_link 'Create blank project'
+ visit new_project_path
+ click_link 'Create blank project'
- expect(page).to have_content 'Visibility settings have been disabled by the administrator.'
- end
+ expect(page).to have_content 'Visibility settings have been disabled by the administrator.'
end
end
diff --git a/spec/features/projects/packages_spec.rb b/spec/features/projects/packages_spec.rb
index 5073c147b6c..4e222a67b87 100644
--- a/spec/features/projects/packages_spec.rb
+++ b/spec/features/projects/packages_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Packages', feature_category: :groups_and_projects do
+RSpec.describe 'Packages', feature_category: :package_registry do
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project) }
diff --git a/spec/features/projects/pipeline_schedules_spec.rb b/spec/features/projects/pipeline_schedules_spec.rb
index 5bcd0d28fd9..d481d90792d 100644
--- a/spec/features/projects/pipeline_schedules_spec.rb
+++ b/spec/features/projects/pipeline_schedules_spec.rb
@@ -111,7 +111,7 @@ RSpec.describe 'Pipeline Schedules', :js, feature_category: :continuous_integrat
page.within('[data-testid="pipeline-schedule-table-row"]') do
expect(page).to have_content('pipeline schedule')
expect(find('[data-testid="next-run-cell"] time')['title'])
- .to include(pipeline_schedule.real_next_run.strftime('%b %-d, %Y'))
+ .to include(pipeline_schedule.real_next_run.strftime('%B %-d, %Y'))
expect(page).to have_link('master')
expect(find("[data-testid='last-pipeline-status'] a")['href']).to include(pipeline.id.to_s)
end
diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb
index 30d3303dfbb..d8bb4893831 100644
--- a/spec/features/projects/pipelines/pipelines_spec.rb
+++ b/spec/features/projects/pipelines/pipelines_spec.rb
@@ -803,15 +803,73 @@ RSpec.describe 'Pipelines', :js, feature_category: :continuous_integration do
end
describe 'Empty State' do
- let(:project) { create(:project, :repository) }
+ let_it_be_with_reload(:project) { create(:project, :repository) }
before do
visit project_pipelines_path(project)
+
+ wait_for_requests
end
it 'renders empty state' do
expect(page).to have_content 'Try test template'
end
+
+ it 'does not show Jenkins Migration Prompt' do
+ expect(page).not_to have_content _('Migrate to GitLab CI/CD from Jenkins')
+ end
+ end
+
+ describe 'Jenkins migration prompt' do
+ let_it_be_with_reload(:project) { create(:project, :repository) }
+
+ before do
+ allow_next_instance_of(Repository) do |instance|
+ allow(instance).to receive(:jenkinsfile?).and_return(true)
+ end
+ end
+
+ context 'when jenkinsfile is present' do
+ it 'shows Jenkins Migration Prompt' do
+ visit project_pipelines_path(project)
+
+ wait_for_requests
+
+ expect(page).to have_content _('Migrate to GitLab CI/CD from Jenkins')
+ expect(page).to have_content _('Start with a migration plan')
+ end
+ end
+
+ context 'when gitlab ci file is present' do
+ before do
+ allow_next_instance_of(Repository) do |instance|
+ allow(instance).to receive(:gitlab_ci_yml).and_return(true)
+ end
+ end
+
+ it 'does not show migration prompt' do
+ expect_not_to_show_prompt(project)
+ end
+ end
+
+ context 'when AutoDevops is enabled' do
+ before do
+ project.update!(auto_devops_attributes: { enabled: true })
+ end
+
+ it 'does not show migration prompt' do
+ expect_not_to_show_prompt(project)
+ end
+ end
+
+ def expect_not_to_show_prompt(project)
+ visit project_pipelines_path(project)
+
+ wait_for_requests
+
+ expect(page).not_to have_content _('Migrate to GitLab CI/CD from Jenkins')
+ expect(page).not_to have_content _('Start with a migration plan')
+ end
end
end
diff --git a/spec/features/projects/settings/branch_names_settings_spec.rb b/spec/features/projects/settings/branch_names_settings_spec.rb
index cc7396513cb..1b82e8edb00 100644
--- a/spec/features/projects/settings/branch_names_settings_spec.rb
+++ b/spec/features/projects/settings/branch_names_settings_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Project settings > repositories > Branch names', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Project settings > repositories > Branch names', :js, feature_category: :source_code_management do
let_it_be(:project) { create(:project, :public) }
let(:user) { create(:user) }
diff --git a/spec/features/projects/settings/forked_project_settings_spec.rb b/spec/features/projects/settings/forked_project_settings_spec.rb
index c2a5b36a81b..e8e22247f04 100644
--- a/spec/features/projects/settings/forked_project_settings_spec.rb
+++ b/spec/features/projects/settings/forked_project_settings_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Settings > For a forked project', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Settings > For a forked project', :js, feature_category: :source_code_management do
include ProjectForksHelper
let(:user) { create(:user) }
let(:original_project) { create(:project) }
diff --git a/spec/features/projects/settings/merge_requests_settings_spec.rb b/spec/features/projects/settings/merge_requests_settings_spec.rb
index 8b5f9b67890..c1b4caae014 100644
--- a/spec/features/projects/settings/merge_requests_settings_spec.rb
+++ b/spec/features/projects/settings/merge_requests_settings_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Settings > Merge requests', feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Settings > Merge requests', feature_category: :code_review_workflow do
include ProjectForksHelper
let(:user) { create(:user) }
diff --git a/spec/features/projects/settings/monitor_settings_spec.rb b/spec/features/projects/settings/monitor_settings_spec.rb
index fca10d9c0b0..4baa169238b 100644
--- a/spec/features/projects/settings/monitor_settings_spec.rb
+++ b/spec/features/projects/settings/monitor_settings_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Settings > For a forked project', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Settings > For a forked project', :js, feature_category: :incident_management do
include ListboxHelpers
let_it_be(:user) { create(:user) }
diff --git a/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb b/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb
index 1b53a6222e6..96ccc061491 100644
--- a/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb
+++ b/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
RSpec.describe 'Project > Settings > Packages and registries > Container registry tag expiration policy',
- feature_category: :groups_and_projects do
+ feature_category: :container_registry do
let_it_be(:user) { create(:user) }
let_it_be(:project, reload: true) { create(:project, namespace: user.namespace) }
diff --git a/spec/features/projects/settings/repository_settings_spec.rb b/spec/features/projects/settings/repository_settings_spec.rb
index 838ac67ee3d..8576518666c 100644
--- a/spec/features/projects/settings/repository_settings_spec.rb
+++ b/spec/features/projects/settings/repository_settings_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Settings > Repository settings', feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Settings > Repository settings', feature_category: :source_code_management do
include Features::MirroringHelpers
let(:project) { create(:project_empty_repo) }
diff --git a/spec/features/projects/settings/secure_files_spec.rb b/spec/features/projects/settings/secure_files_spec.rb
index 5f94e215a5f..c456e760709 100644
--- a/spec/features/projects/settings/secure_files_spec.rb
+++ b/spec/features/projects/settings/secure_files_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Secure Files', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Secure Files', :js, feature_category: :source_code_management do
let(:project) { create(:project) }
let(:user) { create(:user) }
diff --git a/spec/features/projects/settings/service_desk_setting_spec.rb b/spec/features/projects/settings/service_desk_setting_spec.rb
index 2cd4d793f9c..540c4691465 100644
--- a/spec/features/projects/settings/service_desk_setting_spec.rb
+++ b/spec/features/projects/settings/service_desk_setting_spec.rb
@@ -102,12 +102,6 @@ RSpec.describe 'Service Desk Setting', :js, :clean_gitlab_redis_cache, feature_c
end
end
- it 'pushes service_desk_custom_email feature flag to frontend' do
- visit edit_project_path(project)
-
- expect(page).to have_pushed_frontend_feature_flags(serviceDeskCustomEmail: true)
- end
-
it 'pushes issue_email_participants feature flag to frontend' do
visit edit_project_path(project)
diff --git a/spec/features/projects/settings/user_changes_default_branch_spec.rb b/spec/features/projects/settings/user_changes_default_branch_spec.rb
index 5886699a192..a448daf0e7a 100644
--- a/spec/features/projects/settings/user_changes_default_branch_spec.rb
+++ b/spec/features/projects/settings/user_changes_default_branch_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Settings > User changes default branch', feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Settings > User changes default branch', feature_category: :source_code_management do
include ListboxHelpers
let(:user) { create(:user) }
diff --git a/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb b/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb
index 4e8f42ae792..9305467cbe4 100644
--- a/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb
+++ b/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb
@@ -2,7 +2,7 @@
require "spec_helper"
-RSpec.describe "User interacts with deploy keys", :js, feature_category: :groups_and_projects do
+RSpec.describe "User interacts with deploy keys", :js, feature_category: :continuous_delivery do
let(:project) { create(:project, :repository) }
let(:user) { project.first_owner }
diff --git a/spec/features/projects/settings/user_manages_merge_requests_settings_spec.rb b/spec/features/projects/settings/user_manages_merge_requests_settings_spec.rb
index 1189f5590f8..6fe8a2c3f10 100644
--- a/spec/features/projects/settings/user_manages_merge_requests_settings_spec.rb
+++ b/spec/features/projects/settings/user_manages_merge_requests_settings_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-RSpec.describe 'Projects > Settings > User manages merge request settings', feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Settings > User manages merge request settings', feature_category: :code_review_workflow do
include ProjectForksHelper
let(:user) { create(:user) }
diff --git a/spec/features/projects/settings/webhooks_settings_spec.rb b/spec/features/projects/settings/webhooks_settings_spec.rb
index af7c790c692..506f7666286 100644
--- a/spec/features/projects/settings/webhooks_settings_spec.rb
+++ b/spec/features/projects/settings/webhooks_settings_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Projects > Settings > Webhook Settings', feature_category: :groups_and_projects do
+RSpec.describe 'Projects > Settings > Webhook Settings', feature_category: :webhooks do
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:webhooks_path) { project_hooks_path(project) }
diff --git a/spec/features/projects/show/download_buttons_spec.rb b/spec/features/projects/show/download_buttons_spec.rb
index 8e27b4b2ede..2616d474991 100644
--- a/spec/features/projects/show/download_buttons_spec.rb
+++ b/spec/features/projects/show/download_buttons_spec.rb
@@ -36,23 +36,5 @@ RSpec.describe 'Projects > Show > Download buttons', feature_category: :groups_a
describe 'when checking project main page' do
it_behaves_like 'archive download buttons'
-
- context 'with artifacts' do
- before do
- visit project_path(project)
- end
-
- it 'shows download artifacts button' do
- href = latest_succeeded_project_artifacts_path(project, "#{project.default_branch}/download", job: 'build')
-
- expect(page).to have_link build.name, href: href
- end
-
- it 'download links have download attribute' do
- page.all('a', text: 'Download').each do |link|
- expect(link[:download]).to eq ''
- end
- end
- end
end
end
diff --git a/spec/features/projects/show/user_interacts_with_auto_devops_banner_spec.rb b/spec/features/projects/show/user_interacts_with_auto_devops_banner_spec.rb
index 98714da34f2..52438340312 100644
--- a/spec/features/projects/show/user_interacts_with_auto_devops_banner_spec.rb
+++ b/spec/features/projects/show/user_interacts_with_auto_devops_banner_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
RSpec.describe 'Project > Show > User interacts with auto devops implicitly enabled banner',
- feature_category: :groups_and_projects do
+ feature_category: :auto_devops do
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
diff --git a/spec/features/projects/show/user_sees_git_instructions_spec.rb b/spec/features/projects/show/user_sees_git_instructions_spec.rb
index 5e6857843a6..4933b3f239c 100644
--- a/spec/features/projects/show/user_sees_git_instructions_spec.rb
+++ b/spec/features/projects/show/user_sees_git_instructions_spec.rb
@@ -10,6 +10,7 @@ RSpec.describe 'Projects > Show > User sees Git instructions', feature_category:
# validation failure on NotificationSetting.
# See https://gitlab.com/gitlab-org/gitlab/-/issues/299822#note_492817174
user.notification_settings.reset
+ stub_feature_flags(project_overview_reorg: false)
end
shared_examples_for 'redirects to the sign in page' do
diff --git a/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb b/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb
index 41eab966895..674c7db83f1 100644
--- a/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb
+++ b/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb
@@ -17,8 +17,8 @@ RSpec.describe 'Projects > Show > User sees setup shortcut buttons', feature_cat
describe 'as a normal user' do
before do
+ stub_feature_flags(project_overview_reorg: false)
sign_in(user)
-
visit project_path(project)
end
@@ -40,6 +40,7 @@ RSpec.describe 'Projects > Show > User sees setup shortcut buttons', feature_cat
describe 'as a maintainer' do
before do
+ stub_feature_flags(project_overview_reorg: false)
project.add_maintainer(user)
sign_in(user)
diff --git a/spec/features/projects/tags/download_buttons_spec.rb b/spec/features/projects/tags/download_buttons_spec.rb
index 275d364f267..f025ffba85a 100644
--- a/spec/features/projects/tags/download_buttons_spec.rb
+++ b/spec/features/projects/tags/download_buttons_spec.rb
@@ -38,17 +38,5 @@ RSpec.describe 'Download buttons in tags page', feature_category: :source_code_m
let(:path_to_visit) { project_tags_path(project) }
let(:ref) { tag }
end
-
- context 'with artifacts' do
- before do
- visit project_tags_path(project)
- end
-
- it 'shows download artifacts button' do
- href = latest_succeeded_project_artifacts_path(project, "#{tag}/download", job: 'build')
-
- expect(page).to have_link build.name, href: href
- end
- end
end
end
diff --git a/spec/features/projects/tags/user_views_tags_spec.rb b/spec/features/projects/tags/user_views_tags_spec.rb
index 26f2e81e3df..28a9ced69e6 100644
--- a/spec/features/projects/tags/user_views_tags_spec.rb
+++ b/spec/features/projects/tags/user_views_tags_spec.rb
@@ -38,6 +38,9 @@ RSpec.describe 'User views tags', :feature, feature_category: :source_code_manag
it_behaves_like "it has an RSS button with current_user's feed token"
it_behaves_like "an autodiscoverable RSS feed with current_user's feed token"
it_behaves_like 'has access to the tags RSS feed'
+ it 'passes axe automated accessibility testing', :js do
+ expect(page).to be_axe_clean.within('#content-body')
+ end
end
context 'when user signed out' do
diff --git a/spec/features/projects/terraform_spec.rb b/spec/features/projects/terraform_spec.rb
index 518fa79f003..aefc7be7ced 100644
--- a/spec/features/projects/terraform_spec.rb
+++ b/spec/features/projects/terraform_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Terraform', :js, feature_category: :groups_and_projects do
+RSpec.describe 'Terraform', :js, feature_category: :package_registry do
let_it_be(:project) { create(:project) }
let_it_be(:terraform_state) { create(:terraform_state, :locked, :with_version, project: project) }
diff --git a/spec/features/projects/user_creates_project_spec.rb b/spec/features/projects/user_creates_project_spec.rb
index 484808dcfd1..a590d637801 100644
--- a/spec/features/projects/user_creates_project_spec.rb
+++ b/spec/features/projects/user_creates_project_spec.rb
@@ -55,6 +55,45 @@ RSpec.describe 'User creates a project', :js, feature_category: :groups_and_proj
expect(page).to have_content('README.md Initial commit')
end
+ context 'when creating a project with SHA256 repository' do
+ let(:sha256_field) { 'Use SHA-256 as the repository hashing algorithm' }
+
+ it 'creates a new project' do
+ visit(new_project_path)
+
+ click_link 'Create blank project'
+ fill_in(:project_name, with: 'With initial commits')
+
+ expect(page).to have_checked_field 'Initialize repository with a README'
+ expect(page).to have_unchecked_field sha256_field
+
+ check sha256_field
+
+ page.within('#content-body') do
+ click_button('Create project')
+ end
+
+ project = Project.last
+
+ expect(page).to have_current_path(project_path(project), ignore_query: true)
+ expect(page).to have_content('With initial commits')
+ end
+
+ context 'when "support_sha256_repositories" feature flag is disabled' do
+ before do
+ stub_feature_flags(support_sha256_repositories: false)
+ end
+
+ it 'does not display a SHA256 option' do
+ visit(new_project_path)
+
+ click_link 'Create blank project'
+
+ expect(page).not_to have_content(sha256_field)
+ end
+ end
+ end
+
context 'in a subgroup they do not own' do
let(:parent) { create(:group) }
let!(:subgroup) { create(:group, parent: parent) }
diff --git a/spec/features/projects/user_sees_sidebar_spec.rb b/spec/features/projects/user_sees_sidebar_spec.rb
index 61225b45760..88c16ab4c9f 100644
--- a/spec/features/projects/user_sees_sidebar_spec.rb
+++ b/spec/features/projects/user_sees_sidebar_spec.rb
@@ -207,7 +207,7 @@ RSpec.describe 'Projects > User sees sidebar', :js, feature_category: :groups_an
visit project_path(project)
within('.project-repo-buttons') do
- expect(page).not_to have_selector '.project-clone-holder'
+ expect(page).not_to have_selector '.project-code-holder'
end
end
diff --git a/spec/features/projects/work_items/work_item_children_spec.rb b/spec/features/projects/work_items/work_item_children_spec.rb
index 0970752157d..28f7ee2db10 100644
--- a/spec/features/projects/work_items/work_item_children_spec.rb
+++ b/spec/features/projects/work_items/work_item_children_spec.rb
@@ -23,7 +23,7 @@ RSpec.describe 'Work item children', :js, feature_category: :team_planning do
it 'are not displayed when issue does not have work item children', :aggregate_failures do
page.within('[data-testid="work-item-links"]') do
- expect(find('[data-testid="links-empty"]')).to have_content(_('No tasks are currently assigned.'))
+ expect(find('[data-testid="links-empty"]')).to have_content(_('No child items are currently assigned.'))
expect(page).not_to have_selector('[data-testid="add-links-form"]')
expect(page).not_to have_selector('[data-testid="links-child"]')
end
diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb
index c6966e47f0a..1fb1e21ac67 100644
--- a/spec/features/projects_spec.rb
+++ b/spec/features/projects_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Project', feature_category: :groups_and_projects do
+RSpec.describe 'Project', feature_category: :source_code_management do
include ProjectForksHelper
include MobileHelpers
@@ -12,6 +12,7 @@ RSpec.describe 'Project', feature_category: :groups_and_projects do
before do
sign_in user
visit new_project_path
+ stub_feature_flags(project_overview_reorg: false)
end
shared_examples 'creates from template' do |template, sub_template_tab = nil|
@@ -99,6 +100,7 @@ RSpec.describe 'Project', feature_category: :groups_and_projects do
before do
sign_in(project.first_owner)
+ stub_feature_flags(project_overview_reorg: false)
end
it 'parses Markdown' do
@@ -164,6 +166,7 @@ RSpec.describe 'Project', feature_category: :groups_and_projects do
before do
sign_in(project.first_owner)
visit path
+ stub_feature_flags(project_overview_reorg: false)
end
it 'shows project topics' do
@@ -195,6 +198,7 @@ RSpec.describe 'Project', feature_category: :groups_and_projects do
before do
sign_in(project.first_owner)
visit path
+ stub_feature_flags(project_overview_reorg: false)
end
context 'desktop component' do
@@ -427,6 +431,10 @@ RSpec.describe 'Project', feature_category: :groups_and_projects do
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
+ before do
+ stub_feature_flags(project_overview_reorg: false)
+ end
+
it 'does not contain default branch information in its content', :js do
default_branch = 'merge-commit-analyze-side-branch'
diff --git a/spec/features/registrations/oauth_registration_spec.rb b/spec/features/registrations/oauth_registration_spec.rb
index 98300cbeaaa..eb21d285bd0 100644
--- a/spec/features/registrations/oauth_registration_spec.rb
+++ b/spec/features/registrations/oauth_registration_spec.rb
@@ -105,12 +105,12 @@ RSpec.describe 'OAuth Registration', :js, :allow_forgery_protection, feature_cat
mock_auth_hash(provider, uid, invite_email, additional_info: additional_info)
end
- it 'redirects to the activity page with all the projects/groups invitations accepted' do
+ it 'redirects to the group page with all the projects/groups invitations accepted' do
visit invite_path(group_invite.raw_invite_token, extra_params)
click_link_or_button "oauth-login-#{provider}"
expect(page).to have_content('You have been granted Owner access to group Owned.')
- expect(page).to have_current_path(activity_group_path(group), ignore_query: true)
+ expect(page).to have_current_path(group_path(group), ignore_query: true)
end
end
end
diff --git a/spec/features/registrations/registration_spec.rb b/spec/features/registrations/registration_spec.rb
index 7a409b3934e..b408ef268f2 100644
--- a/spec/features/registrations/registration_spec.rb
+++ b/spec/features/registrations/registration_spec.rb
@@ -3,11 +3,11 @@
require 'spec_helper'
RSpec.describe 'Registrations', feature_category: :system_access do
- context 'when the user visits the registration page when already signed in', :clean_gitlab_redis_sessions do
- let_it_be(:current_user) { create(:user) }
+ let_it_be(:user) { create(:user) }
+ context 'when the user visits the registration page when already signed in', :clean_gitlab_redis_sessions do
before do
- sign_in(current_user)
+ sign_in(user)
end
it 'does not show an "You are already signed in" error message' do
@@ -18,4 +18,27 @@ RSpec.describe 'Registrations', feature_category: :system_access do
expect(page).not_to have_content(I18n.t('devise.failure.already_authenticated'))
end
end
+
+ context 'when the user registers having an invitation', :js do
+ let(:group) { create(:group, :private) }
+ let(:new_user) { build(:user) }
+
+ before do
+ stub_application_setting_enum('email_confirmation_setting', 'soft')
+ stub_application_setting(require_admin_approval_after_user_signup: false)
+ end
+
+ it 'becomes a member after confirmation' do
+ create(:group_member, :invited, :developer, source: group, invite_email: new_user.email)
+
+ visit new_user_registration_path
+ fill_in_sign_up_form(new_user)
+
+ confirm_email(new_user)
+ visit polymorphic_path(group)
+
+ expect(page).to have_content(group.name)
+ expect(page).not_to have_content('Page Not Found')
+ end
+ end
end
diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb
index 091c318459b..e7047610180 100644
--- a/spec/features/runners_spec.rb
+++ b/spec/features/runners_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Runners', feature_category: :runner_fleet do
+RSpec.describe 'Runners', feature_category: :fleet_visibility do
let_it_be(:user) { create(:user) }
before do
diff --git a/spec/features/search/user_searches_for_code_spec.rb b/spec/features/search/user_searches_for_code_spec.rb
index 976324a5032..9329b1f2a5e 100644
--- a/spec/features/search/user_searches_for_code_spec.rb
+++ b/spec/features/search/user_searches_for_code_spec.rb
@@ -40,7 +40,7 @@ RSpec.describe 'User searches for code', :js, :disable_rate_limiter, feature_cat
wait_for_requests
page.within('[data-testid="project-filter"]') do
- click_on(project.name)
+ select_listbox_item(project.name)
end
end
@@ -53,8 +53,8 @@ RSpec.describe 'User searches for code', :js, :disable_rate_limiter, feature_cat
let(:expected_result) { 'Update capybara, rspec-rails, poltergeist to recent versions' }
before do
- fill_in('dashboard_search', with: 'rspec')
- find('.gl-search-box-by-click-search-button').click
+ submit_dashboard_search('rspec')
+ select_search_scope('Code')
end
it 'finds code and links to blob' do
@@ -81,8 +81,8 @@ RSpec.describe 'User searches for code', :js, :disable_rate_limiter, feature_cat
search = 'for naming files'
ref_selector = 'v1.0.0'
- fill_in('dashboard_search', with: search)
- find('.gl-search-box-by-click-search-button').click
+ submit_dashboard_search(search)
+ select_search_scope('Code')
expect(page).to have_selector('.results', text: expected_result)
@@ -99,51 +99,6 @@ RSpec.describe 'User searches for code', :js, :disable_rate_limiter, feature_cat
end
end
- context 'when header search' do
- context 'search code within refs' do
- let(:ref_name) { 'v1.0.0' }
-
- before do
- visit(project_tree_path(project, ref_name))
-
- submit_search('gitlab-grack')
- select_search_scope('Code')
- end
-
- it 'shows ref switcher in code result summary' do
- expect(find('.ref-selector')).to have_text(ref_name)
- end
-
- it 'persists branch name across search' do
- find('.gl-search-box-by-click-search-button').click
- expect(find('.ref-selector')).to have_text(ref_name)
- end
-
- # this example is use to test the design that the refs is not
- # only represent the branch as well as the tags.
- it 'ref switcher list all the branches and tags' do
- find('.ref-selector').click
- wait_for_requests
-
- page.within('.ref-selector') do
- expect(page).to have_selector('li', text: 'add-ipython-files')
- expect(page).to have_selector('li', text: 'v1.0.0')
- end
- end
-
- it 'search result changes when refs switched' do
- expect(find('.results')).not_to have_content('path = gitlab-grack')
-
- find('.ref-selector').click
- wait_for_requests
-
- select_listbox_item('add-ipython-files')
-
- expect(page).to have_selector('.results', text: 'path = gitlab-grack')
- end
- end
- end
-
it 'no ref switcher shown in issue result summary' do
issue = create(:issue, title: 'test', project: project)
visit(project_tree_path(project))
diff --git a/spec/features/search/user_searches_for_issues_spec.rb b/spec/features/search/user_searches_for_issues_spec.rb
index 9451e337db1..caddf8b698e 100644
--- a/spec/features/search/user_searches_for_issues_spec.rb
+++ b/spec/features/search/user_searches_for_issues_spec.rb
@@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe 'User searches for issues', :js, :clean_gitlab_redis_rate_limiting, feature_category: :global_search do
+ include ListboxHelpers
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project, namespace: user.namespace) }
@@ -10,8 +11,7 @@ RSpec.describe 'User searches for issues', :js, :clean_gitlab_redis_rate_limitin
let!(:issue2) { create(:issue, :closed, :confidential, title: 'issue Bar', project: project) }
def search_for_issue(search)
- fill_in('dashboard_search', with: search)
- find('.gl-search-box-by-click-search-button').click
+ submit_dashboard_search(search)
select_search_scope('Issues')
end
@@ -92,7 +92,7 @@ RSpec.describe 'User searches for issues', :js, :clean_gitlab_redis_rate_limitin
wait_for_requests
page.within('[data-testid="project-filter"]') do
- click_on(project.name)
+ select_listbox_item project.name
end
search_for_issue(issue1.title)
diff --git a/spec/features/search/user_searches_for_merge_requests_spec.rb b/spec/features/search/user_searches_for_merge_requests_spec.rb
index d7b52d9e07a..7819e036f21 100644
--- a/spec/features/search/user_searches_for_merge_requests_spec.rb
+++ b/spec/features/search/user_searches_for_merge_requests_spec.rb
@@ -3,14 +3,14 @@
require 'spec_helper'
RSpec.describe 'User searches for merge requests', :js, :clean_gitlab_redis_rate_limiting, feature_category: :global_search do
+ include ListboxHelpers
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project, namespace: user.namespace) }
let_it_be(:merge_request1) { create(:merge_request, title: 'Merge Request Foo', source_project: project, target_project: project, created_at: 1.hour.ago) }
let_it_be(:merge_request2) { create(:merge_request, :simple, title: 'Merge Request Bar', source_project: project, target_project: project) }
def search_for_mr(search)
- fill_in('dashboard_search', with: search)
- find('.gl-search-box-by-click-search-button').click
+ submit_dashboard_search(search)
select_search_scope('Merge requests')
end
@@ -60,7 +60,7 @@ RSpec.describe 'User searches for merge requests', :js, :clean_gitlab_redis_rate
wait_for_requests
page.within('[data-testid="project-filter"]') do
- click_on(project.name)
+ select_listbox_item project.name
end
search_for_mr(merge_request1.title)
diff --git a/spec/features/search/user_searches_for_milestones_spec.rb b/spec/features/search/user_searches_for_milestones_spec.rb
index 7ca7958f61b..334fe6f0170 100644
--- a/spec/features/search/user_searches_for_milestones_spec.rb
+++ b/spec/features/search/user_searches_for_milestones_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
RSpec.describe 'User searches for milestones', :js, :clean_gitlab_redis_rate_limiting,
feature_category: :global_search do
+ include ListboxHelpers
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project, namespace: user.namespace) }
let_it_be(:milestone1) { create(:milestone, title: 'Foo', project: project) }
@@ -20,8 +21,7 @@ RSpec.describe 'User searches for milestones', :js, :clean_gitlab_redis_rate_lim
include_examples 'search timeouts', 'milestones'
it 'finds a milestone' do
- fill_in('dashboard_search', with: milestone1.title)
- find('.gl-search-box-by-click-search-button').click
+ submit_dashboard_search(milestone1.title)
select_search_scope('Milestones')
page.within('.results') do
@@ -37,11 +37,10 @@ RSpec.describe 'User searches for milestones', :js, :clean_gitlab_redis_rate_lim
wait_for_requests
page.within('[data-testid="project-filter"]') do
- click_on(project.name)
+ select_listbox_item project.name
end
- fill_in('dashboard_search', with: milestone1.title)
- find('.gl-search-box-by-click-search-button').click
+ submit_dashboard_search(milestone1.title)
select_search_scope('Milestones')
page.within('.results') do
diff --git a/spec/features/search/user_searches_for_projects_spec.rb b/spec/features/search/user_searches_for_projects_spec.rb
index 48a94161927..ee5a3ec9806 100644
--- a/spec/features/search/user_searches_for_projects_spec.rb
+++ b/spec/features/search/user_searches_for_projects_spec.rb
@@ -16,9 +16,7 @@ RSpec.describe 'User searches for projects', :js, :disable_rate_limiter, feature
it 'finds a project' do
visit(search_path)
-
- fill_in('dashboard_search', with: project.name[0..3])
- click_button('Search')
+ submit_dashboard_search(project.name[0..3])
expect(page).to have_link(project.name)
end
@@ -26,7 +24,7 @@ RSpec.describe 'User searches for projects', :js, :disable_rate_limiter, feature
it 'preserves the group being searched in' do
visit(search_path(group_id: project.namespace.id))
- submit_search('foo')
+ submit_dashboard_search('foo')
expect(find('#group_id', visible: false).value).to eq(project.namespace.id.to_s)
end
@@ -34,7 +32,7 @@ RSpec.describe 'User searches for projects', :js, :disable_rate_limiter, feature
it 'preserves the project being searched in' do
visit(search_path(project_id: project.id))
- submit_search('foo')
+ submit_dashboard_search('foo')
expect(find('#project_id', visible: false).value).to eq(project.id.to_s)
end
diff --git a/spec/features/search/user_searches_for_wiki_pages_spec.rb b/spec/features/search/user_searches_for_wiki_pages_spec.rb
index 65f262075f9..4de28a99c21 100644
--- a/spec/features/search/user_searches_for_wiki_pages_spec.rb
+++ b/spec/features/search/user_searches_for_wiki_pages_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
RSpec.describe 'User searches for wiki pages', :js, :clean_gitlab_redis_rate_limiting,
feature_category: :global_search do
+ include ListboxHelpers
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project, :repository, :wiki_repo, namespace: user.namespace) }
let_it_be(:wiki_page) do
@@ -29,11 +30,10 @@ RSpec.describe 'User searches for wiki pages', :js, :clean_gitlab_redis_rate_lim
wait_for_requests
page.within('[data-testid="project-filter"]') do
- click_on(project.name)
+ select_listbox_item project.name
end
- fill_in('dashboard_search', with: search_term)
- find('.gl-search-box-by-click-search-button').click
+ submit_dashboard_search(search_term)
select_search_scope('Wiki')
page.within('.results') do
diff --git a/spec/features/search/user_uses_header_search_field_spec.rb b/spec/features/search/user_uses_header_search_field_spec.rb
index 1ab47f6fd59..e36b04636ce 100644
--- a/spec/features/search/user_uses_header_search_field_spec.rb
+++ b/spec/features/search/user_uses_header_search_field_spec.rb
@@ -83,7 +83,7 @@ RSpec.describe 'User uses header search field', :js, :disable_rate_limiter, feat
end
end
- context 'when clicking merge requests', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/332317' do
+ context 'when clicking merge requests' do
let!(:merge_request) { create(:merge_request, source_project: project, author: user, assignees: [user]) }
it 'shows assigned merge requests' do
diff --git a/spec/features/search/user_uses_search_filters_spec.rb b/spec/features/search/user_uses_search_filters_spec.rb
index 5e553cb0869..b95421fab59 100644
--- a/spec/features/search/user_uses_search_filters_spec.rb
+++ b/spec/features/search/user_uses_search_filters_spec.rb
@@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe 'User uses search filters', :js, feature_category: :global_search do
+ include ListboxHelpers
let(:group) { create(:group) }
let!(:group_project) { create(:project, group: group) }
let(:project) { create(:project, namespace: user.namespace) }
@@ -23,7 +24,7 @@ RSpec.describe 'User uses search filters', :js, feature_category: :global_search
wait_for_requests
page.within('[data-testid="group-filter"]') do
- click_on(group.name)
+ select_listbox_item group.name
end
expect(find('[data-testid="group-filter"]')).to have_content(group.name)
@@ -33,7 +34,7 @@ RSpec.describe 'User uses search filters', :js, feature_category: :global_search
wait_for_requests
page.within('[data-testid="project-filter"]') do
- click_on(group_project.name)
+ select_listbox_item group_project.name
end
expect(find('[data-testid="project-filter"]')).to have_content(group_project.name)
@@ -46,12 +47,17 @@ RSpec.describe 'User uses search filters', :js, feature_category: :global_search
describe 'clear filter button' do
it 'removes Group and Project filters' do
- find('[data-testid="group-filter"] [data-testid="clear-icon"]').click
+ page.within '[data-testid="group-filter"]' do
+ toggle_listbox
+ wait_for_requests
- wait_for_requests
+ find('[data-testid="listbox-reset-button"]').click
- expect(page).to have_current_path(search_path, ignore_query: true) do |uri|
- uri.normalized_query(:sorted) == "scope=blobs&search=test"
+ wait_for_requests
+
+ expect(page).to have_current_path(search_path, ignore_query: true) do |uri|
+ uri.normalized_query(:sorted) == "scope=blobs&search=test"
+ end
end
end
end
@@ -67,7 +73,7 @@ RSpec.describe 'User uses search filters', :js, feature_category: :global_search
wait_for_requests
page.within('[data-testid="project-filter"]') do
- click_on(project.name)
+ select_listbox_item project.name
end
expect(find('[data-testid="project-filter"]')).to have_content(project.name)
@@ -82,11 +88,17 @@ RSpec.describe 'User uses search filters', :js, feature_category: :global_search
describe 'clear filter button' do
it 'removes Project filters' do
- find('[data-testid="project-filter"] [data-testid="clear-icon"]').click
- wait_for_requests
+ page.within '[data-testid="project-filter"]' do
+ toggle_listbox
+ wait_for_requests
+
+ find('[data-testid="listbox-reset-button"]').click
+
+ wait_for_requests
- expect(page).to have_current_path(search_path, ignore_query: true) do |uri|
- uri.normalized_query(:sorted) == "scope=blobs&search=test"
+ expect(page).to have_current_path(search_path, ignore_query: true) do |uri|
+ uri.normalized_query(:sorted) == "scope=blobs&search=test"
+ end
end
end
end
diff --git a/spec/features/uploads/user_uploads_avatar_to_group_spec.rb b/spec/features/uploads/user_uploads_avatar_to_group_spec.rb
index 2872446ed6b..b8fb509c887 100644
--- a/spec/features/uploads/user_uploads_avatar_to_group_spec.rb
+++ b/spec/features/uploads/user_uploads_avatar_to_group_spec.rb
@@ -22,7 +22,7 @@ RSpec.describe 'User uploads avatar to group', feature_category: :user_profile d
visit group_path(group)
- expect(page).to have_selector(%(img[data-src$="/uploads/-/system/group/avatar/#{group.id}/dk.png"]))
+ expect(page).to have_selector(%(img[src$="/uploads/-/system/group/avatar/#{group.id}/dk.png?width=16"]))
# Cheating here to verify something that isn't user-facing, but is important
expect(group.reload.avatar.file).to exist
diff --git a/spec/features/uploads/user_uploads_avatar_to_profile_spec.rb b/spec/features/uploads/user_uploads_avatar_to_profile_spec.rb
index 83eb7cb989e..5d121d9eeba 100644
--- a/spec/features/uploads/user_uploads_avatar_to_profile_spec.rb
+++ b/spec/features/uploads/user_uploads_avatar_to_profile_spec.rb
@@ -18,8 +18,10 @@ RSpec.describe 'User uploads avatar to profile', feature_category: :user_profile
wait_for_all_requests
- data_uri = find('.avatar-image .gl-avatar')['src']
- within_testid('user-dropdown') { expect(find('.gl-avatar')['src']).to eq data_uri }
+ within_testid('user-dropdown') do
+ # We are setting a blob URL
+ expect(find('.gl-avatar')['src']).to start_with 'blob:'
+ end
visit profile_path
diff --git a/spec/features/user_sees_active_nav_items_spec.rb b/spec/features/user_sees_active_nav_items_spec.rb
index 966b8491374..1e6b2b8f189 100644
--- a/spec/features/user_sees_active_nav_items_spec.rb
+++ b/spec/features/user_sees_active_nav_items_spec.rb
@@ -32,7 +32,7 @@ RSpec.describe 'User sees correct active nav items in the super sidebar', :js, f
context 'when visiting authentication logs' do
before do
- visit audit_log_profile_path
+ visit user_settings_authentication_log_path
end
it 'renders the side navigation with the correct submenu set as active' do
diff --git a/spec/features/profiles/active_sessions_spec.rb b/spec/features/user_settings/active_sessions_spec.rb
index 2e800ae88b6..5d1d4bc6490 100644
--- a/spec/features/profiles/active_sessions_spec.rb
+++ b/spec/features/user_settings/active_sessions_spec.rb
@@ -55,7 +55,7 @@ RSpec.describe 'Profile > Active Sessions', :clean_gitlab_redis_shared_state, fe
end
using_session :session1 do
- visit profile_active_sessions_path
+ visit user_settings_active_sessions_path
expect(page).to(have_selector('ul.list-group li.list-group-item', text: 'Signed in on', count: 2))
@@ -93,7 +93,7 @@ RSpec.describe 'Profile > Active Sessions', :clean_gitlab_redis_shared_state, fe
using_session :session1 do
gitlab_sign_in(user)
- visit profile_active_sessions_path
+ visit user_settings_active_sessions_path
expect(page).to have_link('Revoke', count: 1)
@@ -105,7 +105,7 @@ RSpec.describe 'Profile > Active Sessions', :clean_gitlab_redis_shared_state, fe
end
using_session :session2 do
- visit profile_active_sessions_path
+ visit user_settings_active_sessions_path
expect(page).to have_content('You need to sign in or sign up before continuing.')
end
diff --git a/spec/features/profiles/password_spec.rb b/spec/features/user_settings/password_spec.rb
index 05e492e7021..76e3f85e021 100644
--- a/spec/features/profiles/password_spec.rb
+++ b/spec/features/user_settings/password_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Profile > Password', feature_category: :user_profile do
+RSpec.describe 'User Settings > Password', feature_category: :user_profile do
let(:user) { create(:user) }
def fill_passwords(password, confirmation)
@@ -12,16 +12,16 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
click_button 'Save password'
end
- context 'Password authentication enabled' do
+ context 'when password authentication enabled' do
let(:new_password) { User.random_password }
let(:user) { create(:user, password_automatically_set: true) }
before do
sign_in(user)
- visit edit_profile_password_path
+ visit edit_user_settings_password_path
end
- context 'User with password automatically set' do
+ context 'when User with password automatically set' do
describe 'User puts different passwords in the field and in the confirmation' do
it 'shows an error message' do
fill_passwords(new_password, "#{new_password}2")
@@ -42,7 +42,7 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
it 'shows a success message' do
fill_passwords(new_password, new_password)
- page.within('[data-testid="alert-info"]') do
+ within_testid('alert-info') do
expect(page).to have_content('Password was successfully updated. Please sign in again.')
end
end
@@ -50,8 +50,8 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
end
end
- context 'Password authentication unavailable' do
- context 'Regular user' do
+ context 'when password authentication unavailable' do
+ context 'with Regular user' do
before do
gitlab_sign_in(user)
end
@@ -62,13 +62,13 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
stub_application_setting(password_authentication_enabled_for_web: false)
stub_application_setting(password_authentication_enabled_for_git: false)
- visit edit_profile_password_path
+ visit edit_user_settings_password_path
expect(page).to have_gitlab_http_status(:not_found)
end
end
- context 'LDAP user' do
+ context 'with LDAP user' do
include LdapHelpers
let(:ldap_settings) { { enabled: true } }
@@ -87,7 +87,7 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
end
it 'renders 404', :js do
- visit edit_profile_password_path
+ visit edit_user_settings_password_path
expect(page).to have_title('Not Found')
expect(page).to have_content('Page Not Found')
@@ -95,12 +95,12 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
end
end
- context 'Change password' do
+ context 'when changing password' do
let(:new_password) { User.random_password }
before do
sign_in(user)
- visit(edit_profile_password_path)
+ visit(edit_user_settings_password_path)
end
shared_examples 'user enters an incorrect current password' do
@@ -113,7 +113,8 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
it 'handles the invalid password attempt, and prompts the user to try again', :aggregate_failures do
expect(Gitlab::AppLogger).to receive(:info)
- .with(message: 'Invalid current password when attempting to update user password', username: user.username, ip: user.current_sign_in_ip)
+ .with(message: 'Invalid current password when attempting to update user password', username: user.username,
+ ip: user.current_sign_in_ip)
subject
@@ -121,7 +122,7 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
expect(user.failed_attempts).to eq(1)
expect(user.valid_password?(new_password)).to eq(false)
- expect(page).to have_current_path(edit_profile_password_path, ignore_query: true)
+ expect(page).to have_current_path(edit_user_settings_password_path, ignore_query: true)
page.within '.flash-container' do
expect(page).to have_content('You must provide a valid current password')
@@ -174,7 +175,7 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
expect_snowplow_event(
category: 'Gitlab::Tracking::Helpers::WeakPasswordErrorEvent',
action: 'track_weak_password_error',
- controller: 'Profiles::PasswordsController',
+ controller: 'UserSettings::PasswordsController',
method: 'update'
)
end
@@ -207,13 +208,12 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
user.update!(password_expires_at: 1.hour.ago)
user.identities.delete
- expect(user.ldap_user?).to eq false
end
it 'needs change user password' do
- visit edit_profile_password_path
+ visit edit_user_settings_password_path
- expect(page).to have_current_path new_profile_password_path, ignore_query: true
+ expect(page).to have_current_path new_user_settings_password_path, ignore_query: true
fill_in :user_password, with: user.password
fill_in :user_new_password, with: new_password
@@ -224,9 +224,9 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
end
it 'tracks weak password error' do
- visit edit_profile_password_path
+ visit edit_user_settings_password_path
- expect(page).to have_current_path new_profile_password_path, ignore_query: true
+ expect(page).to have_current_path new_user_settings_password_path, ignore_query: true
fill_in :user_password, with: user.password
fill_in :user_new_password, with: "password"
@@ -235,7 +235,7 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
expect_snowplow_event(
category: 'Gitlab::Tracking::Helpers::WeakPasswordErrorEvent',
action: 'track_weak_password_error',
- controller: 'Profiles::PasswordsController',
+ controller: 'UserSettings::PasswordsController',
method: 'create'
)
end
@@ -246,7 +246,7 @@ RSpec.describe 'Profile > Password', feature_category: :user_profile do
visit profile_path
- expect(page).to have_current_path new_profile_password_path, ignore_query: true
+ expect(page).to have_current_path new_user_settings_password_path, ignore_query: true
end
end
end
diff --git a/spec/features/profiles/personal_access_tokens_spec.rb b/spec/features/user_settings/personal_access_tokens_spec.rb
index 094855393be..55f1edfd26a 100644
--- a/spec/features/profiles/personal_access_tokens_spec.rb
+++ b/spec/features/user_settings/personal_access_tokens_spec.rb
@@ -2,12 +2,15 @@
require 'spec_helper'
-RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_profile do
+RSpec.describe 'User Settings > Personal Access Tokens', :js, feature_category: :system_access do
include Spec::Support::Helpers::ModalHelpers
include Features::AccessTokenHelpers
let(:user) { create(:user) }
- let(:pat_create_service) { double('PersonalAccessTokens::CreateService', execute: ServiceResponse.error(message: 'error', payload: { personal_access_token: PersonalAccessToken.new })) }
+ let(:pat_create_service) do
+ instance_double('PersonalAccessTokens::CreateService',
+ execute: ServiceResponse.error(message: 'error', payload: { personal_access_token: PersonalAccessToken.new }))
+ end
before do
sign_in(user)
@@ -17,7 +20,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
it "allows creation of a personal access token" do
name = 'My PAT'
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
click_button 'Add new token'
fill_in "Token name", with: name
@@ -44,7 +47,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
context "when creation fails" do
it "displays an error message" do
number_tokens_before = PersonalAccessToken.count
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
click_button 'Add new token'
fill_in "Token name", with: 'My PAT'
@@ -64,7 +67,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
let!(:personal_access_token) { create(:personal_access_token, user: user) }
it 'only shows personal access tokens' do
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
expect(active_access_tokens).to have_text(personal_access_token.name)
expect(active_access_tokens).not_to have_text(impersonation_token.name)
@@ -76,7 +79,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
end
it 'shows absolute times for expires_at' do
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
expect(active_access_tokens).to have_text(PersonalAccessToken.last.expires_at.strftime('%b %-d'))
end
@@ -87,7 +90,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
let!(:personal_access_token) { create(:personal_access_token, user: user) }
it "allows revocation of an active token" do
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
accept_gl_confirm(button_text: 'Revoke') { click_on "Revoke" }
expect(active_access_tokens).to have_text("This user has no active personal access tokens.")
@@ -95,7 +98,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
it "removes expired tokens from 'active' section" do
personal_access_token.update!(expires_at: 5.days.ago)
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
expect(active_access_tokens).to have_text("This user has no active personal access tokens.")
end
@@ -105,7 +108,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
allow_next_instance_of(PersonalAccessTokens::RevokeService) do |instance|
allow(instance).to receive(:revocation_permitted?).and_return(false)
end
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
accept_gl_confirm(button_text: "Revoke") { click_on "Revoke" }
expect(active_access_tokens).to have_text(personal_access_token.name)
@@ -115,15 +118,16 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
describe "feed token" do
def feed_token_description
- "Your feed token authenticates you when your RSS reader loads a personalized RSS feed or when your calendar application loads a personalized calendar. It is visible in those feed URLs."
+ "Your feed token authenticates you when your RSS reader loads a personalized RSS feed or when your calendar\
+ application loads a personalized calendar. It is visible in those feed URLs."
end
context "when enabled" do
it "displays feed token" do
allow(Gitlab::CurrentSettings).to receive(:disable_feed_token).and_return(false)
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
- within('[data-testid="feed-token-container"]') do
+ within_testid('feed-token-container') do
click_button('Click to reveal')
expect(page).to have_field('Feed token', with: user.feed_token)
@@ -135,7 +139,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
context "when disabled" do
it "does not display feed token" do
allow(Gitlab::CurrentSettings).to receive(:disable_feed_token).and_return(true)
- visit profile_personal_access_tokens_path
+ visit user_settings_personal_access_tokens_path
expect(page).not_to have_content(feed_token_description)
expect(page).not_to have_field('Feed token')
@@ -147,7 +151,7 @@ RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :user_
name = 'My PAT'
scopes = 'api,read_user'
- visit profile_personal_access_tokens_path({ name: name, scopes: scopes })
+ visit user_settings_personal_access_tokens_path({ name: name, scopes: scopes })
click_button 'Add new token'
expect(page).to have_field("Token name", with: name)
diff --git a/spec/features/user_sorts_things_spec.rb b/spec/features/user_sorts_things_spec.rb
index bc377fb1f8f..c53ad961d84 100644
--- a/spec/features/user_sorts_things_spec.rb
+++ b/spec/features/user_sorts_things_spec.rb
@@ -11,13 +11,13 @@ RSpec.describe "User sorts things", :js do
include DashboardHelper
let_it_be(:project) { create(:project_empty_repo, :public) }
- let_it_be(:current_user) { create(:user) } # Using `current_user` instead of just `user` because of the hardoced call in `assigned_mrs_dashboard_path` which is used below.
- let_it_be(:issue) { create(:issue, project: project, author: current_user) }
- let_it_be(:merge_request) { create(:merge_request, target_project: project, source_project: project, author: current_user) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:issue) { create(:issue, project: project, author: user) }
+ let_it_be(:merge_request) { create(:merge_request, target_project: project, source_project: project, author: user) }
before do
- project.add_developer(current_user)
- sign_in(current_user)
+ project.add_developer(user)
+ sign_in(user)
end
it "issues -> project home page -> issues", feature_category: :team_planning do
@@ -25,8 +25,7 @@ RSpec.describe "User sorts things", :js do
visit(project_issues_path(project))
- click_button s_('SortOptions|Created date')
- click_button sort_option
+ pajamas_sort_by sort_option, from: s_('SortOptions|Created date')
visit(project_path(project))
visit(project_issues_path(project))
@@ -39,9 +38,9 @@ RSpec.describe "User sorts things", :js do
visit(project_merge_requests_path(project))
- pajamas_sort_by(sort_option)
+ pajamas_sort_by sort_option, from: s_('SortOptions|Created date')
- visit(assigned_mrs_dashboard_path)
+ visit(merge_requests_dashboard_path(assignee_username: user.username))
expect(find(".issues-filters")).to have_content(sort_option)
end
diff --git a/spec/features/users/login_spec.rb b/spec/features/users/login_spec.rb
index 0f086af227c..87ed4ced684 100644
--- a/spec/features/users/login_spec.rb
+++ b/spec/features/users/login_spec.rb
@@ -578,7 +578,7 @@ RSpec.describe 'Login', :clean_gitlab_redis_sessions, feature_category: :system_
fill_in 'user_password', with: user.password
click_button 'Sign in'
- expect(page).to have_current_path(new_profile_password_path, ignore_query: true)
+ expect(page).to have_current_path(new_user_settings_password_path, ignore_query: true)
end
end
end
@@ -785,6 +785,13 @@ RSpec.describe 'Login', :clean_gitlab_redis_sessions, feature_category: :system_
ensure_no_tabs
end
+ it 'renders logo', :js do
+ visit new_user_session_path
+
+ image = find('img.js-portrait-logo-detection')
+ expect(image['class']).to include('gl-h-9')
+ end
+
it 'renders link to sign up path' do
visit new_user_session_path
@@ -1048,7 +1055,7 @@ RSpec.describe 'Login', :clean_gitlab_redis_sessions, feature_category: :system_
expect_to_be_on_terms_page
click_button 'Accept terms'
- expect(page).to have_current_path(new_profile_password_path, ignore_query: true)
+ expect(page).to have_current_path(new_user_settings_password_path, ignore_query: true)
new_password = User.random_password
diff --git a/spec/features/users/show_spec.rb b/spec/features/users/show_spec.rb
index 2821e8286a4..c56b261fe28 100644
--- a/spec/features/users/show_spec.rb
+++ b/spec/features/users/show_spec.rb
@@ -410,7 +410,7 @@ RSpec.describe 'User page', feature_category: :user_profile do
subject
- page.within '.navbar-gitlab' do
+ within_testid('navbar') do
expect(page).to have_link('Sign in')
expect(page).not_to have_link('Register')
end
@@ -423,7 +423,7 @@ RSpec.describe 'User page', feature_category: :user_profile do
subject
- page.within '.navbar-gitlab' do
+ within_testid('navbar') do
expect(page).to have_link(_('Sign in'), exact: true)
expect(page).to have_link(_('Register'), exact: true)
end
diff --git a/spec/features/users/signup_spec.rb b/spec/features/users/signup_spec.rb
index d873c4846fd..bb08ed7d07d 100644
--- a/spec/features/users/signup_spec.rb
+++ b/spec/features/users/signup_spec.rb
@@ -62,17 +62,11 @@ RSpec.describe 'Signup', :js, feature_category: :user_management do
let(:terms_text) do
<<~TEXT.squish
By clicking Register or registering through a third party you accept the
- Terms of Use and acknowledge the Privacy Policy and Cookie Policy
+ Terms of Use and acknowledge the Privacy Statement and Cookie Policy
TEXT
end
shared_examples 'signup process' do
- def confirm_email
- new_user_token = User.find_by_email(new_user.email).confirmation_token
-
- visit user_confirmation_path(confirmation_token: new_user_token)
- end
-
before do
stub_feature_flags(arkose_labs_signup_challenge: false)
stub_application_setting(require_admin_approval_after_user_signup: false)
@@ -220,7 +214,7 @@ RSpec.describe 'Signup', :js, feature_category: :user_management do
expect(page).to have_current_path users_almost_there_path, ignore_query: true
expect(page).to have_content("Please check your email (#{new_user.email}) to confirm your account")
- confirm_email
+ confirm_email(new_user)
expect(find_field('Username or primary email').value).to eq(new_user.email)
end
@@ -345,11 +339,24 @@ RSpec.describe 'Signup', :js, feature_category: :user_management do
end
context 'when invisible captcha detects malicious behaviour' do
- it 'prevents from signing up' do
- visit new_user_registration_path
+ context 'with form submitted quicker than timestamp_threshold', :freeze_time do
+ it 'prevents from signing up' do
+ visit new_user_registration_path
- expect { fill_in_sign_up_form(new_user) }.not_to change { User.count }
- expect(page).to have_content('That was a bit too quick! Please resubmit.')
+ expect { fill_in_sign_up_form(new_user) }.not_to change { User.count }
+ expect(page).to have_content('That was a bit too quick! Please resubmit.')
+ end
+ end
+
+ context 'with honeypot field is filled' do
+ it 'prevents from signing up' do
+ visit new_user_registration_path
+
+ find_field('If you are human, please ignore this field.',
+ visible: false).execute_script("this.value = 'bot'")
+
+ expect { fill_in_sign_up_form(new_user) }.not_to change { User.count }
+ end
end
end
end
@@ -389,7 +396,7 @@ RSpec.describe 'Signup', :js, feature_category: :user_management do
let(:terms_text) do
<<~TEXT.squish
By clicking Register, I agree that I have read and accepted the Terms of
- Use and Privacy Policy
+ Use and Privacy Statement
TEXT
end