diff options
Diffstat (limited to 'spec/features')
776 files changed, 2011 insertions, 3859 deletions
diff --git a/spec/features/abuse_report_spec.rb b/spec/features/abuse_report_spec.rb index 5fdd0816006..fdd11b59938 100644 --- a/spec/features/abuse_report_spec.rb +++ b/spec/features/abuse_report_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Abuse reports' do +RSpec.describe 'Abuse reports', feature_category: :not_owned do let(:another_user) { create(:user) } before do diff --git a/spec/features/action_cable_logging_spec.rb b/spec/features/action_cable_logging_spec.rb index cf20b204cc5..c02a41c4c59 100644 --- a/spec/features/action_cable_logging_spec.rb +++ b/spec/features/action_cable_logging_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'ActionCable logging', :js do +RSpec.describe 'ActionCable logging', :js, feature_category: :not_owned do let_it_be(:project) { create(:project, :public) } let_it_be(:issue) { create(:issue, project: project) } let_it_be(:user) { create(:user) } diff --git a/spec/features/admin/admin_abuse_reports_spec.rb b/spec/features/admin/admin_abuse_reports_spec.rb index 3a02ce89aa9..10f12d7116f 100644 --- a/spec/features/admin/admin_abuse_reports_spec.rb +++ b/spec/features/admin/admin_abuse_reports_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin::AbuseReports", :js do +RSpec.describe "Admin::AbuseReports", :js, feature_category: :not_owned do let(:user) { create(:user) } context 'as an admin' do diff --git a/spec/features/admin/admin_appearance_spec.rb b/spec/features/admin/admin_appearance_spec.rb index b297d92b2fa..5fbe7039c1d 100644 --- a/spec/features/admin/admin_appearance_spec.rb +++ b/spec/features/admin/admin_appearance_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin Appearance' do +RSpec.describe 'Admin Appearance', feature_category: :not_owned do let!(:appearance) { create(:appearance) } let(:admin) { create(:admin) } diff --git a/spec/features/admin/admin_broadcast_messages_spec.rb b/spec/features/admin/admin_broadcast_messages_spec.rb index b5416f539f1..a6bbdd70fc3 100644 --- a/spec/features/admin/admin_broadcast_messages_spec.rb +++ b/spec/features/admin/admin_broadcast_messages_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin Broadcast Messages' do +RSpec.describe 'Admin Broadcast Messages', feature_category: :onboarding do before do admin = create(:admin) sign_in(admin) diff --git a/spec/features/admin/admin_browse_spam_logs_spec.rb b/spec/features/admin/admin_browse_spam_logs_spec.rb index 471a7e8f0ab..461c9d08273 100644 --- a/spec/features/admin/admin_browse_spam_logs_spec.rb +++ b/spec/features/admin/admin_browse_spam_logs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin browse spam logs' do +RSpec.describe 'Admin browse spam logs', feature_category: :not_owned do let!(:spam_log) { create(:spam_log, description: 'abcde ' * 20) } before do @@ -23,4 +23,11 @@ RSpec.describe 'Admin browse spam logs' do expect(page).to have_link('Remove user') expect(page).to have_link('Block user') end + + it 'does not perform N+1 queries' do + control_queries = ActiveRecord::QueryRecorder.new { visit admin_spam_logs_path } + create(:spam_log) + + expect { visit admin_spam_logs_path }.not_to exceed_query_limit(control_queries) + end end diff --git a/spec/features/admin/admin_deploy_keys_spec.rb b/spec/features/admin/admin_deploy_keys_spec.rb index 56b8c7fce14..e55e1cce6b9 100644 --- a/spec/features/admin/admin_deploy_keys_spec.rb +++ b/spec/features/admin/admin_deploy_keys_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'admin deploy keys', :js do +RSpec.describe 'admin deploy keys', :js, feature_category: :authentication_and_authorization do include Spec::Support::Helpers::ModalHelpers let_it_be(:admin) { create(:admin) } diff --git a/spec/features/admin/admin_dev_ops_reports_spec.rb b/spec/features/admin/admin_dev_ops_reports_spec.rb index f65862c568f..f290464b043 100644 --- a/spec/features/admin/admin_dev_ops_reports_spec.rb +++ b/spec/features/admin/admin_dev_ops_reports_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'DevOps Report page', :js do +RSpec.describe 'DevOps Report page', :js, feature_category: :devops_reports do before do admin = create(:admin) sign_in(admin) diff --git a/spec/features/admin/admin_disables_git_access_protocol_spec.rb b/spec/features/admin/admin_disables_git_access_protocol_spec.rb index b370b779afe..76620b93557 100644 --- a/spec/features/admin/admin_disables_git_access_protocol_spec.rb +++ b/spec/features/admin/admin_disables_git_access_protocol_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin disables Git access protocol', :js do +RSpec.describe 'Admin disables Git access protocol', :js, feature_category: :source_code_management do include StubENV include MobileHelpers diff --git a/spec/features/admin/admin_disables_two_factor_spec.rb b/spec/features/admin/admin_disables_two_factor_spec.rb index 4463dbb1eb0..eed20d449cd 100644 --- a/spec/features/admin/admin_disables_two_factor_spec.rb +++ b/spec/features/admin/admin_disables_two_factor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin disables 2FA for a user' do +RSpec.describe 'Admin disables 2FA for a user', feature_category: :system_access do include Spec::Support::Helpers::ModalHelpers it 'successfully', :js do diff --git a/spec/features/admin/admin_groups_spec.rb b/spec/features/admin/admin_groups_spec.rb index 657dd52228e..c36a742af6b 100644 --- a/spec/features/admin/admin_groups_spec.rb +++ b/spec/features/admin/admin_groups_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin Groups' do +RSpec.describe 'Admin Groups', feature_category: :subgroups do include Select2Helper include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper diff --git a/spec/features/admin/admin_health_check_spec.rb b/spec/features/admin/admin_health_check_spec.rb index 0f6cba6c105..de71a48d2dc 100644 --- a/spec/features/admin/admin_health_check_spec.rb +++ b/spec/features/admin/admin_health_check_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin Health Check", :feature do +RSpec.describe "Admin Health Check", feature_category: :continuous_verification do include StubENV let_it_be(:admin) { create(:admin) } diff --git a/spec/features/admin/admin_hook_logs_spec.rb b/spec/features/admin/admin_hook_logs_spec.rb index a2ee6343886..d6507e68692 100644 --- a/spec/features/admin/admin_hook_logs_spec.rb +++ b/spec/features/admin/admin_hook_logs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin::HookLogs' do +RSpec.describe 'Admin::HookLogs', feature_category: :continuous_verification do let_it_be(:system_hook) { create(:system_hook) } let_it_be(:hook_log) { create(:web_hook_log, web_hook: system_hook, internal_error_message: 'some error') } let_it_be(:admin) { create(:admin) } diff --git a/spec/features/admin/admin_hooks_spec.rb b/spec/features/admin/admin_hooks_spec.rb index dc5b0ae009e..e6630e40147 100644 --- a/spec/features/admin/admin_hooks_spec.rb +++ b/spec/features/admin/admin_hooks_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin::Hooks' do +RSpec.describe 'Admin::Hooks', feature_category: :integrations do include Spec::Support::Helpers::ModalHelpers let_it_be(:user) { create(:admin) } @@ -58,10 +58,7 @@ RSpec.describe 'Admin::Hooks' do describe 'Update existing hook' do let(:new_url) { generate(:url) } - - before do - create(:system_hook) - end + let_it_be(:hook) { create(:system_hook) } it 'updates existing hook' do visit admin_hooks_path @@ -71,9 +68,9 @@ RSpec.describe 'Admin::Hooks' do check 'Enable SSL verification' click_button 'Save changes' - expect(page).to have_content 'SSL Verification: enabled' - expect(page).to have_current_path(admin_hooks_path, ignore_query: true) - expect(page).to have_content(new_url) + expect(page).to have_content('Enable SSL verification') + expect(page).to have_current_path(edit_admin_hook_path(hook), ignore_query: true) + expect(page).to have_content('Recent events') end end @@ -145,7 +142,7 @@ RSpec.describe 'Admin::Hooks' do visit admin_hooks_path find('.hook-test-button.dropdown').click - click_link 'Merge requests events' + click_link 'Merge request events' expect(page).to have_content 'Hook executed successfully' end diff --git a/spec/features/admin/admin_jobs_spec.rb b/spec/features/admin/admin_jobs_spec.rb index 36822f89c12..f0eaa83f05e 100644 --- a/spec/features/admin/admin_jobs_spec.rb +++ b/spec/features/admin/admin_jobs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin Jobs' do +RSpec.describe 'Admin Jobs', feature_category: :continuous_integration do before do admin = create(:admin) sign_in(admin) diff --git a/spec/features/admin/admin_labels_spec.rb b/spec/features/admin/admin_labels_spec.rb index fa5c94aa66e..8d2813d26f7 100644 --- a/spec/features/admin/admin_labels_spec.rb +++ b/spec/features/admin/admin_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'admin issues labels' do +RSpec.describe 'admin issues labels', feature_category: :team_planning do include Spec::Support::Helpers::ModalHelpers let!(:bug_label) { Label.create!(title: 'bug', template: true) } diff --git a/spec/features/admin/admin_manage_applications_spec.rb b/spec/features/admin/admin_manage_applications_spec.rb index 4cf290293bd..b4c77e802a8 100644 --- a/spec/features/admin/admin_manage_applications_spec.rb +++ b/spec/features/admin/admin_manage_applications_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'admin manage applications' do +RSpec.describe 'admin manage applications', feature_category: :system_access do let_it_be(:new_application_path) { new_admin_application_path } let_it_be(:applications_path) { admin_applications_path } let_it_be(:index_path) { admin_applications_path } diff --git a/spec/features/admin/admin_mode/login_spec.rb b/spec/features/admin/admin_mode/login_spec.rb index 6b4c9adb096..393721fe451 100644 --- a/spec/features/admin/admin_mode/login_spec.rb +++ b/spec/features/admin/admin_mode/login_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin Mode Login' do +RSpec.describe 'Admin Mode Login', feature_category: :authentication_and_authorization do include TermsHelper include UserLoginHelper include LdapHelpers diff --git a/spec/features/admin/admin_mode/logout_spec.rb b/spec/features/admin/admin_mode/logout_spec.rb index 3ca66ef0d6a..f4e8941d25a 100644 --- a/spec/features/admin/admin_mode/logout_spec.rb +++ b/spec/features/admin/admin_mode/logout_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin Mode Logout', :js do +RSpec.describe 'Admin Mode Logout', :js, feature_category: :authentication_and_authorization do include TermsHelper include UserLoginHelper include Spec::Support::Helpers::Features::TopNavSpecHelpers diff --git a/spec/features/admin/admin_mode/workers_spec.rb b/spec/features/admin/admin_mode/workers_spec.rb index 8405e9132b6..f3639fd0800 100644 --- a/spec/features/admin/admin_mode/workers_spec.rb +++ b/spec/features/admin/admin_mode/workers_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' # Test an operation that triggers background jobs requiring administrative rights -RSpec.describe 'Admin mode for workers', :request_store do +RSpec.describe 'Admin mode for workers', :request_store, feature_category: :authentication_and_authorization do include Spec::Support::Helpers::Features::AdminUsersHelpers let(:user) { create(:user) } diff --git a/spec/features/admin/admin_mode_spec.rb b/spec/features/admin/admin_mode_spec.rb index 33cf0e8c4f8..769ff75b5a2 100644 --- a/spec/features/admin/admin_mode_spec.rb +++ b/spec/features/admin/admin_mode_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin mode', :js do +RSpec.describe 'Admin mode', :js, feature_category: :not_owned do include MobileHelpers include Spec::Support::Helpers::Features::TopNavSpecHelpers include StubENV diff --git a/spec/features/admin/admin_projects_spec.rb b/spec/features/admin/admin_projects_spec.rb index 6b147b01991..0cb813c40f4 100644 --- a/spec/features/admin/admin_projects_spec.rb +++ b/spec/features/admin/admin_projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin::Projects" do +RSpec.describe "Admin::Projects", feature_category: :projects do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/admin/admin_runners_spec.rb b/spec/features/admin/admin_runners_spec.rb index 92a3b388994..30fd04b1c3e 100644 --- a/spec/features/admin/admin_runners_spec.rb +++ b/spec/features/admin/admin_runners_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin Runners" do +RSpec.describe "Admin Runners", feature_category: :runner_fleet do include Spec::Support::Helpers::Features::RunnersHelpers include Spec::Support::Helpers::ModalHelpers @@ -90,6 +90,22 @@ RSpec.describe "Admin Runners" do end end + it 'shows a running status badge that links to jobs tab' do + runner = create(:ci_runner, :project, projects: [project]) + job = create(:ci_build, :running, runner: runner) + + visit admin_runners_path + + within_runner_row(runner.id) do + click_on(s_('Runners|Running')) + end + + expect(current_url).to match(admin_runner_path(runner)) + + expect(find("[data-testid='td-status']")).to have_content "running" + expect(find("[data-testid='td-job']")).to have_content "##{job.id}" + end + describe 'search' do before_all do create(:ci_runner, :instance, description: 'runner-foo') diff --git a/spec/features/admin/admin_search_settings_spec.rb b/spec/features/admin/admin_search_settings_spec.rb index 989cb7cc787..3254bf75738 100644 --- a/spec/features/admin/admin_search_settings_spec.rb +++ b/spec/features/admin/admin_search_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin searches application settings', :js do +RSpec.describe 'Admin searches application settings', :js, feature_category: :global_search do let_it_be(:admin) { create(:admin) } let_it_be(:application_settings) { create(:application_setting) } diff --git a/spec/features/admin/admin_sees_background_migrations_spec.rb b/spec/features/admin/admin_sees_background_migrations_spec.rb index d72259d91b3..e1746dad196 100644 --- a/spec/features/admin/admin_sees_background_migrations_spec.rb +++ b/spec/features/admin/admin_sees_background_migrations_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin > Admin sees background migrations" do +RSpec.describe "Admin > Admin sees background migrations", feature_category: :database do let_it_be(:admin) { create(:admin) } let(:job_class) { Gitlab::BackgroundMigration::CopyColumnUsingBackgroundMigrationJob } diff --git a/spec/features/admin/admin_sees_project_statistics_spec.rb b/spec/features/admin/admin_sees_project_statistics_spec.rb index 9d9217c4574..d3d0625ac43 100644 --- a/spec/features/admin/admin_sees_project_statistics_spec.rb +++ b/spec/features/admin/admin_sees_project_statistics_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin > Admin sees project statistics" do +RSpec.describe "Admin > Admin sees project statistics", feature_category: :projects do let(:current_user) { create(:admin) } before do diff --git a/spec/features/admin/admin_sees_projects_statistics_spec.rb b/spec/features/admin/admin_sees_projects_statistics_spec.rb index d340eb47f34..82361a985ae 100644 --- a/spec/features/admin/admin_sees_projects_statistics_spec.rb +++ b/spec/features/admin/admin_sees_projects_statistics_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin > Admin sees projects statistics" do +RSpec.describe "Admin > Admin sees projects statistics", feature_category: :projects do let(:current_user) { create(:admin) } before do diff --git a/spec/features/admin/admin_settings_spec.rb b/spec/features/admin/admin_settings_spec.rb index 72c9053ba49..2ac86ab9f49 100644 --- a/spec/features/admin/admin_settings_spec.rb +++ b/spec/features/admin/admin_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin updates settings' do +RSpec.describe 'Admin updates settings', feature_category: :not_owned do include StubENV include TermsHelper include UsageDataHelpers @@ -71,11 +71,19 @@ RSpec.describe 'Admin updates settings' do it 'change Visibility and Access Controls' do page.within('.as-visibility-access') do - uncheck 'Enabled' + page.within('[data-testid="project-export"]') do + uncheck 'Enabled' + end + + page.within('[data-testid="bulk-import"]') do + check 'Enabled' + end + click_button 'Save changes' end expect(current_settings.project_export_enabled).to be_falsey + expect(current_settings.bulk_import_enabled).to be(true) expect(page).to have_content "Application settings saved successfully" end diff --git a/spec/features/admin/admin_system_info_spec.rb b/spec/features/admin/admin_system_info_spec.rb index 8ff31dfded7..6c4a316ae77 100644 --- a/spec/features/admin/admin_system_info_spec.rb +++ b/spec/features/admin/admin_system_info_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin System Info' do +RSpec.describe 'Admin System Info', feature_category: :not_owned do before do admin = create(:admin) sign_in(admin) diff --git a/spec/features/admin/admin_users_impersonation_tokens_spec.rb b/spec/features/admin/admin_users_impersonation_tokens_spec.rb index d93dac4834e..5e6cc206883 100644 --- a/spec/features/admin/admin_users_impersonation_tokens_spec.rb +++ b/spec/features/admin/admin_users_impersonation_tokens_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin > Users > Impersonation Tokens', :js do +RSpec.describe 'Admin > Users > Impersonation Tokens', :js, feature_category: :authentication_and_authorization do include Spec::Support::Helpers::ModalHelpers include Spec::Support::Helpers::AccessTokenHelpers diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb index f4b7fa45e4f..1f40f1f1bce 100644 --- a/spec/features/admin/admin_users_spec.rb +++ b/spec/features/admin/admin_users_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin::Users" do +RSpec.describe "Admin::Users", feature_category: :user_management do let(:current_user) { create(:admin) } before do diff --git a/spec/features/admin/admin_uses_repository_checks_spec.rb b/spec/features/admin/admin_uses_repository_checks_spec.rb index 2dffef93600..318572a7664 100644 --- a/spec/features/admin/admin_uses_repository_checks_spec.rb +++ b/spec/features/admin/admin_uses_repository_checks_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin uses repository checks', :request_store do +RSpec.describe 'Admin uses repository checks', :request_store, feature_category: :user_management do include StubENV include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/admin/dashboard_spec.rb b/spec/features/admin/dashboard_spec.rb index e7ff8c23a8c..baca60134b9 100644 --- a/spec/features/admin/dashboard_spec.rb +++ b/spec/features/admin/dashboard_spec.rb @@ -11,7 +11,7 @@ RSpec.describe 'admin visits dashboard' do gitlab_enable_admin_mode_sign_in(admin) end - context 'counting forks', :js do + context 'counting forks', :js, feature_category: :source_code_management do it 'correctly counts 2 forks of a project' do project = create(:project) project_fork = fork_project(project) @@ -28,7 +28,7 @@ RSpec.describe 'admin visits dashboard' do end end - describe 'Users statistic' do + describe 'Users statistic', feature_category: :user_management do let_it_be(:users_statistics) { create(:users_statistics) } it 'shows correct amounts of users', :aggregate_failures do @@ -54,7 +54,7 @@ RSpec.describe 'admin visits dashboard' do end end - describe 'Version check', :js do + describe 'Version check', :js, feature_category: :deployment_management do it 'shows badge on CE' do visit admin_root_path diff --git a/spec/features/admin/integrations/instance_integrations_spec.rb b/spec/features/admin/integrations/instance_integrations_spec.rb index 7b326ec161c..3b2ed1d9810 100644 --- a/spec/features/admin/integrations/instance_integrations_spec.rb +++ b/spec/features/admin/integrations/instance_integrations_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Instance integrations', :js do +RSpec.describe 'Instance integrations', :js, feature_category: :integrations do include_context 'instance integration activation' it_behaves_like 'integration settings form' do diff --git a/spec/features/admin/integrations/user_activates_mattermost_slash_command_spec.rb b/spec/features/admin/integrations/user_activates_mattermost_slash_command_spec.rb index 22a27b33671..d0ca5d76cc7 100644 --- a/spec/features/admin/integrations/user_activates_mattermost_slash_command_spec.rb +++ b/spec/features/admin/integrations/user_activates_mattermost_slash_command_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'User activates the instance-level Mattermost Slash Command integration', :js do +RSpec.describe 'User activates the instance-level Mattermost Slash Command integration', :js, +feature_category: :integrations do include_context 'instance integration activation' before do diff --git a/spec/features/admin/users/user_spec.rb b/spec/features/admin/users/user_spec.rb index 35b5c755b66..1552d4e6187 100644 --- a/spec/features/admin/users/user_spec.rb +++ b/spec/features/admin/users/user_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin::Users::User' do +RSpec.describe 'Admin::Users::User', feature_category: :user_management do include Spec::Support::Helpers::Features::AdminUsersHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/admin/users/users_spec.rb b/spec/features/admin/users/users_spec.rb index 9c59f0226e0..4b49e8f4bc6 100644 --- a/spec/features/admin/users/users_spec.rb +++ b/spec/features/admin/users/users_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Admin::Users' do +RSpec.describe 'Admin::Users', feature_category: :user_management do include Spec::Support::Helpers::Features::AdminUsersHelpers include Spec::Support::Helpers::ModalHelpers @@ -604,8 +604,8 @@ RSpec.describe 'Admin::Users' do def sort_by(option) page.within('.filtered-search-block') do - find('.gl-new-dropdown').click - find('.gl-new-dropdown-item', text: option).click + find('.gl-dropdown').click + find('.gl-dropdown-item', text: option).click end end end diff --git a/spec/features/admin_variables_spec.rb b/spec/features/admin_variables_spec.rb index 9ec22bbe948..d1adbf59984 100644 --- a/spec/features/admin_variables_spec.rb +++ b/spec/features/admin_variables_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Instance variables', :js do +RSpec.describe 'Instance variables', :js, feature_category: :pipeline_authoring do let(:admin) { create(:admin) } let(:page_path) { ci_cd_admin_application_settings_path } diff --git a/spec/features/alert_management/alert_details_spec.rb b/spec/features/alert_management/alert_details_spec.rb index 579b8221041..45fa4d810aa 100644 --- a/spec/features/alert_management/alert_details_spec.rb +++ b/spec/features/alert_management/alert_details_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Alert details', :js do +RSpec.describe 'Alert details', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } let_it_be(:alert) { create(:alert_management_alert, project: project, status: 'triggered', title: 'Alert') } @@ -30,6 +30,8 @@ RSpec.describe 'Alert details', :js do alert_tabs = find('[data-testid="alertDetailsTabs"]') expect(alert_tabs).to have_content('Alert details') + expect(alert_tabs).to have_content('Metrics') + expect(alert_tabs).to have_content('Activity feed') end end @@ -61,7 +63,7 @@ RSpec.describe 'Alert details', :js do expect(alert_status).to have_content('Triggered') find('.gl-button').click - find('.gl-new-dropdown-item', text: 'Acknowledged').click + find('.gl-dropdown-item', text: 'Acknowledged').click wait_for_requests diff --git a/spec/features/alert_management/alert_management_list_spec.rb b/spec/features/alert_management/alert_management_list_spec.rb index 2fbce27033e..6ed3bdec5f5 100644 --- a/spec/features/alert_management/alert_management_list_spec.rb +++ b/spec/features/alert_management/alert_management_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Alert Management index', :js do +RSpec.describe 'Alert Management index', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } diff --git a/spec/features/alert_management/user_filters_alerts_by_status_spec.rb b/spec/features/alert_management/user_filters_alerts_by_status_spec.rb index bebbbcbf5f7..c3dab05550e 100644 --- a/spec/features/alert_management/user_filters_alerts_by_status_spec.rb +++ b/spec/features/alert_management/user_filters_alerts_by_status_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User filters Alert Management table by status', :js do +RSpec.describe 'User filters Alert Management table by status', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } let_it_be(:alert1, reload: true) { create(:alert_management_alert, :triggered, project: project) } diff --git a/spec/features/alert_management/user_searches_alerts_spec.rb b/spec/features/alert_management/user_searches_alerts_spec.rb index 3bb1b260f36..d1e400f4145 100644 --- a/spec/features/alert_management/user_searches_alerts_spec.rb +++ b/spec/features/alert_management/user_searches_alerts_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches Alert Management alerts', :js do +RSpec.describe 'User searches Alert Management alerts', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } let_it_be(:alert) { create(:alert_management_alert, project: project, status: 'triggered') } diff --git a/spec/features/alert_management/user_updates_alert_status_spec.rb b/spec/features/alert_management/user_updates_alert_status_spec.rb index 2d7be3a0022..98fd7449c4f 100644 --- a/spec/features/alert_management/user_updates_alert_status_spec.rb +++ b/spec/features/alert_management/user_updates_alert_status_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User updates Alert Management status', :js do +RSpec.describe 'User updates Alert Management status', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } let_it_be(:alert) { create(:alert_management_alert, project: project, status: 'triggered') } diff --git a/spec/features/alert_management_spec.rb b/spec/features/alert_management_spec.rb index 3322c9c574f..de6b385b4cd 100644 --- a/spec/features/alert_management_spec.rb +++ b/spec/features/alert_management_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Alert management', :js do +RSpec.describe 'Alert management', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } diff --git a/spec/features/alerts_settings/user_views_alerts_settings_spec.rb b/spec/features/alerts_settings/user_views_alerts_settings_spec.rb index 60f2f776595..70223b2c0d4 100644 --- a/spec/features/alerts_settings/user_views_alerts_settings_spec.rb +++ b/spec/features/alerts_settings/user_views_alerts_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Alert integrations settings form', :js do +RSpec.describe 'Alert integrations settings form', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:maintainer) { create(:user) } let_it_be(:developer) { create(:user) } diff --git a/spec/features/atom/dashboard_issues_spec.rb b/spec/features/atom/dashboard_issues_spec.rb index 855c91f70d7..4e204224773 100644 --- a/spec/features/atom/dashboard_issues_spec.rb +++ b/spec/features/atom/dashboard_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Dashboard Issues Feed" do +RSpec.describe "Dashboard Issues Feed", feature_category: :devops_reports do describe "GET /issues" do let!(:user) do user = create(:user, email: 'private1@example.com') diff --git a/spec/features/atom/dashboard_spec.rb b/spec/features/atom/dashboard_spec.rb index 851ae7b02a0..2e9005712bb 100644 --- a/spec/features/atom/dashboard_spec.rb +++ b/spec/features/atom/dashboard_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Dashboard Feed" do +RSpec.describe "Dashboard Feed", feature_category: :devops_reports do describe "GET /" do let!(:user) { create(:user, name: "Jonh") } diff --git a/spec/features/atom/issues_spec.rb b/spec/features/atom/issues_spec.rb index 913f5a7bcf3..89db70c6680 100644 --- a/spec/features/atom/issues_spec.rb +++ b/spec/features/atom/issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues Feed' do +RSpec.describe 'Issues Feed', feature_category: :devops_reports do describe 'GET /issues' do let_it_be_with_reload(:user) do user = create(:user, email: 'private1@example.com') diff --git a/spec/features/atom/merge_requests_spec.rb b/spec/features/atom/merge_requests_spec.rb index 48db8fcbf1e..b9e1c7042b2 100644 --- a/spec/features/atom/merge_requests_spec.rb +++ b/spec/features/atom/merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests Feed' do +RSpec.describe 'Merge Requests Feed', feature_category: :devops_reports do describe 'GET /merge_requests' do let_it_be_with_reload(:user) { create(:user, email: 'private1@example.com') } let_it_be(:assignee) { create(:user, email: 'private2@example.com') } diff --git a/spec/features/atom/users_spec.rb b/spec/features/atom/users_spec.rb index ab874408e55..b743f900ae7 100644 --- a/spec/features/atom/users_spec.rb +++ b/spec/features/atom/users_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "User Feed" do +RSpec.describe "User Feed", feature_category: :devops_reports do describe "GET /" do let!(:user) { create(:user) } diff --git a/spec/features/boards/board_filters_spec.rb b/spec/features/boards/board_filters_spec.rb index eab92de7e8a..dee63be8119 100644 --- a/spec/features/boards/board_filters_spec.rb +++ b/spec/features/boards/board_filters_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue board filters', :js do +RSpec.describe 'Issue board filters', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :repository) } let_it_be(:user) { create(:user) } let_it_be(:board) { create(:board, project: project) } @@ -191,7 +191,7 @@ RSpec.describe 'Issue board filters', :js do end def expect_filtered_search_dropdown_results(filter_dropdown, count) - expect(filter_dropdown).to have_selector('.gl-new-dropdown-item', count: count) + expect(filter_dropdown).to have_selector('.gl-dropdown-item', count: count) end def visit_project_board diff --git a/spec/features/boards/boards_spec.rb b/spec/features/boards/boards_spec.rb index fee9b5b378e..3e2e391d060 100644 --- a/spec/features/boards/boards_spec.rb +++ b/spec/features/boards/boards_spec.rb @@ -2,16 +2,31 @@ require 'spec_helper' -RSpec.describe 'Project issue boards', :js do +# Flaky spec warning: the queries in this file routinely exceed the defined GraphQL query limit of 100. +# Until those queries are optimized, we need to disable query limit checking in order for these tests +# to pass consistently. Note that removing the disabling code can lead to flaky failures locally and in CI. +# +# In addition, it seems as though the use of `let_it_be` might be causing some of the +# flakiness, as discussed in https://github.com/test-prof/test-prof/blob/master/docs/recipes/let_it_be.md#modifiers. +# `reload: true` has been added to all `let_it_be` statements. +# +# See: +# - https://gitlab.com/gitlab-org/gitlab/-/issues/323426 +# - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56458#note_535900110 +# - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/102719 +# - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105849 +# - https://gitlab.com/gitlab-org/gitlab/-/issues/383970 +# +RSpec.describe 'Project issue boards', :js, feature_category: :team_planning do include DragTo include MobileHelpers include BoardHelpers - let_it_be(:group) { create(:group, :nested) } - let_it_be(:project) { create(:project, :public, namespace: group) } - let_it_be(:board) { create(:board, project: project) } - let_it_be(:user) { create(:user) } - let_it_be(:user2) { create(:user) } + let_it_be(:group, reload: true) { create(:group, :nested) } + let_it_be(:project, reload: true) { create(:project, :public, namespace: group) } + let_it_be(:board, reload: true) { create(:board, project: project) } + let_it_be(:user, reload: true) { create(:user) } + let_it_be(:user2, reload: true) { create(:user) } let(:filtered_search) { find('[data-testid="issue-board-filtered-search"]') } let(:filter_input) { find('.gl-filtered-search-term-input') } @@ -47,34 +62,34 @@ RSpec.describe 'Project issue boards', :js do end context 'with lists' do - let_it_be(:milestone) { create(:milestone, project: project) } - - let_it_be(:planning) { create(:label, project: project, name: 'Planning', description: 'Test') } - let_it_be(:development) { create(:label, project: project, name: 'Development') } - let_it_be(:testing) { create(:label, project: project, name: 'Testing') } - let_it_be(:bug) { create(:label, project: project, name: 'Bug') } - let_it_be(:backlog) { create(:label, project: project, name: 'Backlog') } - let_it_be(:closed) { create(:label, project: project, name: 'Closed') } - let_it_be(:accepting) { create(:label, project: project, name: 'Accepting Merge Requests') } - let_it_be(:a_plus) { create(:label, project: project, name: 'A+') } - let_it_be(:list1) { create(:list, board: board, label: planning, position: 0) } - let_it_be(:list2) { create(:list, board: board, label: development, position: 1) } - let_it_be(:backlog_list) { create(:backlog_list, board: board) } - - let_it_be(:confidential_issue) { create(:labeled_issue, :confidential, project: project, author: user, labels: [planning], relative_position: 9) } - let_it_be(:issue1) { create(:labeled_issue, project: project, title: 'aaa', description: '111', assignees: [user], labels: [planning], relative_position: 8) } - let_it_be(:issue2) { create(:labeled_issue, project: project, title: 'bbb', description: '222', author: user2, labels: [planning], relative_position: 7) } - let_it_be(:issue3) { create(:labeled_issue, project: project, title: 'ccc', description: '333', labels: [planning], relative_position: 6) } - let_it_be(:issue4) { create(:labeled_issue, project: project, title: 'ddd', description: '444', labels: [planning], relative_position: 5) } - let_it_be(:issue5) { create(:labeled_issue, project: project, title: 'eee', description: '555', labels: [planning], milestone: milestone, relative_position: 4) } - let_it_be(:issue6) { create(:labeled_issue, project: project, title: 'fff', description: '666', labels: [planning, development], relative_position: 3) } - let_it_be(:issue7) { create(:labeled_issue, project: project, title: 'ggg', description: '777', labels: [development], relative_position: 2) } - let_it_be(:issue8) { create(:closed_issue, project: project, title: 'hhh', description: '888') } - let_it_be(:issue9) { create(:labeled_issue, project: project, title: 'iii', description: '999', labels: [planning, testing, bug, accepting], relative_position: 1) } - let_it_be(:issue10) { create(:labeled_issue, project: project, title: 'issue +', description: 'A+ great issue', labels: [a_plus]) } + let_it_be(:milestone, reload: true) { create(:milestone, project: project) } + + let_it_be(:planning, reload: true) { create(:label, project: project, name: 'Planning', description: 'Test') } + let_it_be(:development, reload: true) { create(:label, project: project, name: 'Development') } + let_it_be(:testing, reload: true) { create(:label, project: project, name: 'Testing') } + let_it_be(:bug, reload: true) { create(:label, project: project, name: 'Bug') } + let_it_be(:backlog, reload: true) { create(:label, project: project, name: 'Backlog') } + let_it_be(:closed, reload: true) { create(:label, project: project, name: 'Closed') } + let_it_be(:accepting, reload: true) { create(:label, project: project, name: 'Accepting Merge Requests') } + let_it_be(:a_plus, reload: true) { create(:label, project: project, name: 'A+') } + let_it_be(:list1, reload: true) { create(:list, board: board, label: planning, position: 0) } + let_it_be(:list2, reload: true) { create(:list, board: board, label: development, position: 1) } + let_it_be(:backlog_list, reload: true) { create(:backlog_list, board: board) } + + let_it_be(:confidential_issue, reload: true) { create(:labeled_issue, :confidential, project: project, author: user, labels: [planning], relative_position: 9) } + let_it_be(:issue1, reload: true) { create(:labeled_issue, project: project, title: 'aaa', description: '111', assignees: [user], labels: [planning], relative_position: 8) } + let_it_be(:issue2, reload: true) { create(:labeled_issue, project: project, title: 'bbb', description: '222', author: user2, labels: [planning], relative_position: 7) } + let_it_be(:issue3, reload: true) { create(:labeled_issue, project: project, title: 'ccc', description: '333', labels: [planning], relative_position: 6) } + let_it_be(:issue4, reload: true) { create(:labeled_issue, project: project, title: 'ddd', description: '444', labels: [planning], relative_position: 5) } + let_it_be(:issue5, reload: true) { create(:labeled_issue, project: project, title: 'eee', description: '555', labels: [planning], milestone: milestone, relative_position: 4) } + let_it_be(:issue6, reload: true) { create(:labeled_issue, project: project, title: 'fff', description: '666', labels: [planning, development], relative_position: 3) } + let_it_be(:issue7, reload: true) { create(:labeled_issue, project: project, title: 'ggg', description: '777', labels: [development], relative_position: 2) } + let_it_be(:issue8, reload: true) { create(:closed_issue, project: project, title: 'hhh', description: '888') } + let_it_be(:issue9, reload: true) { create(:labeled_issue, project: project, title: 'iii', description: '999', labels: [planning, testing, bug, accepting], relative_position: 1) } + let_it_be(:issue10, reload: true) { create(:labeled_issue, project: project, title: 'issue +', description: 'A+ great issue', labels: [a_plus]) } before do - visit_project_board(project, board) + visit_project_board_path_without_query_limit(project, board) end it 'shows description tooltip on list title', :quarantine do @@ -88,7 +103,7 @@ RSpec.describe 'Project issue boards', :js do wait_for_board_cards(3, 2) end - it 'shows confidential issues with icon' do + it 'shows confidential issues with icon', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do page.within(find('.board:nth-child(2)')) do expect(page).to have_selector('.confidential-icon', count: 1) end @@ -125,7 +140,7 @@ RSpec.describe 'Project issue boards', :js do it 'infinite scrolls list' do create_list(:labeled_issue, 30, project: project, labels: [planning]) - visit_project_board(project, board) + visit_project_board_path_without_query_limit(project, board) page.within(find('.board:nth-child(2)')) do expect(page.find('.board-header')).to have_content('38') @@ -164,7 +179,7 @@ RSpec.describe 'Project issue boards', :js do end end - context 'closed' do + context 'closed', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do it 'shows list of closed issues' do wait_for_board_cards(4, 1) wait_for_requests @@ -204,31 +219,26 @@ RSpec.describe 'Project issue boards', :js do expect(find('.board:nth-child(3) [data-testid="board-list-header"]')).to have_content(planning.title) # Make sure list positions are preserved after a reload - visit_project_board(project, board) + visit_project_board_path_without_query_limit(project, board) expect(find('.board:nth-child(2) [data-testid="board-list-header"]')).to have_content(development.title) expect(find('.board:nth-child(3) [data-testid="board-list-header"]')).to have_content(planning.title) end context 'without backlog and closed lists' do - let_it_be(:board) { create(:board, project: project, hide_backlog_list: true, hide_closed_list: true) } - let_it_be(:list1) { create(:list, board: board, label: planning, position: 0) } - let_it_be(:list2) { create(:list, board: board, label: development, position: 1) } + let_it_be(:board, reload: true) { create(:board, project: project, hide_backlog_list: true, hide_closed_list: true) } + let_it_be(:list1, reload: true) { create(:list, board: board, label: planning, position: 0) } + let_it_be(:list2, reload: true) { create(:list, board: board, label: development, position: 1) } it 'changes position of list' do - inspect_requests(inject_headers: { 'X-GITLAB-DISABLE-SQL-QUERY-LIMIT' => 'https://gitlab.com/gitlab-org/gitlab/-/issues/323426' }) do - visit_project_board(project, board) - end + visit_project_board_path_without_query_limit(project, board) drag(list_from_index: 0, list_to_index: 1, selector: '.board-header') expect(find('.board:nth-child(1) [data-testid="board-list-header"]')).to have_content(development.title) expect(find('.board:nth-child(2) [data-testid="board-list-header"]')).to have_content(planning.title) - inspect_requests(inject_headers: { 'X-GITLAB-DISABLE-SQL-QUERY-LIMIT' => 'https://gitlab.com/gitlab-org/gitlab/-/issues/323426' }) do - # Make sure list positions are preserved after a reload - visit_project_board(project, board) - end + visit_project_board_path_without_query_limit(project, board) expect(find('.board:nth-child(1) [data-testid="board-list-header"]')).to have_content(development.title) expect(find('.board:nth-child(2) [data-testid="board-list-header"]')).to have_content(planning.title) @@ -246,7 +256,7 @@ RSpec.describe 'Project issue boards', :js do expect(page).to have_selector(selector, text: development.title, count: 1) end - it 'issue moves between lists and does not show the "Development" label since the card is in the "Development" list label' do + it 'issue moves between lists and does not show the "Development" label since the card is in the "Development" list label', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do drag(list_from_index: 1, from_index: 1, list_to_index: 2) wait_for_board_cards(2, 7) @@ -257,7 +267,7 @@ RSpec.describe 'Project issue boards', :js do expect(find('.board:nth-child(3)').all('.board-card').last).not_to have_content(development.title) end - it 'issue moves between lists and does not show the "Planning" label since the card is in the "Planning" list label' do + it 'issue moves between lists and does not show the "Planning" label since the card is in the "Planning" list label', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do drag(list_from_index: 2, list_to_index: 1) wait_for_board_cards(2, 9) @@ -268,7 +278,7 @@ RSpec.describe 'Project issue boards', :js do expect(find('.board:nth-child(2)').all('.board-card').first).not_to have_content(planning.title) end - it 'issue moves from closed' do + it 'issue moves from closed', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do drag(list_from_index: 2, list_to_index: 3) wait_for_board_cards(2, 8) @@ -285,7 +295,7 @@ RSpec.describe 'Project issue boards', :js do end end - context 'list header' do + context 'list header', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do let(:total_planning_issues) { "8" } it 'shows issue count on the list' do @@ -309,7 +319,7 @@ RSpec.describe 'Project issue boards', :js do wait_for_empty_boards((3..4)) end - it 'filters by assignee' do + it 'filters by assignee', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do set_filter("assignee", user.username) click_on user.username filter_submit.click @@ -331,7 +341,7 @@ RSpec.describe 'Project issue boards', :js do wait_for_board_cards(4, 0) end - it 'filters by label' do + it 'filters by label', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do set_filter("label", testing.title) click_on testing.title filter_submit.click @@ -390,7 +400,7 @@ RSpec.describe 'Project issue boards', :js do wait_for_board_cards(2, 8) end - it 'infinite scrolls list with label filter' do + it 'infinite scrolls list with label filter', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/383970' do create_list(:labeled_issue, 30, project: project, labels: [planning, testing]) set_filter("label", testing.title) @@ -531,7 +541,7 @@ RSpec.describe 'Project issue boards', :js do end context 'as guest user' do - let_it_be(:user_guest) { create(:user) } + let_it_be(:user_guest, reload: true) { create(:user) } before do stub_feature_flags(apollo_boards: false) @@ -601,4 +611,10 @@ RSpec.describe 'Project issue boards', :js do wait_for_requests end + + def visit_project_board_path_without_query_limit(project, board) + inspect_requests(inject_headers: { 'X-GITLAB-DISABLE-SQL-QUERY-LIMIT' => 'https://gitlab.com/gitlab-org/gitlab/-/issues/323426' }) do + visit_project_board(project, board) + end + end end diff --git a/spec/features/boards/focus_mode_spec.rb b/spec/features/boards/focus_mode_spec.rb index 453a8d8870b..8f3ce25b583 100644 --- a/spec/features/boards/focus_mode_spec.rb +++ b/spec/features/boards/focus_mode_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue Boards focus mode', :js do +RSpec.describe 'Issue Boards focus mode', :js, feature_category: :team_planning do let(:project) { create(:project, :public) } before do diff --git a/spec/features/boards/issue_ordering_spec.rb b/spec/features/boards/issue_ordering_spec.rb index a3dda3b9d2f..f1ee7a8fde7 100644 --- a/spec/features/boards/issue_ordering_spec.rb +++ b/spec/features/boards/issue_ordering_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue Boards', :js do +RSpec.describe 'Issue Boards', :js, feature_category: :team_planning do include DragTo let(:project) { create(:project, :public) } diff --git a/spec/features/boards/keyboard_shortcut_spec.rb b/spec/features/boards/keyboard_shortcut_spec.rb index cefb486349d..6f03f6db3ab 100644 --- a/spec/features/boards/keyboard_shortcut_spec.rb +++ b/spec/features/boards/keyboard_shortcut_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue Boards shortcut', :js do +RSpec.describe 'Issue Boards shortcut', :js, feature_category: :team_planning do context 'issues are enabled' do let(:project) { create(:project) } diff --git a/spec/features/boards/multi_select_spec.rb b/spec/features/boards/multi_select_spec.rb index cad303a14e5..7afe34be3d8 100644 --- a/spec/features/boards/multi_select_spec.rb +++ b/spec/features/boards/multi_select_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Multi Select Issue', :js do +RSpec.describe 'Multi Select Issue', :js, feature_category: :team_planning do include DragTo let(:group) { create(:group, :nested) } diff --git a/spec/features/boards/multiple_boards_spec.rb b/spec/features/boards/multiple_boards_spec.rb index 219f24f60d7..e9d34c6f87f 100644 --- a/spec/features/boards/multiple_boards_spec.rb +++ b/spec/features/boards/multiple_boards_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Multiple Issue Boards', :js do +RSpec.describe 'Multiple Issue Boards', :js, feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :public) } let_it_be(:planning) { create(:label, project: project, name: 'Planning') } diff --git a/spec/features/boards/new_issue_spec.rb b/spec/features/boards/new_issue_spec.rb index 5f4517d47ee..1b0695e4e60 100644 --- a/spec/features/boards/new_issue_spec.rb +++ b/spec/features/boards/new_issue_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue Boards new issue', :js do +RSpec.describe 'Issue Boards new issue', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } let_it_be(:board) { create(:board, project: project) } let_it_be(:backlog_list) { create(:backlog_list, board: board) } diff --git a/spec/features/boards/reload_boards_on_browser_back_spec.rb b/spec/features/boards/reload_boards_on_browser_back_spec.rb index 7fa440befc1..0ca680c5ed5 100644 --- a/spec/features/boards/reload_boards_on_browser_back_spec.rb +++ b/spec/features/boards/reload_boards_on_browser_back_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Ensure Boards do not show stale data on browser back', :js do +RSpec.describe 'Ensure Boards do not show stale data on browser back', :js, feature_category: :team_planning do let(:project) { create(:project, :public) } let(:board) { create(:board, project: project) } let(:user) { create(:user) } diff --git a/spec/features/boards/sidebar_assignee_spec.rb b/spec/features/boards/sidebar_assignee_spec.rb index 63553cec89b..e3de594f856 100644 --- a/spec/features/boards/sidebar_assignee_spec.rb +++ b/spec/features/boards/sidebar_assignee_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Project issue boards sidebar assignee', :js, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/332230' do +RSpec.describe 'Project issue boards sidebar assignee', :js, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/332230', + feature_category: :team_planning do include BoardHelpers let_it_be(:user) { create(:user) } @@ -112,7 +113,7 @@ RSpec.describe 'Project issue boards sidebar assignee', :js, quarantine: 'https: page.within(assignees_widget) do click_button('Edit') - expect(find('.dropdown-menu')).to have_selector('.gl-new-dropdown-item-check-icon') + expect(find('.dropdown-menu')).to have_selector('.gl-dropdown-item-check-icon') end end end diff --git a/spec/features/boards/sidebar_labels_in_namespaces_spec.rb b/spec/features/boards/sidebar_labels_in_namespaces_spec.rb index 8395a0b33c0..c3bb58df797 100644 --- a/spec/features/boards/sidebar_labels_in_namespaces_spec.rb +++ b/spec/features/boards/sidebar_labels_in_namespaces_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue boards sidebar labels select', :js do +RSpec.describe 'Issue boards sidebar labels select', :js, feature_category: :team_planning do include BoardHelpers include_context 'labels from nested groups and projects' diff --git a/spec/features/boards/sidebar_labels_spec.rb b/spec/features/boards/sidebar_labels_spec.rb index 12d91e9c5a8..460d0d232b3 100644 --- a/spec/features/boards/sidebar_labels_spec.rb +++ b/spec/features/boards/sidebar_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project issue boards sidebar labels', :js do +RSpec.describe 'Project issue boards sidebar labels', :js, feature_category: :team_planning do include BoardHelpers let_it_be(:group) { create(:group, :public) } diff --git a/spec/features/boards/sidebar_spec.rb b/spec/features/boards/sidebar_spec.rb index 2b2a412194a..0a16e95c0bf 100644 --- a/spec/features/boards/sidebar_spec.rb +++ b/spec/features/boards/sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project issue boards sidebar', :js do +RSpec.describe 'Project issue boards sidebar', :js, feature_category: :team_planning do include BoardHelpers let_it_be(:user) { create(:user) } 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 480a88a6b84..a936e14168c 100644 --- a/spec/features/boards/user_adds_lists_to_board_spec.rb +++ b/spec/features/boards/user_adds_lists_to_board_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User adds lists', :js do +RSpec.describe 'User adds lists', :js, feature_category: :team_planning do let_it_be(:group) { create(:group, :nested) } let_it_be(:project) { create(:project, :public, namespace: group) } let_it_be(:group_board) { create(:board, group: group) } diff --git a/spec/features/boards/user_visits_board_spec.rb b/spec/features/boards/user_visits_board_spec.rb index c386477fa9d..44c691435df 100644 --- a/spec/features/boards/user_visits_board_spec.rb +++ b/spec/features/boards/user_visits_board_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User visits issue boards', :js do +RSpec.describe 'User visits issue boards', :js, feature_category: :team_planning do using RSpec::Parameterized::TableSyntax let_it_be(:group) { create_default(:group, :public) } diff --git a/spec/features/breadcrumbs_schema_markup_spec.rb b/spec/features/breadcrumbs_schema_markup_spec.rb index f86ad5cd2ae..d924423c9a9 100644 --- a/spec/features/breadcrumbs_schema_markup_spec.rb +++ b/spec/features/breadcrumbs_schema_markup_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Breadcrumbs schema markup', :aggregate_failures do +RSpec.describe 'Breadcrumbs schema markup', :aggregate_failures, feature_category: :not_owned do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :public, namespace: user.namespace) } let_it_be(:issue) { create(:issue, project: project) } diff --git a/spec/features/broadcast_messages_spec.rb b/spec/features/broadcast_messages_spec.rb index 1fec68a1d98..8300cfce539 100644 --- a/spec/features/broadcast_messages_spec.rb +++ b/spec/features/broadcast_messages_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Broadcast Messages' do +RSpec.describe 'Broadcast Messages', feature_category: :onboarding do let_it_be(:user) { create(:user) } shared_examples 'a Broadcast Messages' do |type| @@ -31,11 +31,13 @@ RSpec.describe 'Broadcast Messages' do expect(page).not_to have_content 'SampleMessage' end - it 'broadcast message is still hidden after refresh', :js, - quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/347118' do + it 'broadcast message is still hidden after refresh', :js do visit root_path find('.js-dismiss-current-broadcast-notification').click + + wait_for_cookie_set("hide_broadcast_message_#{broadcast_message.id}") + visit root_path expect(page).not_to have_content 'SampleMessage' diff --git a/spec/features/calendar_spec.rb b/spec/features/calendar_spec.rb index a8aa3f0b36a..2c5b7d66e2f 100644 --- a/spec/features/calendar_spec.rb +++ b/spec/features/calendar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Contributions Calendar', :js do +RSpec.describe 'Contributions Calendar', :js, feature_category: :users do include MobileHelpers let(:user) { create(:user) } @@ -143,18 +143,27 @@ RSpec.describe 'Contributions Calendar', :js do end end - describe '1 issue creation calendar activity' do + describe '1 issue and 1 work item creation calendar activity' do before do Issues::CreateService.new(project: contributed_project, current_user: user, params: issue_params, spam_params: nil).execute + WorkItems::CreateService.new( + project: contributed_project, + current_user: user, + params: { title: 'new task' }, + spam_params: nil + ).execute end - it_behaves_like 'a day with activity', contribution_count: 1 + it_behaves_like 'a day with activity', contribution_count: 2 describe 'issue title is shown on activity page' do include_context 'visit user page' - it 'displays calendar activity log', :sidekiq_might_not_need_inline do - expect(find('#js-overview .overview-content-list .event-target-title')).to have_content issue_title + it 'displays calendar activity log', :sidekiq_inline do + expect(all('#js-overview .overview-content-list .event-target-title').map(&:text)).to contain_exactly( + match(/#{issue_title}/), + match(/new task/) + ) end end end diff --git a/spec/features/callouts/registration_enabled_spec.rb b/spec/features/callouts/registration_enabled_spec.rb index 79e99712183..1ea52dbf12a 100644 --- a/spec/features/callouts/registration_enabled_spec.rb +++ b/spec/features/callouts/registration_enabled_spec.rb @@ -2,11 +2,11 @@ require 'spec_helper' -RSpec.describe 'Registration enabled callout' do +RSpec.describe 'Registration enabled callout', feature_category: :authentication_and_authorization do let_it_be(:admin) { create(:admin) } let_it_be(:non_admin) { create(:user) } let_it_be(:project) { create(:project) } - let_it_be(:callout_title) { _('Anyone can register for an account.') } + let_it_be(:callout_title) { _('Check your sign-up restrictions') } context 'when "Sign-up enabled" setting is `true`' do before do @@ -22,7 +22,7 @@ RSpec.describe 'Registration enabled callout' do visit root_path expect(page).to have_content callout_title - expect(page).to have_link _('Turn off'), href: general_admin_application_settings_path(anchor: 'js-signup-settings') + expect(page).to have_link _('Deactivate'), href: general_admin_application_settings_path(anchor: 'js-signup-settings') visit root_dashboard_path diff --git a/spec/features/canonical_link_spec.rb b/spec/features/canonical_link_spec.rb index 8b64e9a5b9d..d8f9a7584e7 100644 --- a/spec/features/canonical_link_spec.rb +++ b/spec/features/canonical_link_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Canonical link' do +RSpec.describe 'Canonical link', feature_category: :remote_development do include Spec::Support::Helpers::Features::CanonicalLinkHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/clusters/cluster_detail_page_spec.rb b/spec/features/clusters/cluster_detail_page_spec.rb index 06e3e00db7d..e8fb5f4105d 100644 --- a/spec/features/clusters/cluster_detail_page_spec.rb +++ b/spec/features/clusters/cluster_detail_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Clusterable > Show page' do +RSpec.describe 'Clusterable > Show page', feature_category: :kubernetes_management do include KubernetesHelpers let(:current_user) { create(:user) } diff --git a/spec/features/clusters/cluster_health_dashboard_spec.rb b/spec/features/clusters/cluster_health_dashboard_spec.rb index 88d6976c2be..b557f803a99 100644 --- a/spec/features/clusters/cluster_health_dashboard_spec.rb +++ b/spec/features/clusters/cluster_health_dashboard_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Cluster Health board', :js, :kubeclient, :use_clean_rails_memory_store_caching, :sidekiq_inline do +RSpec.describe 'Cluster Health board', :js, :kubeclient, :use_clean_rails_memory_store_caching, :sidekiq_inline, +feature_category: :kubernetes_management do include KubernetesHelpers include PrometheusHelpers diff --git a/spec/features/clusters/create_agent_spec.rb b/spec/features/clusters/create_agent_spec.rb index b19e57c550c..01902c36e99 100644 --- a/spec/features/clusters/create_agent_spec.rb +++ b/spec/features/clusters/create_agent_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Cluster agent registration', :js do +RSpec.describe 'Cluster agent registration', :js, feature_category: :kubernetes_management do let_it_be(:project) { create(:project, :custom_repo, files: { '.gitlab/agents/example-agent-1/config.yaml' => '' }) } let_it_be(:current_user) { create(:user, maintainer_projects: [project]) } let_it_be(:token) { Devise.friendly_token } @@ -30,8 +30,8 @@ RSpec.describe 'Cluster agent registration', :js do click_button('Connect a cluster') expect(page).to have_content('Register') - click_button('Select an agent') - click_button('example-agent-2') + click_button('Select an agent or enter a name to create new') + page.find('li', text: 'example-agent-2').click click_button('Register') expect(page).to have_content('You cannot see this token again after you close this window.') diff --git a/spec/features/commit_spec.rb b/spec/features/commit_spec.rb index c9fa10d58e6..649b67e7fd0 100644 --- a/spec/features/commit_spec.rb +++ b/spec/features/commit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Commit' do +RSpec.describe 'Commit', feature_category: :source_code_management do let_it_be(:project) { create(:project, :repository) } let_it_be(:user) { create(:user) } diff --git a/spec/features/commits/user_uses_quick_actions_spec.rb b/spec/features/commits/user_uses_quick_actions_spec.rb index 12e7865e490..6d043a0bb2f 100644 --- a/spec/features/commits/user_uses_quick_actions_spec.rb +++ b/spec/features/commits/user_uses_quick_actions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Commit > User uses quick actions', :js do +RSpec.describe 'Commit > User uses quick actions', :js, feature_category: :source_code_management do include Spec::Support::Helpers::Features::NotesHelpers include RepoHelpers diff --git a/spec/features/commits/user_view_commits_spec.rb b/spec/features/commits/user_view_commits_spec.rb index f7fd3a6e209..b58d7cf3741 100644 --- a/spec/features/commits/user_view_commits_spec.rb +++ b/spec/features/commits/user_view_commits_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Commit > User view commits' do +RSpec.describe 'Commit > User view commits', feature_category: :source_code_management do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group, :public) } diff --git a/spec/features/commits_spec.rb b/spec/features/commits_spec.rb index 97f820c1518..e4d4375a138 100644 --- a/spec/features/commits_spec.rb +++ b/spec/features/commits_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Commits' do +RSpec.describe 'Commits', feature_category: :source_code_management do let_it_be(:project) { create(:project, :repository) } let_it_be(:user) { create(:user) } @@ -183,7 +183,7 @@ RSpec.describe 'Commits' do set_cookie('new_repo', 'true') visit project_commits_path(project, branch_name) - expect(find('.js-project-refs-dropdown')).to have_content branch_name + expect(find('.ref-selector')).to have_content branch_name end end diff --git a/spec/features/contextual_sidebar_spec.rb b/spec/features/contextual_sidebar_spec.rb index cc4a0471d4e..2b671d4b3f1 100644 --- a/spec/features/contextual_sidebar_spec.rb +++ b/spec/features/contextual_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Contextual sidebar', :js do +RSpec.describe 'Contextual sidebar', :js, feature_category: :remote_development do context 'when context is a project' do let_it_be(:project) { create(:project) } diff --git a/spec/features/cycle_analytics_spec.rb b/spec/features/cycle_analytics_spec.rb index 8de4c66c62f..55bf77d00b1 100644 --- a/spec/features/cycle_analytics_spec.rb +++ b/spec/features/cycle_analytics_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Value Stream Analytics', :js do +RSpec.describe 'Value Stream Analytics', :js, feature_category: :value_stream_management do include CycleAnalyticsHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/dashboard/activity_spec.rb b/spec/features/dashboard/activity_spec.rb index 7390edc3c47..b1734cb353b 100644 --- a/spec/features/dashboard/activity_spec.rb +++ b/spec/features/dashboard/activity_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard > Activity' do +RSpec.describe 'Dashboard > Activity', feature_category: :users do let(:user) { create(:user) } before do diff --git a/spec/features/dashboard/archived_projects_spec.rb b/spec/features/dashboard/archived_projects_spec.rb index d157d44bab7..d3992d34506 100644 --- a/spec/features/dashboard/archived_projects_spec.rb +++ b/spec/features/dashboard/archived_projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Archived Project' do +RSpec.describe 'Dashboard Archived Project', feature_category: :projects do let(:user) { create :user } let(:project) { create :project } let(:archived_project) { create(:project, :archived) } diff --git a/spec/features/dashboard/datetime_on_tooltips_spec.rb b/spec/features/dashboard/datetime_on_tooltips_spec.rb index de8858fa8fa..34f99765c29 100644 --- a/spec/features/dashboard/datetime_on_tooltips_spec.rb +++ b/spec/features/dashboard/datetime_on_tooltips_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Tooltips on .timeago dates', :js do +RSpec.describe 'Tooltips on .timeago dates', :js, feature_category: :users do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, name: 'test', namespace: user.namespace) } diff --git a/spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb b/spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb index 6861fac3cc2..f5b02a87758 100644 --- a/spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb +++ b/spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'The group dashboard', :js do +RSpec.describe 'The group dashboard', :js, feature_category: :subgroups do include ExternalAuthorizationServiceHelpers include Spec::Support::Helpers::Features::TopNavSpecHelpers diff --git a/spec/features/dashboard/group_spec.rb b/spec/features/dashboard/group_spec.rb index f1283d29f4c..f363007f0d7 100644 --- a/spec/features/dashboard/group_spec.rb +++ b/spec/features/dashboard/group_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Group' do +RSpec.describe 'Dashboard Group', feature_category: :subgroups do before do sign_in(create(:user)) end diff --git a/spec/features/dashboard/groups_list_spec.rb b/spec/features/dashboard/groups_list_spec.rb index 3a4296836bd..b28e2ccf787 100644 --- a/spec/features/dashboard/groups_list_spec.rb +++ b/spec/features/dashboard/groups_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Groups page', :js do +RSpec.describe 'Dashboard Groups page', :js, feature_category: :subgroups do let(:user) { create :user } let(:group) { create(:group) } let(:nested_group) { create(:group, :nested) } diff --git a/spec/features/dashboard/issuables_counter_spec.rb b/spec/features/dashboard/issuables_counter_spec.rb index 91901414dde..5c7285f0491 100644 --- a/spec/features/dashboard/issuables_counter_spec.rb +++ b/spec/features/dashboard/issuables_counter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching do +RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, namespace: user.namespace) } let(:issue) { create(:issue, project: project) } @@ -12,6 +12,7 @@ RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching d issue.assignees = [user] merge_request.update!(assignees: [user]) sign_in(user) + stub_feature_flags(limit_assigned_issues_count: false) end it 'reflects dashboard issues count' do @@ -30,6 +31,28 @@ RSpec.describe 'Navigation bar counter', :use_clean_rails_memory_store_caching d end end + context 'when :limit_assigned_issues_count FF is used' do + before do + stub_feature_flags(limit_assigned_issues_count: true) + end + + it 'reflects dashboard issues count' do + visit issues_path + + expect_counters('issues', '1', n_("%d assigned issue", "%d assigned issues", 1) % 1) + + issue.update!(assignees: []) + + Users::AssignedIssuesCountService.new(current_user: user).delete_cache + + travel_to(3.minutes.from_now) do + visit issues_path + + expect_counters('issues', '0', n_("%d assigned issue", "%d assigned issues", 0) % 0) + end + end + end + it 'reflects dashboard merge requests count', :js do visit merge_requests_path diff --git a/spec/features/dashboard/issues_filter_spec.rb b/spec/features/dashboard/issues_filter_spec.rb index 0d10aed955a..d5f362d8449 100644 --- a/spec/features/dashboard/issues_filter_spec.rb +++ b/spec/features/dashboard/issues_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Issues filtering', :js do +RSpec.describe 'Dashboard Issues filtering', :js, feature_category: :team_planning do include Spec::Support::Helpers::Features::SortingHelpers include FilteredSearchHelpers diff --git a/spec/features/dashboard/issues_spec.rb b/spec/features/dashboard/issues_spec.rb index 64181041be5..d74965f58fa 100644 --- a/spec/features/dashboard/issues_spec.rb +++ b/spec/features/dashboard/issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Issues' do +RSpec.describe 'Dashboard Issues', feature_category: :team_planning do include FilteredSearchHelpers let(:current_user) { create :user } diff --git a/spec/features/dashboard/label_filter_spec.rb b/spec/features/dashboard/label_filter_spec.rb index ebe5c3e1091..f116c84ff40 100644 --- a/spec/features/dashboard/label_filter_spec.rb +++ b/spec/features/dashboard/label_filter_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard > label filter', :js do +RSpec.describe 'Dashboard > label filter', :js, feature_category: :team_planning do include FilteredSearchHelpers let(:filtered_search) { find('.filtered-search') } diff --git a/spec/features/dashboard/merge_requests_spec.rb b/spec/features/dashboard/merge_requests_spec.rb index 70f614cdcef..56d7c45de5d 100644 --- a/spec/features/dashboard/merge_requests_spec.rb +++ b/spec/features/dashboard/merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Merge Requests' do +RSpec.describe 'Dashboard Merge Requests', feature_category: :code_review do include Spec::Support::Helpers::Features::SortingHelpers include FilteredSearchHelpers include ProjectForksHelper diff --git a/spec/features/dashboard/milestones_spec.rb b/spec/features/dashboard/milestones_spec.rb index 08cb95979ac..b4d0d9c5812 100644 --- a/spec/features/dashboard/milestones_spec.rb +++ b/spec/features/dashboard/milestones_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard > Milestones' do +RSpec.describe 'Dashboard > Milestones', feature_category: :team_planning do describe 'as anonymous user' do before do visit dashboard_milestones_path diff --git a/spec/features/dashboard/project_member_activity_index_spec.rb b/spec/features/dashboard/project_member_activity_index_spec.rb index c26a1a0b486..5bf1566fa31 100644 --- a/spec/features/dashboard/project_member_activity_index_spec.rb +++ b/spec/features/dashboard/project_member_activity_index_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project member activity', :js do +RSpec.describe 'Project member activity', :js, feature_category: :users do let(:user) { create(:user) } let(:project) { create(:project, :public, name: 'x', namespace: user.namespace) } diff --git a/spec/features/dashboard/projects_spec.rb b/spec/features/dashboard/projects_spec.rb index c132caa88c8..2b89f16bbff 100644 --- a/spec/features/dashboard/projects_spec.rb +++ b/spec/features/dashboard/projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Projects' do +RSpec.describe 'Dashboard Projects', feature_category: :projects do let_it_be(:user) { create(:user) } let_it_be(:project, reload: true) { create(:project, :repository) } let_it_be(:project2) { create(:project, :public) } @@ -101,14 +101,6 @@ RSpec.describe 'Dashboard Projects' do expect(first('.project-row')).to have_content(project_with_most_stars.title) end - - it 'shows tabs to filter by all projects or personal' do - visit dashboard_projects_path - segmented_button = page.find('.filtered-search-nav .button-filter-group') - - expect(segmented_button).to have_content 'All' - expect(segmented_button).to have_content 'Personal' - end end context 'when on Starred projects tab', :js do diff --git a/spec/features/dashboard/root_explore_spec.rb b/spec/features/dashboard/root_explore_spec.rb index a3c346ffe2a..c0d1f0de1f5 100644 --- a/spec/features/dashboard/root_explore_spec.rb +++ b/spec/features/dashboard/root_explore_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Root explore' do +RSpec.describe 'Root explore', feature_category: :not_owned do let_it_be(:public_project) { create(:project, :public) } let_it_be(:archived_project) { create(:project, :archived) } let_it_be(:internal_project) { create(:project, :internal) } @@ -30,4 +30,26 @@ RSpec.describe 'Root explore' do include_examples 'shows public projects' end + + describe 'project language dropdown' do + let(:has_language_dropdown?) { page.has_selector?('[data-testid="project-language-dropdown"]') } + + it 'is conditionally rendered' do + visit explore_projects_path + + expect(has_language_dropdown?).to eq(true) + end + + context 'with project_language_search ff disabled' do + before do + stub_feature_flags(project_language_search: false) + end + + it 'is conditionally rendered' do + visit explore_projects_path + + expect(has_language_dropdown?).to eq(false) + end + end + end end diff --git a/spec/features/dashboard/shortcuts_spec.rb b/spec/features/dashboard/shortcuts_spec.rb index 3f3ab4218f2..30587756505 100644 --- a/spec/features/dashboard/shortcuts_spec.rb +++ b/spec/features/dashboard/shortcuts_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard shortcuts', :js do +RSpec.describe 'Dashboard shortcuts', :js, feature_category: :not_owned do context 'logged in' do let(:user) { create(:user) } let(:project) { create(:project) } diff --git a/spec/features/dashboard/snippets_spec.rb b/spec/features/dashboard/snippets_spec.rb index f891950eeb8..ab2cfc0573e 100644 --- a/spec/features/dashboard/snippets_spec.rb +++ b/spec/features/dashboard/snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard snippets' do +RSpec.describe 'Dashboard snippets', feature_category: :source_code_management do let_it_be(:user) { create(:user) } context 'when the project has snippets' do diff --git a/spec/features/dashboard/todos/target_state_spec.rb b/spec/features/dashboard/todos/target_state_spec.rb index b0aafdda59a..f8b525a63f1 100644 --- a/spec/features/dashboard/todos/target_state_spec.rb +++ b/spec/features/dashboard/todos/target_state_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard > Todo target states' do +RSpec.describe 'Dashboard > Todo target states', feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:author) { create(:user) } let_it_be(:project) { create(:project, :public) } diff --git a/spec/features/dashboard/todos/todos_filtering_spec.rb b/spec/features/dashboard/todos/todos_filtering_spec.rb index 938e42623f6..ea8c7e800c5 100644 --- a/spec/features/dashboard/todos/todos_filtering_spec.rb +++ b/spec/features/dashboard/todos/todos_filtering_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard > User filters todos', :js do +RSpec.describe 'Dashboard > User filters todos', :js, feature_category: :team_planning do let(:user_1) { create(:user, username: 'user_1', name: 'user_1') } let(:user_2) { create(:user, username: 'user_2', name: 'user_2') } @@ -58,9 +58,9 @@ RSpec.describe 'Dashboard > User filters todos', :js do wait_for_requests - expect(page).to have_content "issue #{issue1.to_reference} \"issue\" at #{group1.name} / project_1" - expect(page).to have_content "merge request #{merge_request.to_reference}" - expect(page).not_to have_content "issue #{issue2.to_reference} \"issue\" at #{group2.name} / project_3" + expect(page).to have_content "issue · #{group1.name} / project_1 #{issue1.to_reference}" + expect(page).to have_content merge_request.to_reference.to_s + expect(page).not_to have_content "issue · #{group2.name} / project_3 #{issue2.to_reference}" end context 'Author filter' do @@ -74,8 +74,8 @@ RSpec.describe 'Dashboard > User filters todos', :js do wait_for_requests - expect(find('.todos-list')).to have_content 'merge request' - expect(find('.todos-list')).not_to have_content 'issue' + expect(find('.todos-list')).to have_content '!' + expect(find('.todos-list')).not_to have_content '#' end it 'shows only authors of existing todos' do @@ -174,11 +174,11 @@ RSpec.describe 'Dashboard > User filters todos', :js do def expect_to_see_action(action_name) action_names = { - assigned: ' assigned you ', - review_requested: ' requested a review of ', - mentioned: ' mentioned ', - marked: ' added a todo for ', - build_failed: ' pipeline failed in ' + assigned: ' assigned you', + review_requested: ' requested a review', + mentioned: ' mentioned', + marked: ' added a to-do item', + build_failed: ' pipeline failed' } action_name_text = action_names.delete(action_name) diff --git a/spec/features/dashboard/todos/todos_sorting_spec.rb b/spec/features/dashboard/todos/todos_sorting_spec.rb index a0fa53b761b..e449f71878b 100644 --- a/spec/features/dashboard/todos/todos_sorting_spec.rb +++ b/spec/features/dashboard/todos/todos_sorting_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard > User sorts todos' do +RSpec.describe 'Dashboard > User sorts todos', feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project) } diff --git a/spec/features/dashboard/todos/todos_spec.rb b/spec/features/dashboard/todos/todos_spec.rb index e02cd182b2c..606bc82a7bb 100644 --- a/spec/features/dashboard/todos/todos_spec.rb +++ b/spec/features/dashboard/todos/todos_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Todos' do +RSpec.describe 'Dashboard Todos', feature_category: :team_planning do include DesignManagementTestHelpers let_it_be(:user) { create(:user, username: 'john') } @@ -49,29 +49,8 @@ RSpec.describe 'Dashboard Todos' do visit dashboard_todos_path end - it 'renders the mr link with the extra attributes' do - link = page.find_link(referenced_mr.to_reference) - - expect(link).not_to be_nil - expect(link['data-iid']).to eq(referenced_mr.iid.to_s) - expect(link['data-project-path']).to eq(referenced_mr.project.full_path) - expect(link['title']).to eq(referenced_mr.title) - expect(link['data-reference-type']).to eq('merge_request') - end - end - - context 'when todo references an issue of type task' do - let(:task) { create(:issue, :task, project: project) } - let!(:task_todo) { create(:todo, :mentioned, user: user, project: project, target: task, author: author) } - - before do - sign_in(user) - - visit dashboard_todos_path - end - - it 'displays the correct issue type name' do - expect(page).to have_content('mentioned you on task') + it 'renders the mr reference' do + expect(page).to have_content(referenced_mr.to_reference) end end @@ -100,10 +79,6 @@ RSpec.describe 'Dashboard Todos' do visit dashboard_todos_path end - it 'displays the correct issue type name' do - expect(page).to have_content('mentioned you on issue') - end - it 'has todo present' do expect(page).to have_selector('.todos-list .todo', count: 1) end @@ -117,7 +92,7 @@ RSpec.describe 'Dashboard Todos' do shared_examples 'deleting the todo' do before do within first('.todo') do - click_link 'Done' + find('[data-testid="check-icon"]').click end end @@ -143,9 +118,9 @@ RSpec.describe 'Dashboard Todos' do shared_examples 'deleting and restoring the todo' do before do within first('.todo') do - click_link 'Done' + find('[data-testid="check-icon"]').click wait_for_requests - click_link 'Undo' + find('[data-testid="redo-icon"]').click end end @@ -192,7 +167,8 @@ RSpec.describe 'Dashboard Todos' do it 'shows issue assigned to yourself message' do page.within('.js-todos-all') do - expect(page).to have_content("You assigned issue #{issue.to_reference} \"Fix bug\" at #{project.namespace.owner_name} / #{project.name} to yourself") + expect(page).to have_content("Fix bug · #{project.namespace.owner_name} / #{project.name} #{issue.to_reference}") + expect(page).to have_content("You assigned to yourself.") end end end @@ -203,10 +179,10 @@ RSpec.describe 'Dashboard Todos' do visit dashboard_todos_path end - it 'shows you added a todo message' do + it 'shows you added a to-do item message' do page.within('.js-todos-all') do - expect(page).to have_content("You added a todo for issue #{issue.to_reference} \"Fix bug\" at #{project.namespace.owner_name} / #{project.name}") - expect(page).not_to have_content('to yourself') + expect(page).to have_content("Fix bug · #{project.namespace.owner_name} / #{project.name} #{issue.to_reference}") + expect(page).to have_content("You added a to-do item.") end end end @@ -219,8 +195,8 @@ RSpec.describe 'Dashboard Todos' do it 'shows you mentioned yourself message' do page.within('.js-todos-all') do - expect(page).to have_content("You mentioned yourself on issue #{issue.to_reference} \"Fix bug\" at #{project.namespace.owner_name} / #{project.name}") - expect(page).not_to have_content('to yourself') + expect(page).to have_content("Fix bug · #{project.namespace.owner_name} / #{project.name} #{issue.to_reference}") + expect(page).to have_content("You mentioned yourself.") end end end @@ -233,8 +209,8 @@ RSpec.describe 'Dashboard Todos' do it 'shows you directly addressed yourself message being displayed as mentioned yourself' do page.within('.js-todos-all') do - expect(page).to have_content("You mentioned yourself on issue #{issue.to_reference} \"Fix bug\" at #{project.namespace.owner_name} / #{project.name}") - expect(page).not_to have_content('to yourself') + expect(page).to have_content("Fix bug · #{project.namespace.owner_name} / #{project.name} #{issue.to_reference}") + expect(page).to have_content("You mentioned yourself.") end end end @@ -249,8 +225,8 @@ RSpec.describe 'Dashboard Todos' do it 'shows you set yourself as an approver message' do page.within('.js-todos-all') do - expect(page).to have_content("You set yourself as an approver for merge request #{merge_request.to_reference} \"Fixes issue\" at #{project.namespace.owner_name} / #{project.name}") - expect(page).not_to have_content('to yourself') + expect(page).to have_content("Fixes issue · #{project.namespace.owner_name} / #{project.name} #{merge_request.to_reference}") + expect(page).to have_content("You set yourself as an approver.") end end end @@ -265,7 +241,28 @@ RSpec.describe 'Dashboard Todos' do it 'shows you set yourself as an reviewer message' do page.within('.js-todos-all') do - expect(page).to have_content("You requested a review of merge request #{merge_request.to_reference} \"Fixes issue\" at #{project.namespace.owner_name} / #{project.name} from yourself") + expect(page).to have_content("Fixes issue · #{project.namespace.owner_name} / #{project.name} #{merge_request.to_reference}") + expect(page).to have_content("You requested a review from yourself.") + end + end + end + end + + context 'User has automatically created todos' do + before do + sign_in(user) + end + + context 'unmergeable todo' do + before do + create(:todo, :unmergeable, user: user, project: project, target: issue, author: user) + visit dashboard_todos_path + end + + it 'shows unmergeable message' do + page.within('.js-todos-all') do + expect(page).to have_content("Fix bug · #{project.namespace.owner_name} / #{project.name} #{issue.to_reference}") + expect(page).to have_content("Could not merge.") end end end @@ -285,7 +282,7 @@ RSpec.describe 'Dashboard Todos' do describe 'restoring the todo' do before do within first('.todo') do - click_link 'Add a to do' + find('[data-testid="todo-add-icon"]').click end end @@ -391,7 +388,7 @@ RSpec.describe 'Dashboard Todos' do context 'User has deleted a todo' do before do within first('.todo') do - click_link 'Done' + find('[data-testid="check-icon"]').click end end @@ -420,13 +417,7 @@ RSpec.describe 'Dashboard Todos' do end it 'shows the todo' do - expect(page).to have_content 'The pipeline failed in merge request' - end - - it 'links to the pipelines for the merge request' do - href = pipelines_project_merge_request_path(project, todo.target) - - expect(page).to have_link "merge request #{todo.target.to_reference}", href: href + expect(page).to have_content 'The pipeline failed.' end end @@ -453,15 +444,29 @@ RSpec.describe 'Dashboard Todos' do it 'has todo present' do expect(page).to have_selector('.todos-list .todo', count: 1) end + end - it 'has a link that will take me to the design page' do - click_link "design #{target.to_reference}" + context 'User has a todo for an access requested raised for group membership' do + let_it_be(:group) { create(:group, :public) } - expectation = Gitlab::Routing.url_helpers.designs_project_issue_path( - target.project, target.issue, target.filename - ) + let_it_be(:todo) do + create(:todo, :member_access_requested, + user: user, + target: group, + author: author, + group: group) + end + + before do + group.add_owner(user) + sign_in(user) - expect(page).to have_current_path(expectation, ignore_query: true) + visit dashboard_todos_path + end + + it 'has todo present with access request content' do + expect(page).to have_selector('.todos-list .todo', count: 1) + expect(page).to have_content "#{author.name} has requested access to group #{group.name}" end end end diff --git a/spec/features/dashboard/user_filters_projects_spec.rb b/spec/features/dashboard/user_filters_projects_spec.rb index e25da5854ab..1168a6827fd 100644 --- a/spec/features/dashboard/user_filters_projects_spec.rb +++ b/spec/features/dashboard/user_filters_projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard > User filters projects' do +RSpec.describe 'Dashboard > User filters projects', feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, name: 'Victorialand', namespace: user.namespace, created_at: 2.seconds.ago, updated_at: 2.seconds.ago) } let(:user2) { create(:user) } @@ -16,7 +16,6 @@ RSpec.describe 'Dashboard > User filters projects' do describe 'filtering personal projects' do before do - stub_feature_flags(project_list_filter_bar: false) project2.add_developer(user) visit dashboard_projects_path @@ -33,7 +32,6 @@ RSpec.describe 'Dashboard > User filters projects' do describe 'filtering starred projects', :js do before do - stub_feature_flags(project_list_filter_bar: false) user.toggle_star(project) visit dashboard_projects_path @@ -49,8 +47,6 @@ RSpec.describe 'Dashboard > User filters projects' do describe 'without search bar', :js do before do - stub_feature_flags(project_list_filter_bar: false) - project2.add_developer(user) visit dashboard_projects_path end @@ -65,175 +61,4 @@ RSpec.describe 'Dashboard > User filters projects' do expect(page).not_to have_content 'Treasure' end end - - describe 'with search bar', :js do - before do - stub_feature_flags(project_list_filter_bar: true) - - project2.add_developer(user) - visit dashboard_projects_path - end - - # TODO: move these helpers somewhere more useful - def click_sort_direction - page.find('.filtered-search-block #filtered-search-sorting-dropdown .reverse-sort-btn').click - end - - def select_dropdown_option(selector, label, option_selector = '.dropdown-menu a') - dropdown = page.find(selector) - dropdown.click - - dropdown.find(option_selector, text: label, match: :first).click - end - - def expect_to_see_projects(sorted_projects) - list = page.all('.projects-list .project-name').map(&:text) - expect(list).to match(sorted_projects) - end - - describe 'Search' do - it 'executes when the search button is clicked' do - expect(page).to have_content 'Victorialand' - expect(page).to have_content 'Treasure' - - fill_in 'project-filter-form-field', with: 'Lord vegeta\n' - find('.filtered-search .btn').click - - expect(page).not_to have_content 'Victorialand' - expect(page).not_to have_content 'Treasure' - end - - it 'will execute when i press enter' do - expect(page).to have_content 'Victorialand' - expect(page).to have_content 'Treasure' - - fill_in 'project-filter-form-field', with: 'Lord frieza\n' - find('#project-filter-form-field').native.send_keys :enter - - expect(page).not_to have_content 'Victorialand' - expect(page).not_to have_content 'Treasure' - end - end - - describe 'Filter' do - before do - private_project = create(:project, :private, name: 'Private project', namespace: user.namespace) - internal_project = create(:project, :internal, name: 'Internal project', namespace: user.namespace) - - private_project.add_maintainer(user) - internal_project.add_maintainer(user) - end - - it 'filters private projects only' do - select_dropdown_option '#filtered-search-visibility-dropdown > .dropdown', 'Private', '.dropdown-item' - - expect(current_url).to match(/visibility_level=0/) - - list = page.all('.projects-list .project-name').map(&:text) - - expect(list).to contain_exactly("Private project", "Treasure", "Victorialand") - end - - it 'filters internal projects only' do - select_dropdown_option '#filtered-search-visibility-dropdown > .dropdown', 'Internal', '.dropdown-item' - - expect(current_url).to match(/visibility_level=10/) - - list = page.all('.projects-list .project-name').map(&:text) - - expect(list).to contain_exactly('Internal project') - end - - it 'filters any project' do - # Selecting the same option in the `GlListbox` does not emit `select` event - # and that is why URL update won't be triggered. Given that `Any` is a default option - # we need to explicitly switch from some other option (e.g. `Internal`) to `Any` - # to trigger the page update - select_dropdown_option '#filtered-search-visibility-dropdown > .dropdown', 'Internal', '.dropdown-item' - - select_dropdown_option '#filtered-search-visibility-dropdown > .dropdown', 'Any', '.dropdown-item' - - list = page.all('.projects-list .project-name').map(&:text) - - expect(list).to contain_exactly("Internal project", "Private project", "Treasure", "Victorialand") - end - end - - describe 'Sorting' do - let(:desc_sorted_project_names) { %w[Treasure Victorialand] } - - before do - user.toggle_star(project) - user.toggle_star(project2) - user2.toggle_star(project2) - end - - it 'has all sorting options', :js do - sorting_dropdown = page.find('.filtered-search-block #filtered-search-sorting-dropdown') - - expect(sorting_dropdown).to have_css '.reverse-sort-btn' - - sorting_dropdown.click - - ['Updated date', 'Created date', 'Name', 'Stars'].each do |label| - expect(sorting_dropdown).to have_content(label) - end - end - - it 'defaults to "Name"', :js do - page.find('.filtered-search-block #filtered-search-sorting-dropdown').click - active_sorting_option = page.first('.filtered-search-block #filtered-search-sorting-dropdown .is-active') - - expect(active_sorting_option).to have_content 'Name' - end - - context 'Sorting by name' do - it 'sorts the project list' do - select_dropdown_option '#filtered-search-sorting-dropdown', 'Name' - - expect_to_see_projects(desc_sorted_project_names) - - click_sort_direction - - expect_to_see_projects(desc_sorted_project_names.reverse) - end - end - - context 'Sorting by Updated date' do - it 'sorts the project list' do - select_dropdown_option '#filtered-search-sorting-dropdown', 'Updated date' - - expect_to_see_projects(desc_sorted_project_names) - - click_sort_direction - - expect_to_see_projects(desc_sorted_project_names.reverse) - end - end - - context 'Sorting by Created date' do - it 'sorts the project list' do - select_dropdown_option '#filtered-search-sorting-dropdown', 'Created date' - - expect_to_see_projects(desc_sorted_project_names) - - click_sort_direction - - expect_to_see_projects(desc_sorted_project_names.reverse) - end - end - - context 'Sorting by Stars' do - it 'sorts the project list' do - select_dropdown_option '#filtered-search-sorting-dropdown', 'Stars' - - expect_to_see_projects(desc_sorted_project_names) - - click_sort_direction - - expect_to_see_projects(desc_sorted_project_names.reverse) - end - end - end - end end diff --git a/spec/features/discussion_comments/commit_spec.rb b/spec/features/discussion_comments/commit_spec.rb index 261e9fb9f3b..5407542dfc6 100644 --- a/spec/features/discussion_comments/commit_spec.rb +++ b/spec/features/discussion_comments/commit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Thread Comments Commit', :js do +RSpec.describe 'Thread Comments Commit', :js, feature_category: :source_code_management do include RepoHelpers let(:user) { create(:user) } diff --git a/spec/features/discussion_comments/issue_spec.rb b/spec/features/discussion_comments/issue_spec.rb index ebb57b37918..90be3f0760d 100644 --- a/spec/features/discussion_comments/issue_spec.rb +++ b/spec/features/discussion_comments/issue_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Thread Comments Issue', :js do +RSpec.describe 'Thread Comments Issue', :js, feature_category: :source_code_management do let(:user) { create(:user) } let(:project) { create(:project) } let(:issue) { create(:issue, project: project) } diff --git a/spec/features/discussion_comments/merge_request_spec.rb b/spec/features/discussion_comments/merge_request_spec.rb index a90ff3721d3..64395a44e57 100644 --- a/spec/features/discussion_comments/merge_request_spec.rb +++ b/spec/features/discussion_comments/merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Thread Comments Merge Request', :js do +RSpec.describe 'Thread Comments Merge Request', :js, feature_category: :source_code_management do let(:user) { create(:user) } let(:project) { create(:project, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/discussion_comments/snippets_spec.rb b/spec/features/discussion_comments/snippets_spec.rb index ca0a6d6e1c5..a703c880737 100644 --- a/spec/features/discussion_comments/snippets_spec.rb +++ b/spec/features/discussion_comments/snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Thread Comments Snippet', :js do +RSpec.describe 'Thread Comments Snippet', :js, feature_category: :source_code_management do let_it_be(:user) { create(:user) } before do diff --git a/spec/features/display_system_header_and_footer_bar_spec.rb b/spec/features/display_system_header_and_footer_bar_spec.rb index 0979371a574..22fd0987418 100644 --- a/spec/features/display_system_header_and_footer_bar_spec.rb +++ b/spec/features/display_system_header_and_footer_bar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Display system header and footer bar' do +RSpec.describe 'Display system header and footer bar', feature_category: :not_owned do let(:header_message) { "Foo" } let(:footer_message) { "Bar" } diff --git a/spec/features/error_pages_spec.rb b/spec/features/error_pages_spec.rb index 8dc9e5ade46..6a322fd53d4 100644 --- a/spec/features/error_pages_spec.rb +++ b/spec/features/error_pages_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Error Pages', :js do +RSpec.describe 'Error Pages', :js, feature_category: :error_tracking do let(:user) { create(:user) } let(:project) { create(:project, :public) } diff --git a/spec/features/error_tracking/user_filters_errors_by_status_spec.rb b/spec/features/error_tracking/user_filters_errors_by_status_spec.rb index 2ac43f67f64..168c4f330ca 100644 --- a/spec/features/error_tracking/user_filters_errors_by_status_spec.rb +++ b/spec/features/error_tracking/user_filters_errors_by_status_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'When a user filters Sentry errors by status', :js, :use_clean_rails_memory_store_caching, :sidekiq_inline do +RSpec.describe 'When a user filters Sentry errors by status', :js, :use_clean_rails_memory_store_caching, :sidekiq_inline, +feature_category: :error_tracking do include_context 'sentry error tracking context feature' let_it_be(:issues_response_body) { fixture_file('sentry/issues_sample_response.json') } diff --git a/spec/features/error_tracking/user_searches_sentry_errors_spec.rb b/spec/features/error_tracking/user_searches_sentry_errors_spec.rb index 40718deed75..6026b42f7de 100644 --- a/spec/features/error_tracking/user_searches_sentry_errors_spec.rb +++ b/spec/features/error_tracking/user_searches_sentry_errors_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'When a user searches for Sentry errors', :js, :use_clean_rails_memory_store_caching, :sidekiq_inline do +RSpec.describe 'When a user searches for Sentry errors', :js, :use_clean_rails_memory_store_caching, :sidekiq_inline, +feature_category: :error_tracking do include_context 'sentry error tracking context feature' let_it_be(:issues_response_body) { fixture_file('sentry/issues_sample_response.json') } diff --git a/spec/features/error_tracking/user_sees_error_details_spec.rb b/spec/features/error_tracking/user_sees_error_details_spec.rb index ecbb3fe0412..d7676d90d21 100644 --- a/spec/features/error_tracking/user_sees_error_details_spec.rb +++ b/spec/features/error_tracking/user_sees_error_details_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'View error details page', :js, :use_clean_rails_memory_store_caching, :sidekiq_inline do +RSpec.describe 'View error details page', :js, :use_clean_rails_memory_store_caching, :sidekiq_inline, +feature_category: :error_tracking do include_context 'sentry error tracking context feature' context 'with current user as project owner' do diff --git a/spec/features/error_tracking/user_sees_error_index_spec.rb b/spec/features/error_tracking/user_sees_error_index_spec.rb index 21f9e688e3f..b7dfb6afc18 100644 --- a/spec/features/error_tracking/user_sees_error_index_spec.rb +++ b/spec/features/error_tracking/user_sees_error_index_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'View error index page', :js, :use_clean_rails_memory_store_caching, :sidekiq_inline do +RSpec.describe 'View error index page', :js, :use_clean_rails_memory_store_caching, :sidekiq_inline, +feature_category: :error_tracking do include_context 'sentry error tracking context feature' let_it_be(:issues_response_body) { fixture_file('sentry/issues_sample_response.json') } diff --git a/spec/features/expand_collapse_diffs_spec.rb b/spec/features/expand_collapse_diffs_spec.rb index c3096677a73..1f09b01ddec 100644 --- a/spec/features/expand_collapse_diffs_spec.rb +++ b/spec/features/expand_collapse_diffs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Expand and collapse diffs', :js do +RSpec.describe 'Expand and collapse diffs', :js, feature_category: :source_code_management do let(:branch) { 'expand-collapse-diffs' } let_it_be(:project) { create(:project, :repository) } diff --git a/spec/features/explore/groups_list_spec.rb b/spec/features/explore/groups_list_spec.rb index ba09cc20154..3ffa0dc5b64 100644 --- a/spec/features/explore/groups_list_spec.rb +++ b/spec/features/explore/groups_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Explore Groups page', :js do +RSpec.describe 'Explore Groups page', :js, feature_category: :subgroups do let!(:user) { create :user } let!(:group) { create(:group) } let!(:public_group) { create(:group, :public) } diff --git a/spec/features/explore/groups_spec.rb b/spec/features/explore/groups_spec.rb index 201dc24b359..458f83dffb4 100644 --- a/spec/features/explore/groups_spec.rb +++ b/spec/features/explore/groups_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Explore Groups', :js do +RSpec.describe 'Explore Groups', :js, feature_category: :subgroups do let(:user) { create :user } let(:group) { create :group } let!(:private_project) do diff --git a/spec/features/explore/topics_spec.rb b/spec/features/explore/topics_spec.rb index f0c57c2417a..b5787a2dba8 100644 --- a/spec/features/explore/topics_spec.rb +++ b/spec/features/explore/topics_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Explore Topics' do +RSpec.describe 'Explore Topics', feature_category: :users do context 'when no topics exist' do it 'renders empty message', :aggregate_failures do visit topics_explore_projects_path diff --git a/spec/features/explore/user_explores_projects_spec.rb b/spec/features/explore/user_explores_projects_spec.rb index c082ff1fb0c..f54a51c9ac9 100644 --- a/spec/features/explore/user_explores_projects_spec.rb +++ b/spec/features/explore/user_explores_projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User explores projects' do +RSpec.describe 'User explores projects', feature_category: :users do context 'when some projects exist' do let_it_be(:archived_project) { create(:project, :archived) } let_it_be(:internal_project) { create(:project, :internal) } @@ -35,8 +35,6 @@ RSpec.describe 'User explores projects' do before do sign_in(user) - - stub_feature_flags(project_list_filter_bar: false) end shared_examples 'empty search results' do diff --git a/spec/features/file_uploads/attachment_spec.rb b/spec/features/file_uploads/attachment_spec.rb index 41da0e9fbe0..cff0c0b52b4 100644 --- a/spec/features/file_uploads/attachment_spec.rb +++ b/spec/features/file_uploads/attachment_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload an attachment', :api, :js do +RSpec.describe 'Upload an attachment', :api, :js, feature_category: :projects do include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } diff --git a/spec/features/file_uploads/ci_artifact_spec.rb b/spec/features/file_uploads/ci_artifact_spec.rb index 4f3b6c90ad4..420329cc952 100644 --- a/spec/features/file_uploads/ci_artifact_spec.rb +++ b/spec/features/file_uploads/ci_artifact_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload ci artifact', :api, :js do +RSpec.describe 'Upload ci artifact', :api, :js, feature_category: :build_artifacts do include_context 'file upload requests helpers' let_it_be(:user) { create(:user, :admin) } diff --git a/spec/features/file_uploads/git_lfs_spec.rb b/spec/features/file_uploads/git_lfs_spec.rb index 8d15c5c33f7..6af4bef2ec4 100644 --- a/spec/features/file_uploads/git_lfs_spec.rb +++ b/spec/features/file_uploads/git_lfs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload a git lfs object', :js do +RSpec.describe 'Upload a git lfs object', :js, feature_category: :source_code_management do include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } diff --git a/spec/features/file_uploads/graphql_add_design_spec.rb b/spec/features/file_uploads/graphql_add_design_spec.rb index 17fbf5f6838..0b61c952b55 100644 --- a/spec/features/file_uploads/graphql_add_design_spec.rb +++ b/spec/features/file_uploads/graphql_add_design_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload a design through graphQL', :js do +RSpec.describe 'Upload a design through graphQL', :js, feature_category: :design_management do include_context 'file upload requests helpers' let_it_be(:query) do diff --git a/spec/features/file_uploads/group_import_spec.rb b/spec/features/file_uploads/group_import_spec.rb index a8592f99bd6..f5082e31c06 100644 --- a/spec/features/file_uploads/group_import_spec.rb +++ b/spec/features/file_uploads/group_import_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload a group export archive', :api, :js do +RSpec.describe 'Upload a group export archive', :api, :js, feature_category: :subgroups do include_context 'file upload requests helpers' let_it_be(:user) { create(:user, :admin) } diff --git a/spec/features/file_uploads/maven_package_spec.rb b/spec/features/file_uploads/maven_package_spec.rb index 70302142fa2..8a8bac53613 100644 --- a/spec/features/file_uploads/maven_package_spec.rb +++ b/spec/features/file_uploads/maven_package_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload a maven package', :api, :js do +RSpec.describe 'Upload a maven package', :api, :js, feature_category: :package_registry do include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } diff --git a/spec/features/file_uploads/multipart_invalid_uploads_spec.rb b/spec/features/file_uploads/multipart_invalid_uploads_spec.rb index cff8b4e61a5..c4c5eb6b74b 100644 --- a/spec/features/file_uploads/multipart_invalid_uploads_spec.rb +++ b/spec/features/file_uploads/multipart_invalid_uploads_spec.rb @@ -2,11 +2,11 @@ require 'spec_helper' -RSpec.describe 'Invalid uploads that must be rejected', :api, :js do +RSpec.describe 'Invalid uploads that must be rejected', :api, :js, feature_category: :package_registry do include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } - let_it_be(:user) { create(:user, :admin) } + let_it_be(:user) { project.owner } let_it_be(:personal_access_token) { create(:personal_access_token, user: user) } context 'invalid upload key', :capybara_ignore_server_errors do diff --git a/spec/features/file_uploads/nuget_package_spec.rb b/spec/features/file_uploads/nuget_package_spec.rb index cbffd34d4ab..0dc48114e9a 100644 --- a/spec/features/file_uploads/nuget_package_spec.rb +++ b/spec/features/file_uploads/nuget_package_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload a nuget package', :api, :js do +RSpec.describe 'Upload a nuget package', :api, :js, feature_category: :package_registry do include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } diff --git a/spec/features/file_uploads/project_import_spec.rb b/spec/features/file_uploads/project_import_spec.rb index 82b6f490d2a..c261834206d 100644 --- a/spec/features/file_uploads/project_import_spec.rb +++ b/spec/features/file_uploads/project_import_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload a project export archive', :api, :js do +RSpec.describe 'Upload a project export archive', :api, :js, feature_category: :projects do include_context 'file upload requests helpers' let_it_be(:user) { create(:user, :admin) } diff --git a/spec/features/file_uploads/rubygem_package_spec.rb b/spec/features/file_uploads/rubygem_package_spec.rb index f91fb407b28..9c4512e4eab 100644 --- a/spec/features/file_uploads/rubygem_package_spec.rb +++ b/spec/features/file_uploads/rubygem_package_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload a RubyGems package', :api, :js do +RSpec.describe 'Upload a RubyGems package', :api, :js, feature_category: :package_registry do include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } diff --git a/spec/features/file_uploads/user_avatar_spec.rb b/spec/features/file_uploads/user_avatar_spec.rb index 34cfb4a4128..06501e09866 100644 --- a/spec/features/file_uploads/user_avatar_spec.rb +++ b/spec/features/file_uploads/user_avatar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Upload a user avatar', :js do +RSpec.describe 'Upload a user avatar', :js, feature_category: :users do let_it_be(:user, reload: true) { create(:user) } let(:file) { fixture_file_upload('spec/fixtures/banana_sample.gif') } diff --git a/spec/features/frequently_visited_projects_and_groups_spec.rb b/spec/features/frequently_visited_projects_and_groups_spec.rb index 7fbbc4dfc85..50e20910e16 100644 --- a/spec/features/frequently_visited_projects_and_groups_spec.rb +++ b/spec/features/frequently_visited_projects_and_groups_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Frequently visited items', :js do +RSpec.describe 'Frequently visited items', :js, feature_category: :not_owned do include Spec::Support::Helpers::Features::TopNavSpecHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/gitlab_experiments_spec.rb b/spec/features/gitlab_experiments_spec.rb index af14b6e2e95..c1417f6f7c5 100644 --- a/spec/features/gitlab_experiments_spec.rb +++ b/spec/features/gitlab_experiments_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Gitlab::Experiment", :js do +RSpec.describe "Gitlab::Experiment", :js, feature_category: :experimentation_activation do # This is part of a set of tests that ensure that tracking remains # consistent at the front end layer. Since we don't want to actually # introduce an experiment in real code, we're going to simulate it diff --git a/spec/features/global_search_spec.rb b/spec/features/global_search_spec.rb index 2e63ec2d4f2..7c55551e9c3 100644 --- a/spec/features/global_search_spec.rb +++ b/spec/features/global_search_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Global search', :js do +RSpec.describe 'Global search', :js, feature_category: :global_search do include AfterNextHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/graphiql_spec.rb b/spec/features/graphiql_spec.rb index 7729cdaa362..34c1797b6ba 100644 --- a/spec/features/graphiql_spec.rb +++ b/spec/features/graphiql_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'GraphiQL' do +RSpec.describe 'GraphiQL', feature_category: :integrations do context 'without relative_url_root' do before do visit '/-/graphql-explorer' diff --git a/spec/features/graphql_known_operations_spec.rb b/spec/features/graphql_known_operations_spec.rb index 80214307be3..5b2205a4440 100644 --- a/spec/features/graphql_known_operations_spec.rb +++ b/spec/features/graphql_known_operations_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' # We need to distinguish between known and unknown GraphQL operations. This spec # tests that we set up Gitlab::Graphql::KnownOperations.default which requires # integration of FE queries, webpack plugin, and BE. -RSpec.describe 'Graphql known operations', :js do +RSpec.describe 'Graphql known operations', :js, feature_category: :integrations do around do |example| # Let's make sure we aren't receiving or leaving behind any side-effects # https://gitlab.com/gitlab-org/gitlab/-/jobs/1743294100 diff --git a/spec/features/group_variables_spec.rb b/spec/features/group_variables_spec.rb index e2c659d7dfe..117f50aefc6 100644 --- a/spec/features/group_variables_spec.rb +++ b/spec/features/group_variables_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group variables', :js do +RSpec.describe 'Group variables', :js, feature_category: :pipeline_authoring do let(:user) { create(:user) } let(:group) { create(:group) } let!(:variable) { create(:ci_group_variable, key: 'test_key', value: 'test_value', masked: true, group: group) } diff --git a/spec/features/groups/activity_spec.rb b/spec/features/groups/activity_spec.rb index 5bac80959b1..7e592b3f48b 100644 --- a/spec/features/groups/activity_spec.rb +++ b/spec/features/groups/activity_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group activity page' do +RSpec.describe 'Group activity page', feature_category: :subgroups do let(:user) { create(:group_member, :developer, user: create(:user), group: group).user } let(:group) { create(:group) } let(:path) { activity_group_path(group) } diff --git a/spec/features/groups/board_sidebar_spec.rb b/spec/features/groups/board_sidebar_spec.rb index 10ef28f3fbc..8216bc3249d 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 do +RSpec.describe 'Group Issue Boards', :js, feature_category: :subgroups do include BoardHelpers let(:group) { create(:group) } diff --git a/spec/features/groups/board_spec.rb b/spec/features/groups/board_spec.rb index aece6d790b5..11ec38f637b 100644 --- a/spec/features/groups/board_spec.rb +++ b/spec/features/groups/board_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group Boards' do +RSpec.describe 'Group Boards', feature_category: :team_planning do include DragTo include MobileHelpers include BoardHelpers @@ -35,7 +35,7 @@ RSpec.describe 'Group Boards' do page.within("[data-testid='project-select-dropdown']") do find('button.gl-dropdown-toggle').click - find('.gl-new-dropdown-item button').click + find('.gl-dropdown-item button').click end click_button 'Create issue' diff --git a/spec/features/groups/clusters/user_spec.rb b/spec/features/groups/clusters/user_spec.rb index 6b512323d4d..3e565dd8eab 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 do +RSpec.describe 'User Cluster', :js, feature_category: :users do include GoogleApi::CloudPlatformHelpers let(:group) { create(:group) } diff --git a/spec/features/groups/container_registry_spec.rb b/spec/features/groups/container_registry_spec.rb index 7bef2dc9416..11f94967aaf 100644 --- a/spec/features/groups/container_registry_spec.rb +++ b/spec/features/groups/container_registry_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Container Registry', :js do +RSpec.describe 'Container Registry', :js, feature_category: :container_registry do let(:user) { create(:user) } let(:group) { create(:group) } let(:project) { create(:project, namespace: group) } @@ -97,8 +97,6 @@ RSpec.describe 'Container Registry', :js do expect(find('.modal .modal-title')).to have_content _('Remove tag') find('.modal .modal-footer .btn-danger').click end - - it_behaves_like 'rejecting tags destruction for an importing repository on', tags: ['latest'] end end diff --git a/spec/features/groups/crm/contacts/create_spec.rb b/spec/features/groups/crm/contacts/create_spec.rb index b10b2afe35c..860cadd322d 100644 --- a/spec/features/groups/crm/contacts/create_spec.rb +++ b/spec/features/groups/crm/contacts/create_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Create a CRM contact', :js do +RSpec.describe 'Create a CRM contact', :js, feature_category: :service_desk do let(:user) { create(:user) } let(:group) { create(:group, :crm_enabled) } let!(:organization) { create(:organization, group: group, name: 'GitLab') } diff --git a/spec/features/groups/dependency_proxy_for_containers_spec.rb b/spec/features/groups/dependency_proxy_for_containers_spec.rb index ae721e7b91f..c0456140291 100644 --- a/spec/features/groups/dependency_proxy_for_containers_spec.rb +++ b/spec/features/groups/dependency_proxy_for_containers_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group Dependency Proxy for containers', :js do +RSpec.describe 'Group Dependency Proxy for containers', :js, feature_category: :dependency_proxy do include DependencyProxyHelpers include_context 'file upload requests helpers' diff --git a/spec/features/groups/dependency_proxy_spec.rb b/spec/features/groups/dependency_proxy_spec.rb index af9c4a40729..05984d40ea6 100644 --- a/spec/features/groups/dependency_proxy_spec.rb +++ b/spec/features/groups/dependency_proxy_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group Dependency Proxy' do +RSpec.describe 'Group Dependency Proxy', feature_category: :dependency_proxy do let(:owner) { create(:user) } let(:reporter) { create(:user) } let(:group) { create(:group) } diff --git a/spec/features/groups/empty_states_spec.rb b/spec/features/groups/empty_states_spec.rb index f1a8f97461a..a37c40f50e0 100644 --- a/spec/features/groups/empty_states_spec.rb +++ b/spec/features/groups/empty_states_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group empty states' do +RSpec.describe 'Group empty states', feature_category: :subgroups do let(:group) { create(:group) } let(:user) { create(:group_member, :developer, user: create(:user), group: group).user } diff --git a/spec/features/groups/group_page_with_external_authorization_service_spec.rb b/spec/features/groups/group_page_with_external_authorization_service_spec.rb index 59a7feb813b..dce5b67d694 100644 --- a/spec/features/groups/group_page_with_external_authorization_service_spec.rb +++ b/spec/features/groups/group_page_with_external_authorization_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'The group page' do +RSpec.describe 'The group page', feature_category: :subgroups do include ExternalAuthorizationServiceHelpers let(:user) { create(:user) } diff --git a/spec/features/groups/group_runners_spec.rb b/spec/features/groups/group_runners_spec.rb index c9d1c69e9e1..ab53ef7c470 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" do +RSpec.describe "Group Runners", feature_category: :runner_fleet do include Spec::Support::Helpers::Features::RunnersHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/groups/group_settings_spec.rb b/spec/features/groups/group_settings_spec.rb index 81ff0088e1e..fe1b0909c06 100644 --- a/spec/features/groups/group_settings_spec.rb +++ b/spec/features/groups/group_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Edit group settings' do +RSpec.describe 'Edit group settings', feature_category: :subgroups do let(:user) { create(:user) } let(:group) { create(:group, path: 'foo') } @@ -147,7 +147,7 @@ RSpec.describe 'Edit group settings' do selected_group.add_owner(user) end - it 'can successfully transfer the group' do + it 'can successfully transfer the group', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/384966' do visit edit_group_path(selected_group) page.within('[data-testid="transfer-locations-dropdown"]') do diff --git a/spec/features/groups/import_export/connect_instance_spec.rb b/spec/features/groups/import_export/connect_instance_spec.rb index ae03e64cf59..11cc4bb9b37 100644 --- a/spec/features/groups/import_export/connect_instance_spec.rb +++ b/spec/features/groups/import_export/connect_instance_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Import/Export - Connect to another instance', :js do +RSpec.describe 'Import/Export - Connect to another instance', :js, feature_category: :importers do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } @@ -10,74 +10,96 @@ RSpec.describe 'Import/Export - Connect to another instance', :js do group.add_owner(user) end - before do - gitlab_sign_in(user) + context 'when importing group by direct transfer is enabled' do + before do + stub_application_setting(bulk_import_enabled: true) - visit new_group_path + open_import_group + end - click_link 'Import group' - end + context 'when the user provides valid credentials' do + source_url = 'https://gitlab.com' - context 'when the user provides valid credentials' do - source_url = 'https://gitlab.com' + include_context 'bulk imports requests context', source_url - include_context 'bulk imports requests context', source_url + it 'successfully connects to remote instance' do + pat = 'demo-pat' - it 'successfully connects to remote instance' do - pat = 'demo-pat' + expect(page).to have_content 'Import groups from another instance of GitLab' + expect(page).to have_content 'Not all related objects are migrated' - expect(page).to have_content 'Import groups from another instance of GitLab' - expect(page).to have_content 'Not all related objects are migrated' + fill_in :bulk_import_gitlab_url, with: source_url + fill_in :bulk_import_gitlab_access_token, with: pat - fill_in :bulk_import_gitlab_url, with: source_url - fill_in :bulk_import_gitlab_access_token, with: pat + click_on 'Connect instance' - click_on 'Connect instance' + expect(page).to have_content 'Showing 1-1 of 42 groups that you own from %{url}' % { url: source_url } + expect(page).to have_content 'stub-group' - expect(page).to have_content 'Showing 1-1 of 42 groups that you own from %{url}' % { url: source_url } - expect(page).to have_content 'stub-group' + visit '/' - visit '/' + wait_for_all_requests + end + end + + context 'when the user provides invalid url' do + it 'reports an error' do + source_url = 'invalid-url' + pat = 'demo-pat' + + fill_in :bulk_import_gitlab_url, with: source_url + fill_in :bulk_import_gitlab_access_token, with: pat - wait_for_all_requests + click_on 'Connect instance' + + expect(page).to have_content 'Specified URL cannot be used' + end end - end - context 'when the user provides invalid url' do - it 'reports an error' do - source_url = 'invalid-url' - pat = 'demo-pat' + context 'when the user does not fill in source URL' do + it 'reports an error' do + pat = 'demo-pat' - fill_in :bulk_import_gitlab_url, with: source_url - fill_in :bulk_import_gitlab_access_token, with: pat + fill_in :bulk_import_gitlab_access_token, with: pat - click_on 'Connect instance' + click_on 'Connect instance' - expect(page).to have_content 'Specified URL cannot be used' + expect(page).to have_content 'Please fill in GitLab source URL' + end end - end - context 'when the user does not fill in source URL' do - it 'reports an error' do - pat = 'demo-pat' + context 'when the user does not fill in access token' do + it 'reports an error' do + source_url = 'https://gitlab.com' - fill_in :bulk_import_gitlab_access_token, with: pat + fill_in :bulk_import_gitlab_url, with: source_url - click_on 'Connect instance' + click_on 'Connect instance' - expect(page).to have_content 'Please fill in GitLab source URL' + expect(page).to have_content 'Please fill in your personal access token' + end end end - context 'when the user does not fill in access token' do - it 'reports an error' do - source_url = 'https://gitlab.com' - - fill_in :bulk_import_gitlab_url, with: source_url + context 'when importing group by direct transfer is disabled' do + before do + stub_application_setting(bulk_import_enabled: false) - click_on 'Connect instance' + open_import_group + end - expect(page).to have_content 'Please fill in your personal access token' + it 'renders fields and button disabled' do + expect(page).to have_field('GitLab source URL', disabled: true) + expect(page).to have_field('Personal access token', disabled: true) + expect(page).to have_button('Connect instance', disabled: true) end end + + def open_import_group + gitlab_sign_in(user) + + visit new_group_path + + click_link 'Import group' + end end diff --git a/spec/features/groups/import_export/export_file_spec.rb b/spec/features/groups/import_export/export_file_spec.rb index e3cb1ad77a7..885cfa0f595 100644 --- a/spec/features/groups/import_export/export_file_spec.rb +++ b/spec/features/groups/import_export/export_file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group Export', :js do +RSpec.describe 'Group Export', :js, feature_category: :importers do include ExportFileHelper let_it_be(:user) { create(:user) } diff --git a/spec/features/groups/import_export/import_file_spec.rb b/spec/features/groups/import_export/import_file_spec.rb index b69b8bf2c19..f66062b9ac3 100644 --- a/spec/features/groups/import_export/import_file_spec.rb +++ b/spec/features/groups/import_export/import_file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Import/Export - Group Import', :js do +RSpec.describe 'Import/Export - Group Import', :js, feature_category: :importers do let_it_be(:user) { create(:user) } let_it_be(:import_path) { "#{Dir.tmpdir}/group_import_spec" } diff --git a/spec/features/groups/import_export/migration_history_spec.rb b/spec/features/groups/import_export/migration_history_spec.rb index 243bdcc13a9..f851c5e2ec5 100644 --- a/spec/features/groups/import_export/migration_history_spec.rb +++ b/spec/features/groups/import_export/migration_history_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Import/Export - GitLab migration history', :js do +RSpec.describe 'Import/Export - GitLab migration history', :js, feature_category: :importers do let_it_be(:user) { create(:user) } let_it_be(:user_import_1) { create(:bulk_import, user: user) } diff --git a/spec/features/groups/integrations/user_activates_mattermost_slash_command_spec.rb b/spec/features/groups/integrations/user_activates_mattermost_slash_command_spec.rb index 02aa418cd73..fbdd760f7fb 100644 --- a/spec/features/groups/integrations/user_activates_mattermost_slash_command_spec.rb +++ b/spec/features/groups/integrations/user_activates_mattermost_slash_command_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates the group-level Mattermost Slash Command integration', :js do +RSpec.describe 'User activates the group-level Mattermost Slash Command integration', :js, feature_category: :build do include_context 'group integration activation' before do diff --git a/spec/features/groups/issues_spec.rb b/spec/features/groups/issues_spec.rb index d4e88505118..00c0d4c3ebe 100644 --- a/spec/features/groups/issues_spec.rb +++ b/spec/features/groups/issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group issues page' do +RSpec.describe 'Group issues page', feature_category: :subgroups do include FilteredSearchHelpers include DragTo @@ -11,6 +11,10 @@ RSpec.describe 'Group issues page' do let(:project_with_issues_disabled) { create(:project, :issues_disabled, group: group) } let(:path) { issues_group_path(group) } + before do + stub_feature_flags(or_issuable_queries: false) + end + context 'with shared examples', :js do let(:issuable) { create(:issue, project: project, title: "this is my created issuable") } diff --git a/spec/features/groups/labels/create_spec.rb b/spec/features/groups/labels/create_spec.rb index 19433e612ff..5b57e670c1d 100644 --- a/spec/features/groups/labels/create_spec.rb +++ b/spec/features/groups/labels/create_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Create a group label' do +RSpec.describe 'Create a group label', feature_category: :team_planning do let(:user) { create(:user) } let(:group) { create(:group) } diff --git a/spec/features/groups/labels/edit_spec.rb b/spec/features/groups/labels/edit_spec.rb index cf1729af97d..2cbe44e11bf 100644 --- a/spec/features/groups/labels/edit_spec.rb +++ b/spec/features/groups/labels/edit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Edit group label' do +RSpec.describe 'Edit group label', feature_category: :team_planning do include Spec::Support::Helpers::ModalHelpers let(:user) { create(:user) } diff --git a/spec/features/groups/labels/index_spec.rb b/spec/features/groups/labels/index_spec.rb index 68f03368989..ea27fa2c5d9 100644 --- a/spec/features/groups/labels/index_spec.rb +++ b/spec/features/groups/labels/index_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group labels' do +RSpec.describe 'Group labels', feature_category: :team_planning do let(:user) { create(:user) } let(:group) { create(:group) } let!(:label) { create(:group_label, group: group) } diff --git a/spec/features/groups/labels/search_labels_spec.rb b/spec/features/groups/labels/search_labels_spec.rb index fbb0acfb923..478d35951f9 100644 --- a/spec/features/groups/labels/search_labels_spec.rb +++ b/spec/features/groups/labels/search_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Search for labels', :js do +RSpec.describe 'Search for labels', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:group) { create(:group) } let!(:label1) { create(:group_label, title: 'Foo', description: 'Lorem ipsum', group: group) } diff --git a/spec/features/groups/labels/sort_labels_spec.rb b/spec/features/groups/labels/sort_labels_spec.rb index 9d05703aae6..c2410246fe1 100644 --- a/spec/features/groups/labels/sort_labels_spec.rb +++ b/spec/features/groups/labels/sort_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Sort labels', :js do +RSpec.describe 'Sort labels', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:group) { create(:group) } let!(:label1) { create(:group_label, title: 'Foo', description: 'Lorem ipsum', group: group) } diff --git a/spec/features/groups/labels/subscription_spec.rb b/spec/features/groups/labels/subscription_spec.rb index 231c4b33bee..4d391074e62 100644 --- a/spec/features/groups/labels/subscription_spec.rb +++ b/spec/features/groups/labels/subscription_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Labels subscription' do +RSpec.describe 'Labels subscription', feature_category: :team_planning do let(:user) { create(:user) } let(:group) { create(:group) } let!(:label1) { create(:group_label, group: group, title: 'foo') } diff --git a/spec/features/groups/labels/user_sees_links_to_issuables_spec.rb b/spec/features/groups/labels/user_sees_links_to_issuables_spec.rb index b0508633065..4caf5ba5314 100644 --- a/spec/features/groups/labels/user_sees_links_to_issuables_spec.rb +++ b/spec/features/groups/labels/user_sees_links_to_issuables_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Labels > User sees links to issuables' do +RSpec.describe 'Groups > Labels > User sees links to issuables', feature_category: :team_planning do let_it_be(:group) { create(:group, :public) } before do diff --git a/spec/features/groups/members/filter_members_spec.rb b/spec/features/groups/members/filter_members_spec.rb index 917b35659a6..dc33bb11bea 100644 --- a/spec/features/groups/members/filter_members_spec.rb +++ b/spec/features/groups/members/filter_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Filter members', :js do +RSpec.describe 'Groups > Members > Filter members', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers let(:user) { create(:user) } diff --git a/spec/features/groups/members/leave_group_spec.rb b/spec/features/groups/members/leave_group_spec.rb index 66f251c859a..cfb1b24bccb 100644 --- a/spec/features/groups/members/leave_group_spec.rb +++ b/spec/features/groups/members/leave_group_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Leave group' do +RSpec.describe 'Groups > Members > Leave group', feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/groups/members/list_members_spec.rb b/spec/features/groups/members/list_members_spec.rb index b81949da85d..1aea5a76b41 100644 --- a/spec/features/groups/members/list_members_spec.rb +++ b/spec/features/groups/members/list_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > List members', :js do +RSpec.describe 'Groups > Members > List members', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers let(:user1) { create(:user, name: 'John Doe') } diff --git a/spec/features/groups/members/manage_groups_spec.rb b/spec/features/groups/members/manage_groups_spec.rb index e4252e2f3aa..ee8786a2e36 100644 --- a/spec/features/groups/members/manage_groups_spec.rb +++ b/spec/features/groups/members/manage_groups_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Manage groups', :js do +RSpec.describe 'Groups > Members > Manage groups', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/groups/members/manage_members_spec.rb b/spec/features/groups/members/manage_members_spec.rb index 5f28afc23f1..4211f2b6265 100644 --- a/spec/features/groups/members/manage_members_spec.rb +++ b/spec/features/groups/members/manage_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Manage members' do +RSpec.describe 'Groups > Members > Manage members', feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper include Spec::Support::Helpers::ModalHelpers @@ -72,7 +72,7 @@ RSpec.describe 'Groups > Members > Manage members' do visit group_group_members_path(group) - invite_member(user1.name, role: 'Reporter', refresh: false) + invite_member(user1.name, role: 'Reporter') invite_modal = page.find(invite_modal_selector) expect(invite_modal).to have_content("not authorized to update member") 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 86185b8dd32..e9f80b05fa7 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 @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Owner adds member with expiration date', :js do +RSpec.describe 'Groups > Members > Owner adds member with expiration date', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper diff --git a/spec/features/groups/members/master_manages_access_requests_spec.rb b/spec/features/groups/members/master_manages_access_requests_spec.rb index 2a17e7d2a5c..951dc59feca 100644 --- a/spec/features/groups/members/master_manages_access_requests_spec.rb +++ b/spec/features/groups/members/master_manages_access_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Maintainer manages access requests' do +RSpec.describe 'Groups > Members > Maintainer manages access requests', feature_category: :subgroups do it_behaves_like 'Maintainer manages access requests' do let(:entity) { create(:group, :public) } let(:members_page_path) { group_group_members_path(entity) } diff --git a/spec/features/groups/members/request_access_spec.rb b/spec/features/groups/members/request_access_spec.rb index f806c7d3704..35eb085a195 100644 --- a/spec/features/groups/members/request_access_spec.rb +++ b/spec/features/groups/members/request_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Request access' do +RSpec.describe 'Groups > Members > Request access', feature_category: :subgroups do let(:user) { create(:user) } let(:owner) { create(:user) } let(:group) { create(:group, :public) } diff --git a/spec/features/groups/members/search_members_spec.rb b/spec/features/groups/members/search_members_spec.rb index fe5fed307d7..6b2896b194c 100644 --- a/spec/features/groups/members/search_members_spec.rb +++ b/spec/features/groups/members/search_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Search group member', :js do +RSpec.describe 'Search group member', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers let(:user) { create :user } diff --git a/spec/features/groups/members/sort_members_spec.rb b/spec/features/groups/members/sort_members_spec.rb index bf8e64fa1e2..4e9adda5f2b 100644 --- a/spec/features/groups/members/sort_members_spec.rb +++ b/spec/features/groups/members/sort_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Sort members', :js do +RSpec.describe 'Groups > Members > Sort members', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers let(:owner) { create(:user, name: 'John Doe', created_at: 5.days.ago, last_activity_on: Date.today) } diff --git a/spec/features/groups/members/tabs_spec.rb b/spec/features/groups/members/tabs_spec.rb index 2e9f332c0d6..2dc116842b3 100644 --- a/spec/features/groups/members/tabs_spec.rb +++ b/spec/features/groups/members/tabs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > Members > Tabs', :js do +RSpec.describe 'Groups > Members > Tabs', :js, feature_category: :subgroups do using RSpec::Parameterized::TableSyntax shared_examples 'active "Members" tab' do diff --git a/spec/features/groups/merge_requests_spec.rb b/spec/features/groups/merge_requests_spec.rb index 296b839c8fc..87f1f422e90 100644 --- a/spec/features/groups/merge_requests_spec.rb +++ b/spec/features/groups/merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group merge requests page' do +RSpec.describe 'Group merge requests page', feature_category: :code_review do include FilteredSearchHelpers let(:path) { merge_requests_group_path(group) } diff --git a/spec/features/groups/milestone_spec.rb b/spec/features/groups/milestone_spec.rb index 92a40459737..a70a1e2e70b 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' do +RSpec.describe 'Group milestones', feature_category: :subgroups 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 } diff --git a/spec/features/groups/milestones/gfm_autocomplete_spec.rb b/spec/features/groups/milestones/gfm_autocomplete_spec.rb index 1fec6091f1e..8df097dde88 100644 --- a/spec/features/groups/milestones/gfm_autocomplete_spec.rb +++ b/spec/features/groups/milestones/gfm_autocomplete_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'GFM autocomplete', :js do +RSpec.describe 'GFM autocomplete', :js, feature_category: :team_planning do let_it_be(:user) { create(:user, name: '💃speciąl someone💃', username: 'someone.special') } let_it_be(:group) { create(:group, name: 'Ancestor') } let_it_be(:project) { create(:project, :repository, group: group) } diff --git a/spec/features/groups/milestones_sorting_spec.rb b/spec/features/groups/milestones_sorting_spec.rb index 6f3fc72775f..5543938957a 100644 --- a/spec/features/groups/milestones_sorting_spec.rb +++ b/spec/features/groups/milestones_sorting_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Milestones sorting', :js do +RSpec.describe 'Milestones sorting', :js, feature_category: :team_planning do let(:group) { create(:group) } let!(:project) { create(:project_empty_repo, group: group) } let!(:other_project) { create(:project_empty_repo, group: group) } diff --git a/spec/features/groups/navbar_spec.rb b/spec/features/groups/navbar_spec.rb index b3fb563a202..180ccab78bc 100644 --- a/spec/features/groups/navbar_spec.rb +++ b/spec/features/groups/navbar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group navbar' do +RSpec.describe 'Group navbar', feature_category: :navigation do include NavbarStructureHelper include WikiHelpers diff --git a/spec/features/groups/new_group_page_spec.rb b/spec/features/groups/new_group_page_spec.rb index 6a8af9c31fd..662ef734299 100644 --- a/spec/features/groups/new_group_page_spec.rb +++ b/spec/features/groups/new_group_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New group page', :js do +RSpec.describe 'New group page', :js, feature_category: :subgroups do let(:user) { create(:user) } let(:group) { create(:group) } diff --git a/spec/features/groups/packages_spec.rb b/spec/features/groups/packages_spec.rb index 26338b03349..dd238657fbc 100644 --- a/spec/features/groups/packages_spec.rb +++ b/spec/features/groups/packages_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group Packages' do +RSpec.describe 'Group Packages', feature_category: :package_registry do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } diff --git a/spec/features/groups/settings/access_tokens_spec.rb b/spec/features/groups/settings/access_tokens_spec.rb index 198d3a40df2..1bee3be1ddb 100644 --- a/spec/features/groups/settings/access_tokens_spec.rb +++ b/spec/features/groups/settings/access_tokens_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group > Settings > Access Tokens', :js do +RSpec.describe 'Group > Settings > Access Tokens', :js, feature_category: :authentication_and_authorization do include Spec::Support::Helpers::ModalHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/groups/settings/ci_cd_spec.rb b/spec/features/groups/settings/ci_cd_spec.rb index 50c481c115c..a1acb73178b 100644 --- a/spec/features/groups/settings/ci_cd_spec.rb +++ b/spec/features/groups/settings/ci_cd_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group CI/CD settings' do +RSpec.describe 'Group CI/CD settings', feature_category: :continuous_integration do include WaitForRequests let_it_be(:user) { create(:user) } @@ -23,11 +23,6 @@ RSpec.describe 'Group CI/CD settings' do visit group_settings_ci_cd_path(group) end - it 'displays the new group runners view banner' do - expect(page).to have_content(s_('Runners|New group runners view')) - expect(page).to have_link(href: group_runners_path(group)) - end - it 'has "Enable shared runners for this group" toggle', :js do expect(shared_runners_toggle).to have_content(_('Enable shared runners for this group')) end diff --git a/spec/features/groups/settings/group_badges_spec.rb b/spec/features/groups/settings/group_badges_spec.rb index 5bf736cc7ce..07c8451f8fb 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' do +RSpec.describe 'Group Badges', feature_category: :subgroups do include WaitForRequests let(:user) { create(:user) } diff --git a/spec/features/groups/settings/manage_applications_spec.rb b/spec/features/groups/settings/manage_applications_spec.rb index 277471cb304..e7b87cda506 100644 --- a/spec/features/groups/settings/manage_applications_spec.rb +++ b/spec/features/groups/settings/manage_applications_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User manages applications' do +RSpec.describe 'User manages applications', feature_category: :subgroups do let_it_be(:group) { create(:group) } let_it_be(:user) { create(:user) } let_it_be(:new_application_path) { group_settings_applications_path(group) } diff --git a/spec/features/groups/settings/packages_and_registries_spec.rb b/spec/features/groups/settings/packages_and_registries_spec.rb index 7f3f5775559..60aad8452ce 100644 --- a/spec/features/groups/settings/packages_and_registries_spec.rb +++ b/spec/features/groups/settings/packages_and_registries_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group Package and registry settings' do +RSpec.describe 'Group Package and registry settings', feature_category: :package_registry do include WaitForRequests let(:user) { create(:user) } diff --git a/spec/features/groups/settings/repository_spec.rb b/spec/features/groups/settings/repository_spec.rb index cd7dcbdb28d..c65a8268a18 100644 --- a/spec/features/groups/settings/repository_spec.rb +++ b/spec/features/groups/settings/repository_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group Repository settings', :js do +RSpec.describe 'Group Repository settings', :js, feature_category: :source_code_management do include WaitForRequests let_it_be(:user) { create(:user) } diff --git a/spec/features/groups/settings/user_searches_in_settings_spec.rb b/spec/features/groups/settings/user_searches_in_settings_spec.rb index fe0dd7cec9a..374ac236e20 100644 --- a/spec/features/groups/settings/user_searches_in_settings_spec.rb +++ b/spec/features/groups/settings/user_searches_in_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches group settings', :js do +RSpec.describe 'User searches group settings', :js, feature_category: :subgroups do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } diff --git a/spec/features/groups/share_lock_spec.rb b/spec/features/groups/share_lock_spec.rb index d8207899e24..2f5a5e6ba16 100644 --- a/spec/features/groups/share_lock_spec.rb +++ b/spec/features/groups/share_lock_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group share with group lock' do +RSpec.describe 'Group share with group lock', feature_category: :subgroups do let(:root_owner) { create(:user) } let(:root_group) { create(:group) } diff --git a/spec/features/groups/show_spec.rb b/spec/features/groups/show_spec.rb index d814906a274..c0af6080d0f 100644 --- a/spec/features/groups/show_spec.rb +++ b/spec/features/groups/show_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group show page' do +RSpec.describe 'Group show page', feature_category: :subgroups do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } diff --git a/spec/features/groups/user_browse_projects_group_page_spec.rb b/spec/features/groups/user_browse_projects_group_page_spec.rb index 73fde7cafe5..38b879bb5b2 100644 --- a/spec/features/groups/user_browse_projects_group_page_spec.rb +++ b/spec/features/groups/user_browse_projects_group_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User browse group projects page' do +RSpec.describe 'User browse group projects page', feature_category: :subgroups do let(:user) { create :user } let(:group) { create :group } diff --git a/spec/features/groups/user_sees_package_sidebar_spec.rb b/spec/features/groups/user_sees_package_sidebar_spec.rb index ee216488232..64422f5cca5 100644 --- a/spec/features/groups/user_sees_package_sidebar_spec.rb +++ b/spec/features/groups/user_sees_package_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > sidebar' do +RSpec.describe 'Groups > sidebar', feature_category: :subgroups do let(:user) { create(:user) } let(:group) { create(:group) } diff --git a/spec/features/groups/user_sees_users_dropdowns_in_issuables_list_spec.rb b/spec/features/groups/user_sees_users_dropdowns_in_issuables_list_spec.rb index 4e4c0e509b0..e5e30ed1a55 100644 --- a/spec/features/groups/user_sees_users_dropdowns_in_issuables_list_spec.rb +++ b/spec/features/groups/user_sees_users_dropdowns_in_issuables_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Groups > User sees users dropdowns in issuables list', :js do +RSpec.describe 'Groups > User sees users dropdowns in issuables list', :js, feature_category: :subgroups do include FilteredSearchHelpers let(:group) { create(:group) } @@ -11,6 +11,7 @@ RSpec.describe 'Groups > User sees users dropdowns in issuables list', :js do let!(:project) { create(:project, group: group) } before do + stub_feature_flags(or_issuable_queries: false) group.add_developer(user_in_dropdown) sign_in(user_in_dropdown) end diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb index 4e02f6f7ca2..8806d1c2219 100644 --- a/spec/features/groups_spec.rb +++ b/spec/features/groups_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group' do +RSpec.describe 'Group', feature_category: :subgroups do let(:user) { create(:user) } before do @@ -350,10 +350,10 @@ RSpec.describe 'Group' do visit path end - it_behaves_like 'dirty submit form', [{ form: '.js-general-settings-form', input: 'input[name="group[name]"]' }, - { form: '.js-general-settings-form', input: '#group_visibility_level_0' }, - { form: '.js-general-permissions-form', input: '#group_request_access_enabled' }, - { form: '.js-general-permissions-form', input: 'input[name="group[two_factor_grace_period]"]' }] + it_behaves_like 'dirty submit form', [{ form: '.js-general-settings-form', input: 'input[name="group[name]"]', submit: 'button[type="submit"]' }, + { form: '.js-general-settings-form', input: '#group_visibility_level_0', submit: 'button[type="submit"]' }, + { form: '.js-general-permissions-form', input: '#group_request_access_enabled', submit: 'button[type="submit"]' }, + { form: '.js-general-permissions-form', input: 'input[name="group[two_factor_grace_period]"]', submit: 'button[type="submit"]' }] it 'saves new settings' do page.within('.gs-general') do diff --git a/spec/features/help_dropdown_spec.rb b/spec/features/help_dropdown_spec.rb index a9c014a9408..a5c9221ad26 100644 --- a/spec/features/help_dropdown_spec.rb +++ b/spec/features/help_dropdown_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Help Dropdown", :js do +RSpec.describe "Help Dropdown", :js, feature_category: :not_owned do let_it_be(:user) { create(:user) } let_it_be(:admin) { create(:admin) } diff --git a/spec/features/help_pages_spec.rb b/spec/features/help_pages_spec.rb index eef48d09f32..6c0901d6169 100644 --- a/spec/features/help_pages_spec.rb +++ b/spec/features/help_pages_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Help Pages' do +RSpec.describe 'Help Pages', feature_category: :not_owned do describe 'Get the main help page' do before do allow(File).to receive(:read).and_call_original diff --git a/spec/features/ics/dashboard_issues_spec.rb b/spec/features/ics/dashboard_issues_spec.rb index 1d0ea495757..7115bd7dff7 100644 --- a/spec/features/ics/dashboard_issues_spec.rb +++ b/spec/features/ics/dashboard_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dashboard Issues Calendar Feed' do +RSpec.describe 'Dashboard Issues Calendar Feed', feature_category: :team_planning do describe 'GET /issues' do let!(:user) do user = create(:user, email: 'private1@example.com') diff --git a/spec/features/ics/group_issues_spec.rb b/spec/features/ics/group_issues_spec.rb index f29c39ad4ef..70ec156a7b0 100644 --- a/spec/features/ics/group_issues_spec.rb +++ b/spec/features/ics/group_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group Issues Calendar Feed' do +RSpec.describe 'Group Issues Calendar Feed', feature_category: :subgroups do describe 'GET /issues' do let!(:user) do user = create(:user, email: 'private1@example.com') diff --git a/spec/features/ics/project_issues_spec.rb b/spec/features/ics/project_issues_spec.rb index 771748060bb..4bbd966d72a 100644 --- a/spec/features/ics/project_issues_spec.rb +++ b/spec/features/ics/project_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Issues Calendar Feed' do +RSpec.describe 'Project Issues Calendar Feed', feature_category: :projects do describe 'GET /issues' do let!(:user) do user = create(:user, email: 'private1@example.com') diff --git a/spec/features/ide/clientside_preview_csp_spec.rb b/spec/features/ide/clientside_preview_csp_spec.rb index 849fdb0a44c..04427a5c294 100644 --- a/spec/features/ide/clientside_preview_csp_spec.rb +++ b/spec/features/ide/clientside_preview_csp_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'IDE Clientside Preview CSP' do +RSpec.describe 'IDE Clientside Preview CSP', feature_category: :web_ide do let_it_be(:user) { create(:user) } shared_context 'disable feature' do diff --git a/spec/features/ide/static_object_external_storage_csp_spec.rb b/spec/features/ide/static_object_external_storage_csp_spec.rb index 421b5db0dbb..701be2626e5 100644 --- a/spec/features/ide/static_object_external_storage_csp_spec.rb +++ b/spec/features/ide/static_object_external_storage_csp_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Static Object External Storage Content Security Policy' do +RSpec.describe 'Static Object External Storage Content Security Policy', feature_category: :web_ide do let_it_be(:user) { create(:user) } shared_context 'disable feature' do diff --git a/spec/features/ide/user_opens_merge_request_spec.rb b/spec/features/ide/user_opens_merge_request_spec.rb index 4ffa5212970..0074b4b1eb0 100644 --- a/spec/features/ide/user_opens_merge_request_spec.rb +++ b/spec/features/ide/user_opens_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'IDE merge request', :js do +RSpec.describe 'IDE merge request', :js, feature_category: :web_ide do let(:merge_request) { create(:merge_request, :simple, source_project: project) } let(:project) { create(:project, :public, :repository) } let(:user) { project.first_owner } diff --git a/spec/features/ide_spec.rb b/spec/features/ide_spec.rb index 1f6d34efc0f..2ca8d3f7156 100644 --- a/spec/features/ide_spec.rb +++ b/spec/features/ide_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'IDE', :js do +RSpec.describe 'IDE', :js, feature_category: :web_ide do include WebIdeSpecHelpers let_it_be(:ide_iframe_selector) { '#ide iframe' } @@ -46,10 +46,6 @@ RSpec.describe 'IDE', :js do end it_behaves_like 'legacy Web IDE' - - it 'does not show switch button' do - expect(page).not_to have_button('Switch to new Web IDE') - end end context 'with vscode feature flag on and use_legacy_web_ide=true' do @@ -61,19 +57,6 @@ RSpec.describe 'IDE', :js do end it_behaves_like 'legacy Web IDE' - - describe 'when user switches to new Web IDE' do - before do - click_button('Switch to new Web IDE') - - # Confirm modal - page.within('#confirmationModal') do - click_button('Switch editors') - end - end - - it_behaves_like 'new Web IDE' - end end describe 'sub-groups' do diff --git a/spec/features/import/manifest_import_spec.rb b/spec/features/import/manifest_import_spec.rb index 520cf850da2..bb3eb34637b 100644 --- a/spec/features/import/manifest_import_spec.rb +++ b/spec/features/import/manifest_import_spec.rb @@ -2,9 +2,7 @@ require 'spec_helper' -RSpec.describe 'Import multiple repositories by uploading a manifest file', :js do - include Select2Helper - +RSpec.describe 'Import multiple repositories by uploading a manifest file', :js, feature_category: :importers do let(:user) { create(:admin) } let(:group) { create(:group) } diff --git a/spec/features/incidents/incident_details_spec.rb b/spec/features/incidents/incident_details_spec.rb index 7c24943eb6f..e1167285464 100644 --- a/spec/features/incidents/incident_details_spec.rb +++ b/spec/features/incidents/incident_details_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Incident details', :js do +RSpec.describe 'Incident details', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } let_it_be(:incident) { create(:incident, project: project, author: developer, description: 'description') } diff --git a/spec/features/incidents/incident_timeline_events_spec.rb b/spec/features/incidents/incident_timeline_events_spec.rb index ef0eb27d310..3a73ea50247 100644 --- a/spec/features/incidents/incident_timeline_events_spec.rb +++ b/spec/features/incidents/incident_timeline_events_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Incident timeline events', :js do +RSpec.describe 'Incident timeline events', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } let_it_be(:incident) { create(:incident, project: project) } @@ -50,9 +50,9 @@ RSpec.describe 'Incident timeline events', :js do it 'shows the confirmation modal and edits the event' do click_button _('More actions') - page.within '.gl-new-dropdown-contents' do + page.within '.gl-dropdown-contents' do expect(page).to have_content(_('Edit')) - page.find('.gl-new-dropdown-item-text-primary', text: _('Edit')).click + page.find('.gl-dropdown-item-text-primary', text: _('Edit')).click end expect(page).to have_selector('.common-note-form') @@ -82,9 +82,9 @@ RSpec.describe 'Incident timeline events', :js do it 'shows the confirmation modal and deletes the event' do click_button _('More actions') - page.within '.gl-new-dropdown-contents' do + page.within '.gl-dropdown-contents' do expect(page).to have_content(_('Delete')) - page.find('.gl-new-dropdown-item-text-primary', text: 'Delete').click + page.find('.gl-dropdown-item-text-primary', text: 'Delete').click end page.within '.modal' do diff --git a/spec/features/incidents/incidents_list_spec.rb b/spec/features/incidents/incidents_list_spec.rb index 3241e71f537..61983f9290c 100644 --- a/spec/features/incidents/incidents_list_spec.rb +++ b/spec/features/incidents/incidents_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Incident Management index', :js do +RSpec.describe 'Incident Management index', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } let_it_be(:incident) { create(:incident, project: project) } diff --git a/spec/features/incidents/user_creates_new_incident_spec.rb b/spec/features/incidents/user_creates_new_incident_spec.rb index 685f6ab791a..bf5d7dac587 100644 --- a/spec/features/incidents/user_creates_new_incident_spec.rb +++ b/spec/features/incidents/user_creates_new_incident_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Incident Management index', :js do +RSpec.describe 'Incident Management index', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:reporter) { create(:user) } let_it_be(:guest) { create(:user) } diff --git a/spec/features/incidents/user_filters_incidents_by_status_spec.rb b/spec/features/incidents/user_filters_incidents_by_status_spec.rb index 661c737141b..f1f9dd45ff7 100644 --- a/spec/features/incidents/user_filters_incidents_by_status_spec.rb +++ b/spec/features/incidents/user_filters_incidents_by_status_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User filters Incident Management table by status', :js do +RSpec.describe 'User filters Incident Management table by status', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } diff --git a/spec/features/incidents/user_searches_incidents_spec.rb b/spec/features/incidents/user_searches_incidents_spec.rb index b8e3ff534c3..31a485801c4 100644 --- a/spec/features/incidents/user_searches_incidents_spec.rb +++ b/spec/features/incidents/user_searches_incidents_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches Incident Management incidents', :js do +RSpec.describe 'User searches Incident Management incidents', :js, feature_category: :incident_management do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } let_it_be(:incident) { create(:incident, project: project) } diff --git a/spec/features/incidents/user_uses_quick_actions_spec.rb b/spec/features/incidents/user_uses_quick_actions_spec.rb index fce9eadd42f..3740f2fca47 100644 --- a/spec/features/incidents/user_uses_quick_actions_spec.rb +++ b/spec/features/incidents/user_uses_quick_actions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Incidents > User uses quick actions', :js do +RSpec.describe 'Incidents > User uses quick actions', :js, feature_category: :incident_management do include Spec::Support::Helpers::Features::NotesHelpers describe 'incident-only commands' do diff --git a/spec/features/incidents/user_views_incident_spec.rb b/spec/features/incidents/user_views_incident_spec.rb index 054a084ea9c..8216aca787a 100644 --- a/spec/features/incidents/user_views_incident_spec.rb +++ b/spec/features/incidents/user_views_incident_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User views incident" do +RSpec.describe "User views incident", feature_category: :incident_management do let_it_be(:project) { create(:project_empty_repo, :public) } let_it_be(:guest) { create(:user) } let_it_be(:developer) { create(:user) } @@ -57,7 +57,7 @@ RSpec.describe "User views incident" do it 'shows incident actions', :js do click_button 'Incident actions' - expect(page).to have_link 'Report abuse' + expect(page).to have_link 'Report abuse to administrator' end end end diff --git a/spec/features/invites_spec.rb b/spec/features/invites_spec.rb index 34990a53b51..1091bea1ce3 100644 --- a/spec/features/invites_spec.rb +++ b/spec/features/invites_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group or Project invitations', :aggregate_failures do +RSpec.describe 'Group or Project invitations', :aggregate_failures, feature_category: :experimentation_expansion do let_it_be(:owner) { create(:user, name: 'John Doe') } let_it_be(:group) { create(:group, name: 'Owned') } let_it_be(:project) { create(:project, :repository, namespace: group) } @@ -155,11 +155,10 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures do let(:new_user) { build_stubbed(:user) } let(:invite_email) { new_user.email } let(:group_invite) { create(:group_member, :invited, group: group, invite_email: invite_email, created_by: owner) } - let(:send_email_confirmation) { true } let(:extra_params) { { invite_type: Emails::Members::INITIAL_INVITE } } before do - stub_application_setting(send_user_confirmation_email: send_email_confirmation) + stub_application_setting_enum('email_confirmation_setting', 'hard') end context 'when registering using invitation email' do @@ -181,7 +180,9 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures do end context 'email confirmation disabled' do - let(:send_email_confirmation) { false } + before do + stub_application_setting_enum('email_confirmation_setting', 'off') + end context 'the user signs up for an account with the invitation email address' do it 'redirects to the most recent membership activity page with all the projects/groups invitations automatically accepted' do @@ -213,6 +214,7 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures do expect { fill_in_sign_up_form(new_user) }.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) end end diff --git a/spec/features/issuables/issuable_list_spec.rb b/spec/features/issuables/issuable_list_spec.rb index a1e80586c05..350b0582565 100644 --- a/spec/features/issuables/issuable_list_spec.rb +++ b/spec/features/issuables/issuable_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'issuable list', :js do +RSpec.describe 'issuable list', :js, feature_category: :team_planning do let(:project) { create(:project) } let(:user) { create(:user) } @@ -26,9 +26,9 @@ RSpec.describe 'issuable list', :js do it "counts upvotes, downvotes and notes count for each #{issuable_type.to_s.humanize}" do visit_issuable_list(issuable_type) - expect(first('.issuable-upvotes')).to have_content(1) - expect(first('.issuable-downvotes')).to have_content(1) - expect(first('.issuable-comments')).to have_content(2) + expect(first('[data-testid="issuable-upvotes"]')).to have_content(1) + expect(first('[data-testid="issuable-downvotes"]')).to have_content(1) + expect(first('[data-testid="issuable-comments"]')).to have_content(2) end it 'sorts labels alphabetically' do diff --git a/spec/features/issuables/markdown_references/internal_references_spec.rb b/spec/features/issuables/markdown_references/internal_references_spec.rb index c5a8e9f367c..aeae76b1b77 100644 --- a/spec/features/issuables/markdown_references/internal_references_spec.rb +++ b/spec/features/issuables/markdown_references/internal_references_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Internal references", :js do +RSpec.describe "Internal references", :js, feature_category: :team_planning do include Spec::Support::Helpers::Features::NotesHelpers let(:private_project_user) { private_project.first_owner } diff --git a/spec/features/issuables/markdown_references/jira_spec.rb b/spec/features/issuables/markdown_references/jira_spec.rb index 66d0022f7e9..52464c6be8b 100644 --- a/spec/features/issuables/markdown_references/jira_spec.rb +++ b/spec/features/issuables/markdown_references/jira_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Jira", :js do +RSpec.describe "Jira", :js, feature_category: :team_planning do let(:user) { create(:user) } let(:actual_project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, target_project: actual_project, source_project: actual_project) } diff --git a/spec/features/issuables/shortcuts_issuable_spec.rb b/spec/features/issuables/shortcuts_issuable_spec.rb index 528420062dd..0190111b2f0 100644 --- a/spec/features/issuables/shortcuts_issuable_spec.rb +++ b/spec/features/issuables/shortcuts_issuable_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Blob shortcuts', :js do +RSpec.describe 'Blob shortcuts', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:issue) { create(:issue, project: project, author: user) } @@ -87,7 +87,7 @@ RSpec.describe 'Blob shortcuts', :js do it "opens milestones dropdown for editing" do find('body').native.send_key('m') - expect(find('[data-testid="milestone-edit"]')).to have_selector('.gl-new-dropdown-inner') + expect(find('[data-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 53723b39d5b..b5362267309 100644 --- a/spec/features/issuables/sorting_list_spec.rb +++ b/spec/features/issuables/sorting_list_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe 'Sort Issuable List' do +RSpec.describe 'Sort Issuable List', feature_category: :team_planning do let(:project) { create(:project, :public) } let(:first_created_issuable) { issuables.order_created_asc.first } diff --git a/spec/features/issuables/user_sees_sidebar_spec.rb b/spec/features/issuables/user_sees_sidebar_spec.rb index 66ed6044de6..2c0157ea9e0 100644 --- a/spec/features/issuables/user_sees_sidebar_spec.rb +++ b/spec/features/issuables/user_sees_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue Sidebar on Mobile' do +RSpec.describe 'Issue Sidebar on Mobile', feature_category: :team_planning do include MobileHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/issue_rebalancing_spec.rb b/spec/features/issue_rebalancing_spec.rb index 686aa5eb1b6..3933f0ffcf8 100644 --- a/spec/features/issue_rebalancing_spec.rb +++ b/spec/features/issue_rebalancing_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue rebalancing' do +RSpec.describe 'Issue rebalancing', feature_category: :team_planning do let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } let_it_be(:user) { create(:user) } @@ -41,13 +41,13 @@ RSpec.describe 'Issue rebalancing' do it 'shows an alert in project issues list with manual sort', :js do visit project_issues_path(project, sort: 'relative_position') - expect(page).to have_selector('.flash-notice', text: alert_message_regex, count: 1) + expect(page).to have_selector('.gl-alert-info', text: alert_message_regex, count: 1) end it 'shows an alert in group issues list with manual sort', :js do visit issues_group_path(group, sort: 'relative_position') - expect(page).to have_selector('.flash-notice', text: alert_message_regex, count: 1) + expect(page).to have_selector('.gl-alert-info', text: alert_message_regex, count: 1) end it 'does not show an alert in project issues list with other sorts' do diff --git a/spec/features/issues/confidential_notes_spec.rb b/spec/features/issues/confidential_notes_spec.rb index 858c054c803..d87c73da44d 100644 --- a/spec/features/issues/confidential_notes_spec.rb +++ b/spec/features/issues/confidential_notes_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "Confidential notes on issues", :js do +RSpec.describe "Confidential notes on issues", :js, feature_category: :team_planning do it_behaves_like 'confidential notes on issuables' do let_it_be(:issuable_parent) { create(:project) } let_it_be(:issuable) { create(:issue, project: issuable_parent) } 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 a385e8a5fd0..0bdb5930f30 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 @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Resolving all open threads in a merge request from an issue', :js do +RSpec.describe 'Resolving all open threads in a merge request from an issue', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } 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 5ff61a52b21..3a32bd34af8 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 @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Resolve an open thread in a merge request by creating an issue', :js do +RSpec.describe 'Resolve an open thread in a merge request by creating an issue', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, :repository, only_allow_merge_if_all_discussions_are_resolved: true) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/issues/csv_spec.rb b/spec/features/issues/csv_spec.rb index 9fd171bf44b..8629201459f 100644 --- a/spec/features/issues/csv_spec.rb +++ b/spec/features/issues/csv_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues csv', :js do +RSpec.describe 'Issues csv', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, :public) } let(:milestone) { create(:milestone, title: 'v1.0', project: project) } diff --git a/spec/features/issues/discussion_lock_spec.rb b/spec/features/issues/discussion_lock_spec.rb index 13f1742fbf6..33fc9a6fd96 100644 --- a/spec/features/issues/discussion_lock_spec.rb +++ b/spec/features/issues/discussion_lock_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Discussion Lock', :js do +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) } diff --git a/spec/features/issues/filtered_search/dropdown_assignee_spec.rb b/spec/features/issues/filtered_search/dropdown_assignee_spec.rb index 40b0bfd9aa4..a89c36a2b78 100644 --- a/spec/features/issues/filtered_search/dropdown_assignee_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_assignee_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dropdown assignee', :js do +RSpec.describe 'Dropdown assignee', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project) } diff --git a/spec/features/issues/filtered_search/dropdown_author_spec.rb b/spec/features/issues/filtered_search/dropdown_author_spec.rb index a67d114c6d1..b5d389b3bee 100644 --- a/spec/features/issues/filtered_search/dropdown_author_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_author_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dropdown author', :js do +RSpec.describe 'Dropdown author', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project) } diff --git a/spec/features/issues/filtered_search/dropdown_base_spec.rb b/spec/features/issues/filtered_search/dropdown_base_spec.rb index 9e3e3d394cd..866b83a6319 100644 --- a/spec/features/issues/filtered_search/dropdown_base_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_base_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dropdown base', :js do +RSpec.describe 'Dropdown base', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project) } @@ -10,6 +10,7 @@ RSpec.describe 'Dropdown base', :js do let_it_be(:issue) { create(:issue, project: project) } before do + stub_feature_flags(or_issuable_queries: false) project.add_maintainer(user) sign_in(user) diff --git a/spec/features/issues/filtered_search/dropdown_emoji_spec.rb b/spec/features/issues/filtered_search/dropdown_emoji_spec.rb index 78450a9c3f7..52c85942a7c 100644 --- a/spec/features/issues/filtered_search/dropdown_emoji_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_emoji_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dropdown emoji', :js do +RSpec.describe 'Dropdown emoji', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project, :public) } @@ -11,6 +11,7 @@ RSpec.describe 'Dropdown emoji', :js do let_it_be(:award_emoji_star) { create(:award_emoji, name: 'star', user: user, awardable: issue) } before do + stub_feature_flags(or_issuable_queries: false) project.add_maintainer(user) create_list(:award_emoji, 2, user: user, name: 'thumbsup') create_list(:award_emoji, 1, user: user, name: 'thumbsdown') diff --git a/spec/features/issues/filtered_search/dropdown_hint_spec.rb b/spec/features/issues/filtered_search/dropdown_hint_spec.rb index cbe917931aa..39034a40b1f 100644 --- a/spec/features/issues/filtered_search/dropdown_hint_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_hint_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dropdown hint', :js do +RSpec.describe 'Dropdown hint', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project, :public) } diff --git a/spec/features/issues/filtered_search/dropdown_label_spec.rb b/spec/features/issues/filtered_search/dropdown_label_spec.rb index 0ff56909ad1..a2eceb67841 100644 --- a/spec/features/issues/filtered_search/dropdown_label_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_label_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dropdown label', :js do +RSpec.describe 'Dropdown label', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project) } @@ -11,6 +11,7 @@ RSpec.describe 'Dropdown label', :js do let_it_be(:label) { create(:label, project: project, title: 'bug-label') } before do + stub_feature_flags(or_issuable_queries: false) project.add_maintainer(user) sign_in(user) diff --git a/spec/features/issues/filtered_search/dropdown_milestone_spec.rb b/spec/features/issues/filtered_search/dropdown_milestone_spec.rb index 37d604106f1..d08eb29b5c0 100644 --- a/spec/features/issues/filtered_search/dropdown_milestone_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_milestone_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dropdown milestone', :js do +RSpec.describe 'Dropdown milestone', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project) } @@ -12,6 +12,7 @@ RSpec.describe 'Dropdown milestone', :js do let_it_be(:issue) { create(:issue, project: project) } before do + stub_feature_flags(or_issuable_queries: false) project.add_maintainer(user) sign_in(user) diff --git a/spec/features/issues/filtered_search/dropdown_release_spec.rb b/spec/features/issues/filtered_search/dropdown_release_spec.rb index 08e20563c8e..5d9b8b04012 100644 --- a/spec/features/issues/filtered_search/dropdown_release_spec.rb +++ b/spec/features/issues/filtered_search/dropdown_release_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Dropdown release', :js do +RSpec.describe 'Dropdown release', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project) } @@ -12,6 +12,7 @@ RSpec.describe 'Dropdown release', :js do let_it_be(:issue) { create(:issue, project: project) } before do + stub_feature_flags(or_issuable_queries: false) project.add_maintainer(user) sign_in(user) diff --git a/spec/features/issues/filtered_search/filter_issues_spec.rb b/spec/features/issues/filtered_search/filter_issues_spec.rb index e48df1b1c53..f67d5c40efd 100644 --- a/spec/features/issues/filtered_search/filter_issues_spec.rb +++ b/spec/features/issues/filtered_search/filter_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Filter issues', :js do +RSpec.describe 'Filter issues', :js, feature_category: :team_planning do include FilteredSearchHelpers let(:project) { create(:project) } diff --git a/spec/features/issues/filtered_search/recent_searches_spec.rb b/spec/features/issues/filtered_search/recent_searches_spec.rb index cb17349dd43..2d9c73f2756 100644 --- a/spec/features/issues/filtered_search/recent_searches_spec.rb +++ b/spec/features/issues/filtered_search/recent_searches_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Recent searches', :js do +RSpec.describe 'Recent searches', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project_1) { create(:project, :public) } diff --git a/spec/features/issues/filtered_search/search_bar_spec.rb b/spec/features/issues/filtered_search/search_bar_spec.rb index e075547e326..c975df2a531 100644 --- a/spec/features/issues/filtered_search/search_bar_spec.rb +++ b/spec/features/issues/filtered_search/search_bar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Search bar', :js do +RSpec.describe 'Search bar', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project) } diff --git a/spec/features/issues/filtered_search/visual_tokens_spec.rb b/spec/features/issues/filtered_search/visual_tokens_spec.rb index 854b88c3f81..f25925ed33d 100644 --- a/spec/features/issues/filtered_search/visual_tokens_spec.rb +++ b/spec/features/issues/filtered_search/visual_tokens_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Visual tokens', :js do +RSpec.describe 'Visual tokens', :js, feature_category: :team_planning do include FilteredSearchHelpers let_it_be(:project) { create(:project) } diff --git a/spec/features/issues/form_spec.rb b/spec/features/issues/form_spec.rb index fe591d7fe3a..2898c97c2e9 100644 --- a/spec/features/issues/form_spec.rb +++ b/spec/features/issues/form_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New/edit issue', :js do +RSpec.describe 'New/edit issue', :js, feature_category: :team_planning do include ActionView::Helpers::JavaScriptHelper let_it_be(:project) { create(:project, :repository) } @@ -43,7 +43,7 @@ RSpec.describe 'New/edit issue', :js do # To work around this, we have to hold on to and call to the original implementation manually. original_issue_dropdown_options = FormHelper.instance_method(:assignees_dropdown_options) allow_any_instance_of(FormHelper).to receive(:assignees_dropdown_options).and_wrap_original do |original, *args| - options = original_issue_dropdown_options.bind(original.receiver).call(*args) + options = original_issue_dropdown_options.bind_call(original.receiver, *args) options[:data][:per_page] = 2 options diff --git a/spec/features/issues/gfm_autocomplete_spec.rb b/spec/features/issues/gfm_autocomplete_spec.rb index fa4ce6fe1c1..2bd5373b715 100644 --- a/spec/features/issues/gfm_autocomplete_spec.rb +++ b/spec/features/issues/gfm_autocomplete_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'GFM autocomplete', :js do +RSpec.describe 'GFM autocomplete', :js, feature_category: :team_planning do let_it_be(:user) { create(:user, name: '💃speciąl someone💃', username: 'someone.special') } let_it_be(:user2) { create(:user, name: 'Marge Simpson', username: 'msimpson') } diff --git a/spec/features/issues/group_label_sidebar_spec.rb b/spec/features/issues/group_label_sidebar_spec.rb index 8150f9c6faf..b26030fe8d0 100644 --- a/spec/features/issues/group_label_sidebar_spec.rb +++ b/spec/features/issues/group_label_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Group label on issue' do +RSpec.describe 'Group label on issue', feature_category: :team_planning do it 'renders link to the project issues page', :js do group = create(:group) project = create(:project, :public, namespace: group) diff --git a/spec/features/issues/incident_issue_spec.rb b/spec/features/issues/incident_issue_spec.rb index d6cde466d1b..2fba1ca9141 100644 --- a/spec/features/issues/incident_issue_spec.rb +++ b/spec/features/issues/incident_issue_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Incident Detail', :js do +RSpec.describe 'Incident Detail', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } let_it_be(:payload) do { diff --git a/spec/features/issues/issue_detail_spec.rb b/spec/features/issues/issue_detail_spec.rb index a253e6f4c86..44e9bbad1ba 100644 --- a/spec/features/issues/issue_detail_spec.rb +++ b/spec/features/issues/issue_detail_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue Detail', :js do +RSpec.describe 'Issue Detail', :js, feature_category: :team_planning do let_it_be_with_refind(:project) { create(:project, :public) } let(:user) { create(:user) } diff --git a/spec/features/issues/issue_header_spec.rb b/spec/features/issues/issue_header_spec.rb index 165015013dd..090067fc4ac 100644 --- a/spec/features/issues/issue_header_spec.rb +++ b/spec/features/issues/issue_header_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'issue header', :js do +RSpec.describe 'issue header', :js, feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } @@ -27,7 +27,7 @@ RSpec.describe 'issue header', :js do it 'shows the "New related issue", "Report abuse", and "Delete issue" items', :aggregate_failures do expect(page).to have_link 'New related issue' - expect(page).to have_link 'Report abuse' + expect(page).to have_link 'Report abuse to administrator' expect(page).to have_button 'Delete issue' expect(page).not_to have_link 'Submit as spam' end @@ -71,7 +71,7 @@ RSpec.describe 'issue header', :js do it 'does not show "Report abuse" link in dropdown' do click_button 'Issue actions' - expect(page).not_to have_link 'Report abuse' + expect(page).not_to have_link 'Report abuse to administrator' end end end @@ -116,7 +116,7 @@ RSpec.describe 'issue header', :js do it 'only shows the "New related issue" and "Report abuse" items', :aggregate_failures do expect(page).to have_link 'New related issue' - expect(page).to have_link 'Report abuse' + expect(page).to have_link 'Report abuse to administrator' expect(page).not_to have_link 'Submit as spam' expect(page).not_to have_button 'Delete issue' end @@ -160,7 +160,7 @@ RSpec.describe 'issue header', :js do it 'does not show "Report abuse" link in dropdown' do click_button 'Issue actions' - expect(page).not_to have_link 'Report abuse' + expect(page).not_to have_link 'Report abuse to administrator' end end end diff --git a/spec/features/issues/issue_sidebar_spec.rb b/spec/features/issues/issue_sidebar_spec.rb index 6fa8a52a9c5..fa72acad8c6 100644 --- a/spec/features/issues/issue_sidebar_spec.rb +++ b/spec/features/issues/issue_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue Sidebar' do +RSpec.describe 'Issue Sidebar', feature_category: :team_planning do include MobileHelpers let_it_be(:group) { create(:group, :nested) } diff --git a/spec/features/issues/issue_state_spec.rb b/spec/features/issues/issue_state_spec.rb index d5a115433aa..758dafccb86 100644 --- a/spec/features/issues/issue_state_spec.rb +++ b/spec/features/issues/issue_state_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'issue state', :js do +RSpec.describe 'issue state', :js, feature_category: :team_planning do let_it_be(:project) { create(:project) } let_it_be(:user) { create(:user) } diff --git a/spec/features/issues/keyboard_shortcut_spec.rb b/spec/features/issues/keyboard_shortcut_spec.rb index 4dbc5d8e01c..f91a0d4b057 100644 --- a/spec/features/issues/keyboard_shortcut_spec.rb +++ b/spec/features/issues/keyboard_shortcut_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues shortcut', :js do +RSpec.describe 'Issues shortcut', :js, feature_category: :team_planning do context 'New Issue shortcut' do context 'issues are enabled' do let(:project) { create(:project) } diff --git a/spec/features/issues/markdown_toolbar_spec.rb b/spec/features/issues/markdown_toolbar_spec.rb index aad5d319bc4..5cabaf16960 100644 --- a/spec/features/issues/markdown_toolbar_spec.rb +++ b/spec/features/issues/markdown_toolbar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue markdown toolbar', :js do +RSpec.describe 'Issue markdown toolbar', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } let_it_be(:issue) { create(:issue, project: project) } let_it_be(:user) { create(:user) } diff --git a/spec/features/issues/move_spec.rb b/spec/features/issues/move_spec.rb index 054b7b3855b..72c6e288168 100644 --- a/spec/features/issues/move_spec.rb +++ b/spec/features/issues/move_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'issue move to another project' do +RSpec.describe 'issue move to another project', feature_category: :team_planning do let(:user) { create(:user) } let(:old_project) { create(:project, :repository) } let(:text) { 'Some issue description' } diff --git a/spec/features/issues/note_polling_spec.rb b/spec/features/issues/note_polling_spec.rb index 5e02d5ad038..dae71481352 100644 --- a/spec/features/issues/note_polling_spec.rb +++ b/spec/features/issues/note_polling_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue notes polling', :js do +RSpec.describe 'Issue notes polling', :js, feature_category: :team_planning do include NoteInteractionHelpers let(:project) { create(:project, :public) } diff --git a/spec/features/issues/notes_on_issues_spec.rb b/spec/features/issues/notes_on_issues_spec.rb index 4e98062e8b2..8d6262efa53 100644 --- a/spec/features/issues/notes_on_issues_spec.rb +++ b/spec/features/issues/notes_on_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Create notes on issues', :js do +RSpec.describe 'Create notes on issues', :js, feature_category: :team_planning do let(:user) { create(:user) } def submit_comment(text) diff --git a/spec/features/issues/related_issues_spec.rb b/spec/features/issues/related_issues_spec.rb index 62127295a7c..f460b4b1c7f 100644 --- a/spec/features/issues/related_issues_spec.rb +++ b/spec/features/issues/related_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Related issues', :js do +RSpec.describe 'Related issues', :js, feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/issues/resource_label_events_spec.rb b/spec/features/issues/resource_label_events_spec.rb index e8158b3e2aa..531361b19af 100644 --- a/spec/features/issues/resource_label_events_spec.rb +++ b/spec/features/issues/resource_label_events_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'List issue resource label events', :js do +RSpec.describe 'List issue resource label events', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, :public) } let(:issue) { create(:issue, project: project, author: user) } diff --git a/spec/features/issues/rss_spec.rb b/spec/features/issues/rss_spec.rb index e3faed81c73..36dffeded50 100644 --- a/spec/features/issues/rss_spec.rb +++ b/spec/features/issues/rss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Issues RSS', :js do +RSpec.describe 'Project Issues RSS', :js, feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } diff --git a/spec/features/issues/service_desk_spec.rb b/spec/features/issues/service_desk_spec.rb index 87cd00fac6b..922ab95538b 100644 --- a/spec/features/issues/service_desk_spec.rb +++ b/spec/features/issues/service_desk_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Service Desk Issue Tracker', :js do +RSpec.describe 'Service Desk Issue Tracker', :js, feature_category: :team_planning do let(:project) { create(:project, :private, service_desk_enabled: true) } let_it_be(:user) { create(:user) } diff --git a/spec/features/issues/spam_akismet_issue_creation_spec.rb b/spec/features/issues/spam_akismet_issue_creation_spec.rb index 4cc4c4cf607..7c62f141105 100644 --- a/spec/features/issues/spam_akismet_issue_creation_spec.rb +++ b/spec/features/issues/spam_akismet_issue_creation_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Spam detection on issue creation', :js do +RSpec.describe 'Spam detection on issue creation', :js, feature_category: :team_planning do include StubENV let(:project) { create(:project, :public) } diff --git a/spec/features/issues/todo_spec.rb b/spec/features/issues/todo_spec.rb index 6a53c12eda3..2c537cefa5e 100644 --- a/spec/features/issues/todo_spec.rb +++ b/spec/features/issues/todo_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Manually create a todo item from issue', :js do +RSpec.describe 'Manually create a todo item from issue', :js, feature_category: :team_planning do let!(:project) { create(:project) } let!(:issue) { create(:issue, project: project) } let!(:user) { create(:user) } diff --git a/spec/features/issues/user_bulk_edits_issues_labels_spec.rb b/spec/features/issues/user_bulk_edits_issues_labels_spec.rb index 2a201e0bc23..1fc6609d1f5 100644 --- a/spec/features/issues/user_bulk_edits_issues_labels_spec.rb +++ b/spec/features/issues/user_bulk_edits_issues_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues > Labels bulk assignment' do +RSpec.describe 'Issues > Labels bulk assignment', feature_category: :team_planning do let(:user) { create(:user) } let!(:project) { create(:project) } let!(:bug) { create(:label, project: project, title: 'bug') } diff --git a/spec/features/issues/user_bulk_edits_issues_spec.rb b/spec/features/issues/user_bulk_edits_issues_spec.rb index d7fad355cb4..fc48bc4baf9 100644 --- a/spec/features/issues/user_bulk_edits_issues_spec.rb +++ b/spec/features/issues/user_bulk_edits_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Multiple issue updating from issues#index', :js do +RSpec.describe 'Multiple issue updating from issues#index', :js, feature_category: :team_planning do let!(:project) { create(:project) } let!(:issue) { create(:issue, project: project) } let!(:user) { create(:user) } diff --git a/spec/features/issues/user_comments_on_issue_spec.rb b/spec/features/issues/user_comments_on_issue_spec.rb index ef00e66af7e..59e1413fc97 100644 --- a/spec/features/issues/user_comments_on_issue_spec.rb +++ b/spec/features/issues/user_comments_on_issue_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User comments on issue", :js do +RSpec.describe "User comments on issue", :js, feature_category: :team_planning do include Spec::Support::Helpers::Features::NotesHelpers let_it_be(:project) { create(:project, :public) } diff --git a/spec/features/issues/user_creates_branch_and_merge_request_spec.rb b/spec/features/issues/user_creates_branch_and_merge_request_spec.rb index 5ba09703852..bbc14368d82 100644 --- a/spec/features/issues/user_creates_branch_and_merge_request_spec.rb +++ b/spec/features/issues/user_creates_branch_and_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User creates branch and merge request on issue page', :js do +RSpec.describe 'User creates branch and merge request on issue page', :js, feature_category: :team_planning do let(:membership_level) { :developer } let(:user) { create(:user) } let!(:project) { create(:project, :repository, :public) } @@ -84,7 +84,7 @@ RSpec.describe 'User creates branch and merge request on issue page', :js do wait_for_requests - expect(page).to have_selector('.dropdown-toggle-text ', text: '1-cherry-coloured-funk') + expect(page).to have_selector('.ref-selector ', text: '1-cherry-coloured-funk') expect(page).to have_current_path project_tree_path(project, '1-cherry-coloured-funk'), ignore_query: true end end @@ -109,7 +109,7 @@ RSpec.describe 'User creates branch and merge request on issue page', :js do wait_for_requests - expect(page).to have_selector('.dropdown-toggle-text ', text: branch_name) + expect(page).to have_selector('.ref-selector', text: branch_name) expect(page).to have_current_path project_tree_path(project, branch_name), ignore_query: true end end diff --git a/spec/features/issues/user_creates_confidential_merge_request_spec.rb b/spec/features/issues/user_creates_confidential_merge_request_spec.rb index 6b4526cd624..23fef5fa46e 100644 --- a/spec/features/issues/user_creates_confidential_merge_request_spec.rb +++ b/spec/features/issues/user_creates_confidential_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User creates confidential merge request on issue page', :js do +RSpec.describe 'User creates confidential merge request on issue page', :js, feature_category: :team_planning do include ProjectForksHelper let(:user) { create(:user) } diff --git a/spec/features/issues/user_creates_issue_by_email_spec.rb b/spec/features/issues/user_creates_issue_by_email_spec.rb index c47f24ab836..d6d2b2a50f8 100644 --- a/spec/features/issues/user_creates_issue_by_email_spec.rb +++ b/spec/features/issues/user_creates_issue_by_email_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues > User creates issue by email' do +RSpec.describe 'Issues > User creates issue by email', feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :public) } diff --git a/spec/features/issues/user_creates_issue_spec.rb b/spec/features/issues/user_creates_issue_spec.rb index 1d023a15159..a4b8cb91999 100644 --- a/spec/features/issues/user_creates_issue_spec.rb +++ b/spec/features/issues/user_creates_issue_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User creates issue" do +RSpec.describe "User creates issue", feature_category: :team_planning do include DropzoneHelper let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/issues/user_edits_issue_spec.rb b/spec/features/issues/user_edits_issue_spec.rb index 75df85f362f..223832a6ede 100644 --- a/spec/features/issues/user_edits_issue_spec.rb +++ b/spec/features/issues/user_edits_issue_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "Issues > User edits issue", :js do +RSpec.describe "Issues > User edits issue", :js, feature_category: :team_planning do let_it_be(:project) { create(:project_empty_repo, :public) } let_it_be(:project_with_milestones) { create(:project_empty_repo, :public) } let_it_be(:user) { create(:user) } @@ -416,7 +416,7 @@ RSpec.describe "Issues > User edits issue", :js do find('.gl-form-input', visible: true).send_keys "\"#{milestones[0].title}\"" wait_for_requests - page.within '.gl-new-dropdown-contents' do + page.within '.gl-dropdown-contents' do expect(page).to have_content milestones[0].title end end diff --git a/spec/features/issues/user_filters_issues_spec.rb b/spec/features/issues/user_filters_issues_spec.rb index 2941ea6ec36..9f69e94b86c 100644 --- a/spec/features/issues/user_filters_issues_spec.rb +++ b/spec/features/issues/user_filters_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User filters issues', :js do +RSpec.describe 'User filters issues', :js, feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/issues/user_interacts_with_awards_spec.rb b/spec/features/issues/user_interacts_with_awards_spec.rb index a2dea7f048b..539e429534e 100644 --- a/spec/features/issues/user_interacts_with_awards_spec.rb +++ b/spec/features/issues/user_interacts_with_awards_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User interacts with awards' do +RSpec.describe 'User interacts with awards', feature_category: :team_planning do include MobileHelpers let(:user) { create(:user) } @@ -136,6 +136,10 @@ RSpec.describe 'User interacts with awards' do page.within('.note-actions') do find('.note-emoji-button').click end + + # make sure emoji popup is visible + execute_script("window.scrollBy(0, 200)") + find('gl-emoji[data-name="8ball"]').click wait_for_requests diff --git a/spec/features/issues/user_resets_their_incoming_email_token_spec.rb b/spec/features/issues/user_resets_their_incoming_email_token_spec.rb index 4580378dc8a..55c66eb8a39 100644 --- a/spec/features/issues/user_resets_their_incoming_email_token_spec.rb +++ b/spec/features/issues/user_resets_their_incoming_email_token_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues > User resets their incoming email token' do +RSpec.describe 'Issues > User resets their incoming email token', feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :public, namespace: user.namespace) } let_it_be(:issue) { create(:issue, project: project) } diff --git a/spec/features/issues/user_scrolls_to_deeplinked_note_spec.rb b/spec/features/issues/user_scrolls_to_deeplinked_note_spec.rb index 1fa8f533869..f93fbd06964 100644 --- a/spec/features/issues/user_scrolls_to_deeplinked_note_spec.rb +++ b/spec/features/issues/user_scrolls_to_deeplinked_note_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User scrolls to deep-linked note' do +RSpec.describe 'User scrolls to deep-linked note', feature_category: :team_planning do let_it_be(:project) { create(:project, :public, :repository) } let_it_be(:issue) { create(:issue, project: project) } let_it_be(:comment_1) { create(:note_on_issue, noteable: issue, project: project, note: 'written first') } diff --git a/spec/features/issues/user_sees_breadcrumb_links_spec.rb b/spec/features/issues/user_sees_breadcrumb_links_spec.rb index 4ec13533a8d..632999c5d49 100644 --- a/spec/features/issues/user_sees_breadcrumb_links_spec.rb +++ b/spec/features/issues/user_sees_breadcrumb_links_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New issue breadcrumb' do +RSpec.describe 'New issue breadcrumb', feature_category: :team_planning do let_it_be(:project, reload: true) { create(:project) } let(:user) { project.creator } diff --git a/spec/features/issues/user_sees_empty_state_spec.rb b/spec/features/issues/user_sees_empty_state_spec.rb index b4c5a57de4f..5b95eb96e3b 100644 --- a/spec/features/issues/user_sees_empty_state_spec.rb +++ b/spec/features/issues/user_sees_empty_state_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues > User sees empty state', :js do +RSpec.describe 'Issues > User sees empty state', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } let_it_be(:user) { project.creator } diff --git a/spec/features/issues/user_sees_live_update_spec.rb b/spec/features/issues/user_sees_live_update_spec.rb index 7e4880f209e..860603ad546 100644 --- a/spec/features/issues/user_sees_live_update_spec.rb +++ b/spec/features/issues/user_sees_live_update_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues > User sees live update', :js do +RSpec.describe 'Issues > User sees live update', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } let_it_be(:user) { project.creator } diff --git a/spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb b/spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb index 311818d2d15..b9a25f47da9 100644 --- a/spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb +++ b/spec/features/issues/user_sees_sidebar_updates_in_realtime_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issues > Real-time sidebar', :js do +RSpec.describe 'Issues > Real-time sidebar', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } let_it_be(:issue) { create(:issue, project: project) } let_it_be(:user) { create(:user) } diff --git a/spec/features/issues/user_sorts_issue_comments_spec.rb b/spec/features/issues/user_sorts_issue_comments_spec.rb index 4b38ce329b8..ca52e620ea7 100644 --- a/spec/features/issues/user_sorts_issue_comments_spec.rb +++ b/spec/features/issues/user_sorts_issue_comments_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Comment sort direction' do +RSpec.describe 'Comment sort direction', feature_category: :team_planning do let_it_be(:project) { create(:project, :public, :repository) } let_it_be(:issue) { create(:issue, project: project) } let_it_be(:comment_1) { create(:note_on_issue, noteable: issue, project: project, note: 'written first') } diff --git a/spec/features/issues/user_sorts_issues_spec.rb b/spec/features/issues/user_sorts_issues_spec.rb index 2716d742be3..206544b32a4 100644 --- a/spec/features/issues/user_sorts_issues_spec.rb +++ b/spec/features/issues/user_sorts_issues_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User sorts issues" do +RSpec.describe "User sorts issues", feature_category: :team_planning do include SortingHelper include IssueHelpers diff --git a/spec/features/issues/user_toggles_subscription_spec.rb b/spec/features/issues/user_toggles_subscription_spec.rb index 541bbc8a8e7..904fafdf56a 100644 --- a/spec/features/issues/user_toggles_subscription_spec.rb +++ b/spec/features/issues/user_toggles_subscription_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User toggles subscription", :js do +RSpec.describe "User toggles subscription", :js, feature_category: :team_planning do let(:project) { create(:project_empty_repo, :public) } let(:user) { create(:user) } let(:user2) { create(:user) } diff --git a/spec/features/issues/user_uses_quick_actions_spec.rb b/spec/features/issues/user_uses_quick_actions_spec.rb index d458c991668..963f1c56fef 100644 --- a/spec/features/issues/user_uses_quick_actions_spec.rb +++ b/spec/features/issues/user_uses_quick_actions_spec.rb @@ -7,7 +7,7 @@ require 'spec_helper' # for example, adding quick actions when creating the issue and checking DateTime formats on UI. # Because this kind of spec takes more time to run there is no need to add new ones # for each existing quick action unless they test something not tested by existing tests. -RSpec.describe 'Issues > User uses quick actions', :js do +RSpec.describe 'Issues > User uses quick actions', :js, feature_category: :team_planning do include Spec::Support::Helpers::Features::NotesHelpers context "issuable common quick actions" do diff --git a/spec/features/issues/user_views_issue_spec.rb b/spec/features/issues/user_views_issue_spec.rb index eca698bb2f4..17ff3e0c702 100644 --- a/spec/features/issues/user_views_issue_spec.rb +++ b/spec/features/issues/user_views_issue_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User views issue" do +RSpec.describe "User views issue", feature_category: :team_planning do let_it_be(:project) { create(:project_empty_repo, :public) } let_it_be(:user) { create(:user) } let_it_be(:issue) { create(:issue, project: project, description: "# Description header\n\n**Lorem** _ipsum_ dolor sit [amet](https://example.com)", author: user) } diff --git a/spec/features/issues/user_views_issues_spec.rb b/spec/features/issues/user_views_issues_spec.rb index 56afa7eb6ba..39d3dfbd487 100644 --- a/spec/features/issues/user_views_issues_spec.rb +++ b/spec/features/issues/user_views_issues_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User views issues" do +RSpec.describe "User views issues", feature_category: :team_planning do let!(:closed_issue) { create(:closed_issue, project: project) } let!(:open_issue1) { create(:issue, project: project) } let!(:open_issue2) { create(:issue, project: project) } diff --git a/spec/features/jira_connect/branches_spec.rb b/spec/features/jira_connect/branches_spec.rb index c334a425849..489d3743a2a 100644 --- a/spec/features/jira_connect/branches_spec.rb +++ b/spec/features/jira_connect/branches_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Create GitLab branches from Jira', :js do +RSpec.describe 'Create GitLab branches from Jira', :js, feature_category: :integrations do let_it_be(:alice) { create(:user, name: 'Alice') } let_it_be(:bob) { create(:user, name: 'Bob') } @@ -49,16 +49,11 @@ RSpec.describe 'Create GitLab branches from Jira', :js do expect(page).to have_button('Create branch', disabled: false) click_on 'master' + fill_in 'Search', with: source_branch + expect(page).not_to have_text(source_branch) - within_dropdown do - fill_in 'Search', with: source_branch - - expect(page).not_to have_text(source_branch) - - fill_in 'Search', with: 'master' - - expect(page).to have_text('master') - end + fill_in 'Search', with: 'master' + expect(page).to have_text('master') # Switch to project2 @@ -70,10 +65,13 @@ RSpec.describe 'Create GitLab branches from Jira', :js do end click_on 'master' + wait_for_requests - within_dropdown do - fill_in 'Search', with: source_branch - click_on source_branch + fill_in 'Search', with: source_branch + wait_for_requests + + within '[role="listbox"]' do + find('li', text: source_branch).click end fill_in 'Branch name', with: new_branch diff --git a/spec/features/jira_connect/subscriptions_spec.rb b/spec/features/jira_connect/subscriptions_spec.rb index 0468cfd70fc..8686234df01 100644 --- a/spec/features/jira_connect/subscriptions_spec.rb +++ b/spec/features/jira_connect/subscriptions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Subscriptions Content Security Policy' do +RSpec.describe 'Subscriptions Content Security Policy', feature_category: :integrations do include ContentSecurityPolicyHelpers let(:installation) { create(:jira_connect_installation) } diff --git a/spec/features/jira_oauth_provider_authorize_spec.rb b/spec/features/jira_oauth_provider_authorize_spec.rb index eb26440aff9..a542aaa7619 100644 --- a/spec/features/jira_oauth_provider_authorize_spec.rb +++ b/spec/features/jira_oauth_provider_authorize_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'JIRA OAuth Provider' do +RSpec.describe 'JIRA OAuth Provider', feature_category: :integrations do describe 'JIRA DVCS OAuth Authorization' do let(:application) { create(:oauth_application, redirect_uri: oauth_jira_dvcs_callback_url, scopes: 'read_user') } diff --git a/spec/features/labels_hierarchy_spec.rb b/spec/features/labels_hierarchy_spec.rb index 2f22ac8b395..d6e607e80df 100644 --- a/spec/features/labels_hierarchy_spec.rb +++ b/spec/features/labels_hierarchy_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Labels Hierarchy', :js do +RSpec.describe 'Labels Hierarchy', :js, feature_category: :team_planning do include FilteredSearchHelpers let!(:user) { create(:user) } @@ -17,6 +17,7 @@ RSpec.describe 'Labels Hierarchy', :js do let!(:project_label_1) { create(:label, project: project_1, title: 'Label_4') } before do + stub_feature_flags(or_issuable_queries: false) grandparent.add_owner(user) sign_in(user) diff --git a/spec/features/markdown/copy_as_gfm_spec.rb b/spec/features/markdown/copy_as_gfm_spec.rb index b5bf9279371..8073e7e9556 100644 --- a/spec/features/markdown/copy_as_gfm_spec.rb +++ b/spec/features/markdown/copy_as_gfm_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Copy as GFM', :js do +RSpec.describe 'Copy as GFM', :js, feature_category: :team_planning do include MarkupHelper include RepoHelpers include ActionView::Helpers::JavaScriptHelper @@ -26,7 +26,7 @@ RSpec.describe 'Copy as GFM', :js do # by verifying (`html_to_gfm(gfm_to_html(gfm)) == gfm`) for a number of examples of GFM for every filter, using the `verify` helper. # These are all in a single `it` for performance reasons. - it 'works', :aggregate_failures do + it 'transforms HTML to GFM', :aggregate_failures do verify( 'nesting', '> 1. [x] **[$`2 + 2`$ {-=-}{+=+} 2^2 ~~:thumbsup:~~](http://google.com)**' @@ -459,25 +459,25 @@ RSpec.describe 'Copy as GFM', :js do </a> </div> <!----> - <button type="button" class="btn qa-apply-btn js-apply-btn">Apply suggestion</button> + <button type="button" class="btn js-apply-btn">Apply suggestion</button> </div> <table class="mb-3 md-suggestion-diff js-syntax-highlight code white"> <tbody> <tr class="line_holder old"> - <td class="diff-line-num old_line qa-old-diff-line-number old">9</td> + <td class="diff-line-num old_line old">9</td> <td class="diff-line-num new_line old"></td> <td class="line_content old"><span>Old </span></td> </tr> <tr class="line_holder new"> <td class="diff-line-num old_line new"></td> - <td class="diff-line-num new_line qa-new-diff-line-number new">9</td> + <td class="diff-line-num new_line new">9</td> <td class="line_content new"><span>New </span></td> </tr> <tr class="line_holder new"> <td class="diff-line-num old_line new"></td> - <td class="diff-line-num new_line qa-new-diff-line-number new">10</td> + <td class="diff-line-num new_line new">10</td> <td class="line_content new"><span> And newer </span></td> </tr> diff --git a/spec/features/markdown/gitlab_flavored_markdown_spec.rb b/spec/features/markdown/gitlab_flavored_markdown_spec.rb index 17fe2dab8f7..36b02b17924 100644 --- a/spec/features/markdown/gitlab_flavored_markdown_spec.rb +++ b/spec/features/markdown/gitlab_flavored_markdown_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "GitLab Flavored Markdown" do +RSpec.describe "GitLab Flavored Markdown", feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project) } let(:issue) { create(:issue, project: project) } diff --git a/spec/features/markdown/json_table_spec.rb b/spec/features/markdown/json_table_spec.rb index 6b74dbac255..a9afbe1fc57 100644 --- a/spec/features/markdown/json_table_spec.rb +++ b/spec/features/markdown/json_table_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Rendering json:table code block in markdown', :js do +RSpec.describe 'Rendering json:table code block in markdown', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } it 'creates table correctly' do diff --git a/spec/features/markdown/keyboard_shortcuts_spec.rb b/spec/features/markdown/keyboard_shortcuts_spec.rb index 82288af1f9f..cfb8e61689f 100644 --- a/spec/features/markdown/keyboard_shortcuts_spec.rb +++ b/spec/features/markdown/keyboard_shortcuts_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Markdown keyboard shortcuts', :js do +RSpec.describe 'Markdown keyboard shortcuts', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :repository) } let_it_be(:user) { create(:user) } diff --git a/spec/features/markdown/kroki_spec.rb b/spec/features/markdown/kroki_spec.rb index f02f5d44244..dca00c5f2fa 100644 --- a/spec/features/markdown/kroki_spec.rb +++ b/spec/features/markdown/kroki_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'kroki rendering', :js do +RSpec.describe 'kroki rendering', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } before do diff --git a/spec/features/markdown/markdown_spec.rb b/spec/features/markdown/markdown_spec.rb index 08f9b8eda13..132a03877f8 100644 --- a/spec/features/markdown/markdown_spec.rb +++ b/spec/features/markdown/markdown_spec.rb @@ -26,7 +26,7 @@ require 'erb' # # See the MarkdownFeature class for setup details. -RSpec.describe 'GitLab Markdown', :aggregate_failures do +RSpec.describe 'GitLab Markdown', :aggregate_failures, feature_category: :team_planning do include Capybara::Node::Matchers include MarkupHelper include MarkdownMatchers @@ -290,6 +290,13 @@ RSpec.describe 'GitLab Markdown', :aggregate_failures do aggregate_failures 'KrokiFilter' do expect(doc).to parse_kroki end + + aggregate_failures 'AttributeFilter' do + img = doc.at_css('img[alt="Sized Image"]') + + expect(img.attr('width')).to eq('75%') + expect(img.attr('height')).to eq('100') + end end end diff --git a/spec/features/markdown/math_spec.rb b/spec/features/markdown/math_spec.rb index 1f219886818..0c77bd2a8ff 100644 --- a/spec/features/markdown/math_spec.rb +++ b/spec/features/markdown/math_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Math rendering', :js do +RSpec.describe 'Math rendering', :js, feature_category: :team_planning do let!(:project) { create(:project, :public) } it 'renders inline and display math correctly' do diff --git a/spec/features/markdown/metrics_spec.rb b/spec/features/markdown/metrics_spec.rb index 61dd41204f8..b5e42b16f87 100644 --- a/spec/features/markdown/metrics_spec.rb +++ b/spec/features/markdown/metrics_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Metrics rendering', :js, :kubeclient, :use_clean_rails_memory_store_caching, :sidekiq_inline do +RSpec.describe 'Metrics rendering', :js, :kubeclient, :use_clean_rails_memory_store_caching, :sidekiq_inline, feature_category: :team_planning do include PrometheusHelpers include KubernetesHelpers include GrafanaApiHelpers diff --git a/spec/features/markdown/observability_spec.rb b/spec/features/markdown/observability_spec.rb new file mode 100644 index 00000000000..0c7d8cc006b --- /dev/null +++ b/spec/features/markdown/observability_spec.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Observability rendering', :js do + let_it_be(:group) { create(:group, :public) } + let_it_be(:project) { create(:project, :repository, group: group) } + let_it_be(:user) { create(:user) } + let_it_be(:observable_url) { "https://observe.gitlab.com/" } + + let_it_be(:expected) do + %(<iframe src="#{observable_url}?theme=light&kiosk" frameborder="0") + end + + before do + project.add_maintainer(user) + sign_in(user) + end + + context 'when embedding in an issue' do + let(:issue) do + create(:issue, project: project, description: observable_url) + end + + before do + visit project_issue_path(project, issue) + wait_for_requests + end + + it 'renders iframe in description' do + page.within('.description') do + expect(page.html).to include(expected) + end + end + + it 'renders iframe in comment' do + expect(page).not_to have_css('.note-text') + + page.within('.js-main-target-form') do + fill_in('note[note]', with: observable_url) + click_button('Comment') + end + + wait_for_requests + + page.within('.note-text') do + expect(page.html).to include(expected) + end + end + end + + context 'when embedding in an MR' do + let(:merge_request) do + create(:merge_request, source_project: project, target_project: project, description: observable_url) + end + + before do + visit merge_request_path(merge_request) + wait_for_requests + end + + it 'renders iframe in description' do + page.within('.description') do + expect(page.html).to include(expected) + end + end + + it 'renders iframe in comment' do + expect(page).not_to have_css('.note-text') + + page.within('.js-main-target-form') do + fill_in('note[note]', with: observable_url) + click_button('Comment') + end + + wait_for_requests + + page.within('.note-text') do + expect(page.html).to include(expected) + end + end + end +end diff --git a/spec/features/markdown/sandboxed_mermaid_spec.rb b/spec/features/markdown/sandboxed_mermaid_spec.rb index 2bf88d7882d..26b397a1fd5 100644 --- a/spec/features/markdown/sandboxed_mermaid_spec.rb +++ b/spec/features/markdown/sandboxed_mermaid_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Sandboxed Mermaid rendering', :js do +RSpec.describe 'Sandboxed Mermaid rendering', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public, :repository) } let_it_be(:description) do <<~MERMAID diff --git a/spec/features/merge_request/batch_comments_spec.rb b/spec/features/merge_request/batch_comments_spec.rb index f01217df8c5..e16c1ae094b 100644 --- a/spec/features/merge_request/batch_comments_spec.rb +++ b/spec/features/merge_request/batch_comments_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > Batch comments', :js do +RSpec.describe 'Merge request > Batch comments', :js, feature_category: :code_review do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/close_reopen_report_toggle_spec.rb b/spec/features/merge_request/close_reopen_report_toggle_spec.rb index 5e9400935c3..63ed355b16e 100644 --- a/spec/features/merge_request/close_reopen_report_toggle_spec.rb +++ b/spec/features/merge_request/close_reopen_report_toggle_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issuables Close/Reopen/Report toggle' do +RSpec.describe 'Issuables Close/Reopen/Report toggle', feature_category: :code_review do include IssuablesHelper let(:user) { create(:user) } @@ -27,14 +27,14 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do find('[data-testid="merge-request-actions"]').click expect(container).to have_link("Close merge request") - expect(container).to have_link('Report abuse') + expect(container).to have_link('Report abuse to administrator') end it 'links to Report Abuse' do find('[data-testid="merge-request-actions"]').click - click_link 'Report abuse' + click_link 'Report abuse to administrator' - expect(page).to have_content('Report abuse to admin') + expect(page).to have_content('Report abuse to administrator') end end @@ -47,7 +47,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do expect(container).to have_link('Edit') expect(container).to have_link('Mark as draft') expect(container).to have_link('Close merge request') - expect(container).to have_link('Report abuse') + expect(container).to have_link('Report abuse to administrator') expect(container).not_to have_link('Reopen merge request') end end @@ -59,7 +59,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do find('[data-testid="merge-request-actions"]').click expect(container).to have_link('Edit') - expect(container).to have_link('Report abuse') + expect(container).to have_link('Report abuse to administrator') expect(container).to have_link('Reopen merge request') expect(container).not_to have_link('Close merge request') end @@ -73,7 +73,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do expect(container).to have_link('Edit') expect(container).to have_link('Reopen merge request') expect(container).not_to have_link('Close merge request') - expect(container).not_to have_link('Report abuse') + expect(container).not_to have_link('Report abuse to administrator') end end end @@ -83,7 +83,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do it 'shows only the `Edit` button' do expect(container).to have_link(exact_text: 'Edit') - expect(container).not_to have_link('Report abuse') + expect(container).not_to have_link('Report abuse to administrator') expect(container).not_to have_button('Close merge request') expect(container).not_to have_button('Reopen merge request') end @@ -93,7 +93,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do it 'shows only the `Edit` button' do expect(container).to have_link(exact_text: 'Edit') - expect(container).not_to have_link('Report abuse') + expect(container).not_to have_link('Report abuse to administrator') expect(container).not_to have_button('Close merge request') expect(container).not_to have_button('Reopen merge request') end @@ -112,7 +112,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do end it 'only shows a `Report abuse` button' do - expect(container).to have_link('Report abuse') + expect(container).to have_link('Report abuse to administrator') expect(container).not_to have_button('Close merge request') expect(container).not_to have_button('Reopen merge request') expect(container).not_to have_link(exact_text: 'Edit') diff --git a/spec/features/merge_request/maintainer_edits_fork_spec.rb b/spec/features/merge_request/maintainer_edits_fork_spec.rb index 39d948bb6fb..bd040a5b894 100644 --- a/spec/features/merge_request/maintainer_edits_fork_spec.rb +++ b/spec/features/merge_request/maintainer_edits_fork_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'a maintainer edits files on a source-branch of an MR from a fork', :js, :sidekiq_might_not_need_inline do +RSpec.describe 'a maintainer edits files on a source-branch of an MR from a fork', :js, :sidekiq_might_not_need_inline, +feature_category: :code_review do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers include ProjectForksHelper let(:user) { create(:user, username: 'the-maintainer') } diff --git a/spec/features/merge_request/merge_request_discussion_lock_spec.rb b/spec/features/merge_request/merge_request_discussion_lock_spec.rb index d69295744f7..b48d4d80647 100644 --- a/spec/features/merge_request/merge_request_discussion_lock_spec.rb +++ b/spec/features/merge_request/merge_request_discussion_lock_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' -RSpec.describe 'Merge Request Discussion Lock', :js do +RSpec.describe 'Merge Request Discussion Lock', :js, feature_category: :code_review do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project, author: user) } diff --git a/spec/features/merge_request/user_accepts_merge_request_spec.rb b/spec/features/merge_request/user_accepts_merge_request_spec.rb index b50e6779e07..dda22abada0 100644 --- a/spec/features/merge_request/user_accepts_merge_request_spec.rb +++ b/spec/features/merge_request/user_accepts_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User accepts a merge request', :js, :sidekiq_might_not_need_inline do +RSpec.describe 'User accepts a merge request', :js, :sidekiq_might_not_need_inline, feature_category: :code_review do let(:merge_request) { create(:merge_request, :simple, source_project: project) } let(:project) { create(:project, :public, :repository) } let(:user) { create(:user) } diff --git a/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb b/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb index 75912238501..cf6836b544b 100644 --- a/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb +++ b/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'create a merge request, allowing commits from members who can merge to the target branch', :js do +RSpec.describe 'create a merge request, allowing commits from members who can merge to the target branch', :js, +feature_category: :code_review do include ProjectForksHelper let(:user) { create(:user) } let(:target_project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_approves_spec.rb b/spec/features/merge_request/user_approves_spec.rb index 9670012803e..bfb6a3ec8de 100644 --- a/spec/features/merge_request/user_approves_spec.rb +++ b/spec/features/merge_request/user_approves_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User approves', :js do +RSpec.describe 'Merge request > User approves', :js, feature_category: :code_review do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_assigns_themselves_reviewer_spec.rb b/spec/features/merge_request/user_assigns_themselves_reviewer_spec.rb new file mode 100644 index 00000000000..2b93f88e96b --- /dev/null +++ b/spec/features/merge_request/user_assigns_themselves_reviewer_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Merge request > User assigns themselves as a reviewer', feature_category: :code_review do + let_it_be(:project) { create(:project, :public, :repository) } + let(:user) { project.creator } + let(:merge_request) { create(:merge_request, :simple, source_project: project, author: user, description: "test mr") } + + context 'when logged in as a member of the project' do + before do + sign_in(user) + visit project_merge_request_path(project, merge_request) + end + + it 'updates updated_by', :js do + wait_for_requests + + expect do + page.within('.reviewer') do + click_button 'assign yourself' + end + + expect(find('.reviewer')).to have_content(user.name) + wait_for_all_requests + end.to change { merge_request.reload.updated_at } + end + + context 'when logged in as a non-member of the project' do + before do + sign_in(create(:user)) + visit project_merge_request_path(project, merge_request) + end + + it 'does not show link to assign self as Reviewer' do + page.within('.reviewer') do + expect(page).not_to have_content 'Assign yourself' + end + end + end + end +end diff --git a/spec/features/merge_request/user_assigns_themselves_spec.rb b/spec/features/merge_request/user_assigns_themselves_spec.rb index 2aaddc7791b..826904bd165 100644 --- a/spec/features/merge_request/user_assigns_themselves_spec.rb +++ b/spec/features/merge_request/user_assigns_themselves_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User assigns themselves' do +RSpec.describe 'Merge request > User assigns themselves', feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:issue1) { create(:issue, project: project) } @@ -22,8 +22,12 @@ RSpec.describe 'Merge request > User assigns themselves' do end it 'updates updated_by', :js do + wait_for_requests + expect do - click_button 'assign yourself' + page.within('[data-testid="assignee-block-container"]') do + click_button 'assign yourself' + end expect(find('.assignee')).to have_content(user.name) wait_for_all_requests @@ -36,7 +40,9 @@ RSpec.describe 'Merge request > User assigns themselves' do end it 'does not display if related issues are already assigned' do - expect(page).not_to have_content 'Assign yourself' + page.within('[data-testid="assignee-block-container"]') do + expect(page).not_to have_content 'Assign yourself' + end end end end @@ -48,7 +54,9 @@ RSpec.describe 'Merge request > User assigns themselves' do end it 'does not show assignment link' do - expect(page).not_to have_content 'Assign yourself' + page.within('[data-testid="assignee-block-container"]') do + expect(page).not_to have_content 'Assign yourself' + end end end end diff --git a/spec/features/merge_request/user_awards_emoji_spec.rb b/spec/features/merge_request/user_awards_emoji_spec.rb index 6fdc1a29174..dceac8d6a69 100644 --- a/spec/features/merge_request/user_awards_emoji_spec.rb +++ b/spec/features/merge_request/user_awards_emoji_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User awards emoji', :js do +RSpec.describe 'Merge request > User awards emoji', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project, author: create(:user)) } diff --git a/spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb b/spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb index f3cbc1ea1f5..3e3ff91ad19 100644 --- a/spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb +++ b/spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User clicks on merge request tabs', :js do +RSpec.describe 'User clicks on merge request tabs', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } diff --git a/spec/features/merge_request/user_closes_reopens_merge_request_state_spec.rb b/spec/features/merge_request/user_closes_reopens_merge_request_state_spec.rb index 70951982c22..c5ef6b912fe 100644 --- a/spec/features/merge_request/user_closes_reopens_merge_request_state_spec.rb +++ b/spec/features/merge_request/user_closes_reopens_merge_request_state_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'User closes/reopens a merge request', :js, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/297500' do +RSpec.describe 'User closes/reopens a merge request', :js, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/297500', + feature_category: :code_review do let_it_be(:project) { create(:project, :repository) } let_it_be(:user) { create(:user) } diff --git a/spec/features/merge_request/user_comments_on_commit_spec.rb b/spec/features/merge_request/user_comments_on_commit_spec.rb index 8fa1fe3812d..64fe144cd0d 100644 --- a/spec/features/merge_request/user_comments_on_commit_spec.rb +++ b/spec/features/merge_request/user_comments_on_commit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User comments on a commit', :js do +RSpec.describe 'User comments on a commit', :js, feature_category: :code_review do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_comments_on_diff_spec.rb b/spec/features/merge_request/user_comments_on_diff_spec.rb index ffaf403e873..f1a942d5708 100644 --- a/spec/features/merge_request/user_comments_on_diff_spec.rb +++ b/spec/features/merge_request/user_comments_on_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User comments on a diff', :js do +RSpec.describe 'User comments on a diff', :js, feature_category: :code_review do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_comments_on_merge_request_spec.rb b/spec/features/merge_request/user_comments_on_merge_request_spec.rb index dbcfc2b968f..d5ad78746f4 100644 --- a/spec/features/merge_request/user_comments_on_merge_request_spec.rb +++ b/spec/features/merge_request/user_comments_on_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User comments on a merge request', :js do +RSpec.describe 'User comments on a merge request', :js, feature_category: :code_review do include RepoHelpers let(:project) { create(:project, :repository) } diff --git a/spec/features/merge_request/user_creates_image_diff_notes_spec.rb b/spec/features/merge_request/user_creates_image_diff_notes_spec.rb index bd5048374d5..eb7894f4ef7 100644 --- a/spec/features/merge_request/user_creates_image_diff_notes_spec.rb +++ b/spec/features/merge_request/user_creates_image_diff_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User creates image diff notes', :js do +RSpec.describe 'Merge request > User creates image diff notes', :js, feature_category: :code_review do include NoteInteractionHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_creates_merge_request_spec.rb b/spec/features/merge_request/user_creates_merge_request_spec.rb index 0ae4ef18649..50629f11959 100644 --- a/spec/features/merge_request/user_creates_merge_request_spec.rb +++ b/spec/features/merge_request/user_creates_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User creates a merge request', :js do +RSpec.describe 'User creates a merge request', :js, feature_category: :code_review do include ProjectForksHelper shared_examples 'creates a merge request' do @@ -77,7 +77,7 @@ RSpec.describe 'User creates a merge request', :js do first('.dropdown-source-project a', text: forked_project.full_path) first('.js-target-project').click - first('.dropdown-target-project a', text: project.full_path) + first('.dropdown-target-project li', text: project.full_path) first('.js-source-branch').click diff --git a/spec/features/merge_request/user_creates_mr_spec.rb b/spec/features/merge_request/user_creates_mr_spec.rb index 9d97e57fe3a..5effde234cd 100644 --- a/spec/features/merge_request/user_creates_mr_spec.rb +++ b/spec/features/merge_request/user_creates_mr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User creates MR' do +RSpec.describe 'Merge request > User creates MR', feature_category: :code_review do include ProjectForksHelper before do diff --git a/spec/features/merge_request/user_customizes_merge_commit_message_spec.rb b/spec/features/merge_request/user_customizes_merge_commit_message_spec.rb index f0c0142a6cc..4f1119d6c33 100644 --- a/spec/features/merge_request/user_customizes_merge_commit_message_spec.rb +++ b/spec/features/merge_request/user_customizes_merge_commit_message_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request < User customizes merge commit message', :js do +RSpec.describe 'Merge request < User customizes merge commit message', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:issue_1) { create(:issue, project: project) } diff --git a/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb index 59b5923b2a1..c04040dd6fd 100644 --- a/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb +++ b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User edits assignees sidebar', :js do +RSpec.describe 'Merge request > User edits assignees sidebar', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:protected_branch) { create(:protected_branch, :maintainers_can_push, name: 'master', project: project) } let(:merge_request) { create(:merge_request, :simple, source_project: project, target_branch: protected_branch.name) } diff --git a/spec/features/merge_request/user_edits_merge_request_spec.rb b/spec/features/merge_request/user_edits_merge_request_spec.rb index 4ac25ea7ae0..6701c7d91ae 100644 --- a/spec/features/merge_request/user_edits_merge_request_spec.rb +++ b/spec/features/merge_request/user_edits_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User edits a merge request', :js do +RSpec.describe 'User edits a merge request', :js, feature_category: :code_review do let(:project) { create(:project, :repository) } let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:user) { create(:user) } diff --git a/spec/features/merge_request/user_edits_mr_spec.rb b/spec/features/merge_request/user_edits_mr_spec.rb index 2c949ed84f4..18e6827a872 100644 --- a/spec/features/merge_request/user_edits_mr_spec.rb +++ b/spec/features/merge_request/user_edits_mr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User edits MR' do +RSpec.describe 'Merge request > User edits MR', feature_category: :code_review do include ProjectForksHelper before do diff --git a/spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb b/spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb index caf0c609f64..38c76314b9e 100644 --- a/spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb +++ b/spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User edits reviewers sidebar', :js do +RSpec.describe 'Merge request > User edits reviewers sidebar', :js, feature_category: :code_review do context 'with invite members considerations' do let_it_be(:merge_request) { create(:merge_request) } let_it_be(:project) { merge_request.project } diff --git a/spec/features/merge_request/user_expands_diff_spec.rb b/spec/features/merge_request/user_expands_diff_spec.rb index 25c9584350d..8adbdcd310c 100644 --- a/spec/features/merge_request/user_expands_diff_spec.rb +++ b/spec/features/merge_request/user_expands_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User expands diff', :js do +RSpec.describe 'User expands diff', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_branch: 'expand-collapse-files', source_project: project, target_project: project) } diff --git a/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb b/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb index 07d99a786ba..1b9b3941714 100644 --- a/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb +++ b/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Batch diffs', :js do +RSpec.describe 'Batch diffs', :js, feature_category: :code_review do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_locks_discussion_spec.rb b/spec/features/merge_request/user_locks_discussion_spec.rb index c8a6fdd4007..1bfd52d49e8 100644 --- a/spec/features/merge_request/user_locks_discussion_spec.rb +++ b/spec/features/merge_request/user_locks_discussion_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User locks discussion', :js do +RSpec.describe 'Merge request > User locks discussion', :js, feature_category: :code_review do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_manages_subscription_spec.rb b/spec/features/merge_request/user_manages_subscription_spec.rb index a8d59a6ffb5..16d869fc5a1 100644 --- a/spec/features/merge_request/user_manages_subscription_spec.rb +++ b/spec/features/merge_request/user_manages_subscription_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User manages subscription', :js do +RSpec.describe 'User manages subscription', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:user) { create(:user) } diff --git a/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb b/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb index d85f275b724..201cdc94b56 100644 --- a/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb +++ b/spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User marks merge request as draft', :js do +RSpec.describe 'Merge request > User marks merge request as draft', :js, feature_category: :code_review do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_merges_immediately_spec.rb b/spec/features/merge_request/user_merges_immediately_spec.rb index 91327059e0f..b0aeea997f0 100644 --- a/spec/features/merge_request/user_merges_immediately_spec.rb +++ b/spec/features/merge_request/user_merges_immediately_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge requests > User merges immediately', :js do +RSpec.describe 'Merge requests > User merges immediately', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let!(:merge_request) do diff --git a/spec/features/merge_request/user_merges_merge_request_spec.rb b/spec/features/merge_request/user_merges_merge_request_spec.rb index c91dc7b1c00..4196fdd5dac 100644 --- a/spec/features/merge_request/user_merges_merge_request_spec.rb +++ b/spec/features/merge_request/user_merges_merge_request_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User merges a merge request", :js do +RSpec.describe "User merges a merge request", :js, feature_category: :code_review do let(:user) { project.first_owner } before do diff --git a/spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb b/spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb index d6b132b18da..447418b5a4b 100644 --- a/spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb +++ b/spec/features/merge_request/user_merges_only_if_pipeline_succeeds_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User merges only if pipeline succeeds', :js do +RSpec.describe 'Merge request > User merges only if pipeline succeeds', :js, feature_category: :code_review do let(:merge_request) { create(:merge_request_with_diffs) } let(:project) { merge_request.target_project } diff --git a/spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb b/spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb index abf916c72b3..78a21527794 100644 --- a/spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb +++ b/spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User merges when pipeline succeeds', :js do +RSpec.describe 'Merge request > User merges when pipeline succeeds', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) do diff --git a/spec/features/merge_request/user_opens_checkout_branch_modal_spec.rb b/spec/features/merge_request/user_opens_checkout_branch_modal_spec.rb index 4d2c59665bb..116de50f2a2 100644 --- a/spec/features/merge_request/user_opens_checkout_branch_modal_spec.rb +++ b/spec/features/merge_request/user_opens_checkout_branch_modal_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User opens checkout branch modal', :js do +RSpec.describe 'Merge request > User opens checkout branch modal', :js, feature_category: :code_review do include ProjectForksHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_opens_context_commits_modal_spec.rb b/spec/features/merge_request/user_opens_context_commits_modal_spec.rb index 2d574e57fe9..f32a51cfcd4 100644 --- a/spec/features/merge_request/user_opens_context_commits_modal_spec.rb +++ b/spec/features/merge_request/user_opens_context_commits_modal_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > Context commits', :js do +RSpec.describe 'Merge request > Context commits', :js, feature_category: :code_review do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_posts_diff_notes_spec.rb b/spec/features/merge_request/user_posts_diff_notes_spec.rb index 8af0e957c14..f2ec0e2df6d 100644 --- a/spec/features/merge_request/user_posts_diff_notes_spec.rb +++ b/spec/features/merge_request/user_posts_diff_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User posts diff notes', :js do +RSpec.describe 'Merge request > User posts diff notes', :js, feature_category: :code_review do include MergeRequestDiffHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/merge_request/user_posts_notes_spec.rb b/spec/features/merge_request/user_posts_notes_spec.rb index 844ef6133c8..194e04a9544 100644 --- a/spec/features/merge_request/user_posts_notes_spec.rb +++ b/spec/features/merge_request/user_posts_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User posts notes', :js do +RSpec.describe 'Merge request > User posts notes', :js, feature_category: :code_review do include NoteInteractionHelpers let_it_be(:project) { create(:project, :repository) } diff --git a/spec/features/merge_request/user_rebases_merge_request_spec.rb b/spec/features/merge_request/user_rebases_merge_request_spec.rb index d42864200ec..c3ee5ddc3b1 100644 --- a/spec/features/merge_request/user_rebases_merge_request_spec.rb +++ b/spec/features/merge_request/user_rebases_merge_request_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User rebases a merge request", :js do +RSpec.describe "User rebases a merge request", :js, feature_category: :code_review do let(:merge_request) { create(:merge_request, :simple, source_project: project) } let(:user) { project.first_owner } diff --git a/spec/features/merge_request/user_resolves_conflicts_spec.rb b/spec/features/merge_request/user_resolves_conflicts_spec.rb index a04ca4e789c..d4c80c1e9e2 100644 --- a/spec/features/merge_request/user_resolves_conflicts_spec.rb +++ b/spec/features/merge_request/user_resolves_conflicts_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User resolves conflicts', :js do +RSpec.describe 'Merge request > User resolves conflicts', :js, feature_category: :code_review do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers let(:project) { create(:project, :repository) } diff --git a/spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb b/spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb index 99f1b1ab1ad..f0507e94424 100644 --- a/spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb +++ b/spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User resolves diff notes and threads', :js do +RSpec.describe 'Merge request > User resolves diff notes and threads', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:guest) { create(:user) } diff --git a/spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb b/spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb index f8f3467f6fb..a7508ede1a1 100644 --- a/spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb +++ b/spec/features/merge_request/user_resolves_outdated_diff_discussions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User resolves outdated diff discussions', :js do +RSpec.describe 'Merge request > User resolves outdated diff discussions', :js, feature_category: :code_review do let(:project) { create(:project, :repository, :public) } let(:merge_request) do diff --git a/spec/features/merge_request/user_resolves_wip_mr_spec.rb b/spec/features/merge_request/user_resolves_wip_mr_spec.rb index 92927b713f1..b7f20a16a3f 100644 --- a/spec/features/merge_request/user_resolves_wip_mr_spec.rb +++ b/spec/features/merge_request/user_resolves_wip_mr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User resolves Draft', :js do +RSpec.describe 'Merge request > User resolves Draft', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) do diff --git a/spec/features/merge_request/user_reverts_merge_request_spec.rb b/spec/features/merge_request/user_reverts_merge_request_spec.rb index 9cbba6c470f..edfa9267871 100644 --- a/spec/features/merge_request/user_reverts_merge_request_spec.rb +++ b/spec/features/merge_request/user_reverts_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User reverts a merge request', :js do +RSpec.describe 'User reverts a merge request', :js, feature_category: :code_review do let(:merge_request) { create(:merge_request, :simple, source_project: project) } let(:project) { create(:project, :public, :repository) } let(:user) { create(:user) } diff --git a/spec/features/merge_request/user_reviews_image_spec.rb b/spec/features/merge_request/user_reviews_image_spec.rb index bd490294829..5814dc6b58c 100644 --- a/spec/features/merge_request/user_reviews_image_spec.rb +++ b/spec/features/merge_request/user_reviews_image_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > image review', :js do +RSpec.describe 'Merge request > image review', :js, feature_category: :code_review do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb b/spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb index cf4875a7a25..fdd2aeec274 100644 --- a/spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb +++ b/spec/features/merge_request/user_scrolls_to_note_on_load_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User scrolls to note on load', :js do +RSpec.describe 'Merge request > User scrolls to note on load', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project, author: user) } diff --git a/spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb b/spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb index a6c024be698..8c2fc62d16f 100644 --- a/spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb +++ b/spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' include Spec::Support::Helpers::ModalHelpers # rubocop:disable Style/MixinUsage -RSpec.describe 'Merge request > User sees avatars on diff notes', :js do +RSpec.describe 'Merge request > User sees avatars on diff notes', :js, feature_category: :code_review do include NoteInteractionHelpers include Spec::Support::Helpers::ModalHelpers include MergeRequestDiffHelpers diff --git a/spec/features/merge_request/user_sees_breadcrumb_links_spec.rb b/spec/features/merge_request/user_sees_breadcrumb_links_spec.rb index d8b258bac47..0b6aefcdab6 100644 --- a/spec/features/merge_request/user_sees_breadcrumb_links_spec.rb +++ b/spec/features/merge_request/user_sees_breadcrumb_links_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New merge request breadcrumb' do +RSpec.describe 'New merge request breadcrumb', feature_category: :code_review do let(:project) { create(:project, :repository) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb b/spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb index 5827266d4b7..bbfa2be47cc 100644 --- a/spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb +++ b/spec/features/merge_request/user_sees_check_out_branch_modal_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees check out branch modal', :js do +RSpec.describe 'Merge request > User sees check out branch modal', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb b/spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb index 35be21a646e..07b7cb1e8d8 100644 --- a/spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb +++ b/spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User cherry-picks', :js do +RSpec.describe 'Merge request > User cherry-picks', :js, feature_category: :code_review do let(:group) { create(:group) } let(:project) { create(:project, :repository, namespace: group) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_closing_issues_message_spec.rb b/spec/features/merge_request/user_sees_closing_issues_message_spec.rb index f56db3d3dbe..9a1d47a13b5 100644 --- a/spec/features/merge_request/user_sees_closing_issues_message_spec.rb +++ b/spec/features/merge_request/user_sees_closing_issues_message_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees closing issues message', :js do +RSpec.describe 'Merge request > User sees closing issues message', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:issue_1) { create(:issue, project: project) } diff --git a/spec/features/merge_request/user_sees_deleted_target_branch_spec.rb b/spec/features/merge_request/user_sees_deleted_target_branch_spec.rb index dc50c3bc8db..16ae8b4304b 100644 --- a/spec/features/merge_request/user_sees_deleted_target_branch_spec.rb +++ b/spec/features/merge_request/user_sees_deleted_target_branch_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees deleted target branch', :js do +RSpec.describe 'Merge request > User sees deleted target branch', :js, feature_category: :code_review do let(:merge_request) { create(:merge_request) } let(:project) { merge_request.project } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_deployment_widget_spec.rb b/spec/features/merge_request/user_sees_deployment_widget_spec.rb index 6f8ecf5f5c2..40ab06937ff 100644 --- a/spec/features/merge_request/user_sees_deployment_widget_spec.rb +++ b/spec/features/merge_request/user_sees_deployment_widget_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees deployment widget', :js do +RSpec.describe 'Merge request > User sees deployment widget', :js, feature_category: :continuous_delivery do include Spec::Support::Helpers::ModalHelpers describe 'when merge request has associated environments' do diff --git a/spec/features/merge_request/user_sees_diff_spec.rb b/spec/features/merge_request/user_sees_diff_spec.rb index 0bae019793c..101ff8fc152 100644 --- a/spec/features/merge_request/user_sees_diff_spec.rb +++ b/spec/features/merge_request/user_sees_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees diff', :js do +RSpec.describe 'Merge request > User sees diff', :js, feature_category: :code_review do include ProjectForksHelper include RepoHelpers include MergeRequestDiffHelpers diff --git a/spec/features/merge_request/user_sees_discussions_navigation_spec.rb b/spec/features/merge_request/user_sees_discussions_navigation_spec.rb index 9fbe7662fc0..a22fb2cff00 100644 --- a/spec/features/merge_request/user_sees_discussions_navigation_spec.rb +++ b/spec/features/merge_request/user_sees_discussions_navigation_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees discussions navigation', :js do +RSpec.describe 'Merge request > User sees discussions navigation', :js, feature_category: :code_review do let_it_be(:project) { create(:project, :public, :repository) } let_it_be(:user) { project.creator } let_it_be(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_sees_discussions_spec.rb b/spec/features/merge_request/user_sees_discussions_spec.rb index cc477e363a4..0eae6e39eec 100644 --- a/spec/features/merge_request/user_sees_discussions_spec.rb +++ b/spec/features/merge_request/user_sees_discussions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees threads', :js do +RSpec.describe 'Merge request > User sees threads', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/merge_request/user_sees_merge_button_depending_on_unresolved_discussions_spec.rb b/spec/features/merge_request/user_sees_merge_button_depending_on_unresolved_discussions_spec.rb index e250837f398..6db5480abb4 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 @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees merge button depending on unresolved threads', :js do +RSpec.describe 'Merge request > User sees merge button depending on unresolved threads', :js, +feature_category: :code_review do let(:project) { create(:project, :repository) } let(:user) { project.creator } let!(:merge_request) { create(:merge_request_with_diff_notes, source_project: project, author: user) } diff --git a/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb b/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb index 2a1b9ea6009..f7594c717d1 100644 --- a/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb +++ b/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees pipelines triggered by merge request', :js do +RSpec.describe 'Merge request > User sees pipelines triggered by merge request', :js, feature_category: :code_review do include ProjectForksHelper include TestReportsHelper diff --git a/spec/features/merge_request/user_sees_merge_widget_spec.rb b/spec/features/merge_request/user_sees_merge_widget_spec.rb index c4a29c1fb07..e5aa0f6e64d 100644 --- a/spec/features/merge_request/user_sees_merge_widget_spec.rb +++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees merge widget', :js do +RSpec.describe 'Merge request > User sees merge widget', :js, feature_category: :code_review do include ProjectForksHelper include TestReportsHelper include ReactiveCachingHelpers diff --git a/spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb b/spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb index 03f9f6ef565..5756218d20f 100644 --- a/spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb +++ b/spec/features/merge_request/user_sees_mini_pipeline_graph_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request < User sees mini pipeline graph', :js do +RSpec.describe 'Merge request < User sees mini pipeline graph', :js, feature_category: :continuous_integration do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project, head_pipeline: pipeline) } diff --git a/spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb b/spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb index a764dd97878..4bfdce29c6a 100644 --- a/spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb +++ b/spec/features/merge_request/user_sees_mr_from_deleted_forked_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees MR from deleted forked project', :js do +RSpec.describe 'Merge request > User sees MR from deleted forked project', :js, feature_category: :code_review do include ProjectForksHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb b/spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb index 39bba3f2f73..8e6f6d04676 100644 --- a/spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb +++ b/spec/features/merge_request/user_sees_mr_with_deleted_source_branch_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' # This test serves as a regression test for a bug that caused an error # message to be shown by JavaScript when the source branch was deleted. # Please do not remove ":js". -RSpec.describe 'Merge request > User sees MR with deleted source branch', :js do +RSpec.describe 'Merge request > User sees MR with deleted source branch', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb b/spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb index b8b7fc2009f..8f011f5616b 100644 --- a/spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb +++ b/spec/features/merge_request/user_sees_notes_from_forked_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees notes from forked project', :js do +RSpec.describe 'Merge request > User sees notes from forked project', :js, feature_category: :code_review do include ProjectForksHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_sees_page_metadata_spec.rb b/spec/features/merge_request/user_sees_page_metadata_spec.rb index 7b3e07152a0..f97732f91a7 100644 --- a/spec/features/merge_request/user_sees_page_metadata_spec.rb +++ b/spec/features/merge_request/user_sees_page_metadata_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees page metadata' do +RSpec.describe 'Merge request > User sees page metadata', feature_category: :code_review do let(:merge_request) { create(:merge_request, description: '**Lorem** _ipsum_ dolor sit [amet](https://example.com)') } let(:project) { merge_request.target_project } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_pipelines_from_forked_project_spec.rb b/spec/features/merge_request/user_sees_pipelines_from_forked_project_spec.rb index a9fefc89d6c..0816b14f9a5 100644 --- a/spec/features/merge_request/user_sees_pipelines_from_forked_project_spec.rb +++ b/spec/features/merge_request/user_sees_pipelines_from_forked_project_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees pipelines from forked project', :js do +RSpec.describe 'Merge request > User sees pipelines from forked project', :js, +feature_category: :continuous_integration do include ProjectForksHelper let(:target_project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_sees_pipelines_spec.rb b/spec/features/merge_request/user_sees_pipelines_spec.rb index 11e542916f9..8faaf6bf39b 100644 --- a/spec/features/merge_request/user_sees_pipelines_spec.rb +++ b/spec/features/merge_request/user_sees_pipelines_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees pipelines', :js do +RSpec.describe 'Merge request > User sees pipelines', :js, feature_category: :code_review do describe 'pipeline tab' do let(:merge_request) { create(:merge_request) } let(:project) { merge_request.target_project } @@ -35,7 +35,7 @@ RSpec.describe 'Merge request > User sees pipelines', :js do end wait_for_requests - expect(page).to have_selector('.stage-cell') + expect(page).to have_css('[data-testid="pipeline-mini-graph"]') end context 'with a detached merge request pipeline' do diff --git a/spec/features/merge_request/user_sees_suggest_pipeline_spec.rb b/spec/features/merge_request/user_sees_suggest_pipeline_spec.rb index 448ef750508..3a2e382fe99 100644 --- a/spec/features/merge_request/user_sees_suggest_pipeline_spec.rb +++ b/spec/features/merge_request/user_sees_suggest_pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees suggest pipeline', :js do +RSpec.describe 'Merge request > User sees suggest pipeline', :js, feature_category: :continuous_integration do let(:merge_request) { create(:merge_request) } let(:project) { merge_request.source_project } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_sees_system_notes_spec.rb b/spec/features/merge_request/user_sees_system_notes_spec.rb index 9f8d4c6d63f..40402c95d6f 100644 --- a/spec/features/merge_request/user_sees_system_notes_spec.rb +++ b/spec/features/merge_request/user_sees_system_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees system notes', :js do +RSpec.describe 'Merge request > User sees system notes', :js, feature_category: :code_review do let(:public_project) { create(:project, :public, :repository) } let(:private_project) { create(:project, :private, :repository) } let(:user) { private_project.creator } diff --git a/spec/features/merge_request/user_sees_versions_spec.rb b/spec/features/merge_request/user_sees_versions_spec.rb index 0e86e970f46..f0ff6e1769a 100644 --- a/spec/features/merge_request/user_sees_versions_spec.rb +++ b/spec/features/merge_request/user_sees_versions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees versions', :js do +RSpec.describe 'Merge request > User sees versions', :js, feature_category: :code_review do include MergeRequestDiffHelpers let(:merge_request) do diff --git a/spec/features/merge_request/user_sees_wip_help_message_spec.rb b/spec/features/merge_request/user_sees_wip_help_message_spec.rb index d33e54f2e3d..1a751af6ded 100644 --- a/spec/features/merge_request/user_sees_wip_help_message_spec.rb +++ b/spec/features/merge_request/user_sees_wip_help_message_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees draft help message' do +RSpec.describe 'Merge request > User sees draft help message', feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb b/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb index bcc6abd4f65..8b6c9dc18f6 100644 --- a/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb +++ b/spec/features/merge_request/user_selects_branches_for_new_mr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User selects branches for new MR', :js do +RSpec.describe 'Merge request > User selects branches for new MR', :js, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_squashes_merge_request_spec.rb b/spec/features/merge_request/user_squashes_merge_request_spec.rb index da0d4ca23d1..43590aed3cc 100644 --- a/spec/features/merge_request/user_squashes_merge_request_spec.rb +++ b/spec/features/merge_request/user_squashes_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User squashes a merge request', :js do +RSpec.describe 'User squashes a merge request', :js, feature_category: :code_review do let(:user) { create(:user) } let(:project) { create(:project, :repository) } let(:source_branch) { 'csv' } diff --git a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb index f77a42ee506..5a5494a2fe9 100644 --- a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb +++ b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User comments on a diff', :js do +RSpec.describe 'User comments on a diff', :js, feature_category: :code_review do include MergeRequestDiffHelpers include RepoHelpers diff --git a/spec/features/merge_request/user_toggles_whitespace_changes_spec.rb b/spec/features/merge_request/user_toggles_whitespace_changes_spec.rb index 19774accaaf..993eb59cb74 100644 --- a/spec/features/merge_request/user_toggles_whitespace_changes_spec.rb +++ b/spec/features/merge_request/user_toggles_whitespace_changes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User toggles whitespace changes', :js do +RSpec.describe 'Merge request > User toggles whitespace changes', :js, feature_category: :code_review do let(:merge_request) { create(:merge_request) } let(:project) { merge_request.project } let(:user) { project.creator } diff --git a/spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb b/spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb index 96a1cd81c93..5095457509a 100644 --- a/spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb +++ b/spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Merge Request > User tries to access private project information through the new mr page' do +RSpec.describe 'Merge Request > User tries to access private project information through the new mr page', +feature_category: :code_review do let(:current_user) { create(:user) } let(:private_project) do create(:project, :public, :repository, diff --git a/spec/features/merge_request/user_uses_quick_actions_spec.rb b/spec/features/merge_request/user_uses_quick_actions_spec.rb index ca102913369..99befbace74 100644 --- a/spec/features/merge_request/user_uses_quick_actions_spec.rb +++ b/spec/features/merge_request/user_uses_quick_actions_spec.rb @@ -7,7 +7,8 @@ require 'spec_helper' # for example, adding quick actions when creating the issue and checking DateTime formats on UI. # Because this kind of spec takes more time to run there is no need to add new ones # for each existing quick action unless they test something not tested by existing tests. -RSpec.describe 'Merge request > User uses quick actions', :js, :use_clean_rails_redis_caching do +RSpec.describe 'Merge request > User uses quick actions', :js, :use_clean_rails_redis_caching, +feature_category: :code_review do include Spec::Support::Helpers::Features::NotesHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_request/user_views_auto_expanding_diff_spec.rb b/spec/features/merge_request/user_views_auto_expanding_diff_spec.rb index 1748f66c934..19a77a9192c 100644 --- a/spec/features/merge_request/user_views_auto_expanding_diff_spec.rb +++ b/spec/features/merge_request/user_views_auto_expanding_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views diffs file-by-file', :js do +RSpec.describe 'User views diffs file-by-file', :js, feature_category: :code_review do let(:merge_request) do create(:merge_request, source_branch: 'squash-large-files', source_project: project, target_project: project) end diff --git a/spec/features/merge_request/user_views_diffs_commit_spec.rb b/spec/features/merge_request/user_views_diffs_commit_spec.rb index cf92603972e..84cbfb35539 100644 --- a/spec/features/merge_request/user_views_diffs_commit_spec.rb +++ b/spec/features/merge_request/user_views_diffs_commit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views diff by commit', :js do +RSpec.describe 'User views diff by commit', :js, feature_category: :code_review do let(:merge_request) do create(:merge_request_with_diffs, source_project: project, target_project: project, source_branch: 'merge-test') end diff --git a/spec/features/merge_request/user_views_diffs_file_by_file_spec.rb b/spec/features/merge_request/user_views_diffs_file_by_file_spec.rb index ad9c342df3e..9db6f86e14d 100644 --- a/spec/features/merge_request/user_views_diffs_file_by_file_spec.rb +++ b/spec/features/merge_request/user_views_diffs_file_by_file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views diffs file-by-file', :js do +RSpec.describe 'User views diffs file-by-file', :js, feature_category: :code_review do let(:merge_request) do create(:merge_request_with_diffs, source_project: project, target_project: project, source_branch: 'merge-test') end diff --git a/spec/features/merge_request/user_views_diffs_spec.rb b/spec/features/merge_request/user_views_diffs_spec.rb index 894292c99eb..7363f6dfb32 100644 --- a/spec/features/merge_request/user_views_diffs_spec.rb +++ b/spec/features/merge_request/user_views_diffs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views diffs', :js do +RSpec.describe 'User views diffs', :js, feature_category: :code_review do let(:merge_request) do create(:merge_request_with_diffs, source_project: project, target_project: project, source_branch: 'merge-test') end diff --git a/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb b/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb index e3272a6e280..2a9275adfcf 100644 --- a/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb +++ b/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb @@ -6,7 +6,7 @@ require 'spec_helper' # updated. # This can occur when the fork a merge request is created from is in the process # of being destroyed. -RSpec.describe 'User views merged merge request from deleted fork' do +RSpec.describe 'User views merged merge request from deleted fork', feature_category: :code_review do include ProjectForksHelper let(:project) { create(:project, :repository) } diff --git a/spec/features/merge_request/user_views_open_merge_request_spec.rb b/spec/features/merge_request/user_views_open_merge_request_spec.rb index 1f4682b4a46..8b9e973217d 100644 --- a/spec/features/merge_request/user_views_open_merge_request_spec.rb +++ b/spec/features/merge_request/user_views_open_merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views an open merge request' do +RSpec.describe 'User views an open merge request', feature_category: :code_review do let(:merge_request) do create(:merge_request, source_project: project, target_project: project, description: '# Description header') end diff --git a/spec/features/merge_requests/filters_generic_behavior_spec.rb b/spec/features/merge_requests/filters_generic_behavior_spec.rb index 80009cca2fb..0d6b5edcbab 100644 --- a/spec/features/merge_requests/filters_generic_behavior_spec.rb +++ b/spec/features/merge_requests/filters_generic_behavior_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > Filters generic behavior', :js do +RSpec.describe 'Merge Requests > Filters generic behavior', :js, feature_category: :code_review do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/rss_spec.rb b/spec/features/merge_requests/rss_spec.rb index 9fc3d3d6ae1..4c73ce3b684 100644 --- a/spec/features/merge_requests/rss_spec.rb +++ b/spec/features/merge_requests/rss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Merge Requests RSS' do +RSpec.describe 'Project Merge Requests RSS', feature_category: :code_review do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, :repository, group: group, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } diff --git a/spec/features/merge_requests/user_exports_as_csv_spec.rb b/spec/features/merge_requests/user_exports_as_csv_spec.rb index 351e714b612..aedd7ef4d79 100644 --- a/spec/features/merge_requests/user_exports_as_csv_spec.rb +++ b/spec/features/merge_requests/user_exports_as_csv_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > Exports as CSV', :js do +RSpec.describe 'Merge Requests > Exports as CSV', :js, feature_category: :code_review do let!(:project) { create(:project, :public, :repository) } let!(:user) { project.creator } let!(:open_mr) { create(:merge_request, title: 'Bugfix1', source_project: project, target_project: project, source_branch: 'bugfix1') } diff --git a/spec/features/merge_requests/user_filters_by_approvals_spec.rb b/spec/features/merge_requests/user_filters_by_approvals_spec.rb index 6dda9ca7952..56c8a65385c 100644 --- a/spec/features/merge_requests/user_filters_by_approvals_spec.rb +++ b/spec/features/merge_requests/user_filters_by_approvals_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters', :js do +RSpec.describe 'Merge Requests > User filters', :js, feature_category: :code_review do include FilteredSearchHelpers let_it_be(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_assignees_spec.rb b/spec/features/merge_requests/user_filters_by_assignees_spec.rb index 9827b067649..818cf6f076f 100644 --- a/spec/features/merge_requests/user_filters_by_assignees_spec.rb +++ b/spec/features/merge_requests/user_filters_by_assignees_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by assignees', :js do +RSpec.describe 'Merge Requests > User filters by assignees', :js, feature_category: :code_review do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_deployments_spec.rb b/spec/features/merge_requests/user_filters_by_deployments_spec.rb index 157454d4e10..5f7d2fa9f9a 100644 --- a/spec/features/merge_requests/user_filters_by_deployments_spec.rb +++ b/spec/features/merge_requests/user_filters_by_deployments_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by deployments', :js do +RSpec.describe 'Merge Requests > User filters by deployments', :js, feature_category: :code_review do include FilteredSearchHelpers let!(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_draft_spec.rb b/spec/features/merge_requests/user_filters_by_draft_spec.rb index de070805d96..d50d7edaefb 100644 --- a/spec/features/merge_requests/user_filters_by_draft_spec.rb +++ b/spec/features/merge_requests/user_filters_by_draft_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by draft', :js do +RSpec.describe 'Merge Requests > User filters by draft', :js, feature_category: :code_review do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_labels_spec.rb b/spec/features/merge_requests/user_filters_by_labels_spec.rb index 980046ccd71..030eb1b6431 100644 --- a/spec/features/merge_requests/user_filters_by_labels_spec.rb +++ b/spec/features/merge_requests/user_filters_by_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by labels', :js do +RSpec.describe 'Merge Requests > User filters by labels', :js, feature_category: :code_review do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_milestones_spec.rb b/spec/features/merge_requests/user_filters_by_milestones_spec.rb index 877d5e6a4ee..abdb6c7787b 100644 --- a/spec/features/merge_requests/user_filters_by_milestones_spec.rb +++ b/spec/features/merge_requests/user_filters_by_milestones_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by milestones', :js do +RSpec.describe 'Merge Requests > User filters by milestones', :js, feature_category: :code_review do include FilteredSearchHelpers let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb b/spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb index 3aba023b077..ae171f47ec3 100644 --- a/spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb +++ b/spec/features/merge_requests/user_filters_by_multiple_criteria_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge requests > User filters by multiple criteria', :js do +RSpec.describe 'Merge requests > User filters by multiple criteria', :js, feature_category: :code_review do include FilteredSearchHelpers let!(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_filters_by_target_branch_spec.rb b/spec/features/merge_requests/user_filters_by_target_branch_spec.rb index 1d9c80238f5..e0755695f5c 100644 --- a/spec/features/merge_requests/user_filters_by_target_branch_spec.rb +++ b/spec/features/merge_requests/user_filters_by_target_branch_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Requests > User filters by target branch', :js do +RSpec.describe 'Merge Requests > User filters by target branch', :js, feature_category: :code_review do include FilteredSearchHelpers let!(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_lists_merge_requests_spec.rb b/spec/features/merge_requests/user_lists_merge_requests_spec.rb index 2743f7e8ed4..d9c3bcda0d3 100644 --- a/spec/features/merge_requests/user_lists_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_lists_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge requests > User lists merge requests' do +RSpec.describe 'Merge requests > User lists merge requests', feature_category: :code_review do include MergeRequestHelpers include SortingHelper diff --git a/spec/features/merge_requests/user_mass_updates_spec.rb b/spec/features/merge_requests/user_mass_updates_spec.rb index 5c3cb098e28..133017d5b25 100644 --- a/spec/features/merge_requests/user_mass_updates_spec.rb +++ b/spec/features/merge_requests/user_mass_updates_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge requests > User mass updates', :js do +RSpec.describe 'Merge requests > User mass updates', :js, feature_category: :code_review do let(:project) { create(:project, :repository) } let(:user) { project.creator } let(:user2) { create(:user) } diff --git a/spec/features/merge_requests/user_sees_empty_state_spec.rb b/spec/features/merge_requests/user_sees_empty_state_spec.rb index 056da53c47b..a50ea300249 100644 --- a/spec/features/merge_requests/user_sees_empty_state_spec.rb +++ b/spec/features/merge_requests/user_sees_empty_state_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees empty state' do +RSpec.describe 'Merge request > User sees empty state', feature_category: :code_review do include ProjectForksHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/merge_requests/user_sorts_merge_requests_spec.rb b/spec/features/merge_requests/user_sorts_merge_requests_spec.rb index 4a124299c61..d268cfc59f3 100644 --- a/spec/features/merge_requests/user_sorts_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_sorts_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User sorts merge requests', :js do +RSpec.describe 'User sorts merge requests', :js, feature_category: :code_review do include CookieHelper include Spec::Support::Helpers::Features::SortingHelpers diff --git a/spec/features/merge_requests/user_views_all_merge_requests_spec.rb b/spec/features/merge_requests/user_views_all_merge_requests_spec.rb index f8fe2c5ebe2..b55e4bd153f 100644 --- a/spec/features/merge_requests/user_views_all_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_views_all_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views all merge requests' do +RSpec.describe 'User views all merge requests', feature_category: :code_review do let!(:closed_merge_request) { create(:closed_merge_request, source_project: project, target_project: project) } let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:project) { create(:project, :public) } diff --git a/spec/features/merge_requests/user_views_closed_merge_requests_spec.rb b/spec/features/merge_requests/user_views_closed_merge_requests_spec.rb index abc652c3bbd..4c2598dcc9c 100644 --- a/spec/features/merge_requests/user_views_closed_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_views_closed_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views closed merge requests' do +RSpec.describe 'User views closed merge requests', feature_category: :code_review do let!(:closed_merge_request) { create(:closed_merge_request, source_project: project, target_project: project) } let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:project) { create(:project, :public) } diff --git a/spec/features/merge_requests/user_views_merged_merge_requests_spec.rb b/spec/features/merge_requests/user_views_merged_merge_requests_spec.rb index 3b93fb7e4bf..2526f1a855b 100644 --- a/spec/features/merge_requests/user_views_merged_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_views_merged_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views merged merge requests' do +RSpec.describe 'User views merged merge requests', feature_category: :code_review do let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let!(:merged_merge_request) { create(:merged_merge_request, source_project: project, target_project: project) } let(:project) { create(:project, :public) } diff --git a/spec/features/merge_requests/user_views_open_merge_requests_spec.rb b/spec/features/merge_requests/user_views_open_merge_requests_spec.rb index 49509f89a8d..3c53bc5e283 100644 --- a/spec/features/merge_requests/user_views_open_merge_requests_spec.rb +++ b/spec/features/merge_requests/user_views_open_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views open merge requests' do +RSpec.describe 'User views open merge requests', feature_category: :code_review do let_it_be(:user) { create(:user) } shared_examples_for 'shows merge requests' do diff --git a/spec/features/milestone_spec.rb b/spec/features/milestone_spec.rb index 98d623902a5..50cd6b9e801 100644 --- a/spec/features/milestone_spec.rb +++ b/spec/features/milestone_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Milestone' do +RSpec.describe 'Milestone', feature_category: :team_planning do let(:group) { create(:group, :public) } let(:project) { create(:project, :public, namespace: group) } let(:user) { create(:user) } diff --git a/spec/features/milestones/user_creates_milestone_spec.rb b/spec/features/milestones/user_creates_milestone_spec.rb index 1ab231632fb..b750f035e36 100644 --- a/spec/features/milestones/user_creates_milestone_spec.rb +++ b/spec/features/milestones/user_creates_milestone_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "User creates milestone", :js do +RSpec.describe "User creates milestone", :js, feature_category: :team_planning do let_it_be(:developer) { create(:user) } let_it_be(:inherited_guest) { create(:user) } let_it_be(:inherited_developer) { create(:user) } diff --git a/spec/features/milestones/user_deletes_milestone_spec.rb b/spec/features/milestones/user_deletes_milestone_spec.rb index 40626407642..141e626c6f3 100644 --- a/spec/features/milestones/user_deletes_milestone_spec.rb +++ b/spec/features/milestones/user_deletes_milestone_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "User deletes milestone", :js do +RSpec.describe "User deletes milestone", :js, feature_category: :team_planning do let(:user) { create(:user) } let(:group) { create(:group) } let(:project) { create(:project, namespace: group) } diff --git a/spec/features/milestones/user_edits_milestone_spec.rb b/spec/features/milestones/user_edits_milestone_spec.rb index 3edd50922b6..438ca6a2518 100644 --- a/spec/features/milestones/user_edits_milestone_spec.rb +++ b/spec/features/milestones/user_edits_milestone_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "User edits milestone", :js do +RSpec.describe "User edits milestone", :js, feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } let_it_be(:milestone) { create(:milestone, project: project, start_date: Date.today, due_date: 5.days.from_now) } diff --git a/spec/features/milestones/user_promotes_milestone_spec.rb b/spec/features/milestones/user_promotes_milestone_spec.rb index a9c3c9706a0..0eacf36cdde 100644 --- a/spec/features/milestones/user_promotes_milestone_spec.rb +++ b/spec/features/milestones/user_promotes_milestone_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User promotes milestone' do +RSpec.describe 'User promotes milestone', feature_category: :team_planning do let_it_be(:group) { create(:group) } let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, namespace: group) } diff --git a/spec/features/milestones/user_sees_breadcrumb_links_spec.rb b/spec/features/milestones/user_sees_breadcrumb_links_spec.rb index e9cfa9b20dc..febe803426a 100644 --- a/spec/features/milestones/user_sees_breadcrumb_links_spec.rb +++ b/spec/features/milestones/user_sees_breadcrumb_links_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New project milestone breadcrumb' do +RSpec.describe 'New project milestone breadcrumb', feature_category: :team_planning do let(:project) { create(:project) } let(:milestone) { create(:milestone, project: project) } let(:user) { project.creator } diff --git a/spec/features/milestones/user_views_milestone_spec.rb b/spec/features/milestones/user_views_milestone_spec.rb index 8674d59afdf..6c8dc47cce1 100644 --- a/spec/features/milestones/user_views_milestone_spec.rb +++ b/spec/features/milestones/user_views_milestone_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "User views milestone" do +RSpec.describe "User views milestone", feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, :repository, group: group) } diff --git a/spec/features/milestones/user_views_milestones_spec.rb b/spec/features/milestones/user_views_milestones_spec.rb index 752cc63486f..81823d6ba30 100644 --- a/spec/features/milestones/user_views_milestones_spec.rb +++ b/spec/features/milestones/user_views_milestones_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "User views milestones" do +RSpec.describe "User views milestones", feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } let_it_be(:milestone) { create(:milestone, project: project) } diff --git a/spec/features/monitor_sidebar_link_spec.rb b/spec/features/monitor_sidebar_link_spec.rb index 4f529179522..d5f987d15c2 100644 --- a/spec/features/monitor_sidebar_link_spec.rb +++ b/spec/features/monitor_sidebar_link_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Monitor dropdown sidebar', :aggregate_failures do +RSpec.describe 'Monitor dropdown sidebar', :aggregate_failures, feature_category: :not_owned do let_it_be_with_reload(:project) { create(:project, :internal, :repository) } let_it_be(:user) { create(:user) } @@ -19,21 +19,13 @@ RSpec.describe 'Monitor dropdown sidebar', :aggregate_failures do let(:enabled) { Featurable::PRIVATE } let(:disabled) { Featurable::DISABLED } - where(:flag_enabled, :operations_access_level, :monitor_level, :render) do - true | ref(:disabled) | ref(:enabled) | true - true | ref(:disabled) | ref(:disabled) | false - true | ref(:enabled) | ref(:enabled) | true - true | ref(:enabled) | ref(:disabled) | false - false | ref(:disabled) | ref(:enabled) | false - false | ref(:disabled) | ref(:disabled) | false - false | ref(:enabled) | ref(:enabled) | true - false | ref(:enabled) | ref(:disabled) | true + where(:monitor_level, :render) do + ref(:enabled) | true + ref(:disabled) | false end with_them do it 'renders when expected to' do - stub_feature_flags(split_operations_visibility_permissions: flag_enabled) - project.project_feature.update_attribute(:operations_access_level, operations_access_level) project.project_feature.update_attribute(:monitor_access_level, monitor_level) visit project_issues_path(project) @@ -51,7 +43,6 @@ RSpec.describe 'Monitor dropdown sidebar', :aggregate_failures do let(:access_level) { ProjectFeature::PUBLIC } before do - project.project_feature.update_attribute(:operations_access_level, access_level) project.project_feature.update_attribute(:monitor_access_level, access_level) end @@ -67,41 +58,19 @@ RSpec.describe 'Monitor dropdown sidebar', :aggregate_failures do expect(page).not_to have_link('Kubernetes', href: project_clusters_path(project)) end - context 'with new monitor visiblity flag disabled' do - stub_feature_flags(split_operations_visibility_permissions: false) + context 'when monitor project feature is PRIVATE' do + let(:access_level) { ProjectFeature::PRIVATE } - context 'when operations project feature is PRIVATE' do - let(:access_level) { ProjectFeature::PRIVATE } - - it 'does not show the `Monitor` menu' do - expect(page).not_to have_selector('a.shortcuts-monitor') - end - end - - context 'when operations project feature is DISABLED' do - let(:access_level) { ProjectFeature::DISABLED } - - it 'does not show the `Operations` menu' do - expect(page).not_to have_selector('a.shortcuts-monitor') - end + it 'does not show the `Monitor` menu' do + expect(page).not_to have_selector('a.shortcuts-monitor') end end - context 'with new monitor visiblity flag enabled' do - context 'when monitor project feature is PRIVATE' do - let(:access_level) { ProjectFeature::PRIVATE } + context 'when monitor project feature is DISABLED' do + let(:access_level) { ProjectFeature::DISABLED } - it 'does not show the `Monitor` menu' do - expect(page).not_to have_selector('a.shortcuts-monitor') - end - end - - context 'when operations project feature is DISABLED' do - let(:access_level) { ProjectFeature::DISABLED } - - it 'does not show the `Operations` menu' do - expect(page).not_to have_selector('a.shortcuts-monitor') - end + it 'does not show the `Monitor` menu' do + expect(page).not_to have_selector('a.shortcuts-monitor') end end end diff --git a/spec/features/nav/new_nav_toggle_spec.rb b/spec/features/nav/new_nav_toggle_spec.rb new file mode 100644 index 00000000000..f040d801cfb --- /dev/null +++ b/spec/features/nav/new_nav_toggle_spec.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'new navigation toggle', :js, feature_category: :navigation do + let_it_be(:user) { create(:user) } + + before do + user.update!(use_new_navigation: user_preference) + stub_feature_flags(super_sidebar_nav: new_nav_ff) + sign_in(user) + visit explore_projects_path + end + + context 'with feature flag off' do + let(:new_nav_ff) { false } + + where(:user_preference) do + [true, false] + end + + with_them do + it 'shows old topbar user dropdown with no way to toggle to new nav' do + within '.js-header-content .js-nav-user-dropdown' do + find('a[data-toggle="dropdown"]').click + expect(page).not_to have_content('Navigation redesign') + end + end + end + end + + context 'with feature flag on' do + let(:new_nav_ff) { true } + + context 'when user has new nav disabled' do + let(:user_preference) { false } + + it 'allows to enable new nav', :aggregate_failures do + within '.js-nav-user-dropdown' do + find('a[data-toggle="dropdown"]').click + expect(page).to have_content('Navigation redesign') + + toggle = page.find('.gl-toggle:not(.is-checked)') + toggle.click # reloads the page + end + + wait_for_requests + + expect(user.reload.use_new_navigation).to eq true + end + end + + context 'when user has new nav enabled' do + let(:user_preference) { true } + + it 'allows to disable new nav', :aggregate_failures do + within '.js-nav-user-dropdown' do + find('a[data-toggle="dropdown"]').click + expect(page).to have_content('Navigation redesign') + + toggle = page.find('.gl-toggle.is-checked') + toggle.click # reloads the page + end + + wait_for_requests + + expect(user.reload.use_new_navigation).to eq false + end + end + end +end diff --git a/spec/features/nav/top_nav_responsive_spec.rb b/spec/features/nav/top_nav_responsive_spec.rb index 4f8e47b5068..d038c5d9e32 100644 --- a/spec/features/nav/top_nav_responsive_spec.rb +++ b/spec/features/nav/top_nav_responsive_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'top nav responsive', :js do +RSpec.describe 'top nav responsive', :js, feature_category: :navigation do include MobileHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/nav/top_nav_tooltip_spec.rb b/spec/features/nav/top_nav_tooltip_spec.rb index a110c6cfecf..17828778112 100644 --- a/spec/features/nav/top_nav_tooltip_spec.rb +++ b/spec/features/nav/top_nav_tooltip_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'top nav tooltips', :js do +RSpec.describe 'top nav tooltips', :js, feature_category: :navigation do let_it_be(:user) { create(:user) } before do diff --git a/spec/features/oauth_login_spec.rb b/spec/features/oauth_login_spec.rb index fca8972b56c..07d0fca0139 100644 --- a/spec/features/oauth_login_spec.rb +++ b/spec/features/oauth_login_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'OAuth Login', :allow_forgery_protection do +RSpec.describe 'OAuth Login', :allow_forgery_protection, feature_category: :system_access do include DeviseHelpers def enter_code(code) diff --git a/spec/features/oauth_provider_authorize_spec.rb b/spec/features/oauth_provider_authorize_spec.rb index f5a1a35b66f..7638563b4a3 100644 --- a/spec/features/oauth_provider_authorize_spec.rb +++ b/spec/features/oauth_provider_authorize_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'OAuth Provider' do +RSpec.describe 'OAuth Provider', feature_category: :system_access do describe 'Standard OAuth Authorization' do let(:application) { create(:oauth_application, scopes: 'read_user') } diff --git a/spec/features/oauth_registration_spec.rb b/spec/features/oauth_registration_spec.rb index 0a35b5a7e42..48996164bd3 100644 --- a/spec/features/oauth_registration_spec.rb +++ b/spec/features/oauth_registration_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'OAuth Registration', :js, :allow_forgery_protection do +RSpec.describe 'OAuth Registration', :js, :allow_forgery_protection, feature_category: :system_access do include LoginHelpers include TermsHelper using RSpec::Parameterized::TableSyntax diff --git a/spec/features/one_trust_spec.rb b/spec/features/one_trust_spec.rb index a7dfbfd6bdf..2aeb722886e 100644 --- a/spec/features/one_trust_spec.rb +++ b/spec/features/one_trust_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'OneTrust' do +RSpec.describe 'OneTrust', feature_category: :system_access do context 'almost there page' do context 'when OneTrust is enabled' do let_it_be(:onetrust_url) { 'https://*.onetrust.com' } diff --git a/spec/features/participants_autocomplete_spec.rb b/spec/features/participants_autocomplete_spec.rb index b2739454b52..272365ac7ee 100644 --- a/spec/features/participants_autocomplete_spec.rb +++ b/spec/features/participants_autocomplete_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Member autocomplete', :js do +RSpec.describe 'Member autocomplete', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public, :repository) } let_it_be(:user) { create(:user) } let_it_be(:author) { create(:user) } diff --git a/spec/features/password_reset_spec.rb b/spec/features/password_reset_spec.rb index f89e19f5361..7d36e905327 100644 --- a/spec/features/password_reset_spec.rb +++ b/spec/features/password_reset_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Password reset' do +RSpec.describe 'Password reset', feature_category: :system_access do describe 'throttling' do it 'sends reset instructions when not previously sent' do user = create(:user) diff --git a/spec/features/populate_new_pipeline_vars_with_params_spec.rb b/spec/features/populate_new_pipeline_vars_with_params_spec.rb index 75fa8561235..a83b5a81a41 100644 --- a/spec/features/populate_new_pipeline_vars_with_params_spec.rb +++ b/spec/features/populate_new_pipeline_vars_with_params_spec.rb @@ -2,47 +2,29 @@ require 'spec_helper' -RSpec.describe "Populate new pipeline CI variables with url params", :js do +RSpec.describe "Populate new pipeline CI variables with url params", :js, feature_category: :pipeline_authoring do let(:user) { create(:user) } let(:project) { create(:project) } let(:page_path) { new_project_pipeline_path(project) } - shared_examples 'form pre-filled with URL params' do - before do - sign_in(user) - project.add_maintainer(user) + before do + sign_in(user) + project.add_maintainer(user) - visit "#{page_path}?var[key1]=value1&file_var[key2]=value2" - end - - it "var[key1]=value1 populates env_var variable correctly" do - page.within(all("[data-testid='ci-variable-row']")[0]) do - expect(find("[data-testid='pipeline-form-ci-variable-key']").value).to eq('key1') - expect(find("[data-testid='pipeline-form-ci-variable-value']").value).to eq('value1') - end - end - - it "file_var[key2]=value2 populates file variable correctly" do - page.within(all("[data-testid='ci-variable-row']")[1]) do - expect(find("[data-testid='pipeline-form-ci-variable-key']").value).to eq('key2') - expect(find("[data-testid='pipeline-form-ci-variable-value']").value).to eq('value2') - end - end + visit "#{page_path}?var[key1]=value1&file_var[key2]=value2" end - context 'when feature flag is disabled' do - before do - stub_feature_flags(run_pipeline_graphql: false) + it "var[key1]=value1 populates env_var variable correctly" do + page.within(all("[data-testid='ci-variable-row']")[0]) do + expect(find("[data-testid='pipeline-form-ci-variable-key']").value).to eq('key1') + expect(find("[data-testid='pipeline-form-ci-variable-value']").value).to eq('value1') end - - it_behaves_like 'form pre-filled with URL params' end - context 'when feature flag is enabled' do - before do - stub_feature_flags(run_pipeline_graphql: true) + it "file_var[key2]=value2 populates file variable correctly" do + page.within(all("[data-testid='ci-variable-row']")[1]) do + expect(find("[data-testid='pipeline-form-ci-variable-key']").value).to eq('key2') + expect(find("[data-testid='pipeline-form-ci-variable-value']").value).to eq('value2') end - - it_behaves_like 'form pre-filled with URL params' end end diff --git a/spec/features/profile_spec.rb b/spec/features/profile_spec.rb index ca156642bc8..87a65438768 100644 --- a/spec/features/profile_spec.rb +++ b/spec/features/profile_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile account page', :js do +RSpec.describe 'Profile account page', :js, feature_category: :users do include Spec::Support::Helpers::ModalHelpers let(:user) { create(:user) } diff --git a/spec/features/profiles/account_spec.rb b/spec/features/profiles/account_spec.rb index 4fe0c3d035e..82c45862e07 100644 --- a/spec/features/profiles/account_spec.rb +++ b/spec/features/profiles/account_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile > Account', :js do +RSpec.describe 'Profile > Account', :js, feature_category: :users do let(:user) { create(:user, username: 'foo') } before do diff --git a/spec/features/profiles/active_sessions_spec.rb b/spec/features/profiles/active_sessions_spec.rb index d0819bb5363..5c20735cf35 100644 --- a/spec/features/profiles/active_sessions_spec.rb +++ b/spec/features/profiles/active_sessions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile > Active Sessions', :clean_gitlab_redis_shared_state do +RSpec.describe 'Profile > Active Sessions', :clean_gitlab_redis_shared_state, feature_category: :users do include Spec::Support::Helpers::ModalHelpers let(:user) do diff --git a/spec/features/profiles/chat_names_spec.rb b/spec/features/profiles/chat_names_spec.rb index 82134de582a..b3d65ab3a3c 100644 --- a/spec/features/profiles/chat_names_spec.rb +++ b/spec/features/profiles/chat_names_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile > Chat' do +RSpec.describe 'Profile > Chat', feature_category: :users do let(:user) { create(:user) } let(:integration) { create(:integration) } diff --git a/spec/features/profiles/emails_spec.rb b/spec/features/profiles/emails_spec.rb index 24917412826..e8ea227c072 100644 --- a/spec/features/profiles/emails_spec.rb +++ b/spec/features/profiles/emails_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile > Emails' do +RSpec.describe 'Profile > Emails', feature_category: :users do let(:user) { create(:user) } let(:other_user) { create(:user) } diff --git a/spec/features/profiles/gpg_keys_spec.rb b/spec/features/profiles/gpg_keys_spec.rb index 4eedeeac262..1d014f983e7 100644 --- a/spec/features/profiles/gpg_keys_spec.rb +++ b/spec/features/profiles/gpg_keys_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile > GPG Keys' do +RSpec.describe 'Profile > GPG Keys', feature_category: :users do let(:user) { create(:user, email: GpgHelpers::User2.emails.first) } before do diff --git a/spec/features/profiles/keys_spec.rb b/spec/features/profiles/keys_spec.rb index 65944f5a537..7a2a12d8dca 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' do +RSpec.describe 'Profile > SSH Keys', feature_category: :users do let(:user) { create(:user) } before do @@ -80,7 +80,7 @@ RSpec.describe 'Profile > SSH Keys' do shared_examples 'removes key' do it 'removes key' do visit path - click_button('Delete') + find('[data-testid=remove-icon]').click page.within('.modal') do page.click_button('Delete') diff --git a/spec/features/profiles/oauth_applications_spec.rb b/spec/features/profiles/oauth_applications_spec.rb index 7d8cd2dc6ca..80d05fd5cc7 100644 --- a/spec/features/profiles/oauth_applications_spec.rb +++ b/spec/features/profiles/oauth_applications_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile > Applications' do +RSpec.describe 'Profile > Applications', feature_category: :users do include Spec::Support::Helpers::ModalHelpers let(:user) { create(:user) } diff --git a/spec/features/profiles/password_spec.rb b/spec/features/profiles/password_spec.rb index 8887ff1746d..b324ee17873 100644 --- a/spec/features/profiles/password_spec.rb +++ b/spec/features/profiles/password_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile > Password' do +RSpec.describe 'Profile > Password', feature_category: :users do let(:user) { create(:user) } def fill_passwords(password, confirmation) diff --git a/spec/features/profiles/personal_access_tokens_spec.rb b/spec/features/profiles/personal_access_tokens_spec.rb index 3ae88da06f6..3087d7ff296 100644 --- a/spec/features/profiles/personal_access_tokens_spec.rb +++ b/spec/features/profiles/personal_access_tokens_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Profile > Personal Access Tokens', :js do +RSpec.describe 'Profile > Personal Access Tokens', :js, feature_category: :users do include Spec::Support::Helpers::ModalHelpers include Spec::Support::Helpers::AccessTokenHelpers diff --git a/spec/features/profiles/two_factor_auths_spec.rb b/spec/features/profiles/two_factor_auths_spec.rb index decc2904b6e..8dddaad11c3 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' do +RSpec.describe 'Two factor auths', feature_category: :users do include Spec::Support::Helpers::ModalHelpers context 'when signed in' do diff --git a/spec/features/profiles/user_changes_notified_of_own_activity_spec.rb b/spec/features/profiles/user_changes_notified_of_own_activity_spec.rb index 1b6215c1308..197a33c355d 100644 --- a/spec/features/profiles/user_changes_notified_of_own_activity_spec.rb +++ b/spec/features/profiles/user_changes_notified_of_own_activity_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Profile > Notifications > User changes notified_of_own_activity setting', :js do +RSpec.describe 'Profile > Notifications > User changes notified_of_own_activity setting', :js, +feature_category: :users do let(:user) { create(:user) } before do diff --git a/spec/features/profiles/user_edit_preferences_spec.rb b/spec/features/profiles/user_edit_preferences_spec.rb index c724de04043..1a231f1d269 100644 --- a/spec/features/profiles/user_edit_preferences_spec.rb +++ b/spec/features/profiles/user_edit_preferences_spec.rb @@ -2,16 +2,18 @@ require 'spec_helper' -RSpec.describe 'User edit preferences profile', :js do +RSpec.describe 'User edit preferences profile', :js, feature_category: :users do include StubLanguagesTranslationPercentage # Empty value doesn't change the levels let(:language_percentage_levels) { nil } let(:user) { create(:user) } + let(:vscode_web_ide) { true } before do stub_languages_translation_percentage(language_percentage_levels) stub_feature_flags(user_time_settings: true) + stub_feature_flags(vscode_web_ide: vscode_web_ide) sign_in(user) visit(profile_preferences_path) end @@ -36,6 +38,24 @@ RSpec.describe 'User edit preferences profile', :js do expect(field).not_to be_checked end + it 'allows the user to toggle using the legacy web ide' do + field = page.find_field("user[use_legacy_web_ide]") + + expect(field).not_to be_checked + + field.click + + expect(field).to be_checked + end + + describe 'when vscode_web_ide feature flag is disabled' do + let(:vscode_web_ide) { false } + + it 'does not display the legacy web ide user preference' do + expect(page).not_to have_field("user[use_legacy_web_ide]") + end + end + describe 'User changes tab width to acceptable value' do it 'shows success message' do fill_in 'Tab width', with: 9 diff --git a/spec/features/profiles/user_edit_profile_spec.rb b/spec/features/profiles/user_edit_profile_spec.rb index 1d99f7a8511..67604292090 100644 --- a/spec/features/profiles/user_edit_profile_spec.rb +++ b/spec/features/profiles/user_edit_profile_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User edit profile' do +RSpec.describe 'User edit profile', feature_category: :users do include Spec::Support::Helpers::Features::NotesHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/profiles/user_manages_applications_spec.rb b/spec/features/profiles/user_manages_applications_spec.rb index ea7a6b4b6ba..179da61b8ed 100644 --- a/spec/features/profiles/user_manages_applications_spec.rb +++ b/spec/features/profiles/user_manages_applications_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User manages applications' do +RSpec.describe 'User manages applications', feature_category: :users do let_it_be(:user) { create(:user) } let_it_be(:new_application_path) { applications_profile_path } let_it_be(:index_path) { oauth_applications_path } diff --git a/spec/features/profiles/user_manages_emails_spec.rb b/spec/features/profiles/user_manages_emails_spec.rb index b037d5048aa..16a9fbc2f47 100644 --- a/spec/features/profiles/user_manages_emails_spec.rb +++ b/spec/features/profiles/user_manages_emails_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User manages emails' do +RSpec.describe 'User manages emails', feature_category: :users do let(:user) { create(:user) } let(:other_user) { create(:user) } diff --git a/spec/features/profiles/user_search_settings_spec.rb b/spec/features/profiles/user_search_settings_spec.rb index 0b05e6c9489..09ee8ddeaab 100644 --- a/spec/features/profiles/user_search_settings_spec.rb +++ b/spec/features/profiles/user_search_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches their settings', :js do +RSpec.describe 'User searches their settings', :js, feature_category: :users do let_it_be(:user) { create(:user) } before do diff --git a/spec/features/profiles/user_visits_notifications_tab_spec.rb b/spec/features/profiles/user_visits_notifications_tab_spec.rb index e960cc76219..d212982f4e3 100644 --- a/spec/features/profiles/user_visits_notifications_tab_spec.rb +++ b/spec/features/profiles/user_visits_notifications_tab_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User visits the notifications tab', :js do +RSpec.describe 'User visits the notifications tab', :js, feature_category: :users do let(:project) { create(:project) } let(:user) { create(:user) } diff --git a/spec/features/profiles/user_visits_profile_account_page_spec.rb b/spec/features/profiles/user_visits_profile_account_page_spec.rb index b4d1185412b..1cf34478ecf 100644 --- a/spec/features/profiles/user_visits_profile_account_page_spec.rb +++ b/spec/features/profiles/user_visits_profile_account_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User visits the profile account page' do +RSpec.describe 'User visits the profile account page', feature_category: :users do let(:user) { create(:user) } before do diff --git a/spec/features/profiles/user_visits_profile_authentication_log_spec.rb b/spec/features/profiles/user_visits_profile_authentication_log_spec.rb index 22292eff9a3..726cca4a4bd 100644 --- a/spec/features/profiles/user_visits_profile_authentication_log_spec.rb +++ b/spec/features/profiles/user_visits_profile_authentication_log_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User visits the authentication log' do +RSpec.describe 'User visits the authentication log', feature_category: :users do let(:user) { create(:user) } context 'when user signed in' do diff --git a/spec/features/profiles/user_visits_profile_preferences_page_spec.rb b/spec/features/profiles/user_visits_profile_preferences_page_spec.rb index 4c61e8d45e4..9eee1b85e5e 100644 --- a/spec/features/profiles/user_visits_profile_preferences_page_spec.rb +++ b/spec/features/profiles/user_visits_profile_preferences_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User visits the profile preferences page', :js do +RSpec.describe 'User visits the profile preferences page', :js, feature_category: :users do include Select2Helper let(:user) { create(:user) } diff --git a/spec/features/profiles/user_visits_profile_spec.rb b/spec/features/profiles/user_visits_profile_spec.rb index df096c2f151..7fca0f24deb 100644 --- a/spec/features/profiles/user_visits_profile_spec.rb +++ b/spec/features/profiles/user_visits_profile_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User visits their profile' do +RSpec.describe 'User visits their profile', feature_category: :users do let_it_be_with_refind(:user) { create(:user) } before do diff --git a/spec/features/profiles/user_visits_profile_ssh_keys_page_spec.rb b/spec/features/profiles/user_visits_profile_ssh_keys_page_spec.rb index 0531434f00c..8467e9abeaf 100644 --- a/spec/features/profiles/user_visits_profile_ssh_keys_page_spec.rb +++ b/spec/features/profiles/user_visits_profile_ssh_keys_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User visits the profile SSH keys page' do +RSpec.describe 'User visits the profile SSH keys page', feature_category: :users do let(:user) { create(:user) } before do diff --git a/spec/features/project_group_variables_spec.rb b/spec/features/project_group_variables_spec.rb index fc482261fb1..0e1e6e49c6d 100644 --- a/spec/features/project_group_variables_spec.rb +++ b/spec/features/project_group_variables_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project group variables', :js do +RSpec.describe 'Project group variables', :js, feature_category: :pipeline_authoring do let(:user) { create(:user) } let(:group) { create(:group) } let(:subgroup) { create(:group, parent: group) } diff --git a/spec/features/project_variables_spec.rb b/spec/features/project_variables_spec.rb index 33b4af3b5aa..d1258937ce6 100644 --- a/spec/features/project_variables_spec.rb +++ b/spec/features/project_variables_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project variables', :js do +RSpec.describe 'Project variables', :js, feature_category: :pipeline_authoring do let(:user) { create(:user) } let(:project) { create(:project) } let(:variable) { create(:ci_variable, key: 'test_key', value: 'test_value', masked: true) } diff --git a/spec/features/projects/active_tabs_spec.rb b/spec/features/projects/active_tabs_spec.rb index ff97d3c9503..c27c9530f61 100644 --- a/spec/features/projects/active_tabs_spec.rb +++ b/spec/features/projects/active_tabs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project active tab' do +RSpec.describe 'Project active tab', feature_category: :projects do let_it_be(:project) { create(:project, :repository, :with_namespace_settings) } let(:user) { project.first_owner } diff --git a/spec/features/projects/activity/rss_spec.rb b/spec/features/projects/activity/rss_spec.rb index a3e511b5c22..5297f30220d 100644 --- a/spec/features/projects/activity/rss_spec.rb +++ b/spec/features/projects/activity/rss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Activity RSS' do +RSpec.describe 'Project Activity RSS', feature_category: :projects do let(:project) { create(:project, :public) } let(:user) { project.first_owner } let(:path) { activity_project_path(project) } diff --git a/spec/features/projects/activity/user_sees_activity_spec.rb b/spec/features/projects/activity/user_sees_activity_spec.rb index a9cdbd5c342..cfa62415c49 100644 --- a/spec/features/projects/activity/user_sees_activity_spec.rb +++ b/spec/features/projects/activity/user_sees_activity_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Activity > User sees activity' do +RSpec.describe 'Projects > Activity > User sees activity', feature_category: :projects do let(:project) { create(:project, :repository, :public) } let(:user) { project.creator } let(:issue) { create(:issue, project: project) } diff --git a/spec/features/projects/activity/user_sees_design_activity_spec.rb b/spec/features/projects/activity/user_sees_design_activity_spec.rb index 70153921b82..6a51e548700 100644 --- a/spec/features/projects/activity/user_sees_design_activity_spec.rb +++ b/spec/features/projects/activity/user_sees_design_activity_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Activity > User sees design Activity', :js do +RSpec.describe 'Projects > Activity > User sees design Activity', :js, feature_category: :design_management do include DesignManagementTestHelpers let_it_be(:uploader) { create(:user) } diff --git a/spec/features/projects/activity/user_sees_design_comment_spec.rb b/spec/features/projects/activity/user_sees_design_comment_spec.rb index 3a8e2790858..2d333e55b13 100644 --- a/spec/features/projects/activity/user_sees_design_comment_spec.rb +++ b/spec/features/projects/activity/user_sees_design_comment_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Activity > User sees design comment', :js do +RSpec.describe 'Projects > Activity > User sees design comment', :js, feature_category: :design_management do include DesignManagementTestHelpers let_it_be(:project) { create(:project, :repository, :public) } diff --git a/spec/features/projects/activity/user_sees_private_activity_spec.rb b/spec/features/projects/activity/user_sees_private_activity_spec.rb index 86692bc6b4c..e0aaf1dbbc3 100644 --- a/spec/features/projects/activity/user_sees_private_activity_spec.rb +++ b/spec/features/projects/activity/user_sees_private_activity_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project > Activity > User sees private activity', :js do +RSpec.describe 'Project > Activity > User sees private activity', :js, feature_category: :projects do let(:project) { create(:project, :public) } let(:author) { create(:user) } let(:user) { create(:user) } diff --git a/spec/features/projects/artifacts/file_spec.rb b/spec/features/projects/artifacts/file_spec.rb index f97c1b0e543..fe38cbc70f1 100644 --- a/spec/features/projects/artifacts/file_spec.rb +++ b/spec/features/projects/artifacts/file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Artifact file', :js do +RSpec.describe 'Artifact file', :js, feature_category: :build_artifacts do let(:project) { create(:project, :public) } let(:pipeline) { create(:ci_empty_pipeline, project: project) } let(:build) { create(:ci_build, :artifacts, pipeline: pipeline) } diff --git a/spec/features/projects/artifacts/raw_spec.rb b/spec/features/projects/artifacts/raw_spec.rb index c10cb56a44b..544875d36e3 100644 --- a/spec/features/projects/artifacts/raw_spec.rb +++ b/spec/features/projects/artifacts/raw_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Raw artifact' do +RSpec.describe 'Raw artifact', feature_category: :build_artifacts do let(:project) { create(:project, :public) } let(:pipeline) { create(:ci_empty_pipeline, project: project) } let(:job) { create(:ci_build, :artifacts, pipeline: pipeline) } diff --git a/spec/features/projects/artifacts/user_browses_artifacts_spec.rb b/spec/features/projects/artifacts/user_browses_artifacts_spec.rb index c0d710fe186..6948a26196b 100644 --- a/spec/features/projects/artifacts/user_browses_artifacts_spec.rb +++ b/spec/features/projects/artifacts/user_browses_artifacts_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User browses artifacts" do +RSpec.describe "User browses artifacts", feature_category: :build_artifacts do let(:project) { create(:project, :public) } let(:pipeline) { create(:ci_empty_pipeline, project: project) } let(:job) { create(:ci_build, :artifacts, pipeline: pipeline) } diff --git a/spec/features/projects/artifacts/user_downloads_artifacts_spec.rb b/spec/features/projects/artifacts/user_downloads_artifacts_spec.rb index 7d6ae03e08e..48dcb95e09b 100644 --- a/spec/features/projects/artifacts/user_downloads_artifacts_spec.rb +++ b/spec/features/projects/artifacts/user_downloads_artifacts_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User downloads artifacts" do +RSpec.describe "User downloads artifacts", feature_category: :build_artifacts do let_it_be(:project) { create(:project, :repository, :public) } let_it_be(:pipeline) { create(:ci_empty_pipeline, status: :success, sha: project.commit.id, project: project) } let_it_be(:job) { create(:ci_build, :artifacts, :success, pipeline: pipeline) } diff --git a/spec/features/projects/badges/coverage_spec.rb b/spec/features/projects/badges/coverage_spec.rb index 7555e567c37..3c8b17607ca 100644 --- a/spec/features/projects/badges/coverage_spec.rb +++ b/spec/features/projects/badges/coverage_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'test coverage badge' do +RSpec.describe 'test coverage badge', feature_category: :code_testing do let!(:user) { create(:user) } let!(:project) { create(:project, :private) } diff --git a/spec/features/projects/badges/list_spec.rb b/spec/features/projects/badges/list_spec.rb index d1e635f11c0..e6bd4b22b0a 100644 --- a/spec/features/projects/badges/list_spec.rb +++ b/spec/features/projects/badges/list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'list of badges' do +RSpec.describe 'list of badges', feature_category: :continuous_integration do before do user = create(:user) project = create(:project, :repository) diff --git a/spec/features/projects/badges/pipeline_badge_spec.rb b/spec/features/projects/badges/pipeline_badge_spec.rb index e3a01ab6fa2..c0f5d0ffead 100644 --- a/spec/features/projects/badges/pipeline_badge_spec.rb +++ b/spec/features/projects/badges/pipeline_badge_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Pipeline Badge' do +RSpec.describe 'Pipeline Badge', feature_category: :continuous_integration do let_it_be(:project) { create(:project, :repository, :public) } let(:ref) { project.default_branch } diff --git a/spec/features/projects/blobs/blame_spec.rb b/spec/features/projects/blobs/blame_spec.rb index 5287d5e4f7d..27b7c6ef2d5 100644 --- a/spec/features/projects/blobs/blame_spec.rb +++ b/spec/features/projects/blobs/blame_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'File blame', :js do +RSpec.describe 'File blame', :js, feature_category: :projects do include TreeHelper let_it_be(:project) { create(:project, :public, :repository) } diff --git a/spec/features/projects/blobs/blob_line_permalink_updater_spec.rb b/spec/features/projects/blobs/blob_line_permalink_updater_spec.rb index 9b0edcd09d2..48ee39dad19 100644 --- a/spec/features/projects/blobs/blob_line_permalink_updater_spec.rb +++ b/spec/features/projects/blobs/blob_line_permalink_updater_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Blob button line permalinks (BlobLinePermalinkUpdater)', :js do +RSpec.describe 'Blob button line permalinks (BlobLinePermalinkUpdater)', :js, feature_category: :projects do include TreeHelper let(:project) { create(:project, :public, :repository) } diff --git a/spec/features/projects/blobs/blob_show_spec.rb b/spec/features/projects/blobs/blob_show_spec.rb index e01382cf31f..b7e0e3fd590 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 do +RSpec.describe 'File blob', :js, feature_category: :projects do include MobileHelpers let(:project) { create(:project, :public, :repository) } @@ -589,76 +589,35 @@ RSpec.describe 'File blob', :js do file_path: '.gitlab/dashboards/custom-dashboard.yml', file_content: file_content ).execute - end - - context 'with metrics_dashboard_exhaustive_validations feature flag off' do - before do - stub_feature_flags(metrics_dashboard_exhaustive_validations: false) - visit_blob('.gitlab/dashboards/custom-dashboard.yml') - end - - context 'valid dashboard file' do - let(:file_content) { File.read(Rails.root.join('config/prometheus/common_metrics.yml')) } - - it 'displays an auxiliary viewer' do - aggregate_failures do - # shows that dashboard yaml is valid - expect(page).to have_content('Metrics Dashboard YAML definition is valid.') - - # shows a learn more link - expect(page).to have_link('Learn more') - end - end - end - - context 'invalid dashboard file' do - let(:file_content) { "dashboard: 'invalid'" } - - it 'displays an auxiliary viewer' do - aggregate_failures do - # shows that dashboard yaml is invalid - expect(page).to have_content('Metrics Dashboard YAML definition is invalid:') - expect(page).to have_content("panel_groups: should be an array of panel_groups objects") - # shows a learn more link - expect(page).to have_link('Learn more') - end - end - end + visit_blob('.gitlab/dashboards/custom-dashboard.yml') end - context 'with metrics_dashboard_exhaustive_validations feature flag on' do - before do - stub_feature_flags(metrics_dashboard_exhaustive_validations: true) - visit_blob('.gitlab/dashboards/custom-dashboard.yml') - end - - context 'valid dashboard file' do - let(:file_content) { File.read(Rails.root.join('config/prometheus/common_metrics.yml')) } + context 'valid dashboard file' do + let(:file_content) { File.read(Rails.root.join('config/prometheus/common_metrics.yml')) } - it 'displays an auxiliary viewer' do - aggregate_failures do - # shows that dashboard yaml is valid - expect(page).to have_content('Metrics Dashboard YAML definition is valid.') + it 'displays an auxiliary viewer' do + aggregate_failures do + # shows that dashboard yaml is valid + expect(page).to have_content('Metrics Dashboard YAML definition is valid.') - # shows a learn more link - expect(page).to have_link('Learn more') - end + # shows a learn more link + expect(page).to have_link('Learn more') end end + end - context 'invalid dashboard file' do - let(:file_content) { "dashboard: 'invalid'" } + context 'invalid dashboard file' do + let(:file_content) { "dashboard: 'invalid'" } - it 'displays an auxiliary viewer' do - aggregate_failures do - # shows that dashboard yaml is invalid - expect(page).to have_content('Metrics Dashboard YAML definition is invalid:') - expect(page).to have_content("root is missing required keys: panel_groups") + it 'displays an auxiliary viewer' do + aggregate_failures do + # shows that dashboard yaml is invalid + expect(page).to have_content('Metrics Dashboard YAML definition is invalid:') + expect(page).to have_content("panel_groups: should be an array of panel_groups objects") - # shows a learn more link - expect(page).to have_link('Learn more') - end + # shows a learn more link + expect(page).to have_link('Learn more') end end end @@ -1002,7 +961,7 @@ RSpec.describe 'File blob', :js do end it 'renders sandboxed iframe' do - expected = %(<iframe src="/-/sandbox/swagger" sandbox="allow-scripts allow-popups" frameborder="0" width="100%" height="1000">) + expected = %(<iframe src="/-/sandbox/swagger" sandbox="allow-scripts allow-popups allow-forms" frameborder="0" width="100%" height="1000">) expect(page.html).to include(expected) end end diff --git a/spec/features/projects/blobs/edit_spec.rb b/spec/features/projects/blobs/edit_spec.rb index 5587b8abab3..144b4ed85cd 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 do +RSpec.describe 'Editing file blob', :js, feature_category: :projects do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers include TreeHelper include BlobSpecHelpers @@ -97,11 +97,16 @@ RSpec.describe 'Editing file blob', :js do "Add a table" ] - before do + it "does not have any buttons" do + stub_feature_flags(source_editor_toolbar: true) visit project_edit_blob_path(project, tree_join(branch, readme_file_path)) + buttons = page.all('.file-buttons .md-header-toolbar button[type="button"]') + expect(buttons.length).to eq(0) end - it "has defined set of toolbar buttons" do + it "has defined set of toolbar buttons when the flag is off" do + stub_feature_flags(source_editor_toolbar: false) + visit project_edit_blob_path(project, tree_join(branch, readme_file_path)) buttons = page.all('.file-buttons .md-header-toolbar button[type="button"]') expect(buttons.length).to eq(toolbar_buttons.length) toolbar_buttons.each_with_index do |button_title, i| diff --git a/spec/features/projects/blobs/shortcuts_blob_spec.rb b/spec/features/projects/blobs/shortcuts_blob_spec.rb index 64d643aa102..03276a737da 100644 --- a/spec/features/projects/blobs/shortcuts_blob_spec.rb +++ b/spec/features/projects/blobs/shortcuts_blob_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Blob shortcuts', :js do +RSpec.describe 'Blob shortcuts', :js, feature_category: :projects do include TreeHelper let(:project) { create(:project, :public, :repository) } let(:path) { project.repository.ls_files(project.repository.root_ref)[0] } 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 a2db5e11c7c..a497be4cbc3 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 do +RSpec.describe 'User follows pipeline suggest nudge spec when feature is enabled', :js, feature_category: :projects do include CookieHelper let(:project) { create(:project, :empty_repo) } diff --git a/spec/features/projects/blobs/user_views_pipeline_editor_button_spec.rb b/spec/features/projects/blobs/user_views_pipeline_editor_button_spec.rb index 15e7a495e60..2f67e909543 100644 --- a/spec/features/projects/blobs/user_views_pipeline_editor_button_spec.rb +++ b/spec/features/projects/blobs/user_views_pipeline_editor_button_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views pipeline editor button on root ci config file', :js do +RSpec.describe 'User views pipeline editor button on root ci config file', :js, feature_category: :projects do include BlobSpecHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/branches/download_buttons_spec.rb b/spec/features/projects/branches/download_buttons_spec.rb index 569a93a55fc..80ccd9c1417 100644 --- a/spec/features/projects/branches/download_buttons_spec.rb +++ b/spec/features/projects/branches/download_buttons_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Download buttons in branches page' do +RSpec.describe 'Download buttons in branches page', feature_category: :projects do let(:user) { create(:user) } let(:role) { :developer } let(:status) { 'success' } 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 5f58e446ed9..eb370cfc1fc 100644 --- a/spec/features/projects/branches/new_branch_ref_dropdown_spec.rb +++ b/spec/features/projects/branches/new_branch_ref_dropdown_spec.rb @@ -2,10 +2,11 @@ require 'spec_helper' -RSpec.describe 'New Branch Ref Dropdown', :js do +RSpec.describe 'New Branch Ref Dropdown', :js, feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } - let(:toggle) { find('.create-from .dropdown-menu-toggle') } + let(:sha) { project.commit.sha } + let(:toggle) { find('.ref-selector') } before do project.add_maintainer(user) @@ -14,37 +15,75 @@ RSpec.describe 'New Branch Ref Dropdown', :js do visit new_project_branch_path(project) end - it 'filters a list of branches and tags' do + it 'finds a tag in a list' do + tag_name = 'v1.0.0' + toggle.click - filter_by('v1.0.0') + filter_by(tag_name) + + wait_for_requests + + expect(items_count(tag_name)).to be(1) - expect(items_count).to be(1) + item(tag_name).click - filter_by('video') + expect(toggle).to have_content tag_name + end + + it 'finds a branch in a list' do + branch_name = 'audio' - expect(items_count).to be(1) + toggle.click - find('.create-from .dropdown-content li').click + filter_by(branch_name) - expect(toggle).to have_content 'video' + wait_for_requests + + expect(items_count(branch_name)).to be(1) + + item(branch_name).click + + expect(toggle).to have_content branch_name end - it 'accepts a manually entered commit SHA' do + it 'finds a commit in a list' do toggle.click - filter_by('somecommitsha') + filter_by(sha) + + wait_for_requests + + sha_short = sha[0, 7] - find('.create-from input[type=search]').send_keys(:enter) + expect(items_count(sha_short)).to be(1) + + item(sha_short).click + + expect(toggle).to have_content sha_short + end + + it 'shows no results when there is no branch, tag or commit sha found' do + non_existing_ref = 'non_existing_branch_name' + + toggle.click + + filter_by(non_existing_ref) + + wait_for_requests + + expect(find('.gl-dropdown-contents')).not_to have_content(non_existing_ref) + end - expect(toggle).to have_content 'somecommitsha' + def item(ref_name) + find('li', text: ref_name, match: :prefer_exact) end - def items_count - all('.create-from .dropdown-content li').length + def items_count(ref_name) + all('li', text: ref_name, match: :prefer_exact).length end def filter_by(filter_text) - fill_in 'Filter by Git revision', with: filter_text + fill_in _('Search by Git revision'), with: filter_text end end diff --git a/spec/features/projects/branches/user_creates_branch_spec.rb b/spec/features/projects/branches/user_creates_branch_spec.rb index be236b7ca7e..60bd77393e9 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 do +RSpec.describe 'User creates branch', :js, feature_category: :projects do include Spec::Support::Helpers::Features::BranchesHelpers let_it_be(:group) { create(:group, :public) } @@ -81,11 +81,7 @@ RSpec.describe 'User creates branch', :js do it 'does not create new branch' do invalid_branch_name = '1.0 stable' - fill_in('branch_name', with: invalid_branch_name) - page.find('body').click # defocus the branch_name input - - select_branch('master') - click_button('Create branch') + create_branch(invalid_branch_name) expect(page).to have_content('Branch name is invalid') expect(page).to have_content("can't contain spaces") diff --git a/spec/features/projects/branches/user_deletes_branch_spec.rb b/spec/features/projects/branches/user_deletes_branch_spec.rb index a89fed3a78a..92b5f176d2d 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 do +RSpec.describe "User deletes branch", :js, feature_category: :projects 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 3f0614532f1..f0a1ba84ec6 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 do +RSpec.describe "User views branches", :js, feature_category: :projects 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 ecf6349e431..fc7833809b3 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' do +RSpec.describe 'Branches', feature_category: :projects do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :public, :repository) } let(:repository) { project.repository } @@ -143,7 +143,7 @@ RSpec.describe 'Branches' do click_button "Updated date" # Open sorting dropdown within '[data-testid="branches-dropdown"]' do - find('p', text: 'Name').click + first('span', text: 'Name').click end expect(page).to have_content(sorted_branches(repository, count: 20, sort_by: :name)) @@ -154,7 +154,7 @@ RSpec.describe 'Branches' do click_button "Updated date" # Open sorting dropdown within '[data-testid="branches-dropdown"]' do - find('p', text: 'Oldest updated').click + first('span', text: 'Oldest updated').click end expect(page).to have_content(sorted_branches(repository, count: 20, sort_by: :updated_asc)) diff --git a/spec/features/projects/ci/editor_spec.rb b/spec/features/projects/ci/editor_spec.rb index c96d5f5823f..536152626af 100644 --- a/spec/features/projects/ci/editor_spec.rb +++ b/spec/features/projects/ci/editor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Pipeline Editor', :js do +RSpec.describe 'Pipeline Editor', :js, feature_category: :pipeline_authoring do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers let(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/ci/lint_spec.rb b/spec/features/projects/ci/lint_spec.rb index 8d5f62d8a06..4fea07b18bc 100644 --- a/spec/features/projects/ci/lint_spec.rb +++ b/spec/features/projects/ci/lint_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'CI Lint', :js do +RSpec.describe 'CI Lint', :js, feature_category: :pipeline_authoring do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers let_it_be(:project) { create(:project, :repository) } diff --git a/spec/features/projects/classification_label_on_project_pages_spec.rb b/spec/features/projects/classification_label_on_project_pages_spec.rb index 9522e5ce2cf..662b2296234 100644 --- a/spec/features/projects/classification_label_on_project_pages_spec.rb +++ b/spec/features/projects/classification_label_on_project_pages_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Classification label on project pages' do +RSpec.describe 'Classification label on project pages', feature_category: :projects do let(:project) do create(:project, external_authorization_classification_label: 'authorized label') end diff --git a/spec/features/projects/cluster_agents_spec.rb b/spec/features/projects/cluster_agents_spec.rb index 8c557a9c37a..43046db2b6c 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 do +RSpec.describe 'ClusterAgents', :js, feature_category: :projects do let_it_be(:token) { create(:cluster_agent_token, description: 'feature test token') } let(:agent) { token.agent } diff --git a/spec/features/projects/clusters/gcp_spec.rb b/spec/features/projects/clusters/gcp_spec.rb index 5c54b7fda7c..114182982e2 100644 --- a/spec/features/projects/clusters/gcp_spec.rb +++ b/spec/features/projects/clusters/gcp_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Gcp Cluster', :js do +RSpec.describe 'Gcp Cluster', :js, feature_category: :kubernetes_management do include GoogleApi::CloudPlatformHelpers let(:project) { create(:project) } diff --git a/spec/features/projects/clusters/user_spec.rb b/spec/features/projects/clusters/user_spec.rb index 527d038f975..34fc0a76c7f 100644 --- a/spec/features/projects/clusters/user_spec.rb +++ b/spec/features/projects/clusters/user_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User Cluster', :js do +RSpec.describe 'User Cluster', :js, feature_category: :kubernetes_management do include GoogleApi::CloudPlatformHelpers let(:project) { create(:project) } diff --git a/spec/features/projects/clusters_spec.rb b/spec/features/projects/clusters_spec.rb index 9e1d66bc73e..3fb586bd143 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 do +RSpec.describe 'Clusters', :js, feature_category: :projects do include GoogleApi::CloudPlatformHelpers let(:project) { create(:project) } diff --git a/spec/features/projects/commit/builds_spec.rb b/spec/features/projects/commit/builds_spec.rb index 7b10f72006f..dfd58a99953 100644 --- a/spec/features/projects/commit/builds_spec.rb +++ b/spec/features/projects/commit/builds_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'project commit pipelines', :js do +RSpec.describe 'project commit pipelines', :js, feature_category: :continuous_integration do let(:project) { create(:project, :repository) } before do diff --git a/spec/features/projects/commit/cherry_pick_spec.rb b/spec/features/projects/commit/cherry_pick_spec.rb index fce9fa4fb62..dc8b84283a1 100644 --- a/spec/features/projects/commit/cherry_pick_spec.rb +++ b/spec/features/projects/commit/cherry_pick_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Cherry-pick Commits', :js do +RSpec.describe 'Cherry-pick Commits', :js, feature_category: :source_code_management do let_it_be(:user) { create(:user) } let_it_be(:sha) { '7d3b0f7cff5f37573aea97cebfd5692ea1689924' } diff --git a/spec/features/projects/commit/comments/user_adds_comment_spec.rb b/spec/features/projects/commit/comments/user_adds_comment_spec.rb index a470215186b..c53ac27bb5f 100644 --- a/spec/features/projects/commit/comments/user_adds_comment_spec.rb +++ b/spec/features/projects/commit/comments/user_adds_comment_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User adds a comment on a commit", :js do +RSpec.describe "User adds a comment on a commit", :js, feature_category: :source_code_management do include Spec::Support::Helpers::Features::NotesHelpers include RepoHelpers diff --git a/spec/features/projects/commit/comments/user_deletes_comments_spec.rb b/spec/features/projects/commit/comments/user_deletes_comments_spec.rb index 9059f9e4857..a1e7ddb4d6e 100644 --- a/spec/features/projects/commit/comments/user_deletes_comments_spec.rb +++ b/spec/features/projects/commit/comments/user_deletes_comments_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User deletes comments on a commit", :js do +RSpec.describe "User deletes comments on a commit", :js, feature_category: :source_code_management do include Spec::Support::Helpers::Features::NotesHelpers include Spec::Support::Helpers::ModalHelpers include RepoHelpers diff --git a/spec/features/projects/commit/comments/user_edits_comments_spec.rb b/spec/features/projects/commit/comments/user_edits_comments_spec.rb index 8ac15c9cb7f..9019a981a18 100644 --- a/spec/features/projects/commit/comments/user_edits_comments_spec.rb +++ b/spec/features/projects/commit/comments/user_edits_comments_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User edits a comment on a commit", :js do +RSpec.describe "User edits a comment on a commit", :js, feature_category: :source_code_management do include Spec::Support::Helpers::Features::NotesHelpers include RepoHelpers diff --git a/spec/features/projects/commit/diff_notes_spec.rb b/spec/features/projects/commit/diff_notes_spec.rb index 6cebff1cc9a..f29e0803f61 100644 --- a/spec/features/projects/commit/diff_notes_spec.rb +++ b/spec/features/projects/commit/diff_notes_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Commit diff', :js do +RSpec.describe 'Commit diff', :js, feature_category: :source_code_management do include RepoHelpers let(:user) { create(:user) } diff --git a/spec/features/projects/commit/mini_pipeline_graph_spec.rb b/spec/features/projects/commit/mini_pipeline_graph_spec.rb index 417e14e2376..3611efd1477 100644 --- a/spec/features/projects/commit/mini_pipeline_graph_spec.rb +++ b/spec/features/projects/commit/mini_pipeline_graph_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Mini Pipeline Graph in Commit View', :js do +RSpec.describe 'Mini Pipeline Graph in Commit View', :js, feature_category: :source_code_management do let(:project) { create(:project, :public, :repository) } context 'when commit has pipelines' do diff --git a/spec/features/projects/commit/user_comments_on_commit_spec.rb b/spec/features/projects/commit/user_comments_on_commit_spec.rb index a7f23f093a3..66a407b5ff6 100644 --- a/spec/features/projects/commit/user_comments_on_commit_spec.rb +++ b/spec/features/projects/commit/user_comments_on_commit_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User comments on commit", :js do +RSpec.describe "User comments on commit", :js, feature_category: :source_code_management do include Spec::Support::Helpers::Features::NotesHelpers include Spec::Support::Helpers::ModalHelpers include RepoHelpers diff --git a/spec/features/projects/commit/user_reverts_commit_spec.rb b/spec/features/projects/commit/user_reverts_commit_spec.rb index 1c6cf5eb258..8c7b8e6ba32 100644 --- a/spec/features/projects/commit/user_reverts_commit_spec.rb +++ b/spec/features/projects/commit/user_reverts_commit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User reverts a commit', :js do +RSpec.describe 'User reverts a commit', :js, feature_category: :source_code_management do include RepoHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/commit/user_views_user_status_on_commit_spec.rb b/spec/features/projects/commit/user_views_user_status_on_commit_spec.rb index cc3c70e66ce..5670ed17eba 100644 --- a/spec/features/projects/commit/user_views_user_status_on_commit_spec.rb +++ b/spec/features/projects/commit/user_views_user_status_on_commit_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project > Commit > View user status' do +RSpec.describe 'Project > Commit > View user status', feature_category: :source_code_management do include RepoHelpers let_it_be(:project) { create(:project, :repository) } diff --git a/spec/features/projects/commits/multi_view_diff_spec.rb b/spec/features/projects/commits/multi_view_diff_spec.rb index c0e48b7b86c..b178a1c2171 100644 --- a/spec/features/projects/commits/multi_view_diff_spec.rb +++ b/spec/features/projects/commits/multi_view_diff_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.shared_examples "no multiple viewers" do |commit_ref| +RSpec.shared_examples "no multiple viewers", feature_category: :source_code_management do |commit_ref| let(:ref) { commit_ref } it "does not display multiple diff viewers" do diff --git a/spec/features/projects/commits/rss_spec.rb b/spec/features/projects/commits/rss_spec.rb index b521bb865ae..49da0727fbd 100644 --- a/spec/features/projects/commits/rss_spec.rb +++ b/spec/features/projects/commits/rss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Commits RSS' do +RSpec.describe 'Project Commits RSS', feature_category: :source_code_management do let(:user) { create(:user) } let(:project) { create(:project, :repository, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } let(:path) { project_commits_path(project, :master) } diff --git a/spec/features/projects/commits/user_browses_commits_spec.rb b/spec/features/projects/commits/user_browses_commits_spec.rb index 2719316c5dc..791f626b8d9 100644 --- a/spec/features/projects/commits/user_browses_commits_spec.rb +++ b/spec/features/projects/commits/user_browses_commits_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User browses commits' do +RSpec.describe 'User browses commits', feature_category: :source_code_management do include RepoHelpers let(:user) { create(:user) } @@ -208,6 +208,10 @@ RSpec.describe 'User browses commits' do expect(page).not_to have_link 'Create merge request' end + it 'shows ref switcher with correct text', :js do + expect(find('.ref-selector')).to have_text('master') + end + context 'when click the compare tab' do before do wait_for_requests @@ -220,9 +224,18 @@ RSpec.describe 'User browses commits' do end end - context 'feature branch' do + context 'feature branch', :js do let(:visit_commits_page) do - visit project_commits_path(project, 'feature') + visit project_commits_path(project) + + find('.ref-selector').click + wait_for_requests + + page.within('.ref-selector') do + fill_in 'Search by Git revision', with: 'feature' + wait_for_requests + find('li', text: 'feature', match: :prefer_exact).click + end end context 'when project does not have open merge requests' do @@ -230,6 +243,10 @@ RSpec.describe 'User browses commits' do visit_commits_page end + it 'shows ref switcher with correct text' do + expect(find('.ref-selector')).to have_text('feature') + end + it 'renders project commits' do commit = project.repository.commit('0b4bc9a') diff --git a/spec/features/projects/compare_spec.rb b/spec/features/projects/compare_spec.rb index 22b0f344606..8284299443f 100644 --- a/spec/features/projects/compare_spec.rb +++ b/spec/features/projects/compare_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "Compare", :js do +RSpec.describe "Compare", :js, feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, :repository) } @@ -17,10 +17,10 @@ RSpec.describe "Compare", :js do visit project_compare_index_path(project, from: 'master', to: 'master') select_using_dropdown 'from', 'feature' - expect(find('.js-compare-from-dropdown .gl-new-dropdown-button-text')).to have_content('feature') + expect(find('.js-compare-from-dropdown .gl-dropdown-button-text')).to have_content('feature') select_using_dropdown 'to', 'binary-encoding' - expect(find('.js-compare-to-dropdown .gl-new-dropdown-button-text')).to have_content('binary-encoding') + expect(find('.js-compare-to-dropdown .gl-dropdown-button-text')).to have_content('binary-encoding') click_button 'Compare' @@ -32,8 +32,8 @@ RSpec.describe "Compare", :js do it "pre-populates fields" do visit project_compare_index_path(project, from: "master", to: "master") - expect(find(".js-compare-from-dropdown .gl-new-dropdown-button-text")).to have_content("master") - expect(find(".js-compare-to-dropdown .gl-new-dropdown-button-text")).to have_content("master") + expect(find(".js-compare-from-dropdown .gl-dropdown-button-text")).to have_content("master") + expect(find(".js-compare-to-dropdown .gl-dropdown-button-text")).to have_content("master") end it_behaves_like 'compares branches' @@ -99,7 +99,7 @@ RSpec.describe "Compare", :js do find(".js-compare-from-dropdown .compare-dropdown-toggle").click - expect(find(".js-compare-from-dropdown .gl-new-dropdown-contents")).to have_selector('li.gl-new-dropdown-item', count: 1) + expect(find(".js-compare-from-dropdown .gl-dropdown-contents")).to have_selector('li.gl-dropdown-item', count: 1) end context 'when commit has overflow', :js do @@ -153,10 +153,10 @@ RSpec.describe "Compare", :js do visit project_compare_index_path(project, from: "master", to: "master") select_using_dropdown "from", "v1.0.0" - expect(find(".js-compare-from-dropdown .gl-new-dropdown-button-text")).to have_content("v1.0.0") + expect(find(".js-compare-from-dropdown .gl-dropdown-button-text")).to have_content("v1.0.0") select_using_dropdown "to", "v1.1.0" - expect(find(".js-compare-to-dropdown .gl-new-dropdown-button-text")).to have_content("v1.1.0") + expect(find(".js-compare-to-dropdown .gl-dropdown-button-text")).to have_content("v1.1.0") click_button "Compare" expect(page).to have_content "Commits" diff --git a/spec/features/projects/confluence/user_views_confluence_page_spec.rb b/spec/features/projects/confluence/user_views_confluence_page_spec.rb index 49e7839f16c..c1ce6ea4536 100644 --- a/spec/features/projects/confluence/user_views_confluence_page_spec.rb +++ b/spec/features/projects/confluence/user_views_confluence_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views the Confluence page' do +RSpec.describe 'User views the Confluence page', feature_category: :integrations do let_it_be(:user) { create(:user) } let(:project) { create(:project, :public) } diff --git a/spec/features/projects/container_registry_spec.rb b/spec/features/projects/container_registry_spec.rb index e99af734c43..98cf024afa8 100644 --- a/spec/features/projects/container_registry_spec.rb +++ b/spec/features/projects/container_registry_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Container Registry', :js do +RSpec.describe 'Container Registry', :js, feature_category: :projects do include_context 'container registry tags' let(:user) { create(:user) } @@ -104,8 +104,6 @@ RSpec.describe 'Container Registry', :js do find('.modal .modal-footer .btn-danger').click end - it_behaves_like 'rejecting tags destruction for an importing repository on', tags: ['1'] - it('pagination navigate to the second page') do visit_next_page diff --git a/spec/features/projects/deploy_keys_spec.rb b/spec/features/projects/deploy_keys_spec.rb index 06462263f5a..bd48fb68304 100644 --- a/spec/features/projects/deploy_keys_spec.rb +++ b/spec/features/projects/deploy_keys_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project deploy keys', :js do +RSpec.describe 'Project deploy keys', :js, feature_category: :projects do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project_empty_repo) } let_it_be(:deploy_keys_project) { create(:deploy_keys_project, project: project) } diff --git a/spec/features/projects/diffs/diff_show_spec.rb b/spec/features/projects/diffs/diff_show_spec.rb index dcd6f1239bb..973c61de31d 100644 --- a/spec/features/projects/diffs/diff_show_spec.rb +++ b/spec/features/projects/diffs/diff_show_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Diff file viewer', :js, :with_clean_rails_cache do +RSpec.describe 'Diff file viewer', :js, :with_clean_rails_cache, feature_category: :code_review do let(:project) { create(:project, :public, :repository) } def visit_commit(sha, anchor: nil) diff --git a/spec/features/projects/environments/environment_metrics_spec.rb b/spec/features/projects/environments/environment_metrics_spec.rb index d486d8cf551..4a112445ab9 100644 --- a/spec/features/projects/environments/environment_metrics_spec.rb +++ b/spec/features/projects/environments/environment_metrics_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Environment > Metrics' do +RSpec.describe 'Environment > Metrics', feature_category: :projects do include PrometheusHelpers let(:user) { create(:user) } diff --git a/spec/features/projects/environments/environment_spec.rb b/spec/features/projects/environments/environment_spec.rb index 706c880d097..75913082803 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' do +RSpec.describe 'Environment', feature_category: :projects do let_it_be(:project) { create(:project, :repository) } let(:user) { create(:user) } let(:role) { :developer } @@ -10,12 +10,83 @@ RSpec.describe 'Environment' do before do sign_in(user) project.add_role(user, role) + stub_feature_flags(environment_details_vue: false) end def auto_stop_button_selector %q{button[title="Prevent environment from auto-stopping"]} end + describe 'environment details page vue' do + let_it_be(:environment) { create(:environment, project: project) } + let!(:permissions) {} + let!(:deployment) {} + let!(:action) {} + let!(:cluster) {} + + before do + stub_feature_flags(environment_details_vue: true) + end + + context 'with auto-stop' do + let_it_be(:environment) { create(:environment, :will_auto_stop, name: 'staging', project: project) } + + before do + visit_environment(environment) + end + + it 'shows auto stop info', :js do + expect(page).to have_content('Auto stops') + end + + it 'shows auto stop button', :js do + expect(page).to have_selector(auto_stop_button_selector) + expect(page.find(auto_stop_button_selector).find(:xpath, '..')['action']).to have_content(cancel_auto_stop_project_environment_path(environment.project, environment)) + end + + it 'allows user to cancel auto stop', :js do + page.find(auto_stop_button_selector).click + wait_for_all_requests + expect(page).to have_content('Auto stop successfully canceled.') + expect(page).not_to have_selector(auto_stop_button_selector) + end + end + + context 'with deployments' do + before do + visit_environment(environment) + end + + context 'when there is a successful deployment' do + let(:pipeline) { create(:ci_pipeline, project: project) } + let(:build) { create(:ci_build, :success, pipeline: pipeline) } + + let(:deployment) do + create(:deployment, :success, environment: environment, deployable: build) + end + + it 'does show deployments', :js do + wait_for_requests + expect(page).to have_link("#{build.name} (##{build.id})") + end + end + + context 'when there is a failed deployment' do + let(:pipeline) { create(:ci_pipeline, project: project) } + let(:build) { create(:ci_build, pipeline: pipeline) } + + let(:deployment) do + create(:deployment, :failed, environment: environment, deployable: build) + end + + it 'does show deployments', :js do + wait_for_requests + expect(page).to have_link("#{build.name} (##{build.id})") + end + end + end + end + describe 'environment details page' do let_it_be(:environment) { create(:environment, project: project) } let!(:permissions) {} diff --git a/spec/features/projects/environments/environments_spec.rb b/spec/features/projects/environments/environments_spec.rb index b445b0da901..788bf6477b1 100644 --- a/spec/features/projects/environments/environments_spec.rb +++ b/spec/features/projects/environments/environments_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Environments page', :js do +RSpec.describe 'Environments page', :js, feature_category: :projects do include Spec::Support::Helpers::ModalHelpers let(:project) { create(:project) } diff --git a/spec/features/projects/feature_flag_user_lists/user_deletes_feature_flag_user_list_spec.rb b/spec/features/projects/feature_flag_user_lists/user_deletes_feature_flag_user_list_spec.rb index 37d6f299883..6383c3196c4 100644 --- a/spec/features/projects/feature_flag_user_lists/user_deletes_feature_flag_user_list_spec.rb +++ b/spec/features/projects/feature_flag_user_lists/user_deletes_feature_flag_user_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User deletes feature flag user list', :js do +RSpec.describe 'User deletes feature flag user list', :js, feature_category: :projects do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } diff --git a/spec/features/projects/feature_flag_user_lists/user_edits_feature_flag_user_list_spec.rb b/spec/features/projects/feature_flag_user_lists/user_edits_feature_flag_user_list_spec.rb index b37c2780827..8ab9e9baab9 100644 --- a/spec/features/projects/feature_flag_user_lists/user_edits_feature_flag_user_list_spec.rb +++ b/spec/features/projects/feature_flag_user_lists/user_edits_feature_flag_user_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User edits feature flag user list', :js do +RSpec.describe 'User edits feature flag user list', :js, feature_category: :projects do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } diff --git a/spec/features/projects/feature_flag_user_lists/user_sees_feature_flag_user_list_details_spec.rb b/spec/features/projects/feature_flag_user_lists/user_sees_feature_flag_user_list_details_spec.rb index dfebe6408bd..7614349c5a4 100644 --- a/spec/features/projects/feature_flag_user_lists/user_sees_feature_flag_user_list_details_spec.rb +++ b/spec/features/projects/feature_flag_user_lists/user_sees_feature_flag_user_list_details_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User sees feature flag user list details', :js do +RSpec.describe 'User sees feature flag user list details', :js, feature_category: :projects do let_it_be(:project) { create(:project) } let_it_be(:developer) { create(:user) } diff --git a/spec/features/projects/feature_flags/user_deletes_feature_flag_spec.rb b/spec/features/projects/feature_flags/user_deletes_feature_flag_spec.rb index 43540dc4522..852d7bca96a 100644 --- a/spec/features/projects/feature_flags/user_deletes_feature_flag_spec.rb +++ b/spec/features/projects/feature_flags/user_deletes_feature_flag_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User deletes feature flag', :js do +RSpec.describe 'User deletes feature flag', :js, feature_category: :feature_flags do include FeatureFlagHelpers let(:user) { create(:user) } diff --git a/spec/features/projects/feature_flags/user_sees_feature_flag_list_spec.rb b/spec/features/projects/feature_flags/user_sees_feature_flag_list_spec.rb index 949e530f86d..e2448887531 100644 --- a/spec/features/projects/feature_flags/user_sees_feature_flag_list_spec.rb +++ b/spec/features/projects/feature_flags/user_sees_feature_flag_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User sees feature flag list', :js do +RSpec.describe 'User sees feature flag list', :js, feature_category: :feature_flags do include FeatureFlagHelpers let_it_be(:user) { create(:user) } @@ -42,7 +42,7 @@ RSpec.describe 'User sees feature flag list', :js do expect_status_toggle_button_not_to_be_checked within_feature_flag_scopes do - expect(page.find('[data-testid="strategy-badge"]')).to have_content('All Users: All Environments, review/*') + expect(page.find('[data-testid="strategy-label"]')).to have_content('All Users: All Environments, review/*') end end end @@ -66,7 +66,7 @@ RSpec.describe 'User sees feature flag list', :js do expect_status_toggle_button_to_be_checked within_feature_flag_scopes do - expect(page.find('[data-testid="strategy-badge"]')).to have_content('All Users: production') + expect(page.find('[data-testid="strategy-label"]')).to have_content('All Users: production') end end end diff --git a/spec/features/projects/feature_flags/user_updates_feature_flag_spec.rb b/spec/features/projects/feature_flags/user_updates_feature_flag_spec.rb index eb9ac078662..ce99ae92d63 100644 --- a/spec/features/projects/feature_flags/user_updates_feature_flag_spec.rb +++ b/spec/features/projects/feature_flags/user_updates_feature_flag_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User updates feature flag', :js do +RSpec.describe 'User updates feature flag', :js, feature_category: :feature_flags do include FeatureFlagHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/features_visibility_spec.rb b/spec/features/projects/features_visibility_spec.rb index 649c21d4459..5e0998412ed 100644 --- a/spec/features/projects/features_visibility_spec.rb +++ b/spec/features/projects/features_visibility_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Edit Project Settings' do +RSpec.describe 'Edit Project Settings', feature_category: :projects do let(:member) { create(:user) } let!(:project) { create(:project, :public, :repository) } let!(:issue) { create(:issue, project: project) } diff --git a/spec/features/projects/files/dockerfile_dropdown_spec.rb b/spec/features/projects/files/dockerfile_dropdown_spec.rb index dd1635c900e..1e05bdae204 100644 --- a/spec/features/projects/files/dockerfile_dropdown_spec.rb +++ b/spec/features/projects/files/dockerfile_dropdown_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > User wants to add a Dockerfile file', :js do +RSpec.describe 'Projects > Files > User wants to add a Dockerfile file', :js, feature_category: :projects do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers before do diff --git a/spec/features/projects/files/download_buttons_spec.rb b/spec/features/projects/files/download_buttons_spec.rb index a486d7517ac..2710e2efa94 100644 --- a/spec/features/projects/files/download_buttons_spec.rb +++ b/spec/features/projects/files/download_buttons_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > Download buttons in files tree' do +RSpec.describe 'Projects > Files > Download buttons in files tree', feature_category: :projects do let(:project) { create(:project, :repository) } let(:user) { project.creator } diff --git a/spec/features/projects/files/edit_file_soft_wrap_spec.rb b/spec/features/projects/files/edit_file_soft_wrap_spec.rb index e08c53a67dd..f6342257847 100644 --- a/spec/features/projects/files/edit_file_soft_wrap_spec.rb +++ b/spec/features/projects/files/edit_file_soft_wrap_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > User uses soft wrap while editing file', :js do +RSpec.describe 'Projects > Files > User uses soft wrap while editing file', :js, feature_category: :projects do before do project = create(:project, :repository) user = project.first_owner diff --git a/spec/features/projects/files/editing_a_file_spec.rb b/spec/features/projects/files/editing_a_file_spec.rb index e256bec2a1c..04f45de42cc 100644 --- a/spec/features/projects/files/editing_a_file_spec.rb +++ b/spec/features/projects/files/editing_a_file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > User wants to edit a file' do +RSpec.describe 'Projects > Files > User wants to edit a file', feature_category: :projects do let(:project) { create(:project, :repository) } let(:user) { project.first_owner } let(:commit_params) do diff --git a/spec/features/projects/files/files_sort_submodules_with_folders_spec.rb b/spec/features/projects/files/files_sort_submodules_with_folders_spec.rb index a283f7d128c..d791e22e4f8 100644 --- a/spec/features/projects/files/files_sort_submodules_with_folders_spec.rb +++ b/spec/features/projects/files/files_sort_submodules_with_folders_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > User views files page' do +RSpec.describe 'Projects > Files > User views files page', feature_category: :projects do let(:project) { create(:forked_project_with_submodules) } let(:user) { project.first_owner } diff --git a/spec/features/projects/files/find_file_keyboard_spec.rb b/spec/features/projects/files/find_file_keyboard_spec.rb index 9ae3be4993b..19813396435 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 do +RSpec.describe 'Projects > Files > Find file keyboard shortcuts', :js, feature_category: :projects do let(:project) { create(:project, :repository) } let(:user) { project.first_owner } diff --git a/spec/features/projects/files/gitignore_dropdown_spec.rb b/spec/features/projects/files/gitignore_dropdown_spec.rb index a86adf951d8..5e11a94e65b 100644 --- a/spec/features/projects/files/gitignore_dropdown_spec.rb +++ b/spec/features/projects/files/gitignore_dropdown_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > User wants to add a .gitignore file', :js do +RSpec.describe 'Projects > Files > User wants to add a .gitignore file', :js, feature_category: :projects do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers before do diff --git a/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb b/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb index 46ac0dee7eb..67678a937e5 100644 --- a/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb +++ b/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > User wants to add a .gitlab-ci.yml file', :js do +RSpec.describe 'Projects > Files > User wants to add a .gitlab-ci.yml file', :js, feature_category: :projects do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers let(:params) { {} } 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 c9ba8cbd2bb..7ac9cb33060 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 do +RSpec.describe 'Projects > Files > Project owner creates a license file', :js, feature_category: :projects do let(:project) { create(:project, :repository) } let(:project_maintainer) { project.first_owner } diff --git a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb index 52686469243..8d64151e680 100644 --- a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb +++ b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > Project owner sees a link to create a license file in empty project', :js do +RSpec.describe 'Projects > Files > Project owner sees a link to create a license file in empty project', :js, +feature_category: :projects do include WebIdeSpecHelpers let(:project) { create(:project_empty_repo) } diff --git a/spec/features/projects/files/template_selector_menu_spec.rb b/spec/features/projects/files/template_selector_menu_spec.rb index 51ae6616d4a..8dbfa3afb0b 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 do +RSpec.describe 'Template selector menu', :js, feature_category: :projects do let(:project) { create(:project, :repository) } let(:user) { create(:user) } diff --git a/spec/features/projects/files/template_type_dropdown_spec.rb b/spec/features/projects/files/template_type_dropdown_spec.rb index 9cdb5eeb076..990b118d172 100644 --- a/spec/features/projects/files/template_type_dropdown_spec.rb +++ b/spec/features/projects/files/template_type_dropdown_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > Template type dropdown selector', :js do +RSpec.describe 'Projects > Files > Template type dropdown selector', :js, feature_category: :projects do let(:project) { create(:project, :repository) } let(:user) { project.first_owner } diff --git a/spec/features/projects/files/undo_template_spec.rb b/spec/features/projects/files/undo_template_spec.rb index 0b2daf12063..afc9a5fd232 100644 --- a/spec/features/projects/files/undo_template_spec.rb +++ b/spec/features/projects/files/undo_template_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > Template Undo Button', :js do +RSpec.describe 'Projects > Files > Template Undo Button', :js, feature_category: :projects do let(:project) { create(:project, :repository) } let(:user) { project.first_owner } diff --git a/spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb b/spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb index 220572c6a6d..8b60d21a77e 100644 --- a/spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb +++ b/spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' # This is a regression test for https://gitlab.com/gitlab-org/gitlab-foss/issues/37569 -RSpec.describe 'Projects > Files > User browses a tree with a folder containing only a folder', :js do +RSpec.describe 'Projects > Files > User browses a tree with a folder containing only a folder', :js, +feature_category: :projects do let(:project) { create(:project, :empty_repo) } let(:user) { project.first_owner } diff --git a/spec/features/projects/files/user_browses_files_spec.rb b/spec/features/projects/files/user_browses_files_spec.rb index 0f3ce5a2bad..125f7209ab4 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 do +RSpec.describe "User browses files", :js, feature_category: :projects do include RepoHelpers let(:fork_message) do @@ -86,6 +86,15 @@ RSpec.describe "User browses files", :js do visit(project_tree_path(project, "markdown")) end + it "redirects to the permalink URL" do + click_link(".gitignore") + click_link("Permalink") + + permalink_path = project_blob_path(project, "#{project.repository.commit('markdown').sha}/.gitignore") + + expect(page).to have_current_path(permalink_path, ignore_query: true) + end + it "shows correct files and links" do expect(page).to have_current_path(project_tree_path(project, "markdown"), ignore_query: true) expect(page).to have_content("README.md") @@ -262,6 +271,8 @@ RSpec.describe "User browses files", :js do context "when browsing a specific ref", :js do let(:ref) { project_tree_path(project, "6d39438") } + ref_selector = '.ref-selector' + before do visit(ref) end @@ -272,24 +283,34 @@ RSpec.describe "User browses files", :js do end it "shows files from a repository with apostroph in its name" do - first(".js-project-refs-dropdown").click + ref_name = 'test' - page.within(".project-refs-form") do - click_link("'test'") + find(ref_selector).click + wait_for_requests + + page.within(ref_selector) do + fill_in 'Search by Git revision', with: ref_name + wait_for_requests + find('li', text: ref_name, match: :prefer_exact).click end - expect(page).to have_selector(".dropdown-toggle-text", text: "'test'") + expect(find(ref_selector)).to have_text(ref_name) - visit(project_tree_path(project, "'test'")) + visit(project_tree_path(project, ref_name)) expect(page).not_to have_selector(".tree-commit .animation-container") end it "shows the code with a leading dot in the directory" do - first(".js-project-refs-dropdown").click + ref_name = 'fix' + + find(ref_selector).click + wait_for_requests - page.within(".project-refs-form") do - click_link("fix") + page.within(ref_selector) do + fill_in 'Search by Git revision', with: ref_name + wait_for_requests + find('li', text: ref_name, match: :prefer_exact).click end visit(project_tree_path(project, "fix/.testdir")) 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 56e18871810..6b401d6d789 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' do +RSpec.describe 'Projects > Files > User browses LFS files', feature_category: :projects 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 9e0168d7ef3..4dd579ba8e9 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 do +RSpec.describe 'Projects > Files > User creates a directory', :js, feature_category: :projects 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 a81f31d663e..97ccb45dfc6 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 do +RSpec.describe 'Projects > Files > User creates files', :js, feature_category: :projects do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers include BlobSpecHelpers diff --git a/spec/features/projects/files/user_deletes_files_spec.rb b/spec/features/projects/files/user_deletes_files_spec.rb index 806f1e8e9ed..61152a8badc 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 do +RSpec.describe 'Projects > Files > User deletes files', :js, feature_category: :projects 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 1a9c5483218..5a61aa146a2 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 do +RSpec.describe 'Projects > Files > User edits files', :js, feature_category: :projects do include Spec::Support::Helpers::Features::SourceEditorSpecHelpers include ProjectForksHelper include BlobSpecHelpers diff --git a/spec/features/projects/files/user_find_file_spec.rb b/spec/features/projects/files/user_find_file_spec.rb index 69ea8b0eb5f..1b53189da83 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' do +RSpec.describe 'User find project file', feature_category: :projects do let(:user) { create :user } let(:project) { create :project, :repository } 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 294a03813cd..18a5fb71b10 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 do +RSpec.describe 'user reads pipeline status', :js, feature_category: :projects 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 1ecd50b6463..9fa3ddf92c6 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 do +RSpec.describe 'Projects > Files > User replaces files', :js, feature_category: :projects 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 cce73d06f94..b438b203141 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' do +RSpec.describe 'Projects > Files > User searches for files', feature_category: :projects do let(:user) { project.first_owner } before do diff --git a/spec/features/projects/files/user_uploads_files_spec.rb b/spec/features/projects/files/user_uploads_files_spec.rb index cc621dfd9f8..575a6290a32 100644 --- a/spec/features/projects/files/user_uploads_files_spec.rb +++ b/spec/features/projects/files/user_uploads_files_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Files > User uploads files' do +RSpec.describe 'Projects > Files > User uploads files', feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, :repository, name: 'Shop', creator: user) } let(:project2) { create(:project, :repository, name: 'Another Project', path: 'another-project') } diff --git a/spec/features/projects/fork_spec.rb b/spec/features/projects/fork_spec.rb index 9ceadb63178..3867f7fd086 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' do +RSpec.describe 'Project fork', feature_category: :projects do include ProjectForksHelper let(:user) { create(:user) } diff --git a/spec/features/projects/forks/fork_list_spec.rb b/spec/features/projects/forks/fork_list_spec.rb index b48c46ef8cb..18424c18cbc 100644 --- a/spec/features/projects/forks/fork_list_spec.rb +++ b/spec/features/projects/forks/fork_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'listing forks of a project' do +RSpec.describe 'listing forks of a project', feature_category: :projects do include ProjectForksHelper include ExternalAuthorizationServiceHelpers diff --git a/spec/features/projects/gfm_autocomplete_load_spec.rb b/spec/features/projects/gfm_autocomplete_load_spec.rb index a7d68b07dd3..bb9f4e121d8 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 do +RSpec.describe 'GFM autocomplete loading', :js, feature_category: :projects do let(:project) { create(:project) } before do diff --git a/spec/features/projects/graph_spec.rb b/spec/features/projects/graph_spec.rb index 0b628ad1e9a..f96356b11c9 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 do +RSpec.describe 'Project Graph', :js, feature_category: :projects do let(:user) { create :user } let(:project) { create(:project, :repository, namespace: user.namespace) } let(:branch_name) { 'master' } diff --git a/spec/features/projects/hook_logs/user_reads_log_spec.rb b/spec/features/projects/hook_logs/user_reads_log_spec.rb index 9b7ec14c36f..92ddc559cf4 100644 --- a/spec/features/projects/hook_logs/user_reads_log_spec.rb +++ b/spec/features/projects/hook_logs/user_reads_log_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Hook logs' do +RSpec.describe 'Hook logs', feature_category: :projects do let(:project) { create(:project) } let(:project_hook) { create(:project_hook, project: project) } let(:web_hook_log) { create(:web_hook_log, web_hook: project_hook, response_body: 'Hello World') } diff --git a/spec/features/projects/import_export/export_file_spec.rb b/spec/features/projects/import_export/export_file_spec.rb index ccf3ccc6a96..8986ce91ae3 100644 --- a/spec/features/projects/import_export/export_file_spec.rb +++ b/spec/features/projects/import_export/export_file_spec.rb @@ -6,7 +6,7 @@ require 'spec_helper' # It looks up for any sensitive word inside the JSON, so if a sensitive word is found # we'll have to either include it adding the model that includes it to the +safe_list+ # or make sure the attribute is blacklisted in the +import_export.yml+ configuration -RSpec.describe 'Import/Export - project export integration test', :js do +RSpec.describe 'Import/Export - project export integration test', :js, feature_category: :importers do include Select2Helper include ExportFileHelper @@ -53,7 +53,7 @@ RSpec.describe 'Import/Export - project export integration test', :js do project_json_path = File.join(tmpdir, 'project.json') expect(File).to exist(project_json_path) - project_hash = Gitlab::Json.parse(IO.read(project_json_path)) + project_hash = Gitlab::Json.parse(File.read(project_json_path)) sensitive_words.each do |sensitive_word| found = find_sensitive_attributes(sensitive_word, project_hash) @@ -79,7 +79,7 @@ RSpec.describe 'Import/Export - project export integration test', :js do expect(File).to exist(project_json_path) relations = [] - relations << Gitlab::Json.parse(IO.read(project_json_path)) + relations << Gitlab::Json.parse(File.read(project_json_path)) Dir.glob(File.join(tmpdir, 'tree/project', '*.ndjson')) do |rb_filename| File.foreach(rb_filename) do |line| relations << Gitlab::Json.parse(line) diff --git a/spec/features/projects/import_export/import_file_spec.rb b/spec/features/projects/import_export/import_file_spec.rb index 6f015f9cd22..8fb11f06cdd 100644 --- a/spec/features/projects/import_export/import_file_spec.rb +++ b/spec/features/projects/import_export/import_file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Import/Export - project import integration test', :js do +RSpec.describe 'Import/Export - project import integration test', :js, feature_category: :importers do let(:user) { create(:user) } let(:file) { File.join(Rails.root, 'spec', 'features', 'projects', 'import_export', 'test_project_export.tar.gz') } let(:export_path) { "#{Dir.tmpdir}/import_file_spec" } diff --git a/spec/features/projects/infrastructure_registry_spec.rb b/spec/features/projects/infrastructure_registry_spec.rb index aab1cec8762..e1619726c8d 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' do +RSpec.describe 'Infrastructure Registry', feature_category: :projects do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } diff --git a/spec/features/projects/integrations/disable_triggers_spec.rb b/spec/features/projects/integrations/disable_triggers_spec.rb index b039d610ecb..f7afce6d87c 100644 --- a/spec/features/projects/integrations/disable_triggers_spec.rb +++ b/spec/features/projects/integrations/disable_triggers_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Disable individual triggers', :js do +RSpec.describe 'Disable individual triggers', :js, feature_category: :integrations do include_context 'project integration activation' let(:checkbox_selector) { 'input[name$="_events]"]' } diff --git a/spec/features/projects/integrations/project_integrations_spec.rb b/spec/features/projects/integrations/project_integrations_spec.rb index 708a5bca8c1..d99b6ca9092 100644 --- a/spec/features/projects/integrations/project_integrations_spec.rb +++ b/spec/features/projects/integrations/project_integrations_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project integrations', :js do +RSpec.describe 'Project integrations', :js, feature_category: :integrations do include_context 'project integration activation' it_behaves_like 'integration settings form' do diff --git a/spec/features/projects/integrations/user_activates_asana_spec.rb b/spec/features/projects/integrations/user_activates_asana_spec.rb index 9ec9f00529a..b99ca2ebc1c 100644 --- a/spec/features/projects/integrations/user_activates_asana_spec.rb +++ b/spec/features/projects/integrations/user_activates_asana_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Asana' do +RSpec.describe 'User activates Asana', feature_category: :integrations do include_context 'project integration activation' it 'activates integration', :js do diff --git a/spec/features/projects/integrations/user_activates_assembla_spec.rb b/spec/features/projects/integrations/user_activates_assembla_spec.rb index be9034ec5ba..db5774e4514 100644 --- a/spec/features/projects/integrations/user_activates_assembla_spec.rb +++ b/spec/features/projects/integrations/user_activates_assembla_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Assembla' do +RSpec.describe 'User activates Assembla', feature_category: :integrations do include_context 'project integration activation' before do diff --git a/spec/features/projects/integrations/user_activates_atlassian_bamboo_ci_spec.rb b/spec/features/projects/integrations/user_activates_atlassian_bamboo_ci_spec.rb index 49f62a34bd2..a532c1b8644 100644 --- a/spec/features/projects/integrations/user_activates_atlassian_bamboo_ci_spec.rb +++ b/spec/features/projects/integrations/user_activates_atlassian_bamboo_ci_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Atlassian Bamboo CI' do +RSpec.describe 'User activates Atlassian Bamboo CI', feature_category: :integrations do include_context 'project integration activation' before do diff --git a/spec/features/projects/integrations/user_activates_emails_on_push_spec.rb b/spec/features/projects/integrations/user_activates_emails_on_push_spec.rb index 168779aad07..9a2d693a9f0 100644 --- a/spec/features/projects/integrations/user_activates_emails_on_push_spec.rb +++ b/spec/features/projects/integrations/user_activates_emails_on_push_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Emails on push' do +RSpec.describe 'User activates Emails on push', feature_category: :integrations do include_context 'project integration activation' it 'activates integration', :js do diff --git a/spec/features/projects/integrations/user_activates_flowdock_spec.rb b/spec/features/projects/integrations/user_activates_flowdock_spec.rb deleted file mode 100644 index df1a4feddfb..00000000000 --- a/spec/features/projects/integrations/user_activates_flowdock_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'User activates Flowdock' do - include_context 'project integration activation' do - let(:project) { create(:project, :repository) } - end - - before do - stub_request(:post, /.*api.flowdock.com.*/) - end - - it 'activates integration', :js do - visit_project_integration('Flowdock') - fill_in('Token', with: 'verySecret') - - click_test_then_save_integration(expect_test_to_fail: false) - - expect(page).to have_content('Flowdock settings saved and active.') - end -end diff --git a/spec/features/projects/integrations/user_activates_irker_spec.rb b/spec/features/projects/integrations/user_activates_irker_spec.rb index 23b5f2a5c47..17c46bfaff7 100644 --- a/spec/features/projects/integrations/user_activates_irker_spec.rb +++ b/spec/features/projects/integrations/user_activates_irker_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates irker (IRC gateway)' do +RSpec.describe 'User activates irker (IRC gateway)', feature_category: :integrations do include_context 'project integration activation' it 'activates integration', :js do diff --git a/spec/features/projects/integrations/user_activates_jetbrains_teamcity_ci_spec.rb b/spec/features/projects/integrations/user_activates_jetbrains_teamcity_ci_spec.rb index f86a1b8a0a4..a18c052beb9 100644 --- a/spec/features/projects/integrations/user_activates_jetbrains_teamcity_ci_spec.rb +++ b/spec/features/projects/integrations/user_activates_jetbrains_teamcity_ci_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates JetBrains TeamCity CI' do +RSpec.describe 'User activates JetBrains TeamCity CI', feature_category: :integrations do include_context 'project integration activation' before do diff --git a/spec/features/projects/integrations/user_activates_jira_spec.rb b/spec/features/projects/integrations/user_activates_jira_spec.rb index dad201ffbb6..e4b10aeb340 100644 --- a/spec/features/projects/integrations/user_activates_jira_spec.rb +++ b/spec/features/projects/integrations/user_activates_jira_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Jira', :js do +RSpec.describe 'User activates Jira', :js, feature_category: :integrations do include_context 'project integration activation' include_context 'project integration Jira context' 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 54c9ec0f62e..16c7a3ff226 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 @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Set up Mattermost slash commands', :js do +RSpec.describe 'Set up Mattermost slash commands', :js, feature_category: :integrations do describe 'user visits the mattermost slash command config page' do include_context 'project integration activation' diff --git a/spec/features/projects/integrations/user_activates_packagist_spec.rb b/spec/features/projects/integrations/user_activates_packagist_spec.rb index 0892843e840..2d77abfea7c 100644 --- a/spec/features/projects/integrations/user_activates_packagist_spec.rb +++ b/spec/features/projects/integrations/user_activates_packagist_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Packagist' do +RSpec.describe 'User activates Packagist', feature_category: :integrations do include_context 'project integration activation' before do diff --git a/spec/features/projects/integrations/user_activates_pivotaltracker_spec.rb b/spec/features/projects/integrations/user_activates_pivotaltracker_spec.rb index fe6ed786ace..b4dec8ffdb5 100644 --- a/spec/features/projects/integrations/user_activates_pivotaltracker_spec.rb +++ b/spec/features/projects/integrations/user_activates_pivotaltracker_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates PivotalTracker' do +RSpec.describe 'User activates PivotalTracker', feature_category: :integrations do include_context 'project integration activation' before do diff --git a/spec/features/projects/integrations/user_activates_prometheus_spec.rb b/spec/features/projects/integrations/user_activates_prometheus_spec.rb index 56b895919b8..5b2d885410f 100644 --- a/spec/features/projects/integrations/user_activates_prometheus_spec.rb +++ b/spec/features/projects/integrations/user_activates_prometheus_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Prometheus' do +RSpec.describe 'User activates Prometheus', feature_category: :integrations do include_context 'project integration activation' before do diff --git a/spec/features/projects/integrations/user_activates_pushover_spec.rb b/spec/features/projects/integrations/user_activates_pushover_spec.rb index 616efdc836f..a705c354a1e 100644 --- a/spec/features/projects/integrations/user_activates_pushover_spec.rb +++ b/spec/features/projects/integrations/user_activates_pushover_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Pushover' do +RSpec.describe 'User activates Pushover', feature_category: :integrations do include_context 'project integration activation' before do diff --git a/spec/features/projects/integrations/user_activates_slack_notifications_spec.rb b/spec/features/projects/integrations/user_activates_slack_notifications_spec.rb index e89f6e309ea..01c202baf70 100644 --- a/spec/features/projects/integrations/user_activates_slack_notifications_spec.rb +++ b/spec/features/projects/integrations/user_activates_slack_notifications_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User activates Slack notifications', :js do +RSpec.describe 'User activates Slack notifications', :js, feature_category: :integrations do include_context 'project integration activation' context 'when integration is not configured yet' do diff --git a/spec/features/projects/integrations/user_activates_slack_slash_command_spec.rb b/spec/features/projects/integrations/user_activates_slack_slash_command_spec.rb index df8cd84ffdb..0f6d721565e 100644 --- a/spec/features/projects/integrations/user_activates_slack_slash_command_spec.rb +++ b/spec/features/projects/integrations/user_activates_slack_slash_command_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Slack slash commands', :js do +RSpec.describe 'Slack slash commands', :js, feature_category: :integrations do include_context 'project integration activation' before do diff --git a/spec/features/projects/integrations/user_uses_inherited_settings_spec.rb b/spec/features/projects/integrations/user_uses_inherited_settings_spec.rb index 8a2881c95dc..e0063a9c733 100644 --- a/spec/features/projects/integrations/user_uses_inherited_settings_spec.rb +++ b/spec/features/projects/integrations/user_uses_inherited_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User uses inherited settings', :js do +RSpec.describe 'User uses inherited settings', :js, feature_category: :integrations do include JiraIntegrationHelpers include_context 'project integration activation' diff --git a/spec/features/projects/integrations/user_views_services_spec.rb b/spec/features/projects/integrations/user_views_services_spec.rb index 559461f911f..e6be300c0a9 100644 --- a/spec/features/projects/integrations/user_views_services_spec.rb +++ b/spec/features/projects/integrations/user_views_services_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views integrations', :js do +RSpec.describe 'User views integrations', :js, feature_category: :integrations do include_context 'project integration activation' it 'shows the list of available integrations' do diff --git a/spec/features/projects/issuable_templates_spec.rb b/spec/features/projects/issuable_templates_spec.rb index ac83de3e765..adf410ce6e8 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 do +RSpec.describe 'issuable templates', :js, feature_category: :projects do include ProjectForksHelper let(:user) { create(:user) } diff --git a/spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb b/spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb index 78fb470d4ea..ef7022dcda8 100644 --- a/spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb +++ b/spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'viewing issues with design references' do +RSpec.describe 'viewing issues with design references', feature_category: :design_management do include DesignManagementTestHelpers let_it_be(:public_project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_paginates_designs_spec.rb b/spec/features/projects/issues/design_management/user_paginates_designs_spec.rb index 908e30478b2..1490702a964 100644 --- a/spec/features/projects/issues/design_management/user_paginates_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_paginates_designs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User paginates issue designs', :js do +RSpec.describe 'User paginates issue designs', :js, feature_category: :design_management do include DesignManagementTestHelpers let(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_permissions_upload_spec.rb b/spec/features/projects/issues/design_management/user_permissions_upload_spec.rb index cfd8a4540ee..094bc9218ed 100644 --- a/spec/features/projects/issues/design_management/user_permissions_upload_spec.rb +++ b/spec/features/projects/issues/design_management/user_permissions_upload_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User design permissions', :js do +RSpec.describe 'User design permissions', :js, feature_category: :design_management do include DesignManagementTestHelpers let(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb index 27d0be23aec..858d6751afa 100644 --- a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User uploads new design', :js do +RSpec.describe 'User uploads new design', :js, feature_category: :design_management do include DesignManagementTestHelpers let(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_views_design_images_spec.rb b/spec/features/projects/issues/design_management/user_views_design_images_spec.rb index c3aefe05f75..c5fc11222c2 100644 --- a/spec/features/projects/issues/design_management/user_views_design_images_spec.rb +++ b/spec/features/projects/issues/design_management/user_views_design_images_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Users views raw design image files' do +RSpec.describe 'Users views raw design image files', feature_category: :design_management do include DesignManagementTestHelpers let_it_be(:project) { create(:project, :public) } diff --git a/spec/features/projects/issues/design_management/user_views_design_spec.rb b/spec/features/projects/issues/design_management/user_views_design_spec.rb index b513a4fe3fa..11c8bdda3ac 100644 --- a/spec/features/projects/issues/design_management/user_views_design_spec.rb +++ b/spec/features/projects/issues/design_management/user_views_design_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views issue designs', :js do +RSpec.describe 'User views issue designs', :js, feature_category: :design_management do include DesignManagementTestHelpers let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_views_designs_spec.rb b/spec/features/projects/issues/design_management/user_views_designs_spec.rb index 46c772027ad..995ed66df98 100644 --- a/spec/features/projects/issues/design_management/user_views_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_views_designs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views issue designs', :js do +RSpec.describe 'User views issue designs', :js, feature_category: :design_management do include DesignManagementTestHelpers let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb b/spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb index 682a45cf592..a45b9b718c3 100644 --- a/spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb +++ b/spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views an SVG design that contains XSS', :js do +RSpec.describe 'User views an SVG design that contains XSS', :js, feature_category: :design_management do include DesignManagementTestHelpers let(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/email_participants_spec.rb b/spec/features/projects/issues/email_participants_spec.rb index 3ffe0a5ced8..4dedbff608e 100644 --- a/spec/features/projects/issues/email_participants_spec.rb +++ b/spec/features/projects/issues/email_participants_spec.rb @@ -2,16 +2,15 @@ require 'spec_helper' -RSpec.describe 'viewing an issue', :js do +RSpec.describe 'viewing an issue', :js, feature_category: :issue_email_participants do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :public) } - let_it_be(:issue) { create(:issue, project: project) } + let_it_be_with_refind(:issue) { create(:issue, project: project) } let_it_be(:note) { create(:note_on_issue, project: project, noteable: issue) } let_it_be(:participants) { create_list(:issue_email_participant, 4, issue: issue) } before do - sign_in(user) - visit project_issue_path(project, issue) + project.add_reporter(user) end shared_examples 'email participants warning' do |selector| @@ -20,15 +19,48 @@ RSpec.describe 'viewing an issue', :js do end end - context 'for a new note' do - it_behaves_like 'email participants warning', '.new-note' + shared_examples 'no email participants warning' do |selector| + it 'does not show email participants warning' do + expect(find(selector)).not_to have_content(", and 1 more will be notified of your comment") + end + end + + context 'when issue is confidential' do + before do + issue.update!(confidential: true) + sign_in(user) + visit project_issue_path(project, issue) + end + + context 'for a new note' do + it_behaves_like 'email participants warning', '.new-note' + end + + context 'for a reply form' do + before do + find('.js-reply-button').click + end + + it_behaves_like 'email participants warning', '.note-edit-form' + end end - context 'for a reply form' do + context 'when issue is not confidential' do before do - find('.js-reply-button').click + sign_in(user) + visit project_issue_path(project, issue) end - it_behaves_like 'email participants warning', '.note-edit-form' + context 'for a new note' do + it_behaves_like 'no email participants warning', '.new-note' + end + + context 'for a reply form' do + before do + find('.js-reply-button').click + end + + it_behaves_like 'no email participants warning', '.note-edit-form' + end end end diff --git a/spec/features/projects/issues/viewing_relocated_issues_spec.rb b/spec/features/projects/issues/viewing_relocated_issues_spec.rb index 10d5ad1747c..abd36b3ceef 100644 --- a/spec/features/projects/issues/viewing_relocated_issues_spec.rb +++ b/spec/features/projects/issues/viewing_relocated_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'issues canonical link' do +RSpec.describe 'issues canonical link', feature_category: :team_planning do include Spec::Support::Helpers::Features::CanonicalLinkHelpers let_it_be(:original_project) { create(:project, :public) } diff --git a/spec/features/projects/jobs/permissions_spec.rb b/spec/features/projects/jobs/permissions_spec.rb index 740d009d6b8..c3c0043a6ef 100644 --- a/spec/features/projects/jobs/permissions_spec.rb +++ b/spec/features/projects/jobs/permissions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Jobs Permissions' do +RSpec.describe 'Project Jobs Permissions', feature_category: :projects do using RSpec::Parameterized::TableSyntax let_it_be_with_reload(:group) { create(:group, name: 'some group') } diff --git a/spec/features/projects/jobs/user_browses_job_spec.rb b/spec/features/projects/jobs/user_browses_job_spec.rb index 6a0cfcde812..78fb72ad2df 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 do +RSpec.describe 'User browses a job', :js, feature_category: :projects 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 cb3c1594868..1634f6dee74 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' do +RSpec.describe 'User browses jobs', feature_category: :projects 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 eea7e070a35..a9e0fce1a1c 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 do +RSpec.describe 'User triggers manual job with variables', :js, feature_category: :projects do let(:user) { create(:user) } let(:user_access_level) { :developer } let(:project) { create(:project, :repository, namespace: user.namespace) } diff --git a/spec/features/projects/jobs_spec.rb b/spec/features/projects/jobs_spec.rb index 96a8168e708..557a20ff2d6 100644 --- a/spec/features/projects/jobs_spec.rb +++ b/spec/features/projects/jobs_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'tempfile' -RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state do +RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state, feature_category: :projects do include Gitlab::Routing include ProjectForksHelper @@ -215,10 +215,6 @@ RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state do visit project_job_path(project, job) end - it 'shows retry button' do - expect(page).to have_link('Retry') - end - context 'if job passed' do it 'does not show New issue button' do expect(page).not_to have_link('New issue') diff --git a/spec/features/projects/labels/issues_sorted_by_priority_spec.rb b/spec/features/projects/labels/issues_sorted_by_priority_spec.rb index 91a30004fc3..846a0a25891 100644 --- a/spec/features/projects/labels/issues_sorted_by_priority_spec.rb +++ b/spec/features/projects/labels/issues_sorted_by_priority_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Issue prioritization' do +RSpec.describe 'Issue prioritization', feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, name: 'test', namespace: user.namespace) } diff --git a/spec/features/projects/labels/search_labels_spec.rb b/spec/features/projects/labels/search_labels_spec.rb index 04dfd4ca5f1..d058565925e 100644 --- a/spec/features/projects/labels/search_labels_spec.rb +++ b/spec/features/projects/labels/search_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Search for labels', :js do +RSpec.describe 'Search for labels', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project) } let!(:label1) { create(:label, title: 'Foo', description: 'Lorem ipsum', project: project) } diff --git a/spec/features/projects/labels/sort_labels_spec.rb b/spec/features/projects/labels/sort_labels_spec.rb index f2f1acd2348..378a575348e 100644 --- a/spec/features/projects/labels/sort_labels_spec.rb +++ b/spec/features/projects/labels/sort_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Sort labels', :js do +RSpec.describe 'Sort labels', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project) } let!(:label1) { create(:label, title: 'Foo', description: 'Lorem ipsum', project: project) } diff --git a/spec/features/projects/labels/subscription_spec.rb b/spec/features/projects/labels/subscription_spec.rb index 7ca8a542c21..f1537458a18 100644 --- a/spec/features/projects/labels/subscription_spec.rb +++ b/spec/features/projects/labels/subscription_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Labels subscription' do +RSpec.describe 'Labels subscription', feature_category: :team_planning do let(:user) { create(:user) } let(:group) { create(:group) } let(:project) { create(:project, :public, namespace: group) } diff --git a/spec/features/projects/labels/update_prioritization_spec.rb b/spec/features/projects/labels/update_prioritization_spec.rb index 706ea92c086..b527b8926a0 100644 --- a/spec/features/projects/labels/update_prioritization_spec.rb +++ b/spec/features/projects/labels/update_prioritization_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Prioritize labels' do +RSpec.describe 'Prioritize labels', feature_category: :team_planning do include DragTo let(:user) { create(:user) } diff --git a/spec/features/projects/labels/user_creates_labels_spec.rb b/spec/features/projects/labels/user_creates_labels_spec.rb index 001d23cd2c9..46729048fe7 100644 --- a/spec/features/projects/labels/user_creates_labels_spec.rb +++ b/spec/features/projects/labels/user_creates_labels_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User creates labels" do +RSpec.describe "User creates labels", feature_category: :team_planning do let_it_be(:project) { create(:project_empty_repo, :public) } let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/labels/user_edits_labels_spec.rb b/spec/features/projects/labels/user_edits_labels_spec.rb index 999c238c7b3..f90f215f9fc 100644 --- a/spec/features/projects/labels/user_edits_labels_spec.rb +++ b/spec/features/projects/labels/user_edits_labels_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User edits labels" do +RSpec.describe "User edits labels", feature_category: :team_planning do include Spec::Support::Helpers::ModalHelpers let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/labels/user_promotes_label_spec.rb b/spec/features/projects/labels/user_promotes_label_spec.rb index 4cb22c2e48c..e130dc561da 100644 --- a/spec/features/projects/labels/user_promotes_label_spec.rb +++ b/spec/features/projects/labels/user_promotes_label_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User promotes label' do +RSpec.describe 'User promotes label', feature_category: :team_planning do let_it_be(:group) { create(:group) } let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, namespace: group) } diff --git a/spec/features/projects/labels/user_removes_labels_spec.rb b/spec/features/projects/labels/user_removes_labels_spec.rb index 11d73a56965..55dc52b8ccf 100644 --- a/spec/features/projects/labels/user_removes_labels_spec.rb +++ b/spec/features/projects/labels/user_removes_labels_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User removes labels" do +RSpec.describe "User removes labels", feature_category: :team_planning do let(:project) { create(:project_empty_repo, :public) } let(:user) { create(:user) } diff --git a/spec/features/projects/labels/user_sees_breadcrumb_links_spec.rb b/spec/features/projects/labels/user_sees_breadcrumb_links_spec.rb index f9c65c08ec0..117371e6904 100644 --- a/spec/features/projects/labels/user_sees_breadcrumb_links_spec.rb +++ b/spec/features/projects/labels/user_sees_breadcrumb_links_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New project label breadcrumb' do +RSpec.describe 'New project label breadcrumb', feature_category: :team_planning do let(:project) { create(:project) } let(:user) { project.creator } diff --git a/spec/features/projects/labels/user_sees_links_to_issuables_spec.rb b/spec/features/projects/labels/user_sees_links_to_issuables_spec.rb index 6f98883a412..d8c673a2ce5 100644 --- a/spec/features/projects/labels/user_sees_links_to_issuables_spec.rb +++ b/spec/features/projects/labels/user_sees_links_to_issuables_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Labels > User sees links to issuables' do +RSpec.describe 'Projects > Labels > User sees links to issuables', feature_category: :team_planning do let_it_be(:user) { create(:user) } before do diff --git a/spec/features/projects/labels/user_views_labels_spec.rb b/spec/features/projects/labels/user_views_labels_spec.rb index 7a6942b6259..b5a9a735af9 100644 --- a/spec/features/projects/labels/user_views_labels_spec.rb +++ b/spec/features/projects/labels/user_views_labels_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "User views labels" do +RSpec.describe "User views labels", feature_category: :team_planning do let_it_be(:project) { create(:project_empty_repo, :public) } let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/members/group_member_cannot_leave_group_project_spec.rb b/spec/features/projects/members/group_member_cannot_leave_group_project_spec.rb index c9fee9bee7a..63dc99efc8f 100644 --- a/spec/features/projects/members/group_member_cannot_leave_group_project_spec.rb +++ b/spec/features/projects/members/group_member_cannot_leave_group_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Group member cannot leave group project' do +RSpec.describe 'Projects > Members > Group member cannot leave group project', feature_category: :subgroups do let(:user) { create(:user) } let(:group) { create(:group) } let(:project) { create(:project, namespace: group) } diff --git a/spec/features/projects/members/group_member_cannot_request_access_to_his_group_project_spec.rb b/spec/features/projects/members/group_member_cannot_request_access_to_his_group_project_spec.rb index 34c870b8a96..07886950b95 100644 --- a/spec/features/projects/members/group_member_cannot_request_access_to_his_group_project_spec.rb +++ b/spec/features/projects/members/group_member_cannot_request_access_to_his_group_project_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Group member cannot request access to their group project' do +RSpec.describe 'Projects > Members > Group member cannot request access to their group project', +feature_category: :subgroups do let(:user) { create(:user) } let(:group) { create(:group) } let(:project) { create(:project, namespace: group) } diff --git a/spec/features/projects/members/group_members_spec.rb b/spec/features/projects/members/group_members_spec.rb index 6aa6acbdae4..416b96ab668 100644 --- a/spec/features/projects/members/group_members_spec.rb +++ b/spec/features/projects/members/group_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects members', :js do +RSpec.describe 'Projects members', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers let(:user) { create(:user) } 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 ec86b7db4fa..7a11ee61c5f 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 @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Group requester cannot request access to project', :js do +RSpec.describe 'Projects > Members > Group requester cannot request access to project', :js, +feature_category: :subgroups do let(:user) { create(:user) } let(:owner) { create(:user) } let(:group) { create(:group, :public) } diff --git a/spec/features/projects/members/groups_with_access_list_spec.rb b/spec/features/projects/members/groups_with_access_list_spec.rb index 821b9249aa8..51acba246c5 100644 --- a/spec/features/projects/members/groups_with_access_list_spec.rb +++ b/spec/features/projects/members/groups_with_access_list_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Groups with access list', :js do +RSpec.describe 'Projects > Members > Groups with access list', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::ModalHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper diff --git a/spec/features/projects/members/manage_groups_spec.rb b/spec/features/projects/members/manage_groups_spec.rb index e86affbbca1..b78bfacf171 100644 --- a/spec/features/projects/members/manage_groups_spec.rb +++ b/spec/features/projects/members/manage_groups_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project > Members > Manage groups', :js do +RSpec.describe 'Project > Members > Manage groups', :js, feature_category: :subgroups do include ActionView::Helpers::DateHelper include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper diff --git a/spec/features/projects/members/manage_members_spec.rb b/spec/features/projects/members/manage_members_spec.rb index 1f317c55256..3ffa402dc2c 100644 --- a/spec/features/projects/members/manage_members_spec.rb +++ b/spec/features/projects/members/manage_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Manage members', :js, product_group: :onboarding do +RSpec.describe 'Projects > Members > Manage members', :js, feature_category: :onboarding do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper include Spec::Support::Helpers::ModalHelpers @@ -104,7 +104,6 @@ RSpec.describe 'Projects > Members > Manage members', :js, product_group: :onboa click_on 'Invite members' - click_on 'Guest' wait_for_requests end @@ -112,13 +111,7 @@ RSpec.describe 'Projects > Members > Manage members', :js, product_group: :onboa let(:current_user) { project_owner } it 'shows Owner in the dropdown' do - page.within '.dropdown-menu' do - expect(page).to have_button('Guest') - expect(page).to have_button('Reporter') - expect(page).to have_button('Developer') - expect(page).to have_button('Maintainer') - expect(page).to have_button('Owner') - end + expect(page).to have_select('Select a role', options: %w[Guest Reporter Developer Maintainer Owner]) end end @@ -126,13 +119,8 @@ RSpec.describe 'Projects > Members > Manage members', :js, product_group: :onboa let(:current_user) { project_maintainer } it 'does not show the Owner option' do - page.within '.dropdown-menu' do - expect(page).to have_button('Guest') - expect(page).to have_button('Reporter') - expect(page).to have_button('Developer') - expect(page).to have_button('Maintainer') - expect(page).not_to have_button('Owner') - end + 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]) end end end diff --git a/spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb b/spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb index c92e8bc2954..31c8237aacc 100644 --- a/spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb +++ b/spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Maintainer adds member with expiration date', :js do +RSpec.describe 'Projects > Members > Maintainer adds member with expiration date', :js, feature_category: :subgroups do include ActiveSupport::Testing::TimeHelpers include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::Features::InviteMembersModalHelper diff --git a/spec/features/projects/members/master_manages_access_requests_spec.rb b/spec/features/projects/members/master_manages_access_requests_spec.rb index f4e8c55e3cc..cea59679226 100644 --- a/spec/features/projects/members/master_manages_access_requests_spec.rb +++ b/spec/features/projects/members/master_manages_access_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Maintainer manages access requests' do +RSpec.describe 'Projects > Members > Maintainer manages access requests', feature_category: :subgroups do it_behaves_like 'Maintainer manages access requests' do let(:entity) { create(:project, :public, :with_namespace_settings) } let(:members_page_path) { project_project_members_path(entity) } diff --git a/spec/features/projects/members/member_cannot_request_access_to_his_project_spec.rb b/spec/features/projects/members/member_cannot_request_access_to_his_project_spec.rb index fa02e815867..dc18ca88c36 100644 --- a/spec/features/projects/members/member_cannot_request_access_to_his_project_spec.rb +++ b/spec/features/projects/members/member_cannot_request_access_to_his_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Member cannot request access to their project' do +RSpec.describe 'Projects > Members > Member cannot request access to their project', feature_category: :subgroups do let(:member) { create(:user) } let(:project) { create(:project) } diff --git a/spec/features/projects/members/member_leaves_project_spec.rb b/spec/features/projects/members/member_leaves_project_spec.rb index db227f3701d..2632bc2f5bd 100644 --- a/spec/features/projects/members/member_leaves_project_spec.rb +++ b/spec/features/projects/members/member_leaves_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Member leaves project' do +RSpec.describe 'Projects > Members > Member leaves project', feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/projects/members/owner_cannot_leave_project_spec.rb b/spec/features/projects/members/owner_cannot_leave_project_spec.rb index 45a8f979b87..7908fd3a98f 100644 --- a/spec/features/projects/members/owner_cannot_leave_project_spec.rb +++ b/spec/features/projects/members/owner_cannot_leave_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Owner cannot leave project' do +RSpec.describe 'Projects > Members > Owner cannot leave project', feature_category: :subgroups do let(:project) { create(:project) } before do diff --git a/spec/features/projects/members/owner_cannot_request_access_to_his_project_spec.rb b/spec/features/projects/members/owner_cannot_request_access_to_his_project_spec.rb index fad5d831c19..b5a862578d3 100644 --- a/spec/features/projects/members/owner_cannot_request_access_to_his_project_spec.rb +++ b/spec/features/projects/members/owner_cannot_request_access_to_his_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Owner cannot request access to their own project' do +RSpec.describe 'Projects > Members > Owner cannot request access to their own project', feature_category: :subgroups do let(:project) { create(:project) } before do diff --git a/spec/features/projects/members/sorting_spec.rb b/spec/features/projects/members/sorting_spec.rb index 8aadd6302d0..5c72d9efeb3 100644 --- a/spec/features/projects/members/sorting_spec.rb +++ b/spec/features/projects/members/sorting_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Sorting', :js do +RSpec.describe 'Projects > Members > Sorting', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers let(:maintainer) { create(:user, name: 'John Doe', created_at: 5.days.ago, last_activity_on: Date.today) } diff --git a/spec/features/projects/members/tabs_spec.rb b/spec/features/projects/members/tabs_spec.rb index 5611e7ee810..232420224fc 100644 --- a/spec/features/projects/members/tabs_spec.rb +++ b/spec/features/projects/members/tabs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > Tabs', :js do +RSpec.describe 'Projects > Members > Tabs', :js, feature_category: :subgroups do include Spec::Support::Helpers::Features::MembersHelpers using RSpec::Parameterized::TableSyntax diff --git a/spec/features/projects/members/user_requests_access_spec.rb b/spec/features/projects/members/user_requests_access_spec.rb index be124502c32..11d162fabd4 100644 --- a/spec/features/projects/members/user_requests_access_spec.rb +++ b/spec/features/projects/members/user_requests_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Members > User requests access', :js do +RSpec.describe 'Projects > Members > User requests access', :js, feature_category: :subgroups do include Spec::Support::Helpers::ModalHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/merge_request_button_spec.rb b/spec/features/projects/merge_request_button_spec.rb index eb52a7821f9..56aee469252 100644 --- a/spec/features/projects/merge_request_button_spec.rb +++ b/spec/features/projects/merge_request_button_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Merge Request button' do +RSpec.describe 'Merge Request button', feature_category: :projects do include ProjectForksHelper let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/milestones/gfm_autocomplete_spec.rb b/spec/features/projects/milestones/gfm_autocomplete_spec.rb index 547a5d11dec..d4ce10b5cb5 100644 --- a/spec/features/projects/milestones/gfm_autocomplete_spec.rb +++ b/spec/features/projects/milestones/gfm_autocomplete_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'GFM autocomplete', :js do +RSpec.describe 'GFM autocomplete', :js, feature_category: :team_planning do let_it_be(:user) { create(:user, name: '💃speciąl someone💃', username: 'someone.special') } let_it_be(:group) { create(:group, name: 'Ancestor') } let_it_be(:project) { create(:project, :repository, group: group) } diff --git a/spec/features/projects/milestones/milestone_spec.rb b/spec/features/projects/milestones/milestone_spec.rb index 6bd139c0ebe..73d46d3764e 100644 --- a/spec/features/projects/milestones/milestone_spec.rb +++ b/spec/features/projects/milestones/milestone_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project milestone', :js do +RSpec.describe 'Project milestone', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, name: 'test', namespace: user.namespace) } let(:milestone) { create(:milestone, project: project) } diff --git a/spec/features/projects/milestones/milestones_sorting_spec.rb b/spec/features/projects/milestones/milestones_sorting_spec.rb index 5ba4289fd11..8a8e7d07435 100644 --- a/spec/features/projects/milestones/milestones_sorting_spec.rb +++ b/spec/features/projects/milestones/milestones_sorting_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Milestones sorting', :js do +RSpec.describe 'Milestones sorting', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, name: 'test', namespace: user.namespace) } let(:milestones_for_sort_by) do diff --git a/spec/features/projects/milestones/new_spec.rb b/spec/features/projects/milestones/new_spec.rb index 170268297cd..ef9325a1627 100644 --- a/spec/features/projects/milestones/new_spec.rb +++ b/spec/features/projects/milestones/new_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Creating a new project milestone', :js do +RSpec.describe 'Creating a new project milestone', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, name: 'test', namespace: user.namespace) } diff --git a/spec/features/projects/milestones/user_interacts_with_labels_spec.rb b/spec/features/projects/milestones/user_interacts_with_labels_spec.rb index d658599c52b..36dfee7811d 100644 --- a/spec/features/projects/milestones/user_interacts_with_labels_spec.rb +++ b/spec/features/projects/milestones/user_interacts_with_labels_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User interacts with labels' do +RSpec.describe 'User interacts with labels', feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, namespace: user.namespace) } let(:milestone) { create(:milestone, project: project, title: 'v2.2', description: '# Description header') } diff --git a/spec/features/projects/navbar_spec.rb b/spec/features/projects/navbar_spec.rb index 5b5f7860e43..4d85b5cfb2e 100644 --- a/spec/features/projects/navbar_spec.rb +++ b/spec/features/projects/navbar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project navbar' do +RSpec.describe 'Project navbar', feature_category: :projects do include NavbarStructureHelper include WaitForRequests diff --git a/spec/features/projects/network_graph_spec.rb b/spec/features/projects/network_graph_spec.rb index 97b743b4d73..b36fde8a2bf 100644 --- a/spec/features/projects/network_graph_spec.rb +++ b/spec/features/projects/network_graph_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Network Graph', :js do +RSpec.describe 'Project Network Graph', :js, feature_category: :projects do let(:user) { create :user } let(:project) { create :project, :repository, namespace: user.namespace } diff --git a/spec/features/projects/new_project_from_template_spec.rb b/spec/features/projects/new_project_from_template_spec.rb index 1c8647d859a..97304840010 100644 --- a/spec/features/projects/new_project_from_template_spec.rb +++ b/spec/features/projects/new_project_from_template_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New project from template', :js do +RSpec.describe 'New project from template', :js, feature_category: :projects do let(:user) { create(:user) } before do diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb index 7cf05242a23..769ad5bf61a 100644 --- a/spec/features/projects/new_project_spec.rb +++ b/spec/features/projects/new_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'New project', :js do +RSpec.describe 'New project', :js, feature_category: :projects do include Spec::Support::Helpers::Features::TopNavSpecHelpers context 'as a user' do diff --git a/spec/features/projects/package_files_spec.rb b/spec/features/projects/package_files_spec.rb index 6dc0294bb9e..824b57db7ad 100644 --- a/spec/features/projects/package_files_spec.rb +++ b/spec/features/projects/package_files_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'PackageFiles' do +RSpec.describe 'PackageFiles', feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project) } let!(:package) { create(:maven_package, project: project) } diff --git a/spec/features/projects/packages_spec.rb b/spec/features/projects/packages_spec.rb index bbe913cf1e5..31ff455d0df 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' do +RSpec.describe 'Packages', feature_category: :projects do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } diff --git a/spec/features/projects/pages/user_adds_domain_spec.rb b/spec/features/projects/pages/user_adds_domain_spec.rb index 5cb4fa163c8..708210e669c 100644 --- a/spec/features/projects/pages/user_adds_domain_spec.rb +++ b/spec/features/projects/pages/user_adds_domain_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe 'User adds pages domain', :js do +RSpec.describe 'User adds pages domain', :js, feature_category: :pages do include LetsEncryptHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/projects/pages/user_configures_pages_pipeline_spec.rb b/spec/features/projects/pages/user_configures_pages_pipeline_spec.rb index 029479d6b95..baef75ca303 100644 --- a/spec/features/projects/pages/user_configures_pages_pipeline_spec.rb +++ b/spec/features/projects/pages/user_configures_pages_pipeline_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe 'Pages edits pages settings', :js do +RSpec.describe 'Pages edits pages settings', :js, feature_category: :pages do include Spec::Support::Helpers::ModalHelpers let_it_be(:project) { create(:project, pages_https_only: false) } @@ -46,14 +46,14 @@ RSpec.describe 'Pages edits pages settings', :js do Feature.disable(:use_pipeline_wizard_for_pages) end + after do + Feature.enable(:use_pipeline_wizard_for_pages) + end + it 'shows configure pages instructions' do visit project_pages_path(project) expect(page).to have_content('Configure pages') end - - after do - Feature.enable(:use_pipeline_wizard_for_pages) - end end end diff --git a/spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb b/spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb index 2e28fa20b90..a7da59200e9 100644 --- a/spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb +++ b/spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe "Pages with Let's Encrypt", :https_pages_enabled do +RSpec.describe "Pages with Let's Encrypt", :https_pages_enabled, feature_category: :pages do include LetsEncryptHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/projects/pages/user_edits_settings_spec.rb b/spec/features/projects/pages/user_edits_settings_spec.rb index 88c27a6adf2..7ceefdecbae 100644 --- a/spec/features/projects/pages/user_edits_settings_spec.rb +++ b/spec/features/projects/pages/user_edits_settings_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe 'Pages edits pages settings', :js do +RSpec.describe 'Pages edits pages settings', :js, feature_category: :pages do include Spec::Support::Helpers::ModalHelpers let_it_be_with_reload(:project) { create(:project, :pages_published, pages_https_only: false) } diff --git a/spec/features/projects/pipeline_schedules_spec.rb b/spec/features/projects/pipeline_schedules_spec.rb index e569fef76f8..8beb8af1a8e 100644 --- a/spec/features/projects/pipeline_schedules_spec.rb +++ b/spec/features/projects/pipeline_schedules_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Pipeline Schedules', :js do +RSpec.describe 'Pipeline Schedules', :js, feature_category: :projects do include Spec::Support::Helpers::ModalHelpers let!(:project) { create(:project, :repository) } @@ -64,7 +64,7 @@ RSpec.describe 'Pipeline Schedules', :js do it 'shows the pipeline schedule with default ref' do page.within('[data-testid="schedule-target-ref"]') do - expect(first('.gl-new-dropdown-button-text').text).to eq('master') + expect(first('.gl-dropdown-button-text').text).to eq('master') end end end @@ -77,7 +77,7 @@ RSpec.describe 'Pipeline Schedules', :js do it 'shows the pipeline schedule with default ref' do page.within('[data-testid="schedule-target-ref"]') do - expect(first('.gl-new-dropdown-button-text').text).to eq('master') + expect(first('.gl-dropdown-button-text').text).to eq('master') end end end diff --git a/spec/features/projects/pipelines/legacy_pipeline_spec.rb b/spec/features/projects/pipelines/legacy_pipeline_spec.rb deleted file mode 100644 index c4fc194f0cd..00000000000 --- a/spec/features/projects/pipelines/legacy_pipeline_spec.rb +++ /dev/null @@ -1,1315 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Pipeline', :js do - include RoutesHelpers - include ProjectForksHelper - include ::ExclusiveLeaseHelpers - - let_it_be(:project) { create(:project) } - - let(:user) { create(:user) } - let(:role) { :developer } - - before do - sign_in(user) - project.add_role(user, role) - stub_feature_flags(pipeline_tabs_vue: false) - end - - shared_context 'pipeline builds' do - let!(:build_passed) do - create(:ci_build, :success, - pipeline: pipeline, stage: 'build', stage_idx: 0, name: 'build') - end - - let!(:build_failed) do - create(:ci_build, :failed, - pipeline: pipeline, stage: 'test', stage_idx: 1, name: 'test') - end - - let!(:build_preparing) do - create(:ci_build, :preparing, - pipeline: pipeline, stage: 'deploy', stage_idx: 2, name: 'prepare') - end - - let!(:build_running) do - create(:ci_build, :running, - pipeline: pipeline, stage: 'deploy', stage_idx: 3, name: 'deploy') - end - - let!(:build_manual) do - create(:ci_build, :manual, - pipeline: pipeline, stage: 'deploy', stage_idx: 3, name: 'manual-build') - end - - let!(:build_scheduled) do - create(:ci_build, :scheduled, - pipeline: pipeline, stage: 'deploy', stage_idx: 3, name: 'delayed-job') - end - - let!(:build_external) do - create(:generic_commit_status, status: 'success', - pipeline: pipeline, - name: 'jenkins', - stage: 'external', - ref: 'master', - target_url: 'http://gitlab.com/status') - end - end - - describe 'GET /:project/-/pipelines/:id' do - include_context 'pipeline builds' - - let_it_be(:group) { create(:group) } - let_it_be(:project, reload: true) { create(:project, :repository, group: group) } - - let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master', sha: project.commit.id, user: user) } - - subject(:visit_pipeline) { visit project_pipeline_path(project, pipeline) } - - it 'shows the pipeline graph' do - visit_pipeline - - expect(page).to have_selector('.js-pipeline-graph') - expect(page).to have_content('build') - expect(page).to have_content('test') - expect(page).to have_content('deploy') - expect(page).to have_content('Retry') - expect(page).to have_content('Cancel running') - end - - it 'shows Pipeline tab pane as active' do - visit_pipeline - - expect(page).to have_css('#js-tab-pipeline.active') - end - - it 'shows link to the pipeline ref' do - visit_pipeline - - expect(page).to have_link(pipeline.ref) - end - - it 'shows the pipeline information' do - visit_pipeline - - within '.pipeline-info' do - expect(page).to have_content("#{pipeline.statuses.count} jobs " \ - "for #{pipeline.ref}") - expect(page).to have_link(pipeline.ref, - href: project_commits_path(pipeline.project, pipeline.ref)) - end - end - - describe 'related merge requests' do - context 'when there are no related merge requests' do - it 'shows a "no related merge requests" message' do - visit_pipeline - - within '.related-merge-request-info' do - expect(page).to have_content('No related merge requests found.') - end - end - end - - context 'when there is one related merge request' do - let!(:merge_request) do - create(:merge_request, - source_project: project, - source_branch: pipeline.ref) - end - - it 'shows a link to the merge request' do - visit_pipeline - - within '.related-merge-requests' do - expect(page).to have_content('1 related merge request: ') - expect(page).to have_selector('.js-truncated-mr-list') - expect(page).to have_link("#{merge_request.to_reference} #{merge_request.title}") - - expect(page).not_to have_selector('.js-full-mr-list') - expect(page).not_to have_selector('.text-expander') - end - end - end - - context 'when there are two related merge requests' do - let!(:merge_request1) do - create(:merge_request, - source_project: project, - source_branch: pipeline.ref) - end - - let!(:merge_request2) do - create(:merge_request, - source_project: project, - source_branch: pipeline.ref, - target_branch: 'fix') - end - - it 'links to the most recent related merge request' do - visit_pipeline - - within '.related-merge-requests' do - expect(page).to have_content('2 related merge requests: ') - expect(page).to have_link("#{merge_request2.to_reference} #{merge_request2.title}") - expect(page).to have_selector('.text-expander') - expect(page).to have_selector('.js-full-mr-list', visible: false) - end - end - - it 'expands to show links to all related merge requests' do - visit_pipeline - - within '.related-merge-requests' do - find('.text-expander').click - - expect(page).to have_selector('.js-full-mr-list', visible: true) - - pipeline.all_merge_requests.map do |merge_request| - expect(page).to have_link(href: project_merge_request_path(project, merge_request)) - end - end - end - end - end - - describe 'pipelines details view' do - let!(:status) { create(:user_status, user: pipeline.user, emoji: 'smirk', message: 'Authoring this object') } - - it 'pipeline header shows the user status and emoji' do - visit project_pipeline_path(project, pipeline) - - within '[data-testid="ci-header-content"]' do - expect(page).to have_selector("[data-testid='#{status.message}']") - expect(page).to have_selector("[data-name='#{status.emoji}']") - end - end - end - - describe 'pipeline graph' do - before do - visit_pipeline - end - - context 'when pipeline has running builds' do - it 'shows a running icon and a cancel action for the running build' do - page.within('#ci-badge-deploy') do - expect(page).to have_selector('.js-ci-status-icon-running') - expect(page).to have_selector('.js-icon-cancel') - expect(page).to have_content('deploy') - end - end - - it 'cancels the running build and shows retry button', :sidekiq_might_not_need_inline do - find('#ci-badge-deploy .ci-action-icon-container').click - - page.within('#ci-badge-deploy') do - expect(page).to have_css('.js-icon-retry') - end - end - end - - context 'when pipeline has preparing builds' do - it 'shows a preparing icon and a cancel action' do - page.within('#ci-badge-prepare') do - expect(page).to have_selector('.js-ci-status-icon-preparing') - expect(page).to have_selector('.js-icon-cancel') - expect(page).to have_content('prepare') - end - end - - it 'cancels the preparing build and shows retry button', :sidekiq_might_not_need_inline do - find('#ci-badge-deploy .ci-action-icon-container').click - - page.within('#ci-badge-deploy') do - expect(page).to have_css('.js-icon-retry') - end - end - end - - context 'when pipeline has successful builds' do - it 'shows the success icon and a retry action for the successful build' do - page.within('#ci-badge-build') do - expect(page).to have_selector('.js-ci-status-icon-success') - expect(page).to have_content('build') - end - - page.within('#ci-badge-build .ci-action-icon-container.js-icon-retry') do - expect(page).to have_selector('svg') - end - end - - it 'is possible to retry the success job', :sidekiq_might_not_need_inline do - find('#ci-badge-build .ci-action-icon-container').click - wait_for_requests - - expect(page).not_to have_content('Retry job') - within('.js-pipeline-header-container') do - expect(page).to have_selector('.js-ci-status-icon-running') - end - end - end - - context 'when pipeline has a delayed job' do - let(:project) { create(:project, :repository, group: group) } - - it 'shows the scheduled icon and an unschedule action for the delayed job' do - page.within('#ci-badge-delayed-job') do - expect(page).to have_selector('.js-ci-status-icon-scheduled') - expect(page).to have_content('delayed-job') - end - - page.within('#ci-badge-delayed-job .ci-action-icon-container.js-icon-time-out') do - expect(page).to have_selector('svg') - end - end - - it 'unschedules the delayed job and shows play button as a manual job', :sidekiq_might_not_need_inline do - find('#ci-badge-delayed-job .ci-action-icon-container').click - - page.within('#ci-badge-delayed-job') do - expect(page).to have_css('.js-icon-play') - end - end - end - - context 'when pipeline has failed builds' do - it 'shows the failed icon and a retry action for the failed build' do - page.within('#ci-badge-test') do - expect(page).to have_selector('.js-ci-status-icon-failed') - expect(page).to have_content('test') - end - - page.within('#ci-badge-test .ci-action-icon-container.js-icon-retry') do - expect(page).to have_selector('svg') - end - end - - it 'is possible to retry the failed build', :sidekiq_might_not_need_inline do - find('#ci-badge-test .ci-action-icon-container').click - wait_for_requests - - expect(page).not_to have_content('Retry job') - within('.js-pipeline-header-container') do - expect(page).to have_selector('.js-ci-status-icon-running') - end - end - - it 'includes the failure reason' do - page.within('#ci-badge-test') do - build_link = page.find('.js-pipeline-graph-job-link') - expect(build_link['title']).to eq('test - failed - (unknown failure)') - end - end - end - - context 'when pipeline has manual jobs' do - it 'shows the skipped icon and a play action for the manual build' do - page.within('#ci-badge-manual-build') do - expect(page).to have_selector('.js-ci-status-icon-manual') - expect(page).to have_content('manual') - end - - page.within('#ci-badge-manual-build .ci-action-icon-container.js-icon-play') do - expect(page).to have_selector('svg') - end - end - - it 'is possible to play the manual job', :sidekiq_might_not_need_inline do - find('#ci-badge-manual-build .ci-action-icon-container').click - wait_for_requests - - expect(page).not_to have_content('Play job') - within('.js-pipeline-header-container') do - expect(page).to have_selector('.js-ci-status-icon-running') - end - end - end - - context 'when pipeline has external job' do - it 'shows the success icon and the generic comit status build' do - expect(page).to have_selector('.js-ci-status-icon-success') - expect(page).to have_content('jenkins') - expect(page).to have_link('jenkins', href: 'http://gitlab.com/status') - end - end - end - - context 'when the pipeline has manual stage' do - before do - create(:ci_build, :manual, pipeline: pipeline, stage_idx: 10, stage: 'publish', name: 'CentOS') - create(:ci_build, :manual, pipeline: pipeline, stage_idx: 10, stage: 'publish', name: 'Debian') - create(:ci_build, :manual, pipeline: pipeline, stage_idx: 10, stage: 'publish', name: 'OpenSUDE') - - # force to update stages statuses - Ci::ProcessPipelineService.new(pipeline).execute - - visit_pipeline - end - - it 'displays play all button' do - expect(page).to have_selector('.js-stage-action') - end - end - - context 'page tabs' do - before do - visit_pipeline - end - - it 'shows Pipeline, Jobs, DAG and Failed Jobs tabs with link' do - expect(page).to have_link('Pipeline') - expect(page).to have_link('Jobs') - expect(page).to have_link('Needs') - expect(page).to have_link('Failed Jobs') - end - - it 'shows counter in Jobs tab' do - expect(page.find('.js-builds-counter').text).to eq(pipeline.total_size.to_s) - end - - it 'shows Pipeline tab as active' do - expect(page).to have_css('.js-pipeline-tab-link .active') - end - - context 'without permission to access builds' do - let(:project) { create(:project, :public, :repository, public_builds: false) } - let(:role) { :guest } - - it 'does not show the pipeline details page' do - expect(page).to have_content('Not Found') - end - end - end - - describe 'test tabs' do - let(:pipeline) { create(:ci_pipeline, :with_test_reports, :with_report_results, project: project) } - - before do - stub_feature_flags(pipeline_tabs_vue: false) - visit_pipeline - wait_for_requests - end - - context 'with test reports' do - it 'shows badge counter in Tests tab' do - expect(page.find('.js-test-report-badge-counter').text).to eq(pipeline.test_report_summary.total[:count].to_s) - end - - it 'calls summary.json endpoint', :js do - find('.js-tests-tab-link').click - - expect(page).to have_content('Jobs') - expect(page).to have_selector('[data-testid="tests-detail"]', visible: :all) - end - end - - context 'without test reports' do - let(:pipeline) { create(:ci_pipeline, project: project) } - - it 'shows zero' do - expect(page.find('.js-test-report-badge-counter', visible: :all).text).to eq("0") - end - end - end - - context 'retrying jobs' do - before do - visit_pipeline - end - - it { expect(page).not_to have_content('retried') } - - context 'when retrying' do - before do - find('[data-testid="retryPipeline"]').click - wait_for_requests - end - - it 'does not show a "Retry" button', :sidekiq_might_not_need_inline do - expect(page).not_to have_content('Retry') - end - - it 'shows running status in pipeline header', :sidekiq_might_not_need_inline do - within('.js-pipeline-header-container') do - expect(page).to have_selector('.js-ci-status-icon-running') - end - end - end - end - - context 'canceling jobs' do - before do - visit_pipeline - end - - it { expect(page).not_to have_selector('.ci-canceled') } - - context 'when canceling' do - before do - click_on 'Cancel running' - end - - it 'does not show a "Cancel running" button', :sidekiq_might_not_need_inline do - expect(page).not_to have_content('Cancel running') - end - end - end - - context 'when user can not delete' do - before do - visit_pipeline - end - - it { expect(page).not_to have_button('Delete') } - end - - context 'when deleting' do - before do - group.add_owner(user) - - visit_pipeline - - click_button 'Delete' - click_button 'Delete pipeline' - end - - it 'redirects to pipeline overview page', :sidekiq_inline do - expect(page).to have_content('The pipeline has been deleted') - expect(page).to have_current_path(project_pipelines_path(project), ignore_query: true) - end - end - - context 'when pipeline ref does not exist in repository anymore' do - let(:pipeline) do - create(:ci_empty_pipeline, project: project, - ref: 'non-existent', - sha: project.commit.id, - user: user) - end - - before do - visit_pipeline - end - - it 'does not render link to the pipeline ref' do - expect(page).not_to have_link(pipeline.ref) - expect(page).to have_content(pipeline.ref) - end - - it 'does not render render raw HTML to the pipeline ref' do - page.within '.pipeline-info' do - expect(page).not_to have_content('<span class="ref-name"') - end - end - end - - context 'when pipeline is detached merge request pipeline' do - let(:source_project) { project } - let(:target_project) { project } - - let(:merge_request) do - create(:merge_request, - :with_detached_merge_request_pipeline, - source_project: source_project, - target_project: target_project) - end - - let(:pipeline) do - merge_request.all_pipelines.last - end - - it 'shows the pipeline information' do - visit_pipeline - - within '.pipeline-info' do - expect(page).to have_content("#{pipeline.statuses.count} jobs " \ - "for !#{merge_request.iid} " \ - "with #{merge_request.source_branch}") - expect(page).to have_link("!#{merge_request.iid}", - href: project_merge_request_path(project, merge_request)) - expect(page).to have_link(merge_request.source_branch, - href: project_commits_path(merge_request.source_project, merge_request.source_branch)) - end - end - - context 'when source branch does not exist' do - before do - project.repository.rm_branch(user, merge_request.source_branch) - end - - it 'does not link to the source branch commit path' do - visit_pipeline - - within '.pipeline-info' do - expect(page).not_to have_link(merge_request.source_branch) - expect(page).to have_content(merge_request.source_branch) - end - end - end - - context 'when source project is a forked project' do - let(:source_project) { fork_project(project, user, repository: true) } - - before do - visit project_pipeline_path(source_project, pipeline) - end - - it 'shows the pipeline information', :sidekiq_might_not_need_inline do - within '.pipeline-info' do - expect(page).to have_content("#{pipeline.statuses.count} jobs " \ - "for !#{merge_request.iid} " \ - "with #{merge_request.source_branch}") - expect(page).to have_link("!#{merge_request.iid}", - href: project_merge_request_path(project, merge_request)) - expect(page).to have_link(merge_request.source_branch, - href: project_commits_path(merge_request.source_project, merge_request.source_branch)) - end - end - end - end - - context 'when pipeline is merge request pipeline' do - let(:project) { create(:project, :repository, group: group) } - let(:source_project) { project } - let(:target_project) { project } - - let(:merge_request) do - create(:merge_request, - :with_merge_request_pipeline, - source_project: source_project, - target_project: target_project, - merge_sha: project.commit.id) - end - - let(:pipeline) do - merge_request.all_pipelines.last - end - - before do - pipeline.update!(user: user) - end - - it 'shows the pipeline information' do - visit_pipeline - - within '.pipeline-info' do - expect(page).to have_content("#{pipeline.statuses.count} jobs " \ - "for !#{merge_request.iid} " \ - "with #{merge_request.source_branch} " \ - "into #{merge_request.target_branch}") - expect(page).to have_link("!#{merge_request.iid}", - href: project_merge_request_path(project, merge_request)) - expect(page).to have_link(merge_request.source_branch, - href: project_commits_path(merge_request.source_project, merge_request.source_branch)) - expect(page).to have_link(merge_request.target_branch, - href: project_commits_path(merge_request.target_project, merge_request.target_branch)) - end - end - - context 'when target branch does not exist' do - before do - project.repository.rm_branch(user, merge_request.target_branch) - end - - it 'does not link to the target branch commit path' do - visit_pipeline - - within '.pipeline-info' do - expect(page).not_to have_link(merge_request.target_branch) - expect(page).to have_content(merge_request.target_branch) - end - end - end - - context 'when source project is a forked project' do - let(:source_project) { fork_project(project, user, repository: true) } - - before do - visit project_pipeline_path(source_project, pipeline) - end - - it 'shows the pipeline information', :sidekiq_might_not_need_inline do - within '.pipeline-info' do - expect(page).to have_content("#{pipeline.statuses.count} jobs " \ - "for !#{merge_request.iid} " \ - "with #{merge_request.source_branch} " \ - "into #{merge_request.target_branch}") - expect(page).to have_link("!#{merge_request.iid}", - href: project_merge_request_path(project, merge_request)) - expect(page).to have_link(merge_request.source_branch, - href: project_commits_path(merge_request.source_project, merge_request.source_branch)) - expect(page).to have_link(merge_request.target_branch, - href: project_commits_path(merge_request.target_project, merge_request.target_branch)) - end - end - end - end - end - - context 'when user does not have access to read jobs' do - before do - project.update!(public_builds: false) - end - - describe 'GET /:project/-/pipelines/:id' do - include_context 'pipeline builds' - - let_it_be(:project) { create(:project, :repository) } - - let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master', sha: project.commit.id, user: user) } - - before do - visit project_pipeline_path(project, pipeline) - end - - it 'shows the pipeline graph' do - expect(page).to have_selector('.js-pipeline-graph') - expect(page).to have_content('build') - expect(page).to have_content('test') - expect(page).to have_content('deploy') - expect(page).to have_content('Retry') - expect(page).to have_content('Cancel running') - end - - it 'does not link to job' do - expect(page).not_to have_selector('.js-pipeline-graph-job-link') - end - end - end - - context 'when a bridge job exists' do - include_context 'pipeline builds' - - let(:project) { create(:project, :repository) } - let(:downstream) { create(:project, :repository) } - - let(:pipeline) do - create(:ci_pipeline, project: project, - ref: 'master', - sha: project.commit.id, - user: user) - end - - let!(:bridge) do - create(:ci_bridge, pipeline: pipeline, - name: 'cross-build', - user: user, - downstream: downstream) - end - - describe 'GET /:project/-/pipelines/:id' do - before do - visit project_pipeline_path(project, pipeline) - end - - it 'shows the pipeline with a bridge job' do - expect(page).to have_selector('.js-pipeline-graph') - expect(page).to have_content('cross-build') - end - - context 'when a scheduled pipeline is created by a blocked user' do - let(:project) { create(:project, :repository) } - - let(:schedule) do - create(:ci_pipeline_schedule, - project: project, - owner: project.first_owner, - description: 'blocked user schedule' - ).tap do |schedule| - schedule.update_column(:next_run_at, 1.minute.ago) - end - end - - before do - schedule.owner.block! - PipelineScheduleWorker.new.perform - end - - it 'displays the PipelineSchedule in an inactive state' do - stub_feature_flags(pipeline_schedules_vue: false) - - visit project_pipeline_schedules_path(project) - page.click_link('Inactive') - - expect(page).to have_selector('table.ci-table > tbody > tr > td', text: 'blocked user schedule') - end - - it 'does not create a new Pipeline' do - visit project_pipelines_path(project) - - expect(page).not_to have_selector('.ci-table') - expect(schedule.last_pipeline).to be_nil - end - end - end - - describe 'GET /:project/-/pipelines/:id/builds' do - before do - visit builds_project_pipeline_path(project, pipeline) - end - - it 'shows a bridge job on a list' do - expect(page).to have_content('cross-build') - expect(page).to have_content(bridge.id) - end - end - end - - context 'when build requires resource', :sidekiq_inline do - let_it_be(:project) { create(:project, :repository) } - - let(:pipeline) { create(:ci_pipeline, project: project) } - let(:resource_group) { create(:ci_resource_group, project: project) } - - let!(:test_job) do - create(:ci_build, :pending, stage: 'test', name: 'test', stage_idx: 1, pipeline: pipeline, project: project) - end - - let!(:deploy_job) do - create(:ci_build, :created, - stage: 'deploy', - name: 'deploy', - stage_idx: 2, - pipeline: pipeline, - project: project, - resource_group: resource_group) - end - - describe 'GET /:project/-/pipelines/:id' do - subject { visit project_pipeline_path(project, pipeline) } - - it 'shows deploy job as created' do - subject - - within('.js-pipeline-header-container') do - expect(page).to have_content('pending') - end - - within('.js-pipeline-graph') do - within(all('[data-testid="stage-column"]')[0]) do - expect(page).to have_content('test') - expect(page).to have_css('.ci-status-icon-pending') - end - - within(all('[data-testid="stage-column"]')[1]) do - expect(page).to have_content('deploy') - expect(page).to have_css('.ci-status-icon-created') - end - end - end - - context 'when test job succeeded' do - before do - test_job.success! - end - - it 'shows deploy job as pending' do - subject - - within('.js-pipeline-header-container') do - expect(page).to have_content('running') - end - - within('.js-pipeline-graph') do - within(all('[data-testid="stage-column"]')[0]) do - expect(page).to have_content('test') - expect(page).to have_css('.ci-status-icon-success') - end - - within(all('[data-testid="stage-column"]')[1]) do - expect(page).to have_content('deploy') - expect(page).to have_css('.ci-status-icon-pending') - end - end - end - end - - context 'when test job succeeded but there are no available resources' do - let(:another_job) { create(:ci_build, :running, project: project, resource_group: resource_group) } - - before do - resource_group.assign_resource_to(another_job) - test_job.success! - end - - it 'shows deploy job as waiting for resource' do - subject - - within('.js-pipeline-header-container') do - expect(page).to have_content('waiting') - end - - within('.js-pipeline-graph') do - within(all('[data-testid="stage-column"]')[1]) do - expect(page).to have_content('deploy') - expect(page).to have_css('.ci-status-icon-waiting-for-resource') - end - end - end - - context 'when resource is released from another job' do - before do - another_job.success! - end - - it 'shows deploy job as pending' do - subject - - within('.js-pipeline-header-container') do - expect(page).to have_content('running') - end - - within('.js-pipeline-graph') do - within(all('[data-testid="stage-column"]')[1]) do - expect(page).to have_content('deploy') - expect(page).to have_css('.ci-status-icon-pending') - end - end - end - end - - context 'when deploy job is a bridge to trigger a downstream pipeline' do - let!(:deploy_job) do - create(:ci_bridge, :created, - stage: 'deploy', - name: 'deploy', - stage_idx: 2, - pipeline: pipeline, - project: project, - resource_group: resource_group - ) - end - - it 'shows deploy job as waiting for resource' do - subject - - within('.js-pipeline-header-container') do - expect(page).to have_content('waiting') - end - - within('.js-pipeline-graph') do - within(all('[data-testid="stage-column"]')[1]) do - expect(page).to have_content('deploy') - expect(page).to have_css('.ci-status-icon-waiting-for-resource') - end - end - end - end - - context 'when deploy job is a bridge to trigger a downstream pipeline' do - let!(:deploy_job) do - create(:ci_bridge, :created, - stage: 'deploy', - name: 'deploy', - stage_idx: 2, - pipeline: pipeline, - project: project, - resource_group: resource_group - ) - end - - it 'shows deploy job as waiting for resource' do - subject - - within('.js-pipeline-header-container') do - expect(page).to have_content('waiting') - end - - within('.js-pipeline-graph') do - within(all('[data-testid="stage-column"]')[1]) do - expect(page).to have_content('deploy') - expect(page).to have_css('.ci-status-icon-waiting-for-resource') - end - end - end - end - end - end - end - - describe 'GET /:project/-/pipelines/:id/dag' do - include_context 'pipeline builds' - - let_it_be(:project) { create(:project, :repository) } - - let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master', sha: project.commit.id) } - - before do - visit dag_project_pipeline_path(project, pipeline) - end - - it 'shows DAG tab pane as active' do - expect(page).to have_css('#js-tab-dag.active', visible: false) - end - - context 'page tabs' do - it 'shows Pipeline, Jobs and DAG tabs with link' do - expect(page).to have_link('Pipeline') - expect(page).to have_link('Jobs') - expect(page).to have_link('DAG') - end - - it 'shows counter in Jobs tab' do - expect(page.find('.js-builds-counter').text).to eq(pipeline.total_size.to_s) - end - - it 'shows DAG tab as active' do - expect(page).to have_css('li.js-dag-tab-link .active') - end - end - end - - context 'when user sees pipeline flags in a pipeline detail page' do - let_it_be(:project) { create(:project, :repository) } - - context 'when pipeline is latest' do - include_context 'pipeline builds' - - let(:pipeline) do - create(:ci_pipeline, - project: project, - ref: 'master', - sha: project.commit.id, - user: user) - end - - before do - visit project_pipeline_path(project, pipeline) - end - - it 'contains badge that indicates it is the latest build' do - page.within(all('.well-segment')[1]) do - expect(page).to have_content 'latest' - end - end - end - - context 'when pipeline has configuration errors' do - let(:pipeline) do - create(:ci_pipeline, - :invalid, - project: project, - ref: 'master', - sha: project.commit.id, - user: user) - end - - before do - visit project_pipeline_path(project, pipeline) - end - - it 'contains badge that indicates errors' do - page.within(all('.well-segment')[1]) do - expect(page).to have_content 'yaml invalid' - end - end - - it 'contains badge with tooltip which contains error' do - expect(pipeline).to have_yaml_errors - - page.within(all('.well-segment')[1]) do - expect(page).to have_selector( - %Q{span[title="#{pipeline.yaml_errors}"]}) - end - end - - it 'contains badge that indicates failure reason' do - expect(page).to have_content 'error' - end - - it 'contains badge with tooltip which contains failure reason' do - expect(pipeline.failure_reason?).to eq true - - page.within(all('.well-segment')[1]) do - expect(page).to have_selector( - %Q{span[title="#{pipeline.present.failure_reason}"]}) - end - end - - it 'contains a pipeline header with title' do - expect(page).to have_content "Pipeline ##{pipeline.id}" - end - end - - context 'when pipeline is stuck' do - include_context 'pipeline builds' - - let(:pipeline) do - create(:ci_pipeline, - project: project, - ref: 'master', - sha: project.commit.id, - user: user) - end - - before do - create(:ci_build, :pending, pipeline: pipeline) - visit project_pipeline_path(project, pipeline) - end - - it 'contains badge that indicates being stuck' do - page.within(all('.well-segment')[1]) do - expect(page).to have_content 'stuck' - end - end - end - - context 'when pipeline uses auto devops' do - include_context 'pipeline builds' - - let(:project) { create(:project, :repository, auto_devops_attributes: { enabled: true }) } - let(:pipeline) do - create(:ci_pipeline, - :auto_devops_source, - project: project, - ref: 'master', - sha: project.commit.id, - user: user) - end - - before do - visit project_pipeline_path(project, pipeline) - end - - it 'contains badge that indicates using auto devops' do - page.within(all('.well-segment')[1]) do - expect(page).to have_content 'Auto DevOps' - end - end - end - - context 'when pipeline runs in a merge request context' do - include_context 'pipeline builds' - - let(:pipeline) do - create(:ci_pipeline, - source: :merge_request_event, - project: merge_request.source_project, - ref: 'feature', - sha: merge_request.diff_head_sha, - user: user, - merge_request: merge_request) - end - - let(:merge_request) do - create(:merge_request, - source_project: project, - source_branch: 'feature', - target_project: project, - target_branch: 'master') - end - - before do - visit project_pipeline_path(project, pipeline) - end - - it 'contains badge that indicates detached merge request pipeline' do - page.within(all('.well-segment')[1]) do - expect(page).to have_content 'merge request' - end - end - end - end - - describe 'GET /:project/-/pipelines/:id/builds' do - include_context 'pipeline builds' - - let_it_be(:project) { create(:project, :repository) } - - let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master', sha: project.commit.id) } - - before do - visit builds_project_pipeline_path(project, pipeline) - end - - it 'shows a list of jobs' do - expect(page).to have_content('Test') - expect(page).to have_content(build_passed.id) - expect(page).to have_content('Deploy') - expect(page).to have_content(build_failed.id) - expect(page).to have_content(build_running.id) - expect(page).to have_content(build_external.id) - expect(page).to have_content('Retry') - expect(page).to have_content('Cancel running') - expect(page).to have_button('Play') - end - - context 'page tabs' do - it 'shows Pipeline, Jobs and DAG tabs with link' do - expect(page).to have_link('Pipeline') - expect(page).to have_link('Jobs') - expect(page).to have_link('Needs') - end - - it 'shows counter in Jobs tab' do - expect(page.find('.js-builds-counter').text).to eq(pipeline.total_size.to_s) - end - end - - context 'retrying jobs' do - it { expect(page).not_to have_content('retried') } - - context 'when retrying' do - before do - find('[data-testid="retry"]', match: :first).click - end - - it 'does not show a "Retry" button', :sidekiq_might_not_need_inline do - expect(page).not_to have_content('Retry') - end - end - end - - context 'canceling jobs' do - it { expect(page).not_to have_selector('.ci-canceled') } - - context 'when canceling' do - before do - click_on 'Cancel running' - end - - it 'does not show a "Cancel running" button', :sidekiq_might_not_need_inline do - expect(page).not_to have_content('Cancel running') - end - end - end - - context 'playing manual job' do - before do - within '[data-testid="jobs-tab-table"]' do - click_button('Play') - - wait_for_requests - end - end - - it { expect(build_manual.reload).to be_pending } - end - - context 'when user unschedules a delayed job' do - before do - within '[data-testid="jobs-tab-table"]' do - click_button('Unschedule') - end - end - - it 'unschedules the delayed job and shows play button as a manual job' do - expect(page).to have_button('Play') - expect(page).not_to have_button('Unschedule') - end - end - end - - describe 'GET /:project/-/pipelines/:id/failures' do - let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master', sha: '1234') } - let(:pipeline_failures_page) { failures_project_pipeline_path(project, pipeline) } - let!(:failed_build) { create(:ci_build, :failed, pipeline: pipeline) } - - subject { visit pipeline_failures_page } - - context 'with failed build' do - before do - failed_build.trace.set('4 examples, 1 failure') - end - - it 'lists failed builds' do - subject - - expect(page).to have_content(failed_build.name) - expect(page).to have_content(failed_build.stage_name) - end - - it 'shows build failure logs' do - subject - - expect(page).to have_content('4 examples, 1 failure') - end - - it 'shows the failure reason' do - subject - - expect(page).to have_content('There is an unknown failure, please try again') - end - - context 'when user does not have permission to retry build' do - it 'shows retry button for failed build' do - subject - - page.within(find('#js-tab-failures', match: :first)) do - expect(page).not_to have_button('Retry') - end - end - end - - context 'when user does have permission to retry build' do - before do - create(:protected_branch, :developers_can_merge, - name: pipeline.ref, project: project) - end - - it 'shows retry button for failed build' do - subject - - page.within(find('#js-tab-failures', match: :first)) do - expect(page).to have_button('Retry') - end - end - end - end - - context 'when missing build logs' do - it 'lists failed builds' do - subject - - expect(page).to have_content(failed_build.name) - expect(page).to have_content(failed_build.stage_name) - end - - it 'does not show log' do - subject - - expect(page).to have_content('No job log') - end - end - - context 'without permission to access builds' do - let(:role) { :guest } - - before do - project.update!(public_builds: false) - end - - context 'when accessing failed jobs page' do - it 'renders a 404 page' do - requests = inspect_requests { subject } - - expect(page).to have_title('Not Found') - expect(requests.first.status_code).to eq(404) - end - end - end - - context 'without failures' do - before do - failed_build.update!(status: :success) - end - - it 'does not show the failure tab' do - subject - - expect(page).not_to have_content('Failed Jobs') - end - - it 'displays the pipeline graph' do - subject - - expect(page).to have_current_path(pipeline_path(pipeline), ignore_query: true) - expect(page).to have_selector('.js-pipeline-graph') - end - end - end -end diff --git a/spec/features/projects/pipelines/legacy_pipelines_spec.rb b/spec/features/projects/pipelines/legacy_pipelines_spec.rb deleted file mode 100644 index 9d3ac71a875..00000000000 --- a/spec/features/projects/pipelines/legacy_pipelines_spec.rb +++ /dev/null @@ -1,852 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Pipelines', :js do - include ProjectForksHelper - include Spec::Support::Helpers::ModalHelpers - - let(:project) { create(:project) } - let(:expected_detached_mr_tag) { 'merge request' } - - context 'when user is logged in' do - let(:user) { create(:user) } - - before do - sign_in(user) - - project.add_developer(user) - project.update!(auto_devops_attributes: { enabled: false }) - - stub_feature_flags(pipeline_tabs_vue: false) - end - - describe 'GET /:project/-/pipelines' do - let(:project) { create(:project, :repository) } - - let!(:pipeline) do - create( - :ci_empty_pipeline, - project: project, - ref: 'master', - status: 'running', - sha: project.commit.id - ) - end - - context 'scope' do - before do - create(:ci_empty_pipeline, status: 'pending', project: project, sha: project.commit.id, ref: 'master') - create(:ci_empty_pipeline, status: 'running', project: project, sha: project.commit.id, ref: 'master') - create(:ci_empty_pipeline, status: 'created', project: project, sha: project.commit.id, ref: 'master') - create(:ci_empty_pipeline, status: 'success', project: project, sha: project.commit.id, ref: 'master') - end - - [:all, :running, :pending, :finished, :branches].each do |scope| - context "when displaying #{scope}" do - before do - visit_project_pipelines(scope: scope) - end - - it 'contains pipeline commit short SHA' do - expect(page).to have_content(pipeline.short_sha) - end - - it 'contains branch name' do - expect(page).to have_content(pipeline.ref) - end - end - end - end - - context 'header tabs' do - before do - visit project_pipelines_path(project) - wait_for_requests - end - - it 'shows a tab for All pipelines and count' do - expect(page.find('.js-pipelines-tab-all').text).to include('All') - expect(page.find('.js-pipelines-tab-all .badge').text).to include('1') - end - - it 'shows a tab for Finished pipelines and count' do - expect(page.find('.js-pipelines-tab-finished').text).to include('Finished') - end - - it 'shows a tab for Branches' do - expect(page.find('.js-pipelines-tab-branches').text).to include('Branches') - end - - it 'shows a tab for Tags' do - expect(page.find('.js-pipelines-tab-tags').text).to include('Tags') - end - - it 'updates content when tab is clicked' do - page.find('.js-pipelines-tab-finished').click - wait_for_requests - expect(page).to have_content('There are currently no finished pipelines.') - end - end - - context 'navigation links' do - before do - visit project_pipelines_path(project) - wait_for_requests - end - - it 'renders "CI lint" link' do - expect(page).to have_link('CI lint') - end - - it 'renders "Run pipeline" link' do - expect(page).to have_link('Run pipeline') - end - end - - context 'when pipeline is cancelable' do - let!(:build) do - create(:ci_build, pipeline: pipeline, - stage: 'test') - end - - before do - build.run - visit_project_pipelines - end - - it 'indicates that pipeline can be canceled' do - expect(page).to have_selector('.js-pipelines-cancel-button') - expect(page).to have_selector('.ci-running') - end - - context 'when canceling' do - before do - find('.js-pipelines-cancel-button').click - click_button 'Stop pipeline' - wait_for_requests - end - - it 'indicated that pipelines was canceled', :sidekiq_might_not_need_inline do - expect(page).not_to have_selector('.js-pipelines-cancel-button') - expect(page).to have_selector('.ci-canceled') - end - end - end - - context 'when pipeline is retryable', :sidekiq_might_not_need_inline do - let!(:build) do - create(:ci_build, pipeline: pipeline, - stage: 'test') - end - - before do - build.drop - visit_project_pipelines - end - - it 'indicates that pipeline can be retried' do - expect(page).to have_selector('.js-pipelines-retry-button') - expect(page).to have_selector('.ci-failed') - end - - context 'when retrying' do - before do - find('.js-pipelines-retry-button').click - wait_for_requests - end - - it 'shows running pipeline that is not retryable' do - expect(page).not_to have_selector('.js-pipelines-retry-button') - expect(page).to have_selector('.ci-running') - end - end - end - - context 'when pipeline is detached merge request pipeline' do - let(:merge_request) do - create(:merge_request, - :with_detached_merge_request_pipeline, - source_project: source_project, - target_project: target_project) - end - - let!(:pipeline) { merge_request.all_pipelines.first } - let(:source_project) { project } - let(:target_project) { project } - - before do - visit project_pipelines_path(source_project) - end - - shared_examples_for 'detached merge request pipeline' do - it 'shows pipeline information without pipeline ref', :sidekiq_might_not_need_inline do - within '.pipeline-tags' do - expect(page).to have_content(expected_detached_mr_tag) - - expect(page).to have_link(merge_request.iid, - href: project_merge_request_path(project, merge_request)) - - expect(page).not_to have_link(pipeline.ref) - end - end - end - - it_behaves_like 'detached merge request pipeline' - - context 'when source project is a forked project' do - let(:source_project) { fork_project(project, user, repository: true) } - - it_behaves_like 'detached merge request pipeline' - end - end - - context 'when pipeline is merge request pipeline' do - let(:merge_request) do - create(:merge_request, - :with_merge_request_pipeline, - source_project: source_project, - target_project: target_project, - merge_sha: target_project.commit.sha) - end - - let!(:pipeline) { merge_request.all_pipelines.first } - let(:source_project) { project } - let(:target_project) { project } - - before do - visit project_pipelines_path(source_project) - end - - shared_examples_for 'Correct merge request pipeline information' do - it 'does not show detached tag for the pipeline, and shows the link of the merge request' \ - 'and does not show the ref of the pipeline', :sidekiq_might_not_need_inline do - within '.pipeline-tags' do - expect(page).not_to have_content(expected_detached_mr_tag) - - expect(page).to have_link(merge_request.iid, - href: project_merge_request_path(project, merge_request)) - - expect(page).not_to have_link(pipeline.ref) - end - end - end - - it_behaves_like 'Correct merge request pipeline information' - - context 'when source project is a forked project' do - let(:source_project) { fork_project(project, user, repository: true) } - - it_behaves_like 'Correct merge request pipeline information' - end - end - - context 'when pipeline has configuration errors' do - let(:pipeline) do - create(:ci_pipeline, :invalid, project: project) - end - - before do - visit_project_pipelines - end - - it 'contains badge that indicates errors' do - expect(page).to have_content 'yaml invalid' - end - - it 'contains badge with tooltip which contains error' do - expect(pipeline).to have_yaml_errors - expect(page).to have_selector( - %Q{span[title="#{pipeline.yaml_errors}"]}) - end - - it 'contains badge that indicates failure reason' do - expect(page).to have_content 'error' - end - - it 'contains badge with tooltip which contains failure reason' do - expect(pipeline.failure_reason?).to eq true - expect(page).to have_selector( - %Q{span[title="#{pipeline.present.failure_reason}"]}) - end - end - - context 'with manual actions' do - let!(:manual) do - create(:ci_build, :manual, - pipeline: pipeline, - name: 'manual build', - stage: 'test') - end - - before do - visit_project_pipelines - end - - it 'has a dropdown with play button' do - expect(page).to have_selector('[data-testid="pipelines-manual-actions-dropdown"] [data-testid="play-icon"]') - end - - it 'has link to the manual action' do - find('[data-testid="pipelines-manual-actions-dropdown"]').click - - expect(page).to have_button('manual build') - end - - context 'when manual action was played' do - before do - find('[data-testid="pipelines-manual-actions-dropdown"]').click - click_button('manual build') - end - - it 'enqueues manual action job' do - expect(page).to have_selector( - '[data-testid="pipelines-manual-actions-dropdown"] .gl-dropdown-toggle:disabled' - ) - end - end - end - - context 'when there is a delayed job' do - let!(:delayed_job) do - create(:ci_build, :scheduled, - pipeline: pipeline, - name: 'delayed job 1', - stage: 'test') - end - - before do - visit_project_pipelines - end - - it 'has a dropdown for actionable jobs' do - expect(page).to have_selector('[data-testid="pipelines-manual-actions-dropdown"] [data-testid="play-icon"]') - end - - it "has link to the delayed job's action" do - find('[data-testid="pipelines-manual-actions-dropdown"]').click - - time_diff = [0, delayed_job.scheduled_at - Time.zone.now].max - expect(page).to have_button('delayed job 1') - expect(page).to have_content(Time.at(time_diff).utc.strftime("%H:%M:%S")) - end - - context 'when delayed job is expired already' do - let!(:delayed_job) do - create(:ci_build, :expired_scheduled, - pipeline: pipeline, - name: 'delayed job 1', - stage: 'test') - end - - it "shows 00:00:00 as the remaining time" do - find('[data-testid="pipelines-manual-actions-dropdown"]').click - - expect(page).to have_content("00:00:00") - end - end - - context 'when user played a delayed job immediately' do - before do - find('[data-testid="pipelines-manual-actions-dropdown"]').click - accept_gl_confirm do - click_button 'delayed job 1' - end - wait_for_requests - end - - it 'enqueues the delayed job', :js do - find('[data-testid="mini-pipeline-graph-dropdown"]').click - - within('[data-testid="mini-pipeline-graph-dropdown"]') { find('.ci-status-icon-pending') } - - expect(delayed_job.reload).to be_pending - end - end - end - - context 'for generic statuses' do - context 'when preparing' do - let!(:pipeline) do - create(:ci_empty_pipeline, - status: 'preparing', project: project) - end - - let!(:status) do - create(:generic_commit_status, - :preparing, pipeline: pipeline) - end - - before do - visit_project_pipelines - end - - it 'is cancelable' do - expect(page).to have_selector('.js-pipelines-cancel-button') - end - - it 'shows the pipeline as preparing' do - expect(page).to have_selector('.ci-preparing') - end - end - - context 'when running' do - let!(:running) do - create(:generic_commit_status, - status: 'running', - pipeline: pipeline, - stage: 'test') - end - - before do - visit_project_pipelines - end - - it 'is cancelable' do - expect(page).to have_selector('.js-pipelines-cancel-button') - end - - it 'has pipeline running' do - expect(page).to have_selector('.ci-running') - end - - context 'when canceling' do - before do - find('.js-pipelines-cancel-button').click - click_button 'Stop pipeline' - end - - it 'indicates that pipeline was canceled', :sidekiq_might_not_need_inline do - expect(page).not_to have_selector('.js-pipelines-cancel-button') - expect(page).to have_selector('.ci-canceled') - end - end - end - - context 'when failed' do - let!(:status) do - create(:generic_commit_status, :pending, - pipeline: pipeline, - stage: 'test') - end - - before do - status.drop - visit_project_pipelines - end - - it 'is not retryable' do - expect(page).not_to have_selector('.js-pipelines-retry-button') - end - - it 'has failed pipeline', :sidekiq_might_not_need_inline do - expect(page).to have_selector('.ci-failed') - end - end - end - - context 'downloadable pipelines' do - context 'with artifacts' do - let!(:with_artifacts) do - build = create(:ci_build, :success, - pipeline: pipeline, - name: 'rspec tests', - stage: 'test') - - create(:ci_job_artifact, :codequality, job: build) - end - - before do - visit_project_pipelines - end - - it 'has artifacts dropdown' do - expect(page).to have_selector('[data-testid="pipeline-multi-actions-dropdown"]') - end - end - - context 'with artifacts expired' do - let!(:with_artifacts_expired) do - create(:ci_build, :expired, :success, - pipeline: pipeline, - name: 'rspec', - stage: 'test') - end - - before do - visit_project_pipelines - end - - it { expect(page).not_to have_selector('[data-testid="artifact-item"]') } - end - - context 'without artifacts' do - let!(:without_artifacts) do - create(:ci_build, :success, - pipeline: pipeline, - name: 'rspec', - stage: 'test') - end - - before do - visit_project_pipelines - end - - it { expect(page).not_to have_selector('[data-testid="artifact-item"]') } - end - - context 'with trace artifact' do - before do - create(:ci_build, :success, :trace_artifact, pipeline: pipeline) - - visit_project_pipelines - end - - it 'does not show trace artifact as artifacts' do - expect(page).not_to have_selector('[data-testid="artifact-item"]') - end - end - end - - context 'mini pipeline graph' do - let!(:build) do - create(:ci_build, :pending, pipeline: pipeline, - stage: 'build', - name: 'build') - end - - dropdown_selector = '[data-testid="mini-pipeline-graph-dropdown"]' - - before do - visit_project_pipelines - end - - it 'renders a mini pipeline graph' do - expect(page).to have_selector('[data-testid="pipeline-mini-graph"]') - expect(page).to have_selector(dropdown_selector) - end - - context 'when clicking a stage badge' do - it 'opens a dropdown' do - find(dropdown_selector).click - - expect(page).to have_link build.name - end - - it 'is possible to cancel pending build' do - find(dropdown_selector).click - find('.js-ci-action').click - wait_for_requests - - expect(build.reload).to be_canceled - end - end - - context 'for a failed pipeline' do - let!(:build) do - create(:ci_build, :failed, pipeline: pipeline, - stage: 'build', - name: 'build') - end - - it 'displays the failure reason' do - find(dropdown_selector).click - - within('.js-builds-dropdown-list') do - build_element = page.find('.mini-pipeline-graph-dropdown-item') - expect(build_element['title']).to eq('build - failed - (unknown failure)') - end - end - end - end - - context 'with pagination' do - before do - allow(Ci::Pipeline).to receive(:default_per_page).and_return(1) - create(:ci_empty_pipeline, project: project) - end - - it 'renders pagination' do - visit project_pipelines_path(project) - wait_for_requests - - expect(page).to have_selector('.gl-pagination') - end - - it 'renders second page of pipelines' do - visit project_pipelines_path(project, page: '2') - wait_for_requests - - expect(page).to have_selector('.gl-pagination .page-link', count: 4) - end - - it 'shows updated content' do - visit project_pipelines_path(project) - wait_for_requests - page.find('.page-link.next-page-item').click - - expect(page).to have_selector('.gl-pagination .page-link', count: 4) - end - end - - context 'with pipeline key selection' do - before do - visit project_pipelines_path(project) - wait_for_requests - end - - it 'changes the Pipeline ID column for Pipeline IID' do - page.find('[data-testid="pipeline-key-dropdown"]').click - - within '.gl-new-dropdown-contents' do - dropdown_options = page.find_all '.gl-new-dropdown-item' - - dropdown_options[1].click - end - - expect(page.find('[data-testid="pipeline-th"]')).to have_content 'Pipeline' - expect(page.find('[data-testid="pipeline-url-link"]')).to have_content "##{pipeline.iid}" - end - end - end - - describe 'GET /:project/-/pipelines/show' do - let(:project) { create(:project, :repository) } - - let(:pipeline) do - create(:ci_empty_pipeline, - project: project, - sha: project.commit.id, - user: user) - end - - before do - create_build('build', 0, 'build', :success) - create_build('test', 1, 'rspec 0:2', :pending) - create_build('test', 1, 'rspec 1:2', :running) - create_build('test', 1, 'spinach 0:2', :created) - create_build('test', 1, 'spinach 1:2', :created) - create_build('test', 1, 'audit', :created) - create_build('deploy', 2, 'production', :created) - - create( - :generic_commit_status, - pipeline: pipeline, - stage: 'external', - name: 'jenkins', - stage_idx: 3, - ref: 'master' - ) - - visit project_pipeline_path(project, pipeline) - wait_for_requests - end - - it 'shows a graph with grouped stages' do - expect(page).to have_css('.js-pipeline-graph') - - # header - expect(page).to have_text("##{pipeline.id}") - expect(page).to have_selector(%Q(img[src="#{pipeline.user.avatar_url}"])) - expect(page).to have_link(pipeline.user.name, href: user_path(pipeline.user)) - - # stages - expect(page).to have_text('build') - expect(page).to have_text('test') - expect(page).to have_text('deploy') - expect(page).to have_text('external') - - # builds - expect(page).to have_text('rspec') - expect(page).to have_text('spinach') - expect(page).to have_text('rspec') - expect(page).to have_text('production') - expect(page).to have_text('jenkins') - end - - def create_build(stage, stage_idx, name, status) - create(:ci_build, pipeline: pipeline, stage: stage, stage_idx: stage_idx, name: name, status: status) - end - end - - describe 'POST /:project/-/pipelines' do - let(:project) { create(:project, :repository) } - - before do - stub_feature_flags(run_pipeline_graphql: false) - visit new_project_pipeline_path(project) - end - - context 'for valid commit', :js do - before do - click_button project.default_branch - wait_for_requests - - find('p', text: 'master').click - wait_for_requests - end - - context 'with gitlab-ci.yml', :js do - before do - stub_ci_pipeline_to_return_yaml_file - end - - it 'creates a new pipeline' do - expect do - click_on 'Run pipeline' - wait_for_requests - end - .to change { Ci::Pipeline.count }.by(1) - - expect(Ci::Pipeline.last).to be_web - end - - context 'when variables are specified' do - it 'creates a new pipeline with variables' do - page.within(find("[data-testid='ci-variable-row']")) do - find("[data-testid='pipeline-form-ci-variable-key']").set('key_name') - find("[data-testid='pipeline-form-ci-variable-value']").set('value') - end - - expect do - click_on 'Run pipeline' - wait_for_requests - end - .to change { Ci::Pipeline.count }.by(1) - - expect(Ci::Pipeline.last.variables.map { |var| var.slice(:key, :secret_value) }) - .to eq [{ key: "key_name", secret_value: "value" }.with_indifferent_access] - end - end - end - - context 'without gitlab-ci.yml' do - before do - click_on 'Run pipeline' - wait_for_requests - end - - it { expect(page).to have_content('Missing CI config file') } - - it 'creates a pipeline after first request failed and a valid gitlab-ci.yml file' \ - 'is available when trying again' do - stub_ci_pipeline_to_return_yaml_file - - expect do - click_on 'Run pipeline' - wait_for_requests - end - .to change { Ci::Pipeline.count }.by(1) - end - end - end - end - - describe 'Reset runner caches' do - let(:project) { create(:project, :repository) } - - before do - create(:ci_empty_pipeline, status: 'success', project: project, sha: project.commit.id, ref: 'master') - project.add_maintainer(user) - visit project_pipelines_path(project) - end - - it 'has a clear caches button' do - expect(page).to have_button 'Clear runner caches' - end - - describe 'user clicks the button' do - context 'when project already has jobs_cache_index' do - before do - project.update!(jobs_cache_index: 1) - end - - it 'increments jobs_cache_index' do - click_button 'Clear runner caches' - wait_for_requests - expect(page.find('[data-testid="alert-info"]')).to have_content 'Project cache successfully reset.' - end - end - - context 'when project does not have jobs_cache_index' do - it 'sets jobs_cache_index to 1' do - click_button 'Clear runner caches' - wait_for_requests - expect(page.find('[data-testid="alert-info"]')).to have_content 'Project cache successfully reset.' - end - end - end - end - - describe 'Run Pipelines' do - let(:project) { create(:project, :repository) } - - before do - visit new_project_pipeline_path(project) - end - - describe 'new pipeline page' do - it 'has field to add a new pipeline' do - expect(page).to have_selector('[data-testid="ref-select"]') - expect(find('[data-testid="ref-select"]')).to have_content project.default_branch - expect(page).to have_content('Run for') - end - end - - describe 'find pipelines' do - it 'shows filtered pipelines', :js do - click_button project.default_branch - - page.within '[data-testid="ref-select"]' do - find('[data-testid="search-refs"]').native.send_keys('fix') - - page.within '.gl-new-dropdown-contents' do - expect(page).to have_content('fix') - end - end - end - end - end - - describe 'Empty State' do - let(:project) { create(:project, :repository) } - - before do - visit project_pipelines_path(project) - end - - it 'renders empty state' do - expect(page).to have_content 'Try test template' - end - end - end - - context 'when user is not logged in' do - before do - project.update!(auto_devops_attributes: { enabled: false }) - visit project_pipelines_path(project) - end - - context 'when project is public' do - let(:project) { create(:project, :public, :repository) } - - context 'without pipelines' do - it { expect(page).to have_content 'This project is not currently set up to run pipelines.' } - end - end - - context 'when project is private' do - let(:project) { create(:project, :private, :repository) } - - it 'redirects the user to sign_in and displays the flash alert' do - expect(page).to have_content 'You need to sign in' - expect(page).to have_current_path("/users/sign_in") - end - end - end - - def visit_project_pipelines(**query) - visit project_pipelines_path(project, query) - wait_for_requests - end -end diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb index 2d729af513a..d6067e22952 100644 --- a/spec/features/projects/pipelines/pipeline_spec.rb +++ b/spec/features/projects/pipelines/pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Pipeline', :js do +RSpec.describe 'Pipeline', :js, feature_category: :projects do include RoutesHelpers include ProjectForksHelper include ::ExclusiveLeaseHelpers diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb index b7b715cb6db..3bdabd672c7 100644 --- a/spec/features/projects/pipelines/pipelines_spec.rb +++ b/spec/features/projects/pipelines/pipelines_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Pipelines', :js do +RSpec.describe 'Pipelines', :js, feature_category: :projects do include ProjectForksHelper include Spec::Support::Helpers::ModalHelpers @@ -596,8 +596,8 @@ RSpec.describe 'Pipelines', :js do it 'changes the Pipeline ID column for Pipeline IID' do page.find('[data-testid="pipeline-key-dropdown"]').click - within '.gl-new-dropdown-contents' do - dropdown_options = page.find_all '.gl-new-dropdown-item' + within '.gl-dropdown-contents' do + dropdown_options = page.find_all '.gl-dropdown-item' dropdown_options[1].click end @@ -663,7 +663,19 @@ RSpec.describe 'Pipelines', :js do describe 'POST /:project/-/pipelines' do let(:project) { create(:project, :repository) } - shared_examples 'run pipeline form with gitlab-ci.yml' do + before do + visit new_project_pipeline_path(project) + end + + context 'for valid commit', :js do + before do + click_button project.default_branch + wait_for_requests + + find('p', text: 'master').click + wait_for_requests + end + context 'with gitlab-ci.yml', :js do before do stub_ci_pipeline_to_return_yaml_file @@ -680,7 +692,7 @@ RSpec.describe 'Pipelines', :js do end context 'when variables are specified' do - it 'creates a new pipeline with variables' do + it 'creates a new pipeline with variables', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/375552' do page.within(find("[data-testid='ci-variable-row']")) do find("[data-testid='pipeline-form-ci-variable-key']").set('key_name') find("[data-testid='pipeline-form-ci-variable-value']").set('value') @@ -697,9 +709,7 @@ RSpec.describe 'Pipelines', :js do end end end - end - shared_examples 'run pipeline form without gitlab-ci.yml' do context 'without gitlab-ci.yml' do before do click_on 'Run pipeline' @@ -708,7 +718,7 @@ RSpec.describe 'Pipelines', :js do it { expect(page).to have_content('Missing CI config file') } - it 'creates a pipeline after first request failed and a valid gitlab-ci.yml file is available when trying again' do + it 'creates a pipeline after first request failed and a valid gitlab-ci.yml file is available when trying again', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/375552' do stub_ci_pipeline_to_return_yaml_file expect do @@ -719,52 +729,6 @@ RSpec.describe 'Pipelines', :js do end end end - - # Run Pipeline form with REST endpoints - # TODO: Clean up tests when run_pipeline_graphql is enabled - # Issue https://gitlab.com/gitlab-org/gitlab/-/issues/372310 - context 'with feature flag disabled' do - before do - stub_feature_flags(run_pipeline_graphql: false) - visit new_project_pipeline_path(project) - end - - context 'for valid commit', :js do - before do - click_button project.default_branch - wait_for_requests - - find('p', text: 'master').click - wait_for_requests - end - - it_behaves_like 'run pipeline form with gitlab-ci.yml' - - it_behaves_like 'run pipeline form without gitlab-ci.yml' - end - end - - # Run Pipeline form with GraphQL - context 'with feature flag enabled' do - before do - stub_feature_flags(run_pipeline_graphql: true) - visit new_project_pipeline_path(project) - end - - context 'for valid commit', :js do - before do - click_button project.default_branch - wait_for_requests - - find('p', text: 'master').click - wait_for_requests - end - - it_behaves_like 'run pipeline form with gitlab-ci.yml' - - it_behaves_like 'run pipeline form without gitlab-ci.yml' - end - end end describe 'Reset runner caches' do @@ -825,7 +789,7 @@ RSpec.describe 'Pipelines', :js do page.within '[data-testid="ref-select"]' do find('[data-testid="search-refs"]').native.send_keys('fix') - page.within '.gl-new-dropdown-contents' do + page.within '.gl-dropdown-contents' do expect(page).to have_content('fix') end end diff --git a/spec/features/projects/raw/user_interacts_with_raw_endpoint_spec.rb b/spec/features/projects/raw/user_interacts_with_raw_endpoint_spec.rb index 6745eb1a3fb..fb7814285b8 100644 --- a/spec/features/projects/raw/user_interacts_with_raw_endpoint_spec.rb +++ b/spec/features/projects/raw/user_interacts_with_raw_endpoint_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Raw > User interacts with raw endpoint' do +RSpec.describe 'Projects > Raw > User interacts with raw endpoint', feature_category: :projects do include RepoHelpers let(:user) { create(:user) } diff --git a/spec/features/projects/releases/user_creates_release_spec.rb b/spec/features/projects/releases/user_creates_release_spec.rb index 4eb7581222e..f678d77b002 100644 --- a/spec/features/projects/releases/user_creates_release_spec.rb +++ b/spec/features/projects/releases/user_creates_release_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User creates release', :js do +RSpec.describe 'User creates release', :js, feature_category: :continuous_delivery do include Spec::Support::Helpers::Features::ReleasesHelpers let_it_be(:project) { create(:project, :repository) } diff --git a/spec/features/projects/releases/user_views_edit_release_spec.rb b/spec/features/projects/releases/user_views_edit_release_spec.rb index 78b9798941a..ef3b35837ff 100644 --- a/spec/features/projects/releases/user_views_edit_release_spec.rb +++ b/spec/features/projects/releases/user_views_edit_release_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User edits Release', :js do +RSpec.describe 'User edits Release', :js, feature_category: :continuous_delivery do let_it_be(:project) { create(:project, :repository) } let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/releases/user_views_release_spec.rb b/spec/features/projects/releases/user_views_release_spec.rb index 4410f345e56..efa0ebd761d 100644 --- a/spec/features/projects/releases/user_views_release_spec.rb +++ b/spec/features/projects/releases/user_views_release_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views Release', :js do +RSpec.describe 'User views Release', :js, feature_category: :continuous_delivery do let(:project) { create(:project, :repository) } let(:user) { create(:user) } diff --git a/spec/features/projects/releases/user_views_releases_spec.rb b/spec/features/projects/releases/user_views_releases_spec.rb index 10418e8072d..13dde57d885 100644 --- a/spec/features/projects/releases/user_views_releases_spec.rb +++ b/spec/features/projects/releases/user_views_releases_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views releases', :js do +RSpec.describe 'User views releases', :js, feature_category: :continuous_delivery do let_it_be(:today) { Time.zone.now } let_it_be(:yesterday) { today - 1.day } let_it_be(:tomorrow) { today + 1.day } diff --git a/spec/features/projects/remote_mirror_spec.rb b/spec/features/projects/remote_mirror_spec.rb index 2c8e895d43d..aa0c1ead4c0 100644 --- a/spec/features/projects/remote_mirror_spec.rb +++ b/spec/features/projects/remote_mirror_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project remote mirror', :feature do +RSpec.describe 'Project remote mirror', :feature, feature_category: :projects do let(:project) { create(:project, :repository, :remote_mirror) } let(:remote_mirror) { project.remote_mirrors.first } let(:user) { create(:user) } diff --git a/spec/features/projects/settings/access_tokens_spec.rb b/spec/features/projects/settings/access_tokens_spec.rb index 88f9a50b093..12e14f5193f 100644 --- a/spec/features/projects/settings/access_tokens_spec.rb +++ b/spec/features/projects/settings/access_tokens_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project > Settings > Access Tokens', :js do +RSpec.describe 'Project > Settings > Access Tokens', :js, feature_category: :credential_management do include Spec::Support::Helpers::ModalHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/settings/branch_names_settings_spec.rb b/spec/features/projects/settings/branch_names_settings_spec.rb index fdd883bc2b6..5d82dff1efd 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 do +RSpec.describe 'Project settings > repositories > Branch names', :js, feature_category: :projects do let_it_be(:project) { create(:project, :public) } let(:user) { create(:user) } diff --git a/spec/features/projects/settings/branch_rules_settings_spec.rb b/spec/features/projects/settings/branch_rules_settings_spec.rb index 5cc35f108b5..71d9c559b77 100644 --- a/spec/features/projects/settings/branch_rules_settings_spec.rb +++ b/spec/features/projects/settings/branch_rules_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > Repository > Branch rules settings' do +RSpec.describe 'Projects > Settings > Repository > Branch rules settings', feature_category: :projects do let(:project) { create(:project_empty_repo) } let(:user) { create(:user) } let(:role) { :developer } diff --git a/spec/features/projects/settings/external_authorization_service_settings_spec.rb b/spec/features/projects/settings/external_authorization_service_settings_spec.rb index c236c85b773..a99fd5f9788 100644 --- a/spec/features/projects/settings/external_authorization_service_settings_spec.rb +++ b/spec/features/projects/settings/external_authorization_service_settings_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > External Authorization Classification Label setting' do +RSpec.describe 'Projects > Settings > External Authorization Classification Label setting', +feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project_empty_repo) } diff --git a/spec/features/projects/settings/forked_project_settings_spec.rb b/spec/features/projects/settings/forked_project_settings_spec.rb index 04fb6953b51..28d5c080db9 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 do +RSpec.describe 'Projects > Settings > For a forked project', :js, feature_category: :projects do include ProjectForksHelper let(:user) { create(:user) } let(:original_project) { create(:project) } diff --git a/spec/features/projects/settings/lfs_settings_spec.rb b/spec/features/projects/settings/lfs_settings_spec.rb index 6e1be3c7e51..1695b49830d 100644 --- a/spec/features/projects/settings/lfs_settings_spec.rb +++ b/spec/features/projects/settings/lfs_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > LFS settings' do +RSpec.describe 'Projects > Settings > LFS settings', feature_category: :projects do let(:project) { create(:project) } let(:user) { create(:user) } let(:role) { :maintainer } diff --git a/spec/features/projects/settings/merge_requests_settings_spec.rb b/spec/features/projects/settings/merge_requests_settings_spec.rb index ba84d8b6d1a..ca90817b0a4 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' do +RSpec.describe 'Projects > Settings > Merge requests', feature_category: :projects 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 871391fbe9c..2cdcf86757e 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 do +RSpec.describe 'Projects > Settings > For a forked project', :js, feature_category: :projects do let_it_be(:project) { create(:project, :repository, create_templates: :issue) } let(:user) { project.first_owner } diff --git a/spec/features/projects/settings/packages_settings_spec.rb b/spec/features/projects/settings/packages_settings_spec.rb index 1c2b0faa215..4ef17830f81 100644 --- a/spec/features/projects/settings/packages_settings_spec.rb +++ b/spec/features/projects/settings/packages_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > Packages', :js do +RSpec.describe 'Projects > Settings > Packages', :js, feature_category: :projects do let_it_be(:project) { create(:project) } let(:user) { project.first_owner } @@ -33,6 +33,10 @@ RSpec.describe 'Projects > Settings > Packages', :js do it 'displays the packages access level setting' do expect(page).to have_selector('[data-testid="package-registry-access-level"] > label', text: 'Package registry') + expect(page).to have_selector('input[name="package_registry_enabled"]', visible: false) + expect(page).to have_selector('input[name="package_registry_enabled"] + button', visible: true) + expect(page).to have_selector('input[name="package_registry_api_for_everyone_enabled"]', visible: false) + expect(page).to have_selector('input[name="package_registry_api_for_everyone_enabled"] + button', visible: true) expect(page).to have_selector( 'input[name="project[project_feature_attributes][package_registry_access_level]"]', visible: false diff --git a/spec/features/projects/settings/pipelines_settings_spec.rb b/spec/features/projects/settings/pipelines_settings_spec.rb index a64f81430d1..37973c9b8d6 100644 --- a/spec/features/projects/settings/pipelines_settings_spec.rb +++ b/spec/features/projects/settings/pipelines_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Projects > Settings > Pipelines settings" do +RSpec.describe "Projects > Settings > Pipelines settings", feature_category: :projects do let(:project) { create(:project) } let(:user) { create(:user) } let(:role) { :developer } @@ -165,7 +165,7 @@ RSpec.describe "Projects > Settings > Pipelines settings" do let(:page_token) { find('#registration_token').text } before do - click_button 'Reset registration token' + click_link 'Reset registration token' end it 'changes registration token' do diff --git a/spec/features/projects/settings/project_badges_spec.rb b/spec/features/projects/settings/project_badges_spec.rb index 2c26168e3c0..f4c2265c2c2 100644 --- a/spec/features/projects/settings/project_badges_spec.rb +++ b/spec/features/projects/settings/project_badges_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Badges' do +RSpec.describe 'Project Badges', feature_category: :projects do include WaitForRequests let(:user) { create(:user) } diff --git a/spec/features/projects/settings/project_settings_spec.rb b/spec/features/projects/settings/project_settings_spec.rb index a0d44b579a8..46a41cfc6f1 100644 --- a/spec/features/projects/settings/project_settings_spec.rb +++ b/spec/features/projects/settings/project_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects settings' do +RSpec.describe 'Projects settings', feature_category: :projects do let_it_be(:project) { create(:project) } let(:user) { project.first_owner } 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 477c4c2e1ba..d4c1fe4d43e 100644 --- a/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb +++ b/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Project > Settings > Packages and registries > Container registry tag expiration policy' do +RSpec.describe 'Project > Settings > Packages and registries > Container registry tag expiration policy', +feature_category: :projects 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/registry_settings_spec.rb b/spec/features/projects/settings/registry_settings_spec.rb index d64570cd5cc..072b5f7f3b0 100644 --- a/spec/features/projects/settings/registry_settings_spec.rb +++ b/spec/features/projects/settings/registry_settings_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Project > Settings > Packages and registries > Container registry tag expiration policy' do +RSpec.describe 'Project > Settings > Packages and registries > Container registry tag expiration policy', +feature_category: :projects 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 d73ff0284cd..6f0a3094849 100644 --- a/spec/features/projects/settings/repository_settings_spec.rb +++ b/spec/features/projects/settings/repository_settings_spec.rb @@ -2,12 +2,13 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > Repository settings' do +RSpec.describe 'Projects > Settings > Repository settings', feature_category: :projects do let(:project) { create(:project_empty_repo) } let(:user) { create(:user) } let(:role) { :developer } before do + stub_feature_flags(branch_rules: false) project.add_role(user, role) sign_in(user) end @@ -39,19 +40,18 @@ RSpec.describe 'Projects > Settings > Repository settings' do end context 'Branch rules', :js do - it 'renders branch rules settings' do - visit project_settings_repository_path(project) - expect(page).to have_content('Branch rules') - end - context 'branch_rules feature flag disabled', :js do it 'does not render branch rules settings' do - stub_feature_flags(branch_rules: false) visit project_settings_repository_path(project) - expect(page).not_to have_content('Branch rules') end end + + it 'renders branch rules settings' do + stub_feature_flags(branch_rules: true) + visit project_settings_repository_path(project) + expect(page).to have_content('Branch rules') + end end context 'Deploy Keys', :js do @@ -164,13 +164,7 @@ RSpec.describe 'Projects > Settings > Repository settings' do end project.reload - - # TODO: The following line is skipped because a toast with - # "An error occurred while loading branch rules. Please try again." - # shows up right after which hides the below message. It is causing flakiness. - # https://gitlab.com/gitlab-org/gitlab/-/issues/383717#note_1185091998 - - # expect(page).to have_content('Mirroring settings were successfully updated') + expect(page).to have_content('Mirroring settings were successfully updated') expect(project.remote_mirrors.first.only_protected_branches).to eq(false) end @@ -190,13 +184,7 @@ RSpec.describe 'Projects > Settings > Repository settings' do end project.reload - - # TODO: The following line is skipped because a toast with - # "An error occurred while loading branch rules. Please try again." - # shows up right after which hides the below message. It is causing flakiness. - # https://gitlab.com/gitlab-org/gitlab/-/issues/383717#note_1185091998 - - # expect(page).to have_content('Mirroring settings were successfully updated') + expect(page).to have_content('Mirroring settings were successfully updated') expect(project.remote_mirrors.first.only_protected_branches).to eq(true) end @@ -213,7 +201,12 @@ RSpec.describe 'Projects > Settings > Repository settings' do click_button 'Mirror repository' end - expect(page).to have_content('Mirroring settings were successfully updated') + # TODO: The following line is skipped because a toast with + # "An error occurred while loading branch rules. Please try again." + # shows up right after which hides the below message. It is causing flakiness. + # https://gitlab.com/gitlab-org/gitlab/-/issues/383717#note_1185091998 + + # expect(page).to have_content('Mirroring settings were successfully updated') expect(project.reload.remote_mirrors.first.keep_divergent_refs).to eq(true) end @@ -229,7 +222,12 @@ RSpec.describe 'Projects > Settings > Repository settings' do click_button 'Mirror repository' end - expect(page).to have_content('Mirroring settings were successfully updated') + # TODO: The following line is skipped because a toast with + # "An error occurred while loading branch rules. Please try again." + # shows up right after which hides the below message. It is causing flakiness. + # https://gitlab.com/gitlab-org/gitlab/-/issues/383717#note_1185091998 + + # expect(page).to have_content('Mirroring settings were successfully updated') expect(page).to have_selector('[title="Copy SSH public key"]') end @@ -272,7 +270,6 @@ RSpec.describe 'Projects > Settings > Repository settings' do click_button 'Start cleanup' end end - expect(page).to have_content('Repository cleanup has started') expect(RepositoryCleanupWorker.jobs.count).to eq(1) end diff --git a/spec/features/projects/settings/secure_files_spec.rb b/spec/features/projects/settings/secure_files_spec.rb index ee38acf1953..9afe1f4de54 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 do +RSpec.describe 'Secure Files', :js, feature_category: :projects do let(:project) { create(:project) } let(:user) { create(:user) } @@ -12,31 +12,10 @@ RSpec.describe 'Secure Files', :js do sign_in(user) end - context 'when the :ci_secure_files feature flag is enabled' do - before do - stub_feature_flags(ci_secure_files: true) - - visit project_settings_ci_cd_path(project) - end - - context 'authenticated user with admin permissions' do - it 'shows the secure files settings' do - expect(page).to have_content('Secure Files') - end - end - end - - context 'when the :ci_secure_files feature flag is disabled' do - before do - stub_feature_flags(ci_secure_files: false) - + context 'authenticated user with admin permissions' do + it 'shows the secure files settings' do visit project_settings_ci_cd_path(project) - end - - context 'authenticated user with admin permissions' do - it 'does not shows the secure files settings' do - expect(page).not_to have_content('Secure Files') - end + expect(page).to have_content('Secure Files') end end diff --git a/spec/features/projects/settings/service_desk_setting_spec.rb b/spec/features/projects/settings/service_desk_setting_spec.rb index 86c5c3d2d8c..859c738731b 100644 --- a/spec/features/projects/settings/service_desk_setting_spec.rb +++ b/spec/features/projects/settings/service_desk_setting_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Service Desk Setting', :js, :clean_gitlab_redis_cache do +RSpec.describe 'Service Desk Setting', :js, :clean_gitlab_redis_cache, feature_category: :projects do let(:project) { create(:project_empty_repo, :private, service_desk_enabled: false) } let(:presenter) { project.present(current_user: user) } let(:user) { create(:user) } diff --git a/spec/features/projects/settings/user_archives_project_spec.rb b/spec/features/projects/settings/user_archives_project_spec.rb index 03ea9e7c580..a6aac02d272 100644 --- a/spec/features/projects/settings/user_archives_project_spec.rb +++ b/spec/features/projects/settings/user_archives_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > User archives a project' do +RSpec.describe 'Projects > Settings > User archives a project', feature_category: :projects do let(:user) { create(:user) } before do diff --git a/spec/features/projects/settings/user_changes_avatar_spec.rb b/spec/features/projects/settings/user_changes_avatar_spec.rb index 92d5b4c1fcd..87043aec9b6 100644 --- a/spec/features/projects/settings/user_changes_avatar_spec.rb +++ b/spec/features/projects/settings/user_changes_avatar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > User changes avatar' do +RSpec.describe 'Projects > Settings > User changes avatar', feature_category: :projects do let(:project) { create(:project, :repository) } let(:user) { project.creator } 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 bf064839bd7..39704fdbbb2 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' do +RSpec.describe 'Projects > Settings > User changes default branch', feature_category: :projects do let(:user) { create(:user) } before do 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 0fc12f93850..3a58de9aa7d 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 do +RSpec.describe "User interacts with deploy keys", :js, feature_category: :projects 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 c76b4d0af88..cfefdd54c23 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' do +RSpec.describe 'Projects > Settings > User manages merge request settings', feature_category: :projects do include ProjectForksHelper let(:user) { create(:user) } diff --git a/spec/features/projects/settings/user_manages_project_members_spec.rb b/spec/features/projects/settings/user_manages_project_members_spec.rb index 1d258582b3a..ee832da48d9 100644 --- a/spec/features/projects/settings/user_manages_project_members_spec.rb +++ b/spec/features/projects/settings/user_manages_project_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > User manages project members' do +RSpec.describe 'Projects > Settings > User manages project members', feature_category: :projects do include Spec::Support::Helpers::Features::MembersHelpers include Spec::Support::Helpers::ModalHelpers @@ -51,8 +51,6 @@ RSpec.describe 'Projects > Settings > User manages project members' do click_button 'Import project members' wait_for_requests - page.refresh - expect(find_member_row(user_mike)).to have_content('Reporter') end diff --git a/spec/features/projects/settings/user_renames_a_project_spec.rb b/spec/features/projects/settings/user_renames_a_project_spec.rb index 2e2d7119e2e..2da6e760fbf 100644 --- a/spec/features/projects/settings/user_renames_a_project_spec.rb +++ b/spec/features/projects/settings/user_renames_a_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > User renames a project' do +RSpec.describe 'Projects > Settings > User renames a project', feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, namespace: user.namespace, path: 'gitlab', name: 'sample') } diff --git a/spec/features/projects/settings/user_searches_in_settings_spec.rb b/spec/features/projects/settings/user_searches_in_settings_spec.rb index 7ed96d01189..8a11507d064 100644 --- a/spec/features/projects/settings/user_searches_in_settings_spec.rb +++ b/spec/features/projects/settings/user_searches_in_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches project settings', :js do +RSpec.describe 'User searches project settings', :js, feature_category: :projects do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :repository, namespace: user.namespace, pages_https_only: false) } diff --git a/spec/features/projects/settings/user_sees_revoke_deploy_token_modal_spec.rb b/spec/features/projects/settings/user_sees_revoke_deploy_token_modal_spec.rb index 47383be1ba1..65aed4fd06f 100644 --- a/spec/features/projects/settings/user_sees_revoke_deploy_token_modal_spec.rb +++ b/spec/features/projects/settings/user_sees_revoke_deploy_token_modal_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Repository Settings > User sees revoke deploy token modal', :js do +RSpec.describe 'Repository Settings > User sees revoke deploy token modal', :js, feature_category: :projects do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:role) { :developer } diff --git a/spec/features/projects/settings/user_tags_project_spec.rb b/spec/features/projects/settings/user_tags_project_spec.rb index e9a2aa29352..43e8e5a2d38 100644 --- a/spec/features/projects/settings/user_tags_project_spec.rb +++ b/spec/features/projects/settings/user_tags_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > User tags a project', :js do +RSpec.describe 'Projects > Settings > User tags a project', :js, feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, namespace: user.namespace) } let!(:topic) { create(:topic, name: 'topic1') } diff --git a/spec/features/projects/settings/user_transfers_a_project_spec.rb b/spec/features/projects/settings/user_transfers_a_project_spec.rb index 23e10a36cee..53b4ee881f9 100644 --- a/spec/features/projects/settings/user_transfers_a_project_spec.rb +++ b/spec/features/projects/settings/user_transfers_a_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > User transfers a project', :js do +RSpec.describe 'Projects > Settings > User transfers a project', :js, feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, :repository, namespace: user.namespace) } let(:group) { create(:group) } diff --git a/spec/features/projects/settings/visibility_settings_spec.rb b/spec/features/projects/settings/visibility_settings_spec.rb index 5cb12544066..5246eda976b 100644 --- a/spec/features/projects/settings/visibility_settings_spec.rb +++ b/spec/features/projects/settings/visibility_settings_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Settings > Visibility settings', :js do +RSpec.describe 'Projects > Settings > Visibility settings', :js, feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, namespace: user.namespace, visibility_level: 20) } @@ -28,26 +28,6 @@ RSpec.describe 'Projects > Settings > Visibility settings', :js do expect(visibility_select_container).to have_content 'Only accessible by project members. Membership must be explicitly granted to each user.' end - context 'builds select' do - it 'hides builds select section' do - find('.project-feature-controls[data-for="project[project_feature_attributes][builds_access_level]"] .gl-toggle').click - - visit project_settings_merge_requests_path(project) - - expect(page).to have_selector('.builds-feature', visible: false) - end - - context 'given project with builds_disabled access level' do - let(:project) { create(:project, :builds_disabled, namespace: user.namespace) } - - it 'hides builds select section' do - visit project_settings_merge_requests_path(project) - - expect(page).to have_selector('.builds-feature', visible: false) - end - end - end - context 'disable email notifications' do it 'is visible' do expect(page).to have_selector('.js-emails-disabled', visible: true) diff --git a/spec/features/projects/settings/webhooks_settings_spec.rb b/spec/features/projects/settings/webhooks_settings_spec.rb index adbf2f6ee5c..8d22d84b9c9 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' do +RSpec.describe 'Projects > Settings > Webhook Settings', feature_category: :projects do let(:project) { create(:project) } let(:user) { create(:user) } let(:webhooks_path) { project_hooks_path(project) } @@ -41,54 +41,28 @@ RSpec.describe 'Projects > Settings > Webhook Settings' do expect(page).to have_content('Tag push events') expect(page).to have_content('Issues events') expect(page).to have_content('Confidential issues events') - expect(page).to have_content('Note events') - expect(page).to have_content('Merge requests events') + expect(page).to have_content('Comment') + expect(page).to have_content('Merge request events') expect(page).to have_content('Pipeline events') expect(page).to have_content('Wiki page events') expect(page).to have_content('Releases events') end - context 'when feature flag "enhanced_webhook_support_regex" is disabled' do - before do - stub_feature_flags(enhanced_webhook_support_regex: false) - end - - it 'create webhook', :js do - visit webhooks_path - - fill_in 'URL', with: url - check 'Tag push events' - fill_in 'hook_push_events_branch_filter', with: 'master' - check 'Enable SSL verification' - check 'Job events' - - click_button 'Add webhook' - - expect(page).to have_content(url) - expect(page).to have_content('SSL Verification: enabled') - expect(page).to have_content('Tag push events') - expect(page).to have_content('Job events') - expect(page).to have_content('Push events') - end - end - - context 'when feature flag "enhanced_webhook_support_regex" is enabled' do - it 'create webhook', :js do - visit webhooks_path + it 'create webhook', :js do + visit webhooks_path - fill_in 'URL', with: url - check 'Tag push events' - check 'Enable SSL verification' - check 'Job events' + fill_in 'URL', with: url + check 'Tag push events' + check 'Enable SSL verification' + check 'Job events' - click_button 'Add webhook' + click_button 'Add webhook' - expect(page).to have_content(url) - expect(page).to have_content('SSL Verification: enabled') - expect(page).to have_content('Tag push events') - expect(page).to have_content('Job events') - expect(page).to have_content('Push events') - end + expect(page).to have_content(url) + expect(page).to have_content('SSL Verification: enabled') + expect(page).to have_content('Tag push events') + expect(page).to have_content('Job events') + expect(page).to have_content('Push events') end it 'edit existing webhook', :js do @@ -100,8 +74,8 @@ RSpec.describe 'Projects > Settings > Webhook Settings' do check 'Enable SSL verification' click_button 'Save changes' - expect(page).to have_content 'SSL Verification: enabled' - expect(page).to have_content(url) + expect(page).to have_content('Enable SSL verification') + expect(page).to have_current_path(edit_project_hook_path(project, hook), ignore_query: true) end it 'test existing webhook', :js do diff --git a/spec/features/projects/show/download_buttons_spec.rb b/spec/features/projects/show/download_buttons_spec.rb index e73bb3198e6..e4d50daa6f4 100644 --- a/spec/features/projects/show/download_buttons_spec.rb +++ b/spec/features/projects/show/download_buttons_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > Download buttons' do +RSpec.describe 'Projects > Show > Download buttons', feature_category: :projects do let(:user) { create(:user) } let(:role) { :developer } let(:status) { 'success' } diff --git a/spec/features/projects/show/no_password_spec.rb b/spec/features/projects/show/no_password_spec.rb index ed06f4e14d3..9ead729af83 100644 --- a/spec/features/projects/show/no_password_spec.rb +++ b/spec/features/projects/show/no_password_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'No Password Alert' do +RSpec.describe 'No Password Alert', feature_category: :projects do let_it_be(:message_password_auth_enabled) { 'Your account is authenticated with SSO or SAML. To push and pull over HTTP with Git using this account, you must set a password or set up a Personal Access Token to use instead of a password. For more information, see Clone with HTTPS.' } let_it_be(:message_password_auth_disabled) { 'Your account is authenticated with SSO or SAML. To push and pull over HTTP with Git using this account, you must set up a Personal Access Token to use instead of a password. For more information, see Clone with HTTPS.' } diff --git a/spec/features/projects/show/redirects_spec.rb b/spec/features/projects/show/redirects_spec.rb index 55069cdd6c5..d1cb896450f 100644 --- a/spec/features/projects/show/redirects_spec.rb +++ b/spec/features/projects/show/redirects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > Redirects' do +RSpec.describe 'Projects > Show > Redirects', feature_category: :projects do let(:user) { create :user } let(:public_project) { create :project, :public } let(:private_project) { create :project, :private } diff --git a/spec/features/projects/show/rss_spec.rb b/spec/features/projects/show/rss_spec.rb index 0bd6e9cbe3b..c2e8a844094 100644 --- a/spec/features/projects/show/rss_spec.rb +++ b/spec/features/projects/show/rss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > RSS' do +RSpec.describe 'Projects > Show > RSS', feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, :repository, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } let(:path) { project_path(project) } diff --git a/spec/features/projects/show/schema_markup_spec.rb b/spec/features/projects/show/schema_markup_spec.rb index 8adbdb64f1b..8262245c5cb 100644 --- a/spec/features/projects/show/schema_markup_spec.rb +++ b/spec/features/projects/show/schema_markup_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > Schema Markup' do +RSpec.describe 'Projects > Show > Schema Markup', feature_category: :projects do let_it_be(:project) { create(:project, :repository, :public, :with_avatar, description: 'foobar', topic_list: 'topic1, topic2') } it 'shows SoftwareSourceCode structured markup', :js do 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 262885e09b3..2f33622d218 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 @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Project > Show > User interacts with auto devops implicitly enabled banner' do +RSpec.describe 'Project > Show > User interacts with auto devops implicitly enabled banner', +feature_category: :projects do let(:project) { create(:project, :repository) } let(:user) { create(:user) } diff --git a/spec/features/projects/show/user_interacts_with_stars_spec.rb b/spec/features/projects/show/user_interacts_with_stars_spec.rb index 158b6aa9b46..e2166854ba3 100644 --- a/spec/features/projects/show/user_interacts_with_stars_spec.rb +++ b/spec/features/projects/show/user_interacts_with_stars_spec.rb @@ -2,13 +2,14 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > User interacts with project stars' do +RSpec.describe 'Projects > Show > User interacts with project stars', feature_category: :projects do let(:project) { create(:project, :public, :repository) } context 'when user is signed in', :js do let(:user) { create(:user) } before do + stub_feature_flags(vscode_web_ide: false) sign_in(user) visit(project_path(project)) end diff --git a/spec/features/projects/show/user_manages_notifications_spec.rb b/spec/features/projects/show/user_manages_notifications_spec.rb index 1df37eef6a9..8f6535fd4f0 100644 --- a/spec/features/projects/show/user_manages_notifications_spec.rb +++ b/spec/features/projects/show/user_manages_notifications_spec.rb @@ -2,10 +2,11 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > User manages notifications', :js do +RSpec.describe 'Projects > Show > User manages notifications', :js, feature_category: :projects do let(:project) { create(:project, :public, :repository) } before do + stub_feature_flags(vscode_web_ide: false) sign_in(project.first_owner) end @@ -23,7 +24,7 @@ RSpec.describe 'Projects > Show > User manages notifications', :js do click_notifications_button page.within first('[data-testid="notification-dropdown"]') do - expect(page.find('.gl-new-dropdown-item.is-active')).to have_content('On mention') + expect(page.find('.gl-dropdown-item.is-active')).to have_content('On mention') expect(page).to have_css('[data-testid="notifications-icon"]') end end diff --git a/spec/features/projects/show/user_sees_collaboration_links_spec.rb b/spec/features/projects/show/user_sees_collaboration_links_spec.rb index c63427e56e6..145500a4c63 100644 --- a/spec/features/projects/show/user_sees_collaboration_links_spec.rb +++ b/spec/features/projects/show/user_sees_collaboration_links_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > Collaboration links', :js do +RSpec.describe 'Projects > Show > Collaboration links', :js, feature_category: :projects do using RSpec::Parameterized::TableSyntax let_it_be(:project) { create(:project, :repository, :public) } diff --git a/spec/features/projects/show/user_sees_deletion_failure_message_spec.rb b/spec/features/projects/show/user_sees_deletion_failure_message_spec.rb index 47e010dcf89..876eecfe559 100644 --- a/spec/features/projects/show/user_sees_deletion_failure_message_spec.rb +++ b/spec/features/projects/show/user_sees_deletion_failure_message_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > User sees a deletion failure message' do +RSpec.describe 'Projects > Show > User sees a deletion failure message', feature_category: :projects do let(:project) { create(:project, :empty_repo, pending_delete: true) } before do 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 608bb4c5997..022f21f198d 100644 --- a/spec/features/projects/show/user_sees_git_instructions_spec.rb +++ b/spec/features/projects/show/user_sees_git_instructions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > User sees Git instructions' do +RSpec.describe 'Projects > Show > User sees Git instructions', feature_category: :projects do let_it_be(:user) { create(:user) } before do diff --git a/spec/features/projects/show/user_sees_last_commit_ci_status_spec.rb b/spec/features/projects/show/user_sees_last_commit_ci_status_spec.rb index 0aa0f7754c6..25d241f004e 100644 --- a/spec/features/projects/show/user_sees_last_commit_ci_status_spec.rb +++ b/spec/features/projects/show/user_sees_last_commit_ci_status_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > User sees last commit CI status' do +RSpec.describe 'Projects > Show > User sees last commit CI status', feature_category: :projects do let_it_be(:project) { create(:project, :repository, :public) } it 'shows the project README', :js do diff --git a/spec/features/projects/show/user_sees_readme_spec.rb b/spec/features/projects/show/user_sees_readme_spec.rb index 6a5b9472be8..a8c91b30f25 100644 --- a/spec/features/projects/show/user_sees_readme_spec.rb +++ b/spec/features/projects/show/user_sees_readme_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > User sees README' do +RSpec.describe 'Projects > Show > User sees README', feature_category: :projects do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :repository, :public) } 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 5056e245fed..9eb2d109829 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 @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > User sees setup shortcut buttons' do +RSpec.describe 'Projects > Show > User sees setup shortcut buttons', feature_category: :projects do # For "New file", "Add license" functionality, # see spec/features/projects/files/project_owner_creates_license_file_spec.rb # see spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb diff --git a/spec/features/projects/show/user_uploads_files_spec.rb b/spec/features/projects/show/user_uploads_files_spec.rb index a222d6b42ab..ed378040ce9 100644 --- a/spec/features/projects/show/user_uploads_files_spec.rb +++ b/spec/features/projects/show/user_uploads_files_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Show > User uploads files' do +RSpec.describe 'Projects > Show > User uploads files', feature_category: :projects do include DropzoneHelper let(:user) { create(:user) } diff --git a/spec/features/projects/snippets/create_snippet_spec.rb b/spec/features/projects/snippets/create_snippet_spec.rb index cbdf6d6852e..f2c575231ad 100644 --- a/spec/features/projects/snippets/create_snippet_spec.rb +++ b/spec/features/projects/snippets/create_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Snippets > Create Snippet', :js do +RSpec.describe 'Projects > Snippets > Create Snippet', :js, feature_category: :snippets do include DropzoneHelper include Spec::Support::Helpers::Features::SnippetSpecHelpers diff --git a/spec/features/projects/snippets/show_spec.rb b/spec/features/projects/snippets/show_spec.rb index 5937ff75457..1a480696b4e 100644 --- a/spec/features/projects/snippets/show_spec.rb +++ b/spec/features/projects/snippets/show_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Snippets > Project snippet', :js do +RSpec.describe 'Projects > Snippets > Project snippet', :js, feature_category: :snippets do let_it_be(:user) { create(:user) } let_it_be(:project) do create(:project, creator: user).tap do |p| diff --git a/spec/features/projects/snippets/user_comments_on_snippet_spec.rb b/spec/features/projects/snippets/user_comments_on_snippet_spec.rb index 3ccb73c88ef..556f549f86c 100644 --- a/spec/features/projects/snippets/user_comments_on_snippet_spec.rb +++ b/spec/features/projects/snippets/user_comments_on_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Snippets > User comments on a snippet', :js do +RSpec.describe 'Projects > Snippets > User comments on a snippet', :js, feature_category: :snippets do let_it_be(:project) { create(:project) } let_it_be(:user) { create(:user) } let_it_be(:snippet) { create(:project_snippet, :repository, project: project, author: user) } diff --git a/spec/features/projects/snippets/user_deletes_snippet_spec.rb b/spec/features/projects/snippets/user_deletes_snippet_spec.rb index ca49e6a36b7..c9d1afb7a4e 100644 --- a/spec/features/projects/snippets/user_deletes_snippet_spec.rb +++ b/spec/features/projects/snippets/user_deletes_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Snippets > User deletes a snippet', :js do +RSpec.describe 'Projects > Snippets > User deletes a snippet', :js, feature_category: :snippets do let(:project) { create(:project) } let!(:snippet) { create(:project_snippet, :repository, project: project, author: user) } let(:user) { create(:user) } diff --git a/spec/features/projects/snippets/user_updates_snippet_spec.rb b/spec/features/projects/snippets/user_updates_snippet_spec.rb index aa498163f52..205db6c08b1 100644 --- a/spec/features/projects/snippets/user_updates_snippet_spec.rb +++ b/spec/features/projects/snippets/user_updates_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Snippets > User updates a snippet', :js do +RSpec.describe 'Projects > Snippets > User updates a snippet', :js, feature_category: :snippets do include Spec::Support::Helpers::Features::SnippetSpecHelpers let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/snippets/user_views_snippets_spec.rb b/spec/features/projects/snippets/user_views_snippets_spec.rb index 40539b43ed5..ece65763ea5 100644 --- a/spec/features/projects/snippets/user_views_snippets_spec.rb +++ b/spec/features/projects/snippets/user_views_snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Snippets > User views snippets' do +RSpec.describe 'Projects > Snippets > User views snippets', feature_category: :snippets do let_it_be(:project) { create(:project) } let(:user) { create(:user) } diff --git a/spec/features/projects/sourcegraph_csp_spec.rb b/spec/features/projects/sourcegraph_csp_spec.rb index 10dd050e8cc..4c8dd0a7df0 100644 --- a/spec/features/projects/sourcegraph_csp_spec.rb +++ b/spec/features/projects/sourcegraph_csp_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Sourcegraph Content Security Policy' do +RSpec.describe 'Sourcegraph Content Security Policy', feature_category: :projects do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :repository, namespace: user.namespace) } diff --git a/spec/features/projects/sub_group_issuables_spec.rb b/spec/features/projects/sub_group_issuables_spec.rb index d7614201740..2502d969305 100644 --- a/spec/features/projects/sub_group_issuables_spec.rb +++ b/spec/features/projects/sub_group_issuables_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Subgroup Issuables', :js do +RSpec.describe 'Subgroup Issuables', :js, feature_category: :projects do let!(:group) { create(:group, name: 'group') } let!(:subgroup) { create(:group, parent: group, name: 'subgroup') } let!(:project) { create(:project, namespace: subgroup, name: 'project') } diff --git a/spec/features/projects/tags/download_buttons_spec.rb b/spec/features/projects/tags/download_buttons_spec.rb index 0f1f72fd039..570721fc951 100644 --- a/spec/features/projects/tags/download_buttons_spec.rb +++ b/spec/features/projects/tags/download_buttons_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Download buttons in tags page' do +RSpec.describe 'Download buttons in tags page', feature_category: :source_code_management do let(:user) { create(:user) } let(:role) { :developer } let(:status) { 'success' } diff --git a/spec/features/projects/tags/user_edits_tags_spec.rb b/spec/features/projects/tags/user_edits_tags_spec.rb index 857d0696659..e0efe3b465f 100644 --- a/spec/features/projects/tags/user_edits_tags_spec.rb +++ b/spec/features/projects/tags/user_edits_tags_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project > Tags', :js do +RSpec.describe 'Project > Tags', :js, feature_category: :source_code_management do include DropzoneHelper let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/tags/user_views_tag_spec.rb b/spec/features/projects/tags/user_views_tag_spec.rb index 3978c5b7b78..0816b3240c9 100644 --- a/spec/features/projects/tags/user_views_tag_spec.rb +++ b/spec/features/projects/tags/user_views_tag_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe 'User views tag', :feature do +RSpec.describe 'User views tag', :feature, feature_category: :source_code_management do include_examples 'user views tag' do let(:tag_page) { project_tag_path(project, id: tag_name) } end diff --git a/spec/features/projects/tags/user_views_tags_spec.rb b/spec/features/projects/tags/user_views_tags_spec.rb index d3849df023e..26f2e81e3df 100644 --- a/spec/features/projects/tags/user_views_tags_spec.rb +++ b/spec/features/projects/tags/user_views_tags_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe 'User views tags', :feature do +RSpec.describe 'User views tags', :feature, feature_category: :source_code_management do include_examples 'user views tag' do let(:tag_page) { project_tags_path(project) } end diff --git a/spec/features/projects/terraform_spec.rb b/spec/features/projects/terraform_spec.rb index d9e45b5e78e..bbc7f675c55 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 do +RSpec.describe 'Terraform', :js, feature_category: :projects 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/tree/create_directory_spec.rb b/spec/features/projects/tree/create_directory_spec.rb index 9c950cfee6e..3a0160c42fb 100644 --- a/spec/features/projects/tree/create_directory_spec.rb +++ b/spec/features/projects/tree/create_directory_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Multi-file editor new directory', :js do +RSpec.describe 'Multi-file editor new directory', :js, feature_category: :web_ide do let(:user) { create(:user) } let(:project) { create(:project, :repository) } diff --git a/spec/features/projects/tree/create_file_spec.rb b/spec/features/projects/tree/create_file_spec.rb index c0567ed4580..61240150658 100644 --- a/spec/features/projects/tree/create_file_spec.rb +++ b/spec/features/projects/tree/create_file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Multi-file editor new file', :js do +RSpec.describe 'Multi-file editor new file', :js, feature_category: :web_ide do let(:user) { create(:user) } let(:project) { create(:project, :repository) } diff --git a/spec/features/projects/tree/rss_spec.rb b/spec/features/projects/tree/rss_spec.rb index efbfc329c9f..0b016ee3dd9 100644 --- a/spec/features/projects/tree/rss_spec.rb +++ b/spec/features/projects/tree/rss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project Tree RSS' do +RSpec.describe 'Project Tree RSS', feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, :repository, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } let(:path) { project_tree_path(project, :master) } diff --git a/spec/features/projects/tree/tree_show_spec.rb b/spec/features/projects/tree/tree_show_spec.rb index eb0ef756b30..21932cae58b 100644 --- a/spec/features/projects/tree/tree_show_spec.rb +++ b/spec/features/projects/tree/tree_show_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects tree', :js do +RSpec.describe 'Projects tree', :js, feature_category: :web_ide do include RepoHelpers let(:user) { create(:user) } @@ -157,17 +157,22 @@ RSpec.describe 'Projects tree', :js do end end - context 'ref switcher' do + context 'ref switcher', :js do it 'switches ref to branch' do + ref_selector = '.ref-selector' ref_name = 'feature' visit project_tree_path(project, 'master') - first('.js-project-refs-dropdown').click - page.within '.project-refs-form' do - click_link ref_name + find(ref_selector).click + wait_for_requests + + page.within(ref_selector) do + fill_in 'Search by Git revision', with: ref_name + wait_for_requests + find('li', text: ref_name, match: :prefer_exact).click end - expect(page).to have_selector '.dropdown-menu-toggle', text: ref_name + expect(find(ref_selector)).to have_text(ref_name) end end end diff --git a/spec/features/projects/tree/upload_file_spec.rb b/spec/features/projects/tree/upload_file_spec.rb index f32141d6051..1e4abc789c2 100644 --- a/spec/features/projects/tree/upload_file_spec.rb +++ b/spec/features/projects/tree/upload_file_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Multi-file editor upload file', :js do +RSpec.describe 'Multi-file editor upload file', :js, feature_category: :web_ide do let(:user) { create(:user) } let(:project) { create(:project, :repository) } let(:txt_file) { File.join(Rails.root, 'spec', 'fixtures', 'doc_sample.txt') } diff --git a/spec/features/projects/user_changes_project_visibility_spec.rb b/spec/features/projects/user_changes_project_visibility_spec.rb index df13bb55c6d..5daa5b98b6e 100644 --- a/spec/features/projects/user_changes_project_visibility_spec.rb +++ b/spec/features/projects/user_changes_project_visibility_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User changes public project visibility', :js do +RSpec.describe 'User changes public project visibility', :js, feature_category: :projects do include ProjectForksHelper shared_examples 'changing visibility to private' do diff --git a/spec/features/projects/user_creates_project_spec.rb b/spec/features/projects/user_creates_project_spec.rb index b07f2d12660..af0bd932095 100644 --- a/spec/features/projects/user_creates_project_spec.rb +++ b/spec/features/projects/user_creates_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User creates a project', :js do +RSpec.describe 'User creates a project', :js, feature_category: :projects do let(:user) { create(:user) } before do diff --git a/spec/features/projects/user_sees_sidebar_spec.rb b/spec/features/projects/user_sees_sidebar_spec.rb index e2498928fa0..3a6e11356a2 100644 --- a/spec/features/projects/user_sees_sidebar_spec.rb +++ b/spec/features/projects/user_sees_sidebar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > User sees sidebar' do +RSpec.describe 'Projects > User sees sidebar', feature_category: :projects do let(:user) { create(:user) } let(:project) { create(:project, :private, public_builds: false, namespace: user.namespace) } @@ -220,7 +220,7 @@ RSpec.describe 'Projects > User sees sidebar' do it 'does not show fork button' do visit project_path(project) - within('.count-buttons') do + within('.project-repo-buttons') do expect(page).not_to have_link 'Fork' end end diff --git a/spec/features/projects/user_sees_user_popover_spec.rb b/spec/features/projects/user_sees_user_popover_spec.rb index 0bbe7f26cd4..5badcd99dff 100644 --- a/spec/features/projects/user_sees_user_popover_spec.rb +++ b/spec/features/projects/user_sees_user_popover_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User sees user popover', :js do +RSpec.describe 'User sees user popover', :js, feature_category: :projects do include Spec::Support::Helpers::Features::NotesHelpers let_it_be(:user) { create(:user, pronouns: 'they/them') } diff --git a/spec/features/projects/user_sorts_projects_spec.rb b/spec/features/projects/user_sorts_projects_spec.rb index c40f01f3aa1..6a18d95c840 100644 --- a/spec/features/projects/user_sorts_projects_spec.rb +++ b/spec/features/projects/user_sorts_projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User sorts projects and order persists' do +RSpec.describe 'User sorts projects and order persists', feature_category: :projects do include CookieHelper let_it_be(:user) { create(:user) } @@ -73,7 +73,7 @@ RSpec.describe 'User sorts projects and order persists' do end end - it_behaves_like "sort order persists across all views", "Created date", "Created" + it_behaves_like "sort order persists across all views", "Oldest created", "Created" end context 'from group details', :js do @@ -82,11 +82,11 @@ RSpec.describe 'User sorts projects and order persists' do visit(details_group_path(group)) within '[data-testid=group_sort_by_dropdown]' do find('button.gl-dropdown-toggle').click - first(:button, 'Stars').click + first(:button, 'Updated').click wait_for_requests end end - it_behaves_like "sort order persists across all views", "Stars", "Stars" + it_behaves_like "sort order persists across all views", "Oldest updated", "Updated" end end diff --git a/spec/features/projects/user_uses_shortcuts_spec.rb b/spec/features/projects/user_uses_shortcuts_spec.rb index cd6f09ce275..05d79ea3b1b 100644 --- a/spec/features/projects/user_uses_shortcuts_spec.rb +++ b/spec/features/projects/user_uses_shortcuts_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User uses shortcuts', :js do +RSpec.describe 'User uses shortcuts', :js, feature_category: :projects do let_it_be(:project) { create(:project, :repository) } let(:user) { project.first_owner } diff --git a/spec/features/projects/user_views_empty_project_spec.rb b/spec/features/projects/user_views_empty_project_spec.rb index 696a7f4ee8a..352fa73bd05 100644 --- a/spec/features/projects/user_views_empty_project_spec.rb +++ b/spec/features/projects/user_views_empty_project_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User views an empty project' do +RSpec.describe 'User views an empty project', feature_category: :projects do let_it_be(:project) { create(:project, :empty_repo) } let_it_be(:user) { create(:user) } diff --git a/spec/features/projects/view_on_env_spec.rb b/spec/features/projects/view_on_env_spec.rb index 5dd30f59e3d..bf32431fc88 100644 --- a/spec/features/projects/view_on_env_spec.rb +++ b/spec/features/projects/view_on_env_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'View on environment', :js do +RSpec.describe 'View on environment', :js, feature_category: :projects do let(:branch_name) { 'feature' } let(:file_path) { 'files/ruby/feature.rb' } let(:project) { create(:project, :repository) } diff --git a/spec/features/projects/wiki/user_views_wiki_empty_spec.rb b/spec/features/projects/wiki/user_views_wiki_empty_spec.rb index ea045ddb6a1..1f3ba7a5ca2 100644 --- a/spec/features/projects/wiki/user_views_wiki_empty_spec.rb +++ b/spec/features/projects/wiki/user_views_wiki_empty_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project > User views empty wiki' do +RSpec.describe 'Project > User views empty wiki', feature_category: :wiki do let_it_be(:user) { create(:user) } let(:wiki) { create(:project_wiki, project: project) } diff --git a/spec/features/projects/wiki/user_views_wiki_in_project_page_spec.rb b/spec/features/projects/wiki/user_views_wiki_in_project_page_spec.rb index db2b3fc2f4b..79744633d0c 100644 --- a/spec/features/projects/wiki/user_views_wiki_in_project_page_spec.rb +++ b/spec/features/projects/wiki/user_views_wiki_in_project_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects > Wiki > User views wiki in project page' do +RSpec.describe 'Projects > Wiki > User views wiki in project page', feature_category: :wiki do before do sign_in(project.first_owner) end diff --git a/spec/features/projects/wikis_spec.rb b/spec/features/projects/wikis_spec.rb index 879ffd2932b..5d950da6674 100644 --- a/spec/features/projects/wikis_spec.rb +++ b/spec/features/projects/wikis_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe 'Project wikis', :js do +RSpec.describe 'Project wikis', :js, feature_category: :wiki do let_it_be(:user) { create(:user) } let(:wiki) { create(:project_wiki, user: user, project: project) } diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index cd9c173a4ff..ec0b3f9d81b 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Project' do +RSpec.describe 'Project', feature_category: :projects do include ProjectForksHelper include MobileHelpers @@ -327,9 +327,9 @@ RSpec.describe 'Project' do end it 'has working links to submodules' do - click_link('645f6c4c') + submodule = find_link('645f6c4c') - expect(page).to have_selector('.ref-selector', text: '645f6c4c82fd3f5e06f67134450a570b795e55a6') + expect(submodule[:href]).to eq('https://gitlab.com/gitlab-org/gitlab-grack/-/tree/645f6c4c82fd3f5e06f67134450a570b795e55a6') end context 'for signed commit on default branch', :js do @@ -418,7 +418,7 @@ RSpec.describe 'Project' do visit path end - it_behaves_like 'dirty submit form', [{ form: '.js-general-settings-form', input: 'input[name="project[name]"]' }] + it_behaves_like 'dirty submit form', [{ form: '.js-general-settings-form', input: 'input[name="project[name]"]', submit: 'button[type="submit"]' }] end describe 'view for a user without an access to a repo' do diff --git a/spec/features/promotion_spec.rb b/spec/features/promotion_spec.rb index 903d6244a4c..b2ab718321f 100644 --- a/spec/features/promotion_spec.rb +++ b/spec/features/promotion_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Promotions', :js do +RSpec.describe 'Promotions', :js, feature_category: :service_desk do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project_empty_repo) } diff --git a/spec/features/protected_branches_spec.rb b/spec/features/protected_branches_spec.rb index 174716d646d..c549d99a51f 100644 --- a/spec/features/protected_branches_spec.rb +++ b/spec/features/protected_branches_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Protected Branches', :js do +RSpec.describe 'Protected Branches', :js, feature_category: :source_code_management do include ProtectedBranchHelpers let(:user) { create(:user) } diff --git a/spec/features/protected_tags_spec.rb b/spec/features/protected_tags_spec.rb index c89dd4d1f90..1aadc7ce90a 100644 --- a/spec/features/protected_tags_spec.rb +++ b/spec/features/protected_tags_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Protected Tags', :js do +RSpec.describe 'Protected Tags', :js, feature_category: :source_code_management do include ProtectedTagHelpers let(:project) { create(:project, :repository) } diff --git a/spec/features/read_only_spec.rb b/spec/features/read_only_spec.rb index 11686552062..e65727c05e3 100644 --- a/spec/features/read_only_spec.rb +++ b/spec/features/read_only_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'read-only message' do +RSpec.describe 'read-only message', feature_category: :database do let_it_be(:user) { create(:user) } before do @@ -14,7 +14,7 @@ RSpec.describe 'read-only message' do allow(Gitlab::Database).to receive(:read_only?).and_return(true) end - it_behaves_like 'Read-only instance', /You are on a read\-only GitLab instance./ + it_behaves_like 'Read-only instance', /You are on a read-only GitLab instance./ end context 'when database is in read-write mode' do @@ -22,6 +22,6 @@ RSpec.describe 'read-only message' do allow(Gitlab::Database).to receive(:read_only?).and_return(false) end - it_behaves_like 'Read-write instance', /You are on a read\-only GitLab instance./ + it_behaves_like 'Read-write instance', /You are on a read-only GitLab instance./ end end diff --git a/spec/features/reportable_note/issue_spec.rb b/spec/features/reportable_note/issue_spec.rb index 80c321d0f5a..55e7f5897bc 100644 --- a/spec/features/reportable_note/issue_spec.rb +++ b/spec/features/reportable_note/issue_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Reportable note on issue', :js do +RSpec.describe 'Reportable note on issue', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project) } let(:issue) { create(:issue, project: project) } diff --git a/spec/features/reportable_note/merge_request_spec.rb b/spec/features/reportable_note/merge_request_spec.rb index 58a39bac707..39048495e5d 100644 --- a/spec/features/reportable_note/merge_request_spec.rb +++ b/spec/features/reportable_note/merge_request_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Reportable note on merge request', :js do +RSpec.describe 'Reportable note on merge request', :js, feature_category: :team_planning do let(:user) { create(:user) } let(:project) { create(:project, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/reportable_note/snippets_spec.rb b/spec/features/reportable_note/snippets_spec.rb index 92bf304ac86..7e8c2c2f989 100644 --- a/spec/features/reportable_note/snippets_spec.rb +++ b/spec/features/reportable_note/snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Reportable note on snippets', :js do +RSpec.describe 'Reportable note on snippets', :js, feature_category: :team_planning do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb index cee0910aef7..40ba0fa9ebb 100644 --- a/spec/features/runners_spec.rb +++ b/spec/features/runners_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Runners' do +RSpec.describe 'Runners', feature_category: :runner_fleet do let_it_be(:user) { create(:user) } before do @@ -117,11 +117,35 @@ RSpec.describe 'Runners' do it 'user sees CI/CD setting page' do visit project_runners_path(project) - expect(page.find('.available-shared-runners')).to have_content(shared_runner.display_name) + within '[data-testid="available-shared-runners"]' do + expect(page).to have_content(shared_runner.display_name) + end + end + + context 'when multiple shared runners are configured' do + let_it_be(:shared_runner_2) { create(:ci_runner, :instance) } + + it 'shows the runner count' do + visit project_runners_path(project) + + within '[data-testid="available-shared-runners"]' do + expect(page).to have_content format(_('Available shared runners: %{count}'), { count: 2 }) + end + end + + it 'adds pagination to the shared runner list' do + stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) + + visit project_runners_path(project) + + within '[data-testid="available-shared-runners"]' do + expect(find('.pagination')).not_to be_nil + end + end end end - context 'when multiple runners are configured' do + context 'when multiple project runners are configured' do let!(:project_runner_2) { create(:ci_runner, :project, projects: [project]) } it 'adds pagination to the runner list' do @@ -306,7 +330,7 @@ RSpec.describe 'Runners' do end context 'project with a group and a group runner' do - let_it_be(:ci_runner) do + let_it_be(:group_runner) do create(:ci_runner, :group, groups: [group], description: 'group-runner') end @@ -330,6 +354,28 @@ RSpec.describe 'Runners' do expect(page).to have_content 'Disable group runners' expect(project.reload.group_runners_enabled).to be true end + + context 'when multiple group runners are configured' do + let_it_be(:group_runner_2) { create(:ci_runner, :group, groups: [group]) } + + it 'shows the runner count' do + visit project_runners_path(project) + + within '[data-testid="group-runners"]' do + expect(page).to have_content format(_('Available group runners: %{runners}'), { runners: 2 }) + end + end + + it 'adds pagination to the group runner list' do + stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) + + visit project_runners_path(project) + + within '[data-testid="group-runners"]' do + expect(find('.pagination')).not_to be_nil + end + end + end end end end diff --git a/spec/features/search/user_searches_for_code_spec.rb b/spec/features/search/user_searches_for_code_spec.rb index ee74ac84a73..14d67bac85f 100644 --- a/spec/features/search/user_searches_for_code_spec.rb +++ b/spec/features/search/user_searches_for_code_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches for code', :js, :disable_rate_limiter do +RSpec.describe 'User searches for code', :js, :disable_rate_limiter, feature_category: :global_search do using RSpec::Parameterized::TableSyntax let_it_be(:user) { create(:user) } diff --git a/spec/features/search/user_searches_for_comments_spec.rb b/spec/features/search/user_searches_for_comments_spec.rb index 3c39e9f41d4..d7f6143d173 100644 --- a/spec/features/search/user_searches_for_comments_spec.rb +++ b/spec/features/search/user_searches_for_comments_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches for comments', :js, :disable_rate_limiter do +RSpec.describe 'User searches for comments', :js, :disable_rate_limiter, feature_category: :global_search do using RSpec::Parameterized::TableSyntax let_it_be(:project) { create(:project, :repository) } diff --git a/spec/features/search/user_searches_for_commits_spec.rb b/spec/features/search/user_searches_for_commits_spec.rb index e5d86c27942..1fd62a01c78 100644 --- a/spec/features/search/user_searches_for_commits_spec.rb +++ b/spec/features/search/user_searches_for_commits_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches for commits', :js, :clean_gitlab_redis_rate_limiting do +RSpec.describe 'User searches for commits', :js, :clean_gitlab_redis_rate_limiting, feature_category: :global_search do using RSpec::Parameterized::TableSyntax let_it_be(:user) { create(:user) } diff --git a/spec/features/search/user_searches_for_issues_spec.rb b/spec/features/search/user_searches_for_issues_spec.rb index 22d48bd38f2..6ebbe86d1a9 100644 --- a/spec/features/search/user_searches_for_issues_spec.rb +++ b/spec/features/search/user_searches_for_issues_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches for issues', :js, :clean_gitlab_redis_rate_limiting do +RSpec.describe 'User searches for issues', :js, :clean_gitlab_redis_rate_limiting, feature_category: :global_search do using RSpec::Parameterized::TableSyntax let_it_be(:user) { create(:user) } 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 9bbf2cf16d8..69f62a4c1e2 100644 --- a/spec/features/search/user_searches_for_merge_requests_spec.rb +++ b/spec/features/search/user_searches_for_merge_requests_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches for merge requests', :js, :clean_gitlab_redis_rate_limiting do +RSpec.describe 'User searches for merge requests', :js, :clean_gitlab_redis_rate_limiting, feature_category: :global_search do using RSpec::Parameterized::TableSyntax let(:user) { create(:user) } diff --git a/spec/features/search/user_searches_for_milestones_spec.rb b/spec/features/search/user_searches_for_milestones_spec.rb index 702d4e60022..e87c2176380 100644 --- a/spec/features/search/user_searches_for_milestones_spec.rb +++ b/spec/features/search/user_searches_for_milestones_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'User searches for milestones', :js, :clean_gitlab_redis_rate_limiting do +RSpec.describe 'User searches for milestones', :js, :clean_gitlab_redis_rate_limiting, +feature_category: :global_search do using RSpec::Parameterized::TableSyntax let_it_be(:user) { create(:user) } diff --git a/spec/features/search/user_searches_for_projects_spec.rb b/spec/features/search/user_searches_for_projects_spec.rb index 15c6224b61b..48a94161927 100644 --- a/spec/features/search/user_searches_for_projects_spec.rb +++ b/spec/features/search/user_searches_for_projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches for projects', :js, :disable_rate_limiter do +RSpec.describe 'User searches for projects', :js, :disable_rate_limiter, feature_category: :global_search do let!(:project) { create(:project, :public, name: 'Shop') } context 'when signed out' do diff --git a/spec/features/search/user_searches_for_users_spec.rb b/spec/features/search/user_searches_for_users_spec.rb index 1d649b42c8c..4737cef98c7 100644 --- a/spec/features/search/user_searches_for_users_spec.rb +++ b/spec/features/search/user_searches_for_users_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User searches for users', :js, :clean_gitlab_redis_rate_limiting do +RSpec.describe 'User searches for users', :js, :clean_gitlab_redis_rate_limiting, feature_category: :global_search do let_it_be(:user1) { create(:user, username: 'gob_bluth', name: 'Gob Bluth') } let_it_be(:user2) { create(:user, username: 'michael_bluth', name: 'Michael Bluth') } let_it_be(:user3) { create(:user, username: 'gob_2018', name: 'George Oscar Bluth') } 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 0f20ad0aa07..c7dc3e34bb7 100644 --- a/spec/features/search/user_searches_for_wiki_pages_spec.rb +++ b/spec/features/search/user_searches_for_wiki_pages_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'User searches for wiki pages', :js, :clean_gitlab_redis_rate_limiting do +RSpec.describe 'User searches for wiki pages', :js, :clean_gitlab_redis_rate_limiting, +feature_category: :global_search do using RSpec::Parameterized::TableSyntax let_it_be(:user) { create(:user) } 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 04f22cd2a31..334a192bec4 100644 --- a/spec/features/search/user_uses_header_search_field_spec.rb +++ b/spec/features/search/user_uses_header_search_field_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User uses header search field', :js, :disable_rate_limiter do +RSpec.describe 'User uses header search field', :js, :disable_rate_limiter, feature_category: :global_search do include FilteredSearchHelpers let_it_be(:project) { create(:project, :repository) } diff --git a/spec/features/search/user_uses_search_filters_spec.rb b/spec/features/search/user_uses_search_filters_spec.rb index 24f6c70e64c..2e3aaab563d 100644 --- a/spec/features/search/user_uses_search_filters_spec.rb +++ b/spec/features/search/user_uses_search_filters_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User uses search filters', :js do +RSpec.describe 'User uses search filters', :js, feature_category: :global_search do let(:group) { create(:group) } let!(:group_project) { create(:project, group: group) } let(:project) { create(:project, namespace: user.namespace) } diff --git a/spec/features/security/admin_access_spec.rb b/spec/features/security/admin_access_spec.rb index 8070ae066e7..de81444ed71 100644 --- a/spec/features/security/admin_access_spec.rb +++ b/spec/features/security/admin_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Admin::Projects" do +RSpec.describe "Admin::Projects", feature_category: :permissions do include AccessMatchers describe "GET /admin/projects" do diff --git a/spec/features/security/dashboard_access_spec.rb b/spec/features/security/dashboard_access_spec.rb index 5430329d47d..948a4567624 100644 --- a/spec/features/security/dashboard_access_spec.rb +++ b/spec/features/security/dashboard_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Dashboard access" do +RSpec.describe "Dashboard access", feature_category: :permissions do include AccessMatchers describe "GET /dashboard" do diff --git a/spec/features/security/group/internal_access_spec.rb b/spec/features/security/group/internal_access_spec.rb index 755f170a93e..ad2df4a1882 100644 --- a/spec/features/security/group/internal_access_spec.rb +++ b/spec/features/security/group/internal_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Internal Group access' do +RSpec.describe 'Internal Group access', feature_category: :permissions do include AccessMatchers let(:group) { create(:group, :internal) } @@ -27,9 +27,11 @@ RSpec.describe 'Internal Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_allowed_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -47,9 +49,11 @@ RSpec.describe 'Internal Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_allowed_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -69,9 +73,11 @@ RSpec.describe 'Internal Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_allowed_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -89,9 +95,11 @@ RSpec.describe 'Internal Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_allowed_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -109,9 +117,11 @@ RSpec.describe 'Internal Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_denied_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_denied_for(:maintainer).of(group) } it { is_expected.to be_denied_for(:developer).of(group) } diff --git a/spec/features/security/group/private_access_spec.rb b/spec/features/security/group/private_access_spec.rb index f733145b5e3..2e7b7512b45 100644 --- a/spec/features/security/group/private_access_spec.rb +++ b/spec/features/security/group/private_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Private Group access' do +RSpec.describe 'Private Group access', feature_category: :permissions do include AccessMatchers let(:group) { create(:group, :private) } @@ -27,9 +27,11 @@ RSpec.describe 'Private Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_denied_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -47,9 +49,11 @@ RSpec.describe 'Private Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_denied_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -69,9 +73,11 @@ RSpec.describe 'Private Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_denied_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -89,9 +95,11 @@ RSpec.describe 'Private Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_denied_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -109,9 +117,11 @@ RSpec.describe 'Private Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_denied_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_denied_for(:maintainer).of(group) } it { is_expected.to be_denied_for(:developer).of(group) } @@ -135,9 +145,11 @@ RSpec.describe 'Private Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_denied_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } diff --git a/spec/features/security/group/public_access_spec.rb b/spec/features/security/group/public_access_spec.rb index 90de2b58044..513c5710c8f 100644 --- a/spec/features/security/group/public_access_spec.rb +++ b/spec/features/security/group/public_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Public Group access' do +RSpec.describe 'Public Group access', feature_category: :permissions do include AccessMatchers let(:group) { create(:group, :public) } @@ -27,9 +27,11 @@ RSpec.describe 'Public Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_allowed_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -47,9 +49,11 @@ RSpec.describe 'Public Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_allowed_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -69,9 +73,11 @@ RSpec.describe 'Public Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_allowed_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -89,9 +95,11 @@ RSpec.describe 'Public Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_allowed_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_allowed_for(:maintainer).of(group) } it { is_expected.to be_allowed_for(:developer).of(group) } @@ -109,9 +117,11 @@ RSpec.describe 'Public Group access' do context 'when admin mode is enabled', :enable_admin_mode do it { is_expected.to be_allowed_for(:admin) } end + context 'when admin mode is disabled' do it { is_expected.to be_denied_for(:admin) } end + it { is_expected.to be_allowed_for(:owner).of(group) } it { is_expected.to be_denied_for(:maintainer).of(group) } it { is_expected.to be_denied_for(:developer).of(group) } diff --git a/spec/features/security/profile_access_spec.rb b/spec/features/security/profile_access_spec.rb index 301efd2d99b..991ff115d3d 100644 --- a/spec/features/security/profile_access_spec.rb +++ b/spec/features/security/profile_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Profile access" do +RSpec.describe "Profile access", feature_category: :user_management do include AccessMatchers describe "GET /-/profile/keys" do diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb index 48cee4b1f19..e35e7ed742b 100644 --- a/spec/features/security/project/internal_access_spec.rb +++ b/spec/features/security/project/internal_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Internal Project Access" do +RSpec.describe "Internal Project Access", feature_category: :permissions do include AccessMatchers let_it_be(:project, reload: true) { create(:project, :internal, :repository, :with_namespace_settings) } diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb index c06b1e5da54..59ddb18ae8a 100644 --- a/spec/features/security/project/private_access_spec.rb +++ b/spec/features/security/project/private_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Private Project Access" do +RSpec.describe "Private Project Access", feature_category: :permissions do include AccessMatchers let_it_be(:project, reload: true) do diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb index d2112430638..425691001f2 100644 --- a/spec/features/security/project/public_access_spec.rb +++ b/spec/features/security/project/public_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Public Project Access" do +RSpec.describe "Public Project Access", feature_category: :permissions do include AccessMatchers let_it_be(:project, reload: true) do diff --git a/spec/features/security/project/snippet/internal_access_spec.rb b/spec/features/security/project/snippet/internal_access_spec.rb index ab080f0a460..b7dcc5f31d3 100644 --- a/spec/features/security/project/snippet/internal_access_spec.rb +++ b/spec/features/security/project/snippet/internal_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Internal Project Snippets Access" do +RSpec.describe "Internal Project Snippets Access", feature_category: :permissions do include AccessMatchers let_it_be(:project) { create(:project, :internal) } diff --git a/spec/features/security/project/snippet/private_access_spec.rb b/spec/features/security/project/snippet/private_access_spec.rb index 1e0afc09b74..0ae45abb7ec 100644 --- a/spec/features/security/project/snippet/private_access_spec.rb +++ b/spec/features/security/project/snippet/private_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Private Project Snippets Access" do +RSpec.describe "Private Project Snippets Access", feature_category: :permissions do include AccessMatchers let_it_be(:project) { create(:project, :private) } diff --git a/spec/features/security/project/snippet/public_access_spec.rb b/spec/features/security/project/snippet/public_access_spec.rb index f734f7ba9e2..b98f665c0dc 100644 --- a/spec/features/security/project/snippet/public_access_spec.rb +++ b/spec/features/security/project/snippet/public_access_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe "Public Project Snippets Access" do +RSpec.describe "Public Project Snippets Access", feature_category: :permissions do include AccessMatchers let_it_be(:project) { create(:project, :public) } diff --git a/spec/features/sentry_js_spec.rb b/spec/features/sentry_js_spec.rb index 1d277ba7b3c..d3880011914 100644 --- a/spec/features/sentry_js_spec.rb +++ b/spec/features/sentry_js_spec.rb @@ -2,27 +2,62 @@ require 'spec_helper' -RSpec.describe 'Sentry' do - let(:sentry_regex_path) { '\/sentry.*\.chunk\.js' } +RSpec.describe 'Sentry', feature_category: :error_tracking do + context 'when enable_new_sentry_clientside_integration is disabled' do + before do + stub_feature_flags(enable_new_sentry_clientside_integration: false) + end + + it 'does not load sentry if sentry is disabled' do + allow(Gitlab.config.sentry).to receive(:enabled).and_return(false) + + visit new_user_session_path + + expect(has_requested_legacy_sentry).to eq(false) + end - it 'does not load sentry if sentry is disabled' do - allow(Gitlab.config.sentry).to receive(:enabled).and_return(false) - visit new_user_session_path + it 'loads legacy sentry if sentry config is enabled', :js do + allow(Gitlab.config.sentry).to receive(:enabled).and_return(true) - expect(has_requested_sentry).to eq(false) + visit new_user_session_path + + expect(has_requested_legacy_sentry).to eq(true) + expect(evaluate_script('window._Sentry.SDK_VERSION')).to match(%r{^5\.}) + end end - it 'loads sentry if sentry is enabled' do - stub_sentry_settings + context 'when enable_new_sentry_clientside_integration is enabled' do + before do + stub_feature_flags(enable_new_sentry_clientside_integration: true) + end + + it 'does not load sentry if sentry settings are disabled' do + allow(Gitlab::CurrentSettings).to receive(:sentry_enabled).and_return(false) - visit new_user_session_path + visit new_user_session_path - expect(has_requested_sentry).to eq(true) + expect(has_requested_sentry).to eq(false) + end + + it 'loads sentry if sentry settings are enabled', :js do + allow(Gitlab::CurrentSettings).to receive(:sentry_enabled).and_return(true) + + visit new_user_session_path + + expect(has_requested_sentry).to eq(true) + expect(evaluate_script('window._Sentry.SDK_VERSION')).to match(%r{^7\.}) + end + end + + def has_requested_legacy_sentry + page.all('script', visible: false).one? do |elm| + elm[:src] =~ %r{/legacy_sentry.*\.chunk\.js\z} + end end def has_requested_sentry page.all('script', visible: false).one? do |elm| - elm[:src] =~ /#{sentry_regex_path}$/ + elm[:src] =~ %r{/sentry.*\.chunk\.js\z} end end end diff --git a/spec/features/signed_commits_spec.rb b/spec/features/signed_commits_spec.rb index 8725dbcafe8..34127787e47 100644 --- a/spec/features/signed_commits_spec.rb +++ b/spec/features/signed_commits_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'GPG signed commits' do +RSpec.describe 'GPG signed commits', feature_category: :source_code_management do let(:project) { create(:project, :public, :repository) } it 'changes from unverified to verified when the user changes their email to match the gpg key', :sidekiq_might_not_need_inline do diff --git a/spec/features/snippets/embedded_snippet_spec.rb b/spec/features/snippets/embedded_snippet_spec.rb index 90d877d29b7..73b29ffd575 100644 --- a/spec/features/snippets/embedded_snippet_spec.rb +++ b/spec/features/snippets/embedded_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Embedded Snippets' do +RSpec.describe 'Embedded Snippets', feature_category: :source_code_management do let_it_be(:snippet) { create(:personal_snippet, :public, :repository) } let(:blobs) { snippet.blobs.first(3) } diff --git a/spec/features/snippets/explore_spec.rb b/spec/features/snippets/explore_spec.rb index b62c35bf96e..ef4b75ac3b4 100644 --- a/spec/features/snippets/explore_spec.rb +++ b/spec/features/snippets/explore_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Explore Snippets' do +RSpec.describe 'Explore Snippets', feature_category: :source_code_management do let!(:public_snippet) { create(:personal_snippet, :public) } let!(:internal_snippet) { create(:personal_snippet, :internal) } let!(:private_snippet) { create(:personal_snippet, :private) } diff --git a/spec/features/snippets/internal_snippet_spec.rb b/spec/features/snippets/internal_snippet_spec.rb index 2fcd11c2a47..9645c9c110d 100644 --- a/spec/features/snippets/internal_snippet_spec.rb +++ b/spec/features/snippets/internal_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Internal Snippets', :js do +RSpec.describe 'Internal Snippets', :js, feature_category: :source_code_management do let(:internal_snippet) { create(:personal_snippet, :internal, :repository) } let(:content) { internal_snippet.blobs.first.data.strip! } diff --git a/spec/features/snippets/notes_on_personal_snippets_spec.rb b/spec/features/snippets/notes_on_personal_snippets_spec.rb index 8d55a7a64f4..c281e5906ad 100644 --- a/spec/features/snippets/notes_on_personal_snippets_spec.rb +++ b/spec/features/snippets/notes_on_personal_snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Comments on personal snippets', :js do +RSpec.describe 'Comments on personal snippets', :js, feature_category: :source_code_management do include NoteInteractionHelpers include Spec::Support::Helpers::ModalHelpers diff --git a/spec/features/snippets/private_snippets_spec.rb b/spec/features/snippets/private_snippets_spec.rb index 7ff27419cf7..0620a50ea72 100644 --- a/spec/features/snippets/private_snippets_spec.rb +++ b/spec/features/snippets/private_snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Private Snippets', :js do +RSpec.describe 'Private Snippets', :js, feature_category: :source_code_management do let(:user) { create(:user) } let(:private_snippet) { create(:personal_snippet, :repository, :private, author: user) } let(:content) { private_snippet.blobs.first.data.strip! } diff --git a/spec/features/snippets/public_snippets_spec.rb b/spec/features/snippets/public_snippets_spec.rb index 0f27d96d8e9..be6d6b2c0fa 100644 --- a/spec/features/snippets/public_snippets_spec.rb +++ b/spec/features/snippets/public_snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Public Snippets', :js do +RSpec.describe 'Public Snippets', :js, feature_category: :source_code_management do let(:public_snippet) { create(:personal_snippet, :public, :repository) } let(:content) { public_snippet.blobs.first.data.strip! } diff --git a/spec/features/snippets/search_snippets_spec.rb b/spec/features/snippets/search_snippets_spec.rb index d18729d080a..98842f54015 100644 --- a/spec/features/snippets/search_snippets_spec.rb +++ b/spec/features/snippets/search_snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Search Snippets', :js do +RSpec.describe 'Search Snippets', :js, feature_category: :source_code_management do it 'user searches for snippets by title' do public_snippet = create(:personal_snippet, :public, title: 'Beginning and Middle') private_snippet = create(:personal_snippet, :private, title: 'Middle and End') diff --git a/spec/features/snippets/show_spec.rb b/spec/features/snippets/show_spec.rb index 2103d362f94..a6e0bc32d42 100644 --- a/spec/features/snippets/show_spec.rb +++ b/spec/features/snippets/show_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Snippet', :js do +RSpec.describe 'Snippet', :js, feature_category: :source_code_management do let_it_be(:user) { create(:user) } let_it_be(:snippet) { create(:personal_snippet, :public, :repository, author: user) } diff --git a/spec/features/snippets/spam_snippets_spec.rb b/spec/features/snippets/spam_snippets_spec.rb index 3748a916780..5d49b36f4fe 100644 --- a/spec/features/snippets/spam_snippets_spec.rb +++ b/spec/features/snippets/spam_snippets_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'snippet editor with spam', skip: "Will be handled in https://gitlab.com/gitlab-org/gitlab/-/issues/217722" do +RSpec.describe 'snippet editor with spam', skip: "Will be handled in https://gitlab.com/gitlab-org/gitlab/-/issues/217722", + feature_category: :source_code_management do include_context 'includes Spam constants' let_it_be(:user) { create(:user) } diff --git a/spec/features/snippets/user_creates_snippet_spec.rb b/spec/features/snippets/user_creates_snippet_spec.rb index fd95516090a..064250c5673 100644 --- a/spec/features/snippets/user_creates_snippet_spec.rb +++ b/spec/features/snippets/user_creates_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User creates snippet', :js do +RSpec.describe 'User creates snippet', :js, feature_category: :source_code_management do include DropzoneHelper include Spec::Support::Helpers::Features::SnippetSpecHelpers diff --git a/spec/features/snippets/user_deletes_snippet_spec.rb b/spec/features/snippets/user_deletes_snippet_spec.rb index e896f7eb25b..3c4c41b0181 100644 --- a/spec/features/snippets/user_deletes_snippet_spec.rb +++ b/spec/features/snippets/user_deletes_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User deletes snippet', :js do +RSpec.describe 'User deletes snippet', :js, feature_category: :source_code_management do let(:user) { create(:user) } let(:content) { 'puts "test"' } let(:snippet) { create(:personal_snippet, :repository, :public, content: content, author: user) } diff --git a/spec/features/snippets/user_edits_snippet_spec.rb b/spec/features/snippets/user_edits_snippet_spec.rb index a04c59b53d2..5096472ebe1 100644 --- a/spec/features/snippets/user_edits_snippet_spec.rb +++ b/spec/features/snippets/user_edits_snippet_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User edits snippet', :js do +RSpec.describe 'User edits snippet', :js, feature_category: :source_code_management do include DropzoneHelper include Spec::Support::Helpers::Features::SnippetSpecHelpers diff --git a/spec/features/snippets/user_snippets_spec.rb b/spec/features/snippets/user_snippets_spec.rb index bb733431b22..09e0e30666d 100644 --- a/spec/features/snippets/user_snippets_spec.rb +++ b/spec/features/snippets/user_snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User Snippets' do +RSpec.describe 'User Snippets', feature_category: :source_code_management do let(:author) { create(:user) } let!(:public_snippet) { create(:personal_snippet, :public, author: author, title: "This is a public snippet") } let!(:internal_snippet) { create(:personal_snippet, :internal, author: author, title: "This is an internal snippet") } diff --git a/spec/features/snippets_spec.rb b/spec/features/snippets_spec.rb index 35eb5c2e193..2ccdb68e844 100644 --- a/spec/features/snippets_spec.rb +++ b/spec/features/snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Snippets' do +RSpec.describe 'Snippets', feature_category: :snippets do context 'when the project has snippets' do let(:project) { create(:project, :public) } let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.first_owner, project: project) } diff --git a/spec/features/tags/developer_creates_tag_spec.rb b/spec/features/tags/developer_creates_tag_spec.rb index 5657115fb3c..111710ba325 100644 --- a/spec/features/tags/developer_creates_tag_spec.rb +++ b/spec/features/tags/developer_creates_tag_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Developer creates tag' do +RSpec.describe 'Developer creates tag', :js, feature_category: :source_code_management do let(:user) { create(:user) } let(:group) { create(:group) } let(:project) { create(:project, :repository, namespace: group) } @@ -15,6 +15,8 @@ RSpec.describe 'Developer creates tag' do context 'from tag list' do before do visit project_tags_path(project) + click_link 'New tag' + wait_for_requests end it 'with an invalid name displays an error' do @@ -23,10 +25,17 @@ RSpec.describe 'Developer creates tag' do expect(page).to have_content 'Tag name invalid' end - it 'with an invalid reference displays an error' do - create_tag_in_form(tag: 'v2.0', ref: 'foo') - - expect(page).to have_content 'Target foo is invalid' + it "doesn't allow to select invalid ref" do + ref_name = 'foo' + fill_in 'tag_name', with: 'v2.0' + ref_selector = '.ref-selector' + find(ref_selector).click + wait_for_requests + page.within(ref_selector) do + fill_in _('Search by Git revision'), with: ref_name + wait_for_requests + expect(find('.gl-dropdown-contents')).not_to have_content(ref_name) + end end it 'that already exists displays an error' do @@ -46,27 +55,34 @@ RSpec.describe 'Developer creates tag' do end end - it 'opens dropdown for ref', :js do - click_link 'New tag' - ref_row = find('.form-group:nth-of-type(2) .col-sm-12') + it 'opens dropdown for ref' do + ref_row = find('.form-group:nth-of-type(2) .col-sm-auto') page.within ref_row do ref_input = find('[name="ref"]', visible: false) expect(ref_input.value).to eq 'master' - expect(find('.dropdown-toggle-text')).to have_content 'master' - - find('.js-branch-select').click - - expect(find('.dropdown-menu')).to have_content 'empty-branch' + expect(find('.gl-dropdown-button-text')).to have_content 'master' + find('.ref-selector').click + expect(find('.dropdown-menu')).to have_content 'test' end end end def create_tag_in_form(tag:, ref:, message: nil, desc: nil) - click_link 'New tag' fill_in 'tag_name', with: tag - find('#ref', visible: false).set(ref) + select_ref(ref: ref) fill_in 'message', with: message unless message.nil? fill_in 'release_description', with: desc unless desc.nil? click_button 'Create tag' end + + def select_ref(ref:) + ref_selector = '.ref-selector' + find(ref_selector).click + wait_for_requests + page.within(ref_selector) do + fill_in _('Search by Git revision'), with: ref + wait_for_requests + find('li', text: ref, match: :prefer_exact).click + end + end end diff --git a/spec/features/tags/developer_deletes_tag_spec.rb b/spec/features/tags/developer_deletes_tag_spec.rb index efd4b42c136..76cf3aa691d 100644 --- a/spec/features/tags/developer_deletes_tag_spec.rb +++ b/spec/features/tags/developer_deletes_tag_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Developer deletes tag', :js do +RSpec.describe 'Developer deletes tag', :js, feature_category: :source_code_management do let(:user) { create(:user) } let(:group) { create(:group) } let(:project) { create(:project, :repository, namespace: group) } diff --git a/spec/features/tags/developer_views_tags_spec.rb b/spec/features/tags/developer_views_tags_spec.rb index e2399dd9978..dc9f38f1d83 100644 --- a/spec/features/tags/developer_views_tags_spec.rb +++ b/spec/features/tags/developer_views_tags_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Developer views tags' do +RSpec.describe 'Developer views tags', feature_category: :source_code_management do include RepoHelpers let(:user) { create(:user) } diff --git a/spec/features/tags/maintainer_deletes_protected_tag_spec.rb b/spec/features/tags/maintainer_deletes_protected_tag_spec.rb index 0bf9645c2fb..ce518b962cd 100644 --- a/spec/features/tags/maintainer_deletes_protected_tag_spec.rb +++ b/spec/features/tags/maintainer_deletes_protected_tag_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Maintainer deletes protected tag', :js do +RSpec.describe 'Maintainer deletes protected tag', :js, feature_category: :source_code_management do let(:user) { create(:user) } let(:group) { create(:group) } let(:project) { create(:project, :repository, namespace: group) } diff --git a/spec/features/task_lists_spec.rb b/spec/features/task_lists_spec.rb index 07de3789c08..d35726fe125 100644 --- a/spec/features/task_lists_spec.rb +++ b/spec/features/task_lists_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Task Lists', :js do +RSpec.describe 'Task Lists', :js, feature_category: :team_planning do include Warden::Test::Helpers let_it_be(:project) { create(:project, :public, :repository) } diff --git a/spec/features/topic_show_spec.rb b/spec/features/topic_show_spec.rb index 196fc34e3ea..d640e4e4edb 100644 --- a/spec/features/topic_show_spec.rb +++ b/spec/features/topic_show_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Topic show page' do +RSpec.describe 'Topic show page', feature_category: :projects do let_it_be(:topic) { create(:topic, name: 'my-topic', title: 'My Topic', description: 'This is **my** topic https://google.com/ :poop: ```\ncode\n```', avatar: fixture_file_upload("spec/fixtures/dk.png", "image/png")) } context 'when topic does not exist' do diff --git a/spec/features/triggers_spec.rb b/spec/features/triggers_spec.rb index eb497715df7..3616fdb2e8e 100644 --- a/spec/features/triggers_spec.rb +++ b/spec/features/triggers_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Triggers', :js do +RSpec.describe 'Triggers', :js, feature_category: :continuous_integration do include Spec::Support::Helpers::ModalHelpers let(:trigger_title) { 'trigger desc' } diff --git a/spec/features/u2f_spec.rb b/spec/features/u2f_spec.rb index eed67e3ac78..9ef0626b2b2 100644 --- a/spec/features/u2f_spec.rb +++ b/spec/features/u2f_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Using U2F (Universal 2nd Factor) Devices for Authentication', :js do +RSpec.describe 'Using U2F (Universal 2nd Factor) Devices for Authentication', :js, +feature_category: :authentication_and_authorization do include Spec::Support::Helpers::Features::TwoFactorHelpers before do diff --git a/spec/features/unsubscribe_links_spec.rb b/spec/features/unsubscribe_links_spec.rb index 12d2f0a9bb6..bcab35335cb 100644 --- a/spec/features/unsubscribe_links_spec.rb +++ b/spec/features/unsubscribe_links_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Unsubscribe links', :sidekiq_inline do +RSpec.describe 'Unsubscribe links', :sidekiq_inline, feature_category: :not_owned do include Warden::Test::Helpers let_it_be(:project) { create(:project, :public) } 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 8daa869a6e3..78cede77fea 100644 --- a/spec/features/uploads/user_uploads_avatar_to_group_spec.rb +++ b/spec/features/uploads/user_uploads_avatar_to_group_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User uploads avatar to group' do +RSpec.describe 'User uploads avatar to group', feature_category: :users do it 'they see the new avatar' do user = create(:user) group = create(:group) 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 02f9d57fcfe..fb62b5eadc5 100644 --- a/spec/features/uploads/user_uploads_avatar_to_profile_spec.rb +++ b/spec/features/uploads/user_uploads_avatar_to_profile_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User uploads avatar to profile' do +RSpec.describe 'User uploads avatar to profile', feature_category: :users do let!(:user) { create(:user) } let(:avatar_file_path) { Rails.root.join('spec', 'fixtures', 'dk.png') } diff --git a/spec/features/uploads/user_uploads_file_to_note_spec.rb b/spec/features/uploads/user_uploads_file_to_note_spec.rb index 2547e2d274c..e5ad62592ae 100644 --- a/spec/features/uploads/user_uploads_file_to_note_spec.rb +++ b/spec/features/uploads/user_uploads_file_to_note_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User uploads file to note' do +RSpec.describe 'User uploads file to note', feature_category: :team_planning do include DropzoneHelper let(:user) { create(:user) } diff --git a/spec/features/usage_stats_consent_spec.rb b/spec/features/usage_stats_consent_spec.rb index 69bd6f35558..c446fe1531b 100644 --- a/spec/features/usage_stats_consent_spec.rb +++ b/spec/features/usage_stats_consent_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Usage stats consent' do +RSpec.describe 'Usage stats consent', feature_category: :service_ping do context 'when signed in' do let(:user) { create(:admin, created_at: 8.days.ago) } let(:message) { 'To help improve GitLab, we would like to periodically collect usage information.' } diff --git a/spec/features/user_can_display_performance_bar_spec.rb b/spec/features/user_can_display_performance_bar_spec.rb index 14b5964686f..4f6ce6e8f71 100644 --- a/spec/features/user_can_display_performance_bar_spec.rb +++ b/spec/features/user_can_display_performance_bar_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User can display performance bar', :js do +RSpec.describe 'User can display performance bar', :js, feature_category: :continuous_verification do shared_examples 'performance bar cannot be displayed' do it 'does not show the performance bar by default' do expect(page).not_to have_css('#js-peek') diff --git a/spec/features/user_opens_link_to_comment_spec.rb b/spec/features/user_opens_link_to_comment_spec.rb index 59dea91c666..fb8f312c44b 100644 --- a/spec/features/user_opens_link_to_comment_spec.rb +++ b/spec/features/user_opens_link_to_comment_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User opens link to comment', :js do +RSpec.describe 'User opens link to comment', :js, feature_category: :team_planning do let(:project) { create(:project, :public) } let(:note) { create(:note_on_issue, project: project) } diff --git a/spec/features/user_sees_revert_modal_spec.rb b/spec/features/user_sees_revert_modal_spec.rb index 5edf8358244..ea5fd537c5b 100644 --- a/spec/features/user_sees_revert_modal_spec.rb +++ b/spec/features/user_sees_revert_modal_spec.rb @@ -2,7 +2,8 @@ require 'spec_helper' -RSpec.describe 'Merge request > User sees revert modal', :js, :sidekiq_might_not_need_inline do +RSpec.describe 'Merge request > User sees revert modal', :js, :sidekiq_might_not_need_inline, +feature_category: :code_review do let(:project) { create(:project, :public, :repository) } let(:user) { project.creator } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/spec/features/user_sorts_things_spec.rb b/spec/features/user_sorts_things_spec.rb index c6a1cfdc146..708caf79090 100644 --- a/spec/features/user_sorts_things_spec.rb +++ b/spec/features/user_sorts_things_spec.rb @@ -20,7 +20,7 @@ RSpec.describe "User sorts things", :js do sign_in(current_user) end - it "issues -> project home page -> issues" do + it "issues -> project home page -> issues", feature_category: :team_planning do sort_option = s_('SortOptions|Updated date') visit(project_issues_path(project)) @@ -34,7 +34,7 @@ RSpec.describe "User sorts things", :js do expect(page).to have_button(sort_option) end - it "merge requests -> dashboard merge requests" do + it "merge requests -> dashboard merge requests", feature_category: :code_review do sort_option = s_('SortOptions|Updated date') visit(project_merge_requests_path(project)) diff --git a/spec/features/users/active_sessions_spec.rb b/spec/features/users/active_sessions_spec.rb index e2ee78a7cc5..53a4c8a91e9 100644 --- a/spec/features/users/active_sessions_spec.rb +++ b/spec/features/users/active_sessions_spec.rb @@ -2,27 +2,31 @@ require 'spec_helper' -RSpec.describe 'Active user sessions', :clean_gitlab_redis_sessions do +RSpec.describe 'Active user sessions', :clean_gitlab_redis_sessions, feature_category: :system_access do it 'successful login adds a new active user login' do + user = create(:user) + now = Time.zone.parse('2018-03-12 09:06') - Timecop.freeze(now) do - user = create(:user) + travel_to(now) do gitlab_sign_in(user) expect(page).to have_current_path root_path, ignore_query: true sessions = ActiveSession.list(user) expect(sessions.count).to eq 1 + gitlab_sign_out + end - # refresh the current page updates the updated_at - Timecop.freeze(now + 1.minute) do - visit current_path + # refresh the current page updates the updated_at + travel_to(now + 1.minute) do + gitlab_sign_in(user) + + visit current_path - sessions = ActiveSession.list(user) - expect(sessions.first).to have_attributes( - created_at: Time.zone.parse('2018-03-12 09:06'), - updated_at: Time.zone.parse('2018-03-12 09:07') - ) - end + sessions = ActiveSession.list(user) + expect(sessions.first).to have_attributes( + created_at: Time.zone.parse('2018-03-12 09:06'), + updated_at: Time.zone.parse('2018-03-12 09:07') + ) end end diff --git a/spec/features/users/add_email_to_existing_account_spec.rb b/spec/features/users/add_email_to_existing_account_spec.rb index cf78fc4587f..8c4e68c454f 100644 --- a/spec/features/users/add_email_to_existing_account_spec.rb +++ b/spec/features/users/add_email_to_existing_account_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'AdditionalEmailToExistingAccount' do +RSpec.describe 'AdditionalEmailToExistingAccount', feature_category: :users do describe 'add secondary email associated with account' do let_it_be(:user) { create(:user) } let_it_be(:email) { create(:email, user: user) } diff --git a/spec/features/users/anonymous_sessions_spec.rb b/spec/features/users/anonymous_sessions_spec.rb index 6b21412ae3d..83473964d6b 100644 --- a/spec/features/users/anonymous_sessions_spec.rb +++ b/spec/features/users/anonymous_sessions_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Session TTLs', :clean_gitlab_redis_shared_state do +RSpec.describe 'Session TTLs', :clean_gitlab_redis_shared_state, feature_category: :system_access do include SessionHelpers it 'creates a session with a short TTL when login fails' do diff --git a/spec/features/users/bizible_csp_spec.rb b/spec/features/users/bizible_csp_spec.rb index af0b42050b3..6c62cf9e0a2 100644 --- a/spec/features/users/bizible_csp_spec.rb +++ b/spec/features/users/bizible_csp_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Bizible content security policy' do +RSpec.describe 'Bizible content security policy', feature_category: :purchase do before do stub_config(extra: { one_trust_id: SecureRandom.uuid }) end diff --git a/spec/features/users/confirmation_spec.rb b/spec/features/users/confirmation_spec.rb index aaa49c75223..cf8d0c4dbd4 100644 --- a/spec/features/users/confirmation_spec.rb +++ b/spec/features/users/confirmation_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User confirmation' do +RSpec.describe 'User confirmation', feature_category: :system_access do describe 'resend confirmation instructions' do context 'when recaptcha is enabled' do before do diff --git a/spec/features/users/email_verification_on_login_spec.rb b/spec/features/users/email_verification_on_login_spec.rb index f7102eaf9b7..de52f0b517e 100644 --- a/spec/features/users/email_verification_on_login_spec.rb +++ b/spec/features/users/email_verification_on_login_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting do +RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting, feature_category: :system_access do include EmailHelpers let_it_be(:user) { create(:user) } @@ -223,6 +223,14 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting it_behaves_like 'email verification required' it_behaves_like 'no email verification required when 2fa enabled or ff disabled' + + context 'when the check_ip_address_for_email_verification feature flag is disabled' do + before do + stub_feature_flags(check_ip_address_for_email_verification: false) + end + + it_behaves_like 'no email verification required' + end end describe 'when a previous authentication event exists for the same ip address' do diff --git a/spec/features/users/google_analytics_csp_spec.rb b/spec/features/users/google_analytics_csp_spec.rb index 46a9b3be22f..45cc6c5f39d 100644 --- a/spec/features/users/google_analytics_csp_spec.rb +++ b/spec/features/users/google_analytics_csp_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Google Analytics 4 content security policy' do +RSpec.describe 'Google Analytics 4 content security policy', feature_category: :purchase do it 'includes the GA4 content security policy headers' do visit root_path diff --git a/spec/features/users/login_spec.rb b/spec/features/users/login_spec.rb index 5ca5bd72b79..105e9f97989 100644 --- a/spec/features/users/login_spec.rb +++ b/spec/features/users/login_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Login', :clean_gitlab_redis_sessions do +RSpec.describe 'Login', :clean_gitlab_redis_sessions, feature_category: :system_access do include TermsHelper include UserLoginHelper include SessionHelpers @@ -103,7 +103,7 @@ RSpec.describe 'Login', :clean_gitlab_redis_sessions do let(:alert_message) { "To continue, you need to select the link in the confirmation email we sent to verify your email address. If you didn't get our email, select Resend confirmation email" } before do - stub_application_setting(send_user_confirmation_email: true) + stub_application_setting_enum('email_confirmation_setting', 'hard') allow(User).to receive(:allow_unconfirmed_access_for).and_return grace_period stub_feature_flags(identity_verification: false) end @@ -953,7 +953,7 @@ RSpec.describe 'Login', :clean_gitlab_redis_sessions do let(:alert_message) { "To continue, you need to select the link in the confirmation email we sent to verify your email address. If you didn't get our email, select Resend confirmation email" } before do - stub_application_setting(send_user_confirmation_email: true) + stub_application_setting_enum('email_confirmation_setting', 'hard') stub_feature_flags(soft_email_confirmation: true) stub_feature_flags(identity_verification: false) allow(User).to receive(:allow_unconfirmed_access_for).and_return grace_period diff --git a/spec/features/users/logout_spec.rb b/spec/features/users/logout_spec.rb index 596f0dd5a94..c9839247e7d 100644 --- a/spec/features/users/logout_spec.rb +++ b/spec/features/users/logout_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Logout/Sign out', :js do +RSpec.describe 'Logout/Sign out', :js, feature_category: :system_access do let(:user) { create(:user) } before do diff --git a/spec/features/users/one_trust_csp_spec.rb b/spec/features/users/one_trust_csp_spec.rb index 382a0b4be6c..c22fd26f2e8 100644 --- a/spec/features/users/one_trust_csp_spec.rb +++ b/spec/features/users/one_trust_csp_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'OneTrust content security policy' do +RSpec.describe 'OneTrust content security policy', feature_category: :application_instrumentation do let(:user) { create(:user) } before do diff --git a/spec/features/users/overview_spec.rb b/spec/features/users/overview_spec.rb index 902079b7b93..489e7d61ff9 100644 --- a/spec/features/users/overview_spec.rb +++ b/spec/features/users/overview_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Overview tab on a user profile', :js do +RSpec.describe 'Overview tab on a user profile', :js, feature_category: :users do let(:user) { create(:user) } let(:contributed_project) { create(:project, :public, :repository) } diff --git a/spec/features/users/password_spec.rb b/spec/features/users/password_spec.rb index 793a11c616e..ccd383c8a15 100644 --- a/spec/features/users/password_spec.rb +++ b/spec/features/users/password_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User password' do +RSpec.describe 'User password', feature_category: :system_access do describe 'send password reset' do context 'when recaptcha is enabled' do before do diff --git a/spec/features/users/rss_spec.rb b/spec/features/users/rss_spec.rb index aba1ff63fab..a2604cd298a 100644 --- a/spec/features/users/rss_spec.rb +++ b/spec/features/users/rss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User RSS' do +RSpec.describe 'User RSS', feature_category: :users do let(:user) { create(:user) } let(:path) { user_path(create(:user)) } diff --git a/spec/features/users/show_spec.rb b/spec/features/users/show_spec.rb index bbf5882f89f..318dd688fa4 100644 --- a/spec/features/users/show_spec.rb +++ b/spec/features/users/show_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'User page' do +RSpec.describe 'User page', feature_category: :users do include ExternalAuthorizationServiceHelpers let_it_be(:user) { create(:user, bio: '<b>Lorem</b> <i>ipsum</i> dolor sit <a href="https://example.com">amet</a>') } diff --git a/spec/features/users/signup_spec.rb b/spec/features/users/signup_spec.rb index 9b1a102f07b..1057ae48c7d 100644 --- a/spec/features/users/signup_spec.rb +++ b/spec/features/users/signup_spec.rb @@ -44,7 +44,7 @@ RSpec.shared_examples 'Signup name validation' do |field, max_length, label| end end -RSpec.describe 'Signup' do +RSpec.describe 'Signup', feature_category: :users do include TermsHelper let(:new_user) { build_stubbed(:user) } @@ -197,7 +197,7 @@ RSpec.describe 'Signup' do context 'with no errors' do context 'when sending confirmation email' do before do - stub_application_setting(send_user_confirmation_email: true) + stub_application_setting_enum('email_confirmation_setting', 'hard') end context 'when soft email confirmation is not enabled' do @@ -239,7 +239,7 @@ RSpec.describe 'Signup' do context "when not sending confirmation email" do before do - stub_application_setting(send_user_confirmation_email: false) + stub_application_setting_enum('email_confirmation_setting', 'off') end it 'creates the user account and goes to dashboard' do @@ -282,7 +282,7 @@ RSpec.describe 'Signup' do expect(page).to have_content("Email has already been taken") end - it 'does not redisplay the password' do + it 'redisplays all fields except password' do create(:user, email: new_user.email) visit new_user_registration_path @@ -291,6 +291,11 @@ RSpec.describe 'Signup' do expect(page).to have_current_path user_registration_path, ignore_query: true expect(page.body).not_to match(/#{new_user.password}/) + + expect(find_field('First name').value).to eq(new_user.first_name) + expect(find_field('Last name').value).to eq(new_user.last_name) + expect(find_field('Username').value).to eq(new_user.username) + expect(find_field('Email').value).to eq(new_user.email) end end diff --git a/spec/features/users/snippets_spec.rb b/spec/features/users/snippets_spec.rb index ce19e491a7c..20fc2981418 100644 --- a/spec/features/users/snippets_spec.rb +++ b/spec/features/users/snippets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Snippets tab on a user profile', :js do +RSpec.describe 'Snippets tab on a user profile', :js, feature_category: :snippets do context 'when the user has snippets' do let(:user) { create(:user) } diff --git a/spec/features/users/terms_spec.rb b/spec/features/users/terms_spec.rb index 7a662d24d60..7d2137b81b8 100644 --- a/spec/features/users/terms_spec.rb +++ b/spec/features/users/terms_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Users > Terms', :js do +RSpec.describe 'Users > Terms', :js, feature_category: :users do include TermsHelper let!(:term) { create(:term, terms: 'By accepting, you promise to be nice!') } diff --git a/spec/features/users/user_browses_projects_on_user_page_spec.rb b/spec/features/users/user_browses_projects_on_user_page_spec.rb index 5e7d7b76843..841b324fba4 100644 --- a/spec/features/users/user_browses_projects_on_user_page_spec.rb +++ b/spec/features/users/user_browses_projects_on_user_page_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Users > User browses projects on user page', :js do +RSpec.describe 'Users > User browses projects on user page', :js, feature_category: :projects do let!(:user) { create :user } let!(:private_project) do create :project, :private, name: 'private', namespace: user.namespace do |project| diff --git a/spec/features/users/zuora_csp_spec.rb b/spec/features/users/zuora_csp_spec.rb index f3fd27d6495..b07c923fa54 100644 --- a/spec/features/users/zuora_csp_spec.rb +++ b/spec/features/users/zuora_csp_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Zuora content security policy' do +RSpec.describe 'Zuora content security policy', feature_category: :purchase do let(:user) { create(:user) } let(:project) { create(:project) } let(:pipeline) { create(:ci_pipeline, project: project) } diff --git a/spec/features/webauthn_spec.rb b/spec/features/webauthn_spec.rb index 215d1ff1cb6..e2f16f4a017 100644 --- a/spec/features/webauthn_spec.rb +++ b/spec/features/webauthn_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Using WebAuthn Devices for Authentication', :js do +RSpec.describe 'Using WebAuthn Devices for Authentication', :js, feature_category: :authentication_and_authorization do include Spec::Support::Helpers::Features::TwoFactorHelpers let(:app_id) { "http://#{Capybara.current_session.server.host}:#{Capybara.current_session.server.port}" } diff --git a/spec/features/whats_new_spec.rb b/spec/features/whats_new_spec.rb index 2938ea1b1e8..6b19ab28b44 100644 --- a/spec/features/whats_new_spec.rb +++ b/spec/features/whats_new_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe "renders a `whats new` dropdown item" do +RSpec.describe "renders a `whats new` dropdown item", feature_category: :not_owned do let_it_be(:user) { create(:user) } context 'when not logged in' do diff --git a/spec/features/work_items/work_item_children_spec.rb b/spec/features/work_items/work_item_children_spec.rb index 10a1bf7541e..4403ca60d11 100644 --- a/spec/features/work_items/work_item_children_spec.rb +++ b/spec/features/work_items/work_item_children_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Work item children', :js do +RSpec.describe 'Work item children', :js, feature_category: :team_planning do let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, :public, namespace: group) } let_it_be(:user) { create(:user) } diff --git a/spec/features/work_items/work_item_spec.rb b/spec/features/work_items/work_item_spec.rb index 686b82de868..577ec060020 100644 --- a/spec/features/work_items/work_item_spec.rb +++ b/spec/features/work_items/work_item_spec.rb @@ -2,14 +2,16 @@ require 'spec_helper' -RSpec.describe 'Work item', :js do +RSpec.describe 'Work item', :js, feature_category: :team_planning do let_it_be(:project) { create(:project, :public) } let_it_be(:user) { create(:user) } + let_it_be(:other_user) { create(:user) } let_it_be(:work_item) { create(:work_item, project: project) } context 'for signed in user' do before do project.add_developer(user) + project.add_developer(other_user) sign_in(user) @@ -28,6 +30,31 @@ RSpec.describe 'Work item', :js do expect(page).to have_text(user.name) end end + + it 'shows conflict message when description changes', :aggregate_failures do + click_button "Edit description" + scroll_to(find('[aria-label="Description"]')) + + # without this for some reason the test fails when running locally + sleep 1 + + ::WorkItems::UpdateService.new( + project: work_item.project, + current_user: other_user, + params: { description: "oh no!" } + ).execute(work_item) + + work_item.reload + + find('[aria-label="Description"]').send_keys("oh yeah!") + + warning = 'Someone edited the description at the same time you did.' + expect(page.find('[data-testid="work-item-description-conflicts"]')).to have_text(warning) + + click_button "Save and overwrite" + + expect(page.find('[data-testid="work-item-description"]')).to have_text("oh yeah!") + end end end end |