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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-01-18 22:00:14 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-01-18 22:00:14 +0300
commit05f0ebba3a2c8ddf39e436f412dc2ab5bf1353b2 (patch)
tree11d0f2a6ec31c7793c184106cedc2ded3d9a2cc5 /spec/support
parentec73467c23693d0db63a797d10194da9e72a74af (diff)
Add latest changes from gitlab-org/gitlab@15-8-stable-eev15.8.0-rc42
Diffstat (limited to 'spec/support')
-rw-r--r--spec/support/caching.rb6
-rw-r--r--spec/support/capybara.rb13
-rw-r--r--spec/support/helpers/api_helpers.rb9
-rw-r--r--spec/support/helpers/cycle_analytics_helpers.rb2
-rw-r--r--spec/support/helpers/database/database_helpers.rb30
-rw-r--r--spec/support/helpers/database/table_schema_helpers.rb4
-rw-r--r--spec/support/helpers/features/members_helpers.rb16
-rw-r--r--spec/support/helpers/features/web_ide_spec_helpers.rb10
-rw-r--r--spec/support/helpers/listbox_helpers.rb24
-rw-r--r--spec/support/helpers/listbox_input_helper.rb18
-rw-r--r--spec/support/helpers/login_helpers.rb2
-rw-r--r--spec/support/helpers/migrations_helpers.rb6
-rw-r--r--spec/support/helpers/navbar_structure_helper.rb5
-rw-r--r--spec/support/helpers/query_recorder.rb4
-rw-r--r--spec/support/helpers/usage_data_helpers.rb5
-rw-r--r--spec/support/matchers/be_boolean.rb10
-rw-r--r--spec/support/matchers/exceed_query_limit.rb29
-rw-r--r--spec/support/redis/redis_helpers.rb7
-rw-r--r--spec/support/redis/redis_new_instance_shared_examples.rb60
-rw-r--r--spec/support/redis/redis_shared_examples.rb76
-rw-r--r--spec/support/rspec_order_todo.yml252
-rw-r--r--spec/support/services/clusters/create_service_shared.rb5
-rw-r--r--spec/support/shared_contexts/bulk_imports_requests_shared_context.rb2
-rw-r--r--spec/support/shared_contexts/features/integrations/integrations_shared_context.rb8
-rw-r--r--spec/support/shared_contexts/markdown_golden_master_shared_examples.rb132
-rw-r--r--spec/support/shared_contexts/navbar_structure_context.rb43
-rw-r--r--spec/support/shared_contexts/policies/group_policy_shared_context.rb3
-rw-r--r--spec/support/shared_examples/analytics/cycle_analytics/parentable_examples.rb28
-rw-r--r--spec/support/shared_examples/controllers/githubish_import_controller_shared_examples.rb121
-rw-r--r--spec/support/shared_examples/controllers/issuables_list_metadata_shared_examples.rb4
-rw-r--r--spec/support/shared_examples/controllers/rate_limited_endpoint_shared_examples.rb26
-rw-r--r--spec/support/shared_examples/features/code_highlight_shared_examples.rb13
-rw-r--r--spec/support/shared_examples/features/content_editor_shared_examples.rb3
-rw-r--r--spec/support/shared_examples/features/dashboard/sidebar_shared_examples.rb21
-rw-r--r--spec/support/shared_examples/features/reportable_note_shared_examples.rb2
-rw-r--r--spec/support/shared_examples/finders/issues_finder_shared_examples.rb18
-rw-r--r--spec/support/shared_examples/graphql/types/merge_request_interactions_type_shared_examples.rb3
-rw-r--r--spec/support/shared_examples/lib/sidebars/your_work/menus/menu_item_examples.rb38
-rw-r--r--spec/support/shared_examples/models/concerns/counter_attribute_shared_examples.rb75
-rw-r--r--spec/support/shared_examples/models/concerns/integrations/reset_secret_fields_shared_examples.rb2
-rw-r--r--spec/support/shared_examples/models/cycle_analytics_stage_shared_examples.rb2
-rw-r--r--spec/support/shared_examples/models/member_shared_examples.rb12
-rw-r--r--spec/support/shared_examples/models/members_notifications_shared_example.rb2
-rw-r--r--spec/support/shared_examples/models/relative_positioning_shared_examples.rb3
-rw-r--r--spec/support/shared_examples/models/resource_event_shared_examples.rb12
-rw-r--r--spec/support/shared_examples/models/update_project_statistics_shared_examples.rb10
-rw-r--r--spec/support/shared_examples/namespaces/members.rb13
-rw-r--r--spec/support/shared_examples/observability/csp_shared_examples.rb47
-rw-r--r--spec/support/shared_examples/quick_actions/issuable/close_quick_action_shared_examples.rb4
-rw-r--r--spec/support/shared_examples/quick_actions/issue/promote_to_incident_quick_action_shared_examples.rb28
-rw-r--r--spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb33
-rw-r--r--spec/support/shared_examples/requests/api/issuable_search_shared_examples.rb32
-rw-r--r--spec/support/shared_examples/requests/api/nuget_endpoints_shared_examples.rb38
-rw-r--r--spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb20
-rw-r--r--spec/support/shared_examples/services/issuable_links/create_links_shared_examples.rb2
-rw-r--r--spec/support/shared_examples/services/issuable_links/destroyable_issuable_links_shared_examples.rb7
-rw-r--r--spec/support/shared_examples/services/repositories/housekeeping_shared_examples.rb50
-rw-r--r--spec/support/shared_examples/services/security/ci_configuration/create_service_shared_examples.rb62
-rw-r--r--spec/support/shared_examples/workers/batched_background_migration_worker_shared_examples.rb24
-rw-r--r--spec/support/shared_examples/workers/concerns/git_garbage_collect_methods_shared_examples.rb108
-rw-r--r--spec/support/shared_examples/workers/update_repository_move_shared_examples.rb4
-rw-r--r--spec/support/tmpdir.rb18
62 files changed, 808 insertions, 858 deletions
diff --git a/spec/support/caching.rb b/spec/support/caching.rb
index 11e4f534971..b18223523db 100644
--- a/spec/support/caching.rb
+++ b/spec/support/caching.rb
@@ -37,8 +37,8 @@ RSpec.configure do |config|
end
config.around(:each, :use_sql_query_cache) do |example|
- ActiveRecord::Base.cache do
- example.run
- end
+ base_models = Gitlab::Database.database_base_models_with_gitlab_shared.values
+ inner_proc = proc { example.run }
+ base_models.inject(inner_proc) { |proc, base_model| proc { base_model.cache { proc.call } } }.call
end
end
diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb
index aea853d1c23..fe9bff827dc 100644
--- a/spec/support/capybara.rb
+++ b/spec/support/capybara.rb
@@ -32,6 +32,8 @@ CAPYBARA_WINDOW_SIZE = [1366, 768].freeze
SCREENSHOT_FILENAME_LENGTH = ENV['CI'] || ENV['CI_SERVER'] ? 255 : 99
+@blackhole_tcp_server = nil
+
# Run Workhorse on the given host and port, proxying to Puma on a UNIX socket,
# for a closer-to-production experience
Capybara.register_server :puma_via_workhorse do |app, port, host, **options|
@@ -83,6 +85,17 @@ Capybara.register_driver :chrome do |app|
# Chrome 75 defaults to W3C mode which doesn't allow console log access
options.add_option(:w3c, false)
+ # Set up a proxy server to block all external traffic.
+ @blackhole_tcp_server = TCPServer.new(0)
+ Thread.new do
+ loop do
+ Thread.start(@blackhole_tcp_server.accept, &:close)
+ end
+ end
+
+ options.add_argument("--proxy-server=http://127.0.0.1:#{@blackhole_tcp_server.addr[1]}")
+ options.add_argument("--proxy-bypass-list=127.0.0.1,localhost,#{Gitlab.config.gitlab.host}")
+
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
diff --git a/spec/support/helpers/api_helpers.rb b/spec/support/helpers/api_helpers.rb
index 62bb9576695..a9d7c6af959 100644
--- a/spec/support/helpers/api_helpers.rb
+++ b/spec/support/helpers/api_helpers.rb
@@ -19,7 +19,7 @@ module ApiHelpers
# => "/api/v2/issues?foo=bar&private_token=..."
#
# Returns the relative path to the requested API resource
- def api(path, user = nil, version: API::API.version, personal_access_token: nil, oauth_access_token: nil, job_token: nil, access_token: nil)
+ def api(path, user = nil, version: API::API.version, personal_access_token: nil, oauth_access_token: nil, job_token: nil, access_token: nil, admin_mode: false)
full_path = "/api/#{version}#{path}"
if oauth_access_token
@@ -31,7 +31,12 @@ module ApiHelpers
elsif access_token
query_string = "access_token=#{access_token.token}"
elsif user
- personal_access_token = create(:personal_access_token, user: user)
+ personal_access_token = if admin_mode && user.admin?
+ create(:personal_access_token, :admin_mode, user: user)
+ else
+ create(:personal_access_token, user: user)
+ end
+
query_string = "private_token=#{personal_access_token.token}"
end
diff --git a/spec/support/helpers/cycle_analytics_helpers.rb b/spec/support/helpers/cycle_analytics_helpers.rb
index 6d41d7b7414..632f3ea28ee 100644
--- a/spec/support/helpers/cycle_analytics_helpers.rb
+++ b/spec/support/helpers/cycle_analytics_helpers.rb
@@ -92,7 +92,7 @@ module CycleAnalyticsHelpers
end
def create_value_stream_group_aggregation(group)
- aggregation = Analytics::CycleAnalytics::Aggregation.safe_create_for_group(group)
+ aggregation = Analytics::CycleAnalytics::Aggregation.safe_create_for_namespace(group)
Analytics::CycleAnalytics::AggregatorService.new(aggregation: aggregation).execute
end
diff --git a/spec/support/helpers/database/database_helpers.rb b/spec/support/helpers/database/database_helpers.rb
index f3b2a2a6147..ecc42041e93 100644
--- a/spec/support/helpers/database/database_helpers.rb
+++ b/spec/support/helpers/database/database_helpers.rb
@@ -4,9 +4,7 @@ module Database
module DatabaseHelpers
# In order to directly work with views using factories,
# we can swapout the view for a table of identical structure.
- def swapout_view_for_table(view, connection: nil)
- connection ||= ActiveRecord::Base.connection
-
+ def swapout_view_for_table(view, connection:)
connection.execute(<<~SQL.squish)
CREATE TABLE #{view}_copy (LIKE #{view});
DROP VIEW #{view};
@@ -28,21 +26,20 @@ module Database
# with_statement_timeout(0.1) do
# model.select('pg_sleep(0.11)')
# end
- def with_statement_timeout(timeout)
+ def with_statement_timeout(timeout, connection:)
# Force a positive value and a minimum of 1ms for very small values.
timeout = (timeout * 1000).abs.ceil
raise ArgumentError, 'Using a timeout of `0` means to disable statement timeout.' if timeout == 0
- previous_timeout = ActiveRecord::Base.connection
- .exec_query('SHOW statement_timeout')[0].fetch('statement_timeout')
+ previous_timeout = connection.select_value('SHOW statement_timeout')
- set_statement_timeout("#{timeout}ms")
+ connection.execute(format(%(SET LOCAL statement_timeout = '%s'), timeout))
yield
ensure
begin
- set_statement_timeout(previous_timeout)
+ connection.execute(format(%(SET LOCAL statement_timeout = '%s'), previous_timeout))
rescue ActiveRecord::StatementInvalid
# After a transaction was canceled/aborted due to e.g. a statement
# timeout commands are ignored and will raise in PG::InFailedSqlTransaction.
@@ -50,22 +47,5 @@ module Database
# for the currrent transaction which will be closed anyway.
end
end
-
- # Set statement timeout for the current transaction.
- #
- # Note, that it does not restore the previous statement timeout.
- # Use `with_statement_timeout` instead.
- #
- # @param timeout - Statement timeout in seconds
- #
- # Example:
- #
- # set_statement_timeout(0.1)
- # model.select('pg_sleep(0.11)')
- def set_statement_timeout(timeout)
- ActiveRecord::Base.connection.execute(
- format(%(SET LOCAL statement_timeout = '%s'), timeout)
- )
- end
end
end
diff --git a/spec/support/helpers/database/table_schema_helpers.rb b/spec/support/helpers/database/table_schema_helpers.rb
index 472eaa45b4b..815c37e00e5 100644
--- a/spec/support/helpers/database/table_schema_helpers.rb
+++ b/spec/support/helpers/database/table_schema_helpers.rb
@@ -3,7 +3,9 @@
module Database
module TableSchemaHelpers
def connection
- ActiveRecord::Base.connection
+ # We use ActiveRecord::Base.connection here because this is mainly used for database migrations
+ # where we override the connection on ActiveRecord::Base.connection
+ ActiveRecord::Base.connection # rubocop:disable Database/MultipleDatabases
end
def expect_table_to_be_replaced(original_table:, replacement_table:, archived_table:)
diff --git a/spec/support/helpers/features/members_helpers.rb b/spec/support/helpers/features/members_helpers.rb
index bdadcb8af43..2d3f0902a3c 100644
--- a/spec/support/helpers/features/members_helpers.rb
+++ b/spec/support/helpers/features/members_helpers.rb
@@ -56,6 +56,22 @@ module Spec
click_button 'Search'
end
end
+
+ def user_action_dropdown
+ '[data-testid="user-action-dropdown"]'
+ end
+
+ def show_actions
+ within user_action_dropdown do
+ find('button').click
+ end
+ end
+
+ def show_actions_for_username(user)
+ within find_username_row(user) do
+ show_actions
+ end
+ end
end
end
end
diff --git a/spec/support/helpers/features/web_ide_spec_helpers.rb b/spec/support/helpers/features/web_ide_spec_helpers.rb
index 551749a43de..4793c9479fe 100644
--- a/spec/support/helpers/features/web_ide_spec_helpers.rb
+++ b/spec/support/helpers/features/web_ide_spec_helpers.rb
@@ -13,14 +13,18 @@
module WebIdeSpecHelpers
include Spec::Support::Helpers::Features::SourceEditorSpecHelpers
+ # Open the IDE from anywhere by first visiting the given project's page
def ide_visit(project)
visit project_path(project)
- wait_for_requests
+ ide_visit_from_link
+ end
- click_link('Web IDE')
+ # Open the IDE from the current page by clicking the Web IDE link
+ def ide_visit_from_link(link_sel = 'Web IDE')
+ new_tab = window_opened_by { click_link(link_sel) }
- wait_for_requests
+ switch_to_window new_tab
end
def ide_tree_body
diff --git a/spec/support/helpers/listbox_helpers.rb b/spec/support/helpers/listbox_helpers.rb
new file mode 100644
index 00000000000..5fcd05f31fb
--- /dev/null
+++ b/spec/support/helpers/listbox_helpers.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+module ListboxHelpers
+ def select_from_listbox(text, from:, exact_item_text: false)
+ click_button from
+ select_listbox_item(text, exact_text: exact_item_text)
+ end
+
+ def select_listbox_item(text, exact_text: false)
+ find('.gl-listbox-item[role="option"]', text: text, exact_text: exact_text).click
+ end
+
+ def expect_listbox_item(text)
+ expect(page).to have_css('.gl-listbox-item[role="option"]', text: text)
+ end
+
+ def expect_no_listbox_item(text)
+ expect(page).not_to have_css('.gl-listbox-item[role="option"]', text: text)
+ end
+
+ def expect_listbox_items(items)
+ expect(find_all('.gl-listbox-item[role="option"]').map(&:text)).to eq(items)
+ end
+end
diff --git a/spec/support/helpers/listbox_input_helper.rb b/spec/support/helpers/listbox_input_helper.rb
deleted file mode 100644
index ca7fbac5daa..00000000000
--- a/spec/support/helpers/listbox_input_helper.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-module ListboxInputHelper
- include WaitForRequests
-
- def listbox_input(value, from:)
- open_listbox_input(from) do
- find('[role="option"]', text: value).click
- end
- end
-
- def open_listbox_input(selector)
- page.within(selector) do
- page.find('button[aria-haspopup="listbox"]').click
- yield
- end
- end
-end
diff --git a/spec/support/helpers/login_helpers.rb b/spec/support/helpers/login_helpers.rb
index 44237b821c3..5fde80e6dc9 100644
--- a/spec/support/helpers/login_helpers.rb
+++ b/spec/support/helpers/login_helpers.rb
@@ -101,6 +101,8 @@ module LoginHelpers
fill_in "user_password", with: (password || user.password)
check 'user_remember_me' if remember
+ wait_for_all_requests
+
find('[data-testid="sign-in-button"]:enabled').click
if two_factor_auth
diff --git a/spec/support/helpers/migrations_helpers.rb b/spec/support/helpers/migrations_helpers.rb
index e1d28a807e3..6fc5904fc83 100644
--- a/spec/support/helpers/migrations_helpers.rb
+++ b/spec/support/helpers/migrations_helpers.rb
@@ -104,7 +104,7 @@ module MigrationsHelpers
# We stub this way because we can't stub on
# `current_application_settings` due to `method_missing` is
# depending on current_application_settings...
- allow(ActiveRecord::Base.connection)
+ allow(Gitlab::Database::Migration::V1_0::MigrationRecord.connection)
.to receive(:active?)
.and_return(false)
allow(Gitlab::Runtime)
@@ -158,10 +158,10 @@ module MigrationsHelpers
end
def migrate!
- open_transactions = ActiveRecord::Base.connection.open_transactions
+ open_transactions = Gitlab::Database::Migration::V1_0::MigrationRecord.connection.open_transactions
allow_next_instance_of(described_class) do |migration|
allow(migration).to receive(:transaction_open?) do
- ActiveRecord::Base.connection.open_transactions > open_transactions
+ Gitlab::Database::Migration::V1_0::MigrationRecord.connection.open_transactions > open_transactions
end
end
diff --git a/spec/support/helpers/navbar_structure_helper.rb b/spec/support/helpers/navbar_structure_helper.rb
index e1ed3ffacec..48c6e590e1b 100644
--- a/spec/support/helpers/navbar_structure_helper.rb
+++ b/spec/support/helpers/navbar_structure_helper.rb
@@ -91,9 +91,8 @@ module NavbarStructureHelper
new_nav_item: {
nav_item: _('Observability'),
nav_sub_items: [
- _('Dashboards'),
- _('Explore'),
- _('Manage Dashboards')
+ _('Explore telemetry data'),
+ _('Data sources')
]
}
)
diff --git a/spec/support/helpers/query_recorder.rb b/spec/support/helpers/query_recorder.rb
index dd124ed9c7f..5be9ba9ae1e 100644
--- a/spec/support/helpers/query_recorder.rb
+++ b/spec/support/helpers/query_recorder.rb
@@ -19,9 +19,7 @@ module ActiveRecord
def record(&block)
# force replacement of bind parameters to give tests the ability to check for ids
- ActiveRecord::Base.connection.unprepared_statement do
- ActiveSupport::Notifications.subscribed(method(:callback), 'sql.active_record', &block)
- end
+ ActiveSupport::Notifications.subscribed(method(:callback), 'sql.active_record', &block)
end
def show_backtrace(values, duration)
diff --git a/spec/support/helpers/usage_data_helpers.rb b/spec/support/helpers/usage_data_helpers.rb
index 78ceaf297a8..438f0d129b9 100644
--- a/spec/support/helpers/usage_data_helpers.rb
+++ b/spec/support/helpers/usage_data_helpers.rb
@@ -116,8 +116,9 @@ module UsageDataHelpers
).freeze
def stub_usage_data_connections
- allow(ActiveRecord::Base.connection).to receive(:transaction_open?).and_return(false)
- allow(::Ci::ApplicationRecord.connection).to receive(:transaction_open?).and_return(false) if ::Ci::ApplicationRecord.connection_class?
+ Gitlab::Database.database_base_models_with_gitlab_shared.each_value do |base_model|
+ allow(base_model.connection).to receive(:transaction_open?).and_return(false)
+ end
allow(Gitlab::Prometheus::Internal).to receive(:prometheus_enabled?).and_return(false)
end
diff --git a/spec/support/matchers/be_boolean.rb b/spec/support/matchers/be_boolean.rb
new file mode 100644
index 00000000000..b8c2c385504
--- /dev/null
+++ b/spec/support/matchers/be_boolean.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+# Assert that this value is a boolean, i.e. true or false
+#
+# ```
+# expect(value).to be_boolean
+# ```
+RSpec::Matchers.define :be_boolean do
+ match { |value| value.in? [true, false] }
+end
diff --git a/spec/support/matchers/exceed_query_limit.rb b/spec/support/matchers/exceed_query_limit.rb
index a5a017828b3..4b08c13945c 100644
--- a/spec/support/matchers/exceed_query_limit.rb
+++ b/spec/support/matchers/exceed_query_limit.rb
@@ -380,3 +380,32 @@ RSpec::Matchers.define :exceed_query_limit do |expected|
failure_message
end
end
+
+RSpec::Matchers.define :match_query_count do |expected|
+ supports_block_expectations
+
+ include ExceedQueryLimitHelpers
+
+ def verify_count(&block)
+ @subject_block = block
+ actual_count == maximum
+ end
+
+ def failure_message
+ threshold_message = threshold > 0 ? " (+#{threshold})" : ''
+ counts = "#{expected_count}#{threshold_message}"
+ "Expected exactly #{counts} queries, got #{actual_count}:\n\n#{log_message}"
+ end
+
+ def skip_cached
+ false
+ end
+
+ match do |block|
+ verify_count(&block)
+ end
+
+ failure_message_when_negated do |actual|
+ failure_message
+ end
+end
diff --git a/spec/support/redis/redis_helpers.rb b/spec/support/redis/redis_helpers.rb
index 34ac69236ee..2c5ceb2f09e 100644
--- a/spec/support/redis/redis_helpers.rb
+++ b/spec/support/redis/redis_helpers.rb
@@ -6,11 +6,4 @@ module RedisHelpers
instance_class.with(&:flushdb)
end
end
-
- # Usage: reset cached instance config
- def redis_clear_raw_config!(instance_class)
- instance_class.remove_instance_variable(:@_raw_config)
- rescue NameError
- # raised if @_raw_config was not set; ignore
- end
end
diff --git a/spec/support/redis/redis_new_instance_shared_examples.rb b/spec/support/redis/redis_new_instance_shared_examples.rb
index 943fe0f11ba..0f2de78b2cb 100644
--- a/spec/support/redis/redis_new_instance_shared_examples.rb
+++ b/spec/support/redis/redis_new_instance_shared_examples.rb
@@ -3,27 +3,22 @@
require 'spec_helper'
RSpec.shared_examples "redis_new_instance_shared_examples" do |name, fallback_class|
+ include TmpdirHelper
+
let(:instance_specific_config_file) { "config/redis.#{name}.yml" }
let(:environment_config_file_name) { "GITLAB_REDIS_#{name.upcase}_CONFIG_FILE" }
let(:fallback_config_file) { nil }
+ let(:rails_root) { mktmpdir }
before do
- redis_clear_raw_config!(fallback_class)
-
allow(fallback_class).to receive(:config_file_name).and_return(fallback_config_file)
end
- after do
- redis_clear_raw_config!(fallback_class)
- end
-
it_behaves_like "redis_shared_examples"
describe '.config_file_name' do
subject { described_class.config_file_name }
- let(:rails_root) { Dir.mktmpdir('redis_shared_examples') }
-
before do
# Undo top-level stub of config_file_name because we are testing that method now.
allow(described_class).to receive(:config_file_name).and_call_original
@@ -32,10 +27,6 @@ RSpec.shared_examples "redis_new_instance_shared_examples" do |name, fallback_cl
FileUtils.mkdir_p(File.join(rails_root, 'config'))
end
- after do
- FileUtils.rm_rf(rails_root)
- end
-
context 'when there is only a resque.yml' do
before do
FileUtils.touch(File.join(rails_root, 'config/resque.yml'))
@@ -58,4 +49,49 @@ RSpec.shared_examples "redis_new_instance_shared_examples" do |name, fallback_cl
end
end
end
+
+ describe '#fetch_config' do
+ context 'when redis.yml exists' do
+ subject { described_class.new('test').send(:fetch_config) }
+
+ before do
+ allow(described_class).to receive(:config_file_name).and_call_original
+ allow(described_class).to receive(:redis_yml_path).and_call_original
+ allow(described_class).to receive(:rails_root).and_return(rails_root)
+ FileUtils.mkdir_p(File.join(rails_root, 'config'))
+ end
+
+ context 'when the fallback has a redis.yml entry' do
+ before do
+ File.write(File.join(rails_root, 'config/redis.yml'), {
+ 'test' => {
+ described_class.config_fallback.store_name.underscore => { 'fallback redis.yml' => 123 }
+ }
+ }.to_json)
+ end
+
+ it { expect(subject).to eq({ 'fallback redis.yml' => 123 }) }
+
+ context 'and an instance config file exists' do
+ before do
+ File.write(File.join(rails_root, instance_specific_config_file), {
+ 'test' => { 'instance specific file' => 456 }
+ }.to_json)
+ end
+
+ it { expect(subject).to eq({ 'instance specific file' => 456 }) }
+
+ context 'and the instance has a redis.yml entry' do
+ before do
+ File.write(File.join(rails_root, 'config/redis.yml'), {
+ 'test' => { name => { 'instance redis.yml' => 789 } }
+ }.to_json)
+ end
+
+ it { expect(subject).to eq({ 'instance redis.yml' => 789 }) }
+ end
+ end
+ end
+ end
+ end
end
diff --git a/spec/support/redis/redis_shared_examples.rb b/spec/support/redis/redis_shared_examples.rb
index 0368fd63357..43c118a362d 100644
--- a/spec/support/redis/redis_shared_examples.rb
+++ b/spec/support/redis/redis_shared_examples.rb
@@ -2,6 +2,7 @@
RSpec.shared_examples "redis_shared_examples" do
include StubENV
+ include TmpdirHelper
let(:test_redis_url) { "redis://redishost:#{redis_port}" }
let(:test_cluster_config) { { cluster: [{ host: "redis://redishost", port: redis_port }] } }
@@ -18,15 +19,11 @@ RSpec.shared_examples "redis_shared_examples" do
let(:sentinel_port) { 26379 }
let(:config_with_environment_variable_inside) { "spec/fixtures/config/redis_config_with_env.yml" }
let(:config_env_variable_url) { "TEST_GITLAB_REDIS_URL" }
- let(:rails_root) { Dir.mktmpdir('redis_shared_examples') }
+ let(:rails_root) { mktmpdir }
before do
allow(described_class).to receive(:config_file_name).and_return(Rails.root.join(config_file_name).to_s)
- redis_clear_raw_config!(described_class)
- end
-
- after do
- redis_clear_raw_config!(described_class)
+ allow(described_class).to receive(:redis_yml_path).and_return('/dev/null')
end
describe '.config_file_name' do
@@ -40,10 +37,6 @@ RSpec.shared_examples "redis_shared_examples" do
FileUtils.mkdir_p(File.join(rails_root, 'config'))
end
- after do
- FileUtils.rm_rf(rails_root)
- end
-
context 'when there is no config file anywhere' do
it { expect(subject).to be_nil }
@@ -250,26 +243,6 @@ RSpec.shared_examples "redis_shared_examples" do
end
end
- describe '._raw_config' do
- subject { described_class._raw_config }
-
- let(:config_file_name) { '/var/empty/doesnotexist' }
-
- it 'is frozen' do
- expect(subject).to be_frozen
- end
-
- it 'returns false when the file does not exist' do
- expect(subject).to eq(false)
- end
-
- it "returns false when the filename can't be determined" do
- expect(described_class).to receive(:config_file_name).and_return(nil)
-
- expect(subject).to eq(false)
- end
- end
-
describe '.with' do
let(:config_file_name) { config_old_format_socket }
@@ -313,10 +286,6 @@ RSpec.shared_examples "redis_shared_examples" do
allow(described_class).to receive(:rails_root).and_return(rails_root)
end
- after do
- FileUtils.rm_rf(rails_root)
- end
-
it 'can run an empty block' do
expect { described_class.with { nil } }.not_to raise_error
end
@@ -408,9 +377,7 @@ RSpec.shared_examples "redis_shared_examples" do
context 'when sentinels are not defined' do
let(:config_file_name) { config_old_format_host }
- it 'returns false' do
- is_expected.to be_falsey
- end
+ it { expect(subject).to eq(nil) }
end
context 'when cluster is defined' do
@@ -435,22 +402,39 @@ RSpec.shared_examples "redis_shared_examples" do
end
describe '#fetch_config' do
- it 'returns false when no config file is present' do
- allow(described_class).to receive(:_raw_config) { false }
+ it 'raises an exception when the config file contains invalid yaml' do
+ Tempfile.open('bad.yml') do |file|
+ file.write('{"not":"yaml"')
+ file.flush
+ allow(described_class).to receive(:config_file_name) { file.path }
- expect(subject.send(:fetch_config)).to eq false
+ expect { subject.send(:fetch_config) }.to raise_error(Psych::SyntaxError)
+ end
end
- it 'returns false when config file is present but has invalid YAML' do
- allow(described_class).to receive(:_raw_config) { "# development: true" }
+ it 'has a value for the legacy default URL' do
+ allow(subject).to receive(:fetch_config) { nil }
- expect(subject.send(:fetch_config)).to eq false
+ expect(subject.send(:raw_config_hash)).to include(url: a_string_matching(%r{\Aredis://localhost:638[012]\Z}))
end
- it 'has a value for the legacy default URL' do
- allow(subject).to receive(:fetch_config) { false }
+ context 'when redis.yml exists' do
+ subject { described_class.new('test').send(:fetch_config) }
- expect(subject.send(:raw_config_hash)).to include(url: a_string_matching(%r{\Aredis://localhost:638[012]\Z}))
+ before do
+ allow(described_class).to receive(:config_file_name).and_call_original
+ allow(described_class).to receive(:redis_yml_path).and_call_original
+ allow(described_class).to receive(:rails_root).and_return(rails_root)
+ FileUtils.mkdir_p(File.join(rails_root, 'config'))
+ end
+
+ it 'uses config/redis.yml' do
+ File.write(File.join(rails_root, 'config/redis.yml'), {
+ 'test' => { described_class.store_name.underscore => { 'foobar' => 123 } }
+ }.to_json)
+
+ expect(subject).to eq({ 'foobar' => 123 })
+ end
end
end
diff --git a/spec/support/rspec_order_todo.yml b/spec/support/rspec_order_todo.yml
index 489ed89c048..2f3f0feb87e 100644
--- a/spec/support/rspec_order_todo.yml
+++ b/spec/support/rspec_order_todo.yml
@@ -30,11 +30,6 @@
- './ee/spec/controllers/admin/runners_controller_spec.rb'
- './ee/spec/controllers/admin/users_controller_spec.rb'
- './ee/spec/controllers/autocomplete_controller_spec.rb'
-- './ee/spec/controllers/boards/issues_controller_spec.rb'
-- './ee/spec/controllers/boards/lists_controller_spec.rb'
-- './ee/spec/controllers/boards/milestones_controller_spec.rb'
-- './ee/spec/controllers/boards/users_controller_spec.rb'
-- './ee/spec/controllers/concerns/boards_responses_spec.rb'
- './ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb'
- './ee/spec/controllers/concerns/geo_instrumentation_spec.rb'
- './ee/spec/controllers/concerns/gitlab_subscriptions/seat_count_alert_spec.rb'
@@ -107,7 +102,6 @@
- './ee/spec/controllers/groups/security/vulnerabilities_controller_spec.rb'
- './ee/spec/controllers/groups/sso_controller_spec.rb'
- './ee/spec/controllers/groups/todos_controller_spec.rb'
-- './ee/spec/controllers/groups/usage_quotas_controller_spec.rb'
- './ee/spec/controllers/groups/wikis_controller_spec.rb'
- './ee/spec/controllers/ldap/omniauth_callbacks_controller_spec.rb'
- './ee/spec/controllers/oauth/applications_controller_spec.rb'
@@ -141,7 +135,6 @@
- './ee/spec/controllers/projects/issues_controller_spec.rb'
- './ee/spec/controllers/projects/iteration_cadences_controller_spec.rb'
- './ee/spec/controllers/projects/iterations_controller_spec.rb'
-- './ee/spec/controllers/projects/legacy_pipelines_controller_spec.rb'
- './ee/spec/controllers/projects/licenses_controller_spec.rb'
- './ee/spec/controllers/projects/merge_requests_controller_spec.rb'
- './ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb'
@@ -171,11 +164,8 @@
- './ee/spec/controllers/projects/subscriptions_controller_spec.rb'
- './ee/spec/controllers/projects/vulnerability_feedback_controller_spec.rb'
- './ee/spec/controllers/registrations/company_controller_spec.rb'
-- './ee/spec/controllers/registrations/groups_controller_spec.rb'
- './ee/spec/controllers/registrations/groups_projects_controller_spec.rb'
-- './ee/spec/controllers/registrations/projects_controller_spec.rb'
- './ee/spec/controllers/registrations/verification_controller_spec.rb'
-- './ee/spec/controllers/registrations/welcome_controller_spec.rb'
- './ee/spec/controllers/repositories/git_http_controller_spec.rb'
- './ee/spec/controllers/security/dashboard_controller_spec.rb'
- './ee/spec/controllers/security/projects_controller_spec.rb'
@@ -210,7 +200,6 @@
- './ee/spec/elastic/migrate/20220512150000_pause_indexing_for_unsupported_es_versions_spec.rb'
- './ee/spec/elastic/migrate/20220613120500_migrate_commits_to_separate_index_spec.rb'
- './ee/spec/elastic/migrate/20220713103500_delete_commits_from_original_index_spec.rb'
-- './ee/spec/factories/lfs_object_spec.rb'
- './ee/spec/features/account_recovery_regular_check_spec.rb'
- './ee/spec/features/admin/admin_credentials_inventory_spec.rb'
- './ee/spec/features/admin/admin_dashboard_spec.rb'
@@ -260,7 +249,6 @@
- './ee/spec/features/ci_shared_runner_settings_spec.rb'
- './ee/spec/features/ci_shared_runner_warnings_spec.rb'
- './ee/spec/features/clusters/cluster_detail_page_spec.rb'
-- './ee/spec/features/contextual_sidebar_spec.rb'
- './ee/spec/features/dashboards/activity_spec.rb'
- './ee/spec/features/dashboards/groups_spec.rb'
- './ee/spec/features/dashboards/issues_spec.rb'
@@ -312,8 +300,6 @@
- './ee/spec/features/groups/hooks/user_views_hooks_spec.rb'
- './ee/spec/features/groups/insights_spec.rb'
- './ee/spec/features/groups/issues_spec.rb'
-- './ee/spec/features/groups/iterations/iterations_list_spec.rb'
-- './ee/spec/features/groups/iteration_spec.rb'
- './ee/spec/features/groups/iterations/user_creates_iteration_in_cadence_spec.rb'
- './ee/spec/features/groups/iterations/user_edits_iteration_cadence_spec.rb'
- './ee/spec/features/groups/iterations/user_edits_iteration_spec.rb'
@@ -333,7 +319,6 @@
- './ee/spec/features/groups/saml_group_links_spec.rb'
- './ee/spec/features/groups/saml_providers_spec.rb'
- './ee/spec/features/groups/scim_token_spec.rb'
-- './ee/spec/features/groups/seat_usage/seat_usage_spec.rb'
- './ee/spec/features/groups/security/compliance_dashboards_spec.rb'
- './ee/spec/features/groups/settings/ci_cd_spec.rb'
- './ee/spec/features/groups/settings/protected_environments_spec.rb'
@@ -342,10 +327,8 @@
- './ee/spec/features/groups/settings/user_searches_in_settings_spec.rb'
- './ee/spec/features/groups_spec.rb'
- './ee/spec/features/groups/sso_spec.rb'
-- './ee/spec/features/groups/usage_quotas_spec.rb'
- './ee/spec/features/groups/wikis_spec.rb'
- './ee/spec/features/groups/wiki/user_views_wiki_empty_spec.rb'
-- './ee/spec/features/ide/user_commits_changes_spec.rb'
- './ee/spec/features/ide/user_opens_ide_spec.rb'
- './ee/spec/features/integrations/jira/jira_issues_list_spec.rb'
- './ee/spec/features/invites_spec.rb'
@@ -432,7 +415,6 @@
- './ee/spec/features/projects/issues/user_creates_issue_spec.rb'
- './ee/spec/features/projects/issues/viewing_relocated_issues_spec.rb'
- './ee/spec/features/projects/iterations/iteration_cadences_list_spec.rb'
-- './ee/spec/features/projects/iterations/iterations_list_spec.rb'
- './ee/spec/features/projects/iterations/user_views_iteration_spec.rb'
- './ee/spec/features/projects/jobs/blocked_deployment_job_page_spec.rb'
- './ee/spec/features/projects/jobs_spec.rb'
@@ -450,7 +432,6 @@
- './ee/spec/features/projects/new_project_from_template_spec.rb'
- './ee/spec/features/projects/new_project_spec.rb'
- './ee/spec/features/projects/path_locks_spec.rb'
-- './ee/spec/features/projects/pipelines/legacy_pipeline_spec.rb'
- './ee/spec/features/projects/pipelines/pipeline_csp_spec.rb'
- './ee/spec/features/projects/pipelines/pipeline_spec.rb'
- './ee/spec/features/projects/pipelines/pipelines_spec.rb'
@@ -479,7 +460,6 @@
- './ee/spec/features/projects/settings/user_manages_approval_settings_spec.rb'
- './ee/spec/features/projects/settings/user_manages_issues_template_spec.rb'
- './ee/spec/features/projects/settings/user_manages_members_spec.rb'
-- './ee/spec/features/projects/settings/user_manages_merge_pipelines_spec.rb'
- './ee/spec/features/projects/settings/user_manages_merge_requests_template_spec.rb'
- './ee/spec/features/projects/settings/user_manages_merge_trains_spec.rb'
- './ee/spec/features/projects/show/developer_views_empty_project_instructions_spec.rb'
@@ -494,9 +474,6 @@
- './ee/spec/features/read_only_spec.rb'
- './ee/spec/features/registrations/combined_registration_spec.rb'
- './ee/spec/features/registrations/one_trust_spec.rb'
-- './ee/spec/features/registrations/saas_user_registration_spec.rb'
-- './ee/spec/features/registrations/trial_during_signup_flow_spec.rb'
-- './ee/spec/features/registrations/user_sees_new_onboarding_flow_spec.rb'
- './ee/spec/features/registrations/welcome_spec.rb'
- './ee/spec/features/search/elastic/global_search_spec.rb'
- './ee/spec/features/search/elastic/group_search_spec.rb'
@@ -595,7 +572,6 @@
- './ee/spec/finders/productivity_analytics_finder_spec.rb'
- './ee/spec/finders/projects/integrations/jira/by_ids_finder_spec.rb'
- './ee/spec/finders/projects/integrations/jira/issues_finder_spec.rb'
-- './ee/spec/finders/requirements_management/requirements_finder_spec.rb'
- './ee/spec/finders/scim_finder_spec.rb'
- './ee/spec/finders/security/findings_finder_spec.rb'
- './ee/spec/finders/security/pipeline_vulnerabilities_finder_spec.rb'
@@ -641,7 +617,6 @@
- './ee/spec/graphql/ee/mutations/concerns/mutations/resolves_issuable_spec.rb'
- './ee/spec/graphql/ee/resolvers/board_list_issues_resolver_spec.rb'
- './ee/spec/graphql/ee/resolvers/board_lists_resolver_spec.rb'
-- './ee/spec/graphql/ee/resolvers/issues_resolver_spec.rb'
- './ee/spec/graphql/ee/resolvers/namespace_projects_resolver_spec.rb'
- './ee/spec/graphql/ee/types/alert_management/http_integration_type_spec.rb'
- './ee/spec/graphql/ee/types/board_list_type_spec.rb'
@@ -718,7 +693,6 @@
- './ee/spec/graphql/mutations/requirements_management/update_requirement_spec.rb'
- './ee/spec/graphql/mutations/security/ci_configuration/configure_container_scanning_spec.rb'
- './ee/spec/graphql/mutations/security/ci_configuration/configure_dependency_scanning_spec.rb'
-- './ee/spec/graphql/mutations/security_finding/dismiss_spec.rb'
- './ee/spec/graphql/mutations/security_policy/assign_security_policy_project_spec.rb'
- './ee/spec/graphql/mutations/security_policy/commit_scan_execution_policy_spec.rb'
- './ee/spec/graphql/mutations/security_policy/create_security_policy_project_spec.rb'
@@ -958,7 +932,6 @@
- './ee/spec/graphql/types/vulnerable_projects_by_grade_type_spec.rb'
- './ee/spec/graphql/types/work_items/type_spec.rb'
- './ee/spec/graphql/types/work_items/widget_interface_spec.rb'
-- './ee/spec/graphql/types/work_items/widgets/verification_status_type_spec.rb'
- './ee/spec/helpers/admin/emails_helper_spec.rb'
- './ee/spec/helpers/admin/ip_restriction_helper_spec.rb'
- './ee/spec/helpers/admin/repo_size_limit_helper_spec.rb'
@@ -1020,7 +993,6 @@
- './ee/spec/helpers/ee/trial_registration_helper_spec.rb'
- './ee/spec/helpers/ee/users/callouts_helper_spec.rb'
- './ee/spec/helpers/ee/version_check_helper_spec.rb'
-- './ee/spec/helpers/ee/welcome_helper_spec.rb'
- './ee/spec/helpers/ee/wiki_helper_spec.rb'
- './ee/spec/helpers/epics_helper_spec.rb'
- './ee/spec/helpers/gitlab_subscriptions/upcoming_reconciliation_helper_spec.rb'
@@ -1132,13 +1104,6 @@
- './ee/spec/lib/ee/api/helpers/scim_pagination_spec.rb'
- './ee/spec/lib/ee/api/helpers_spec.rb'
- './ee/spec/lib/ee/api/helpers/variables_helpers_spec.rb'
-- './ee/spec/lib/ee/audit/compliance_framework_changes_auditor_spec.rb'
-- './ee/spec/lib/ee/audit/group_changes_auditor_spec.rb'
-- './ee/spec/lib/ee/audit/project_changes_auditor_spec.rb'
-- './ee/spec/lib/ee/audit/project_ci_cd_setting_changes_auditor_spec.rb'
-- './ee/spec/lib/ee/audit/project_feature_changes_auditor_spec.rb'
-- './ee/spec/lib/ee/audit/project_setting_changes_auditor_spec.rb'
-- './ee/spec/lib/ee/audit/protected_branches_changes_auditor_spec.rb'
- './ee/spec/lib/ee/backup/repositories_spec.rb'
- './ee/spec/lib/ee/banzai/filter/sanitization_filter_spec.rb'
- './ee/spec/lib/ee/bulk_imports/groups/stage_spec.rb'
@@ -1170,7 +1135,6 @@
- './ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_check_progress_spec.rb'
- './ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch_spec.rb'
- './ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb'
-- './ee/spec/lib/ee/gitlab/background_migration/migrate_job_artifact_registry_to_ssf_spec.rb'
- './ee/spec/lib/ee/gitlab/background_migration/migrate_shared_vulnerability_scanners_spec.rb'
- './ee/spec/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids_spec.rb'
- './ee/spec/lib/ee/gitlab/background_migration/populate_namespace_statistics_spec.rb'
@@ -1197,7 +1161,6 @@
- './ee/spec/lib/ee/gitlab/ci/pipeline/chain/validate/external_spec.rb'
- './ee/spec/lib/ee/gitlab/ci/pipeline/chain/validate/security_orchestration_policy_spec.rb'
- './ee/spec/lib/ee/gitlab/ci/pipeline/quota/activity_spec.rb'
-- './ee/spec/lib/ee/gitlab/ci/pipeline/quota/job_activity_spec.rb'
- './ee/spec/lib/ee/gitlab/ci/pipeline/quota/size_spec.rb'
- './ee/spec/lib/ee/gitlab/ci/reports/security/reports_spec.rb'
- './ee/spec/lib/ee/gitlab/ci/status/build/manual_spec.rb'
@@ -1219,8 +1182,6 @@
- './ee/spec/lib/ee/gitlab/hook_data/issue_builder_spec.rb'
- './ee/spec/lib/ee/gitlab/hook_data/user_builder_spec.rb'
- './ee/spec/lib/ee/gitlab/import_export/after_export_strategies/custom_template_export_import_strategy_spec.rb'
-- './ee/spec/lib/ee/gitlab/import_export/group/legacy_tree_restorer_spec.rb'
-- './ee/spec/lib/ee/gitlab/import_export/group/legacy_tree_saver_spec.rb'
- './ee/spec/lib/ee/gitlab/import_export/group/tree_restorer_spec.rb'
- './ee/spec/lib/ee/gitlab/import_export/group/tree_saver_spec.rb'
- './ee/spec/lib/ee/gitlab/import_export/project/tree_restorer_spec.rb'
@@ -1241,11 +1202,9 @@
- './ee/spec/lib/ee/gitlab/repo_path_spec.rb'
- './ee/spec/lib/ee/gitlab/repository_size_checker_spec.rb'
- './ee/spec/lib/ee/gitlab/scim/attribute_transform_spec.rb'
-- './ee/spec/lib/ee/gitlab/scim/deprovision_service_spec.rb'
- './ee/spec/lib/ee/gitlab/scim/filter_parser_spec.rb'
- './ee/spec/lib/ee/gitlab/scim/params_parser_spec.rb'
- './ee/spec/lib/ee/gitlab/scim/provisioning_service_spec.rb'
-- './ee/spec/lib/ee/gitlab/scim/reprovision_service_spec.rb'
- './ee/spec/lib/ee/gitlab/scim/value_parser_spec.rb'
- './ee/spec/lib/ee/gitlab/search_results_spec.rb'
- './ee/spec/lib/ee/gitlab/security/scan_configuration_spec.rb'
@@ -1385,13 +1344,11 @@
- './ee/spec/lib/gitlab/ci/parsers/security/dast_spec.rb'
- './ee/spec/lib/gitlab/ci/parsers/security/dependency_list_spec.rb'
- './ee/spec/lib/gitlab/ci/parsers/security/dependency_scanning_spec.rb'
-- './ee/spec/lib/gitlab/ci/parsers/security/formatters/dast_spec.rb'
- './ee/spec/lib/gitlab/ci/parsers/security/formatters/dependency_list_spec.rb'
- './ee/spec/lib/gitlab/ci/parsers/security/validators/default_branch_image_validator_spec.rb'
- './ee/spec/lib/gitlab/ci/pipeline/chain/config/content_spec.rb'
- './ee/spec/lib/gitlab/ci/pipeline/chain/create_cross_database_associations_spec.rb'
- './ee/spec/lib/gitlab/ci/pipeline/chain/limit/activity_spec.rb'
-- './ee/spec/lib/gitlab/ci/pipeline/chain/limit/job_activity_spec.rb'
- './ee/spec/lib/gitlab/ci/pipeline/chain/limit/size_spec.rb'
- './ee/spec/lib/gitlab/ci/reports/coverage_fuzzing/report_spec.rb'
- './ee/spec/lib/gitlab/ci/reports/dependency_list/dependency_spec.rb'
@@ -1533,7 +1490,6 @@
- './ee/spec/lib/gitlab/insights/reducers/base_reducer_spec.rb'
- './ee/spec/lib/gitlab/insights/reducers/count_per_label_reducer_spec.rb'
- './ee/spec/lib/gitlab/insights/reducers/count_per_period_reducer_spec.rb'
-- './ee/spec/lib/gitlab/insights/reducers/dora_reducer_spec.rb'
- './ee/spec/lib/gitlab/insights/reducers/label_count_per_period_reducer_spec.rb'
- './ee/spec/lib/gitlab/insights/serializers/chartjs/bar_serializer_spec.rb'
- './ee/spec/lib/gitlab/insights/serializers/chartjs/bar_time_series_serializer_spec.rb'
@@ -1552,7 +1508,6 @@
- './ee/spec/lib/gitlab/middleware/ip_restrictor_spec.rb'
- './ee/spec/lib/gitlab/mirror_spec.rb'
- './ee/spec/lib/gitlab/object_hierarchy_spec.rb'
-- './ee/spec/lib/gitlab/pagination_delegate_spec.rb'
- './ee/spec/lib/gitlab/pagination/keyset/simple_order_builder_spec.rb'
- './ee/spec/lib/gitlab/patch/database_config_spec.rb'
- './ee/spec/lib/gitlab/patch/draw_route_spec.rb'
@@ -1590,7 +1545,6 @@
- './ee/spec/lib/gitlab/usage_data_counters/epic_activity_unique_counter_spec.rb'
- './ee/spec/lib/gitlab/usage_data_counters/licenses_list_spec.rb'
- './ee/spec/lib/gitlab/usage_data_metrics_spec.rb'
-- './ee/spec/lib/gitlab/usage/metrics/aggregates/aggregate_spec.rb'
- './ee/spec/lib/gitlab/usage/metrics/instrumentations/advanced_search/build_type_metric_spec.rb'
- './ee/spec/lib/gitlab/usage/metrics/instrumentations/advanced_search/distribution_metric_spec.rb'
- './ee/spec/lib/gitlab/usage/metrics/instrumentations/advanced_search/lucene_version_metric_spec.rb'
@@ -1670,12 +1624,10 @@
- './ee/spec/migrations/add_non_null_constraint_for_escalation_rule_on_pending_alert_escalations_spec.rb'
- './ee/spec/migrations/async_build_trace_expire_at_index_spec.rb'
- './ee/spec/migrations/backfill_delayed_group_deletion_spec.rb'
-- './ee/spec/migrations/backfill_namespace_statistics_with_wiki_size_spec.rb'
- './ee/spec/migrations/drop_invalid_remediations_spec.rb'
- './ee/spec/migrations/geo/fix_state_column_in_file_registry_spec.rb'
- './ee/spec/migrations/geo/fix_state_column_in_lfs_object_registry_spec.rb'
- './ee/spec/migrations/geo/migrate_ci_job_artifacts_to_separate_registry_spec.rb'
-- './ee/spec/migrations/geo/migrate_job_artifact_registry_spec.rb'
- './ee/spec/migrations/geo/migrate_lfs_objects_to_separate_registry_spec.rb'
- './ee/spec/migrations/geo/set_resync_flag_for_retried_projects_spec.rb'
- './ee/spec/migrations/remove_schedule_and_status_null_constraints_from_pending_escalations_alert_spec.rb'
@@ -1683,14 +1635,11 @@
- './ee/spec/migrations/schedule_populate_test_reports_issue_id_spec.rb'
- './ee/spec/migrations/schedule_requirements_migration_spec.rb'
- './ee/spec/migrations/schedule_trace_expiry_removal_spec.rb'
-- './ee/spec/migrations/update_gitlab_subscriptions_start_at_post_eoa_spec.rb'
- './ee/spec/migrations/update_vulnerability_occurrences_location_spec.rb'
- './ee/spec/models/alert_management/alert_payload_field_spec.rb'
- './ee/spec/models/allowed_email_domain_spec.rb'
- './ee/spec/models/analytics/cycle_analytics/aggregation_context_spec.rb'
- './ee/spec/models/analytics/cycle_analytics/group_level_spec.rb'
-- './ee/spec/models/analytics/cycle_analytics/group_stage_spec.rb'
-- './ee/spec/models/analytics/cycle_analytics/group_value_stream_spec.rb'
- './ee/spec/models/analytics/cycle_analytics/project_stage_spec.rb'
- './ee/spec/models/analytics/cycle_analytics/runtime_limiter_spec.rb'
- './ee/spec/models/analytics/devops_adoption/enabled_namespace_spec.rb'
@@ -1698,7 +1647,6 @@
- './ee/spec/models/analytics/issues_analytics_spec.rb'
- './ee/spec/models/analytics/language_trend/repository_language_spec.rb'
- './ee/spec/models/application_setting_spec.rb'
-- './ee/spec/models/approvable_spec.rb'
- './ee/spec/models/approval_merge_request_rule_spec.rb'
- './ee/spec/models/approval_project_rule_spec.rb'
- './ee/spec/models/approvals/scan_finding_wrapped_rule_set_spec.rb'
@@ -1730,7 +1678,6 @@
- './ee/spec/models/ci/daily_build_group_report_result_spec.rb'
- './ee/spec/models/ci/minutes/additional_pack_spec.rb'
- './ee/spec/models/ci/minutes/context_spec.rb'
-- './ee/spec/models/ci/minutes/limit_spec.rb'
- './ee/spec/models/ci/minutes/namespace_monthly_usage_spec.rb'
- './ee/spec/models/ci/minutes/notification_spec.rb'
- './ee/spec/models/ci/minutes/project_monthly_usage_spec.rb'
@@ -1942,7 +1889,6 @@
- './ee/spec/models/namespace_limit_spec.rb'
- './ee/spec/models/namespace_setting_spec.rb'
- './ee/spec/models/namespaces/free_user_cap_spec.rb'
-- './ee/spec/models/namespaces/free_user_cap/standard_spec.rb'
- './ee/spec/models/namespaces/storage/root_excess_size_spec.rb'
- './ee/spec/models/namespaces/storage/root_size_spec.rb'
- './ee/spec/models/note_spec.rb'
@@ -1963,9 +1909,7 @@
- './ee/spec/models/project_team_spec.rb'
- './ee/spec/models/protected_branch/required_code_owners_section_spec.rb'
- './ee/spec/models/protected_branch/unprotect_access_level_spec.rb'
-- './ee/spec/models/protected_environment/deploy_access_level_spec.rb'
- './ee/spec/models/protected_environments/approval_rule_spec.rb'
-- './ee/spec/models/protected_environments/approval_summary_spec.rb'
- './ee/spec/models/protected_environment_spec.rb'
- './ee/spec/models/push_rule_spec.rb'
- './ee/spec/models/release_highlight_spec.rb'
@@ -2030,7 +1974,6 @@
- './ee/spec/models/vulnerability_user_mention_spec.rb'
- './ee/spec/models/weight_note_spec.rb'
- './ee/spec/models/work_item_spec.rb'
-- './ee/spec/models/work_items/widgets/verification_status_spec.rb'
- './ee/spec/policies/approval_merge_request_rule_policy_spec.rb'
- './ee/spec/policies/approval_project_rule_policy_spec.rb'
- './ee/spec/policies/approval_state_policy_spec.rb'
@@ -2265,7 +2208,6 @@
- './ee/spec/requests/api/graphql/mutations/requirements_management/create_requirement_spec.rb'
- './ee/spec/requests/api/graphql/mutations/requirements_management/export_requirements_spec.rb'
- './ee/spec/requests/api/graphql/mutations/requirements_management/update_requirement_spec.rb'
-- './ee/spec/requests/api/graphql/mutations/security_finding/create_issue_spec.rb'
- './ee/spec/requests/api/graphql/mutations/security_policy/assign_security_policy_project_spec.rb'
- './ee/spec/requests/api/graphql/mutations/security_policy/commit_scan_execution_policy_spec.rb'
- './ee/spec/requests/api/graphql/mutations/security_policy/create_security_policy_project_spec.rb'
@@ -2337,7 +2279,6 @@
- './ee/spec/requests/api/ldap_spec.rb'
- './ee/spec/requests/api/license_spec.rb'
- './ee/spec/requests/api/managed_licenses_spec.rb'
-- './ee/spec/requests/api/markdown_golden_master_spec.rb'
- './ee/spec/requests/api/members_spec.rb'
- './ee/spec/requests/api/merge_request_approval_rules_spec.rb'
- './ee/spec/requests/api/merge_request_approval_settings_spec.rb'
@@ -2367,7 +2308,6 @@
- './ee/spec/requests/api/resource_label_events_spec.rb'
- './ee/spec/requests/api/resource_weight_events_spec.rb'
- './ee/spec/requests/api/saml_group_links_spec.rb'
-- './ee/spec/requests/api/scim_spec.rb'
- './ee/spec/requests/api/search_spec.rb'
- './ee/spec/requests/api/settings_spec.rb'
- './ee/spec/requests/api/status_checks_spec.rb'
@@ -2449,14 +2389,12 @@
- './ee/spec/routing/user_routing_spec.rb'
- './ee/spec/routing/webhook_routes_spec.rb'
- './ee/spec/serializers/analytics/cycle_analytics/event_entity_spec.rb'
-- './ee/spec/serializers/analytics/cycle_analytics/stage_entity_spec.rb'
- './ee/spec/serializers/analytics/cycle_analytics/value_stream_errors_serializer_spec.rb'
- './ee/spec/serializers/audit_event_entity_spec.rb'
- './ee/spec/serializers/audit_event_serializer_spec.rb'
- './ee/spec/serializers/autocomplete/group_entity_spec.rb'
- './ee/spec/serializers/autocomplete/group_serializer_spec.rb'
- './ee/spec/serializers/blocking_merge_request_entity_spec.rb'
-- './ee/spec/serializers/board_serializer_spec.rb'
- './ee/spec/serializers/clusters/deployment_entity_spec.rb'
- './ee/spec/serializers/clusters/environment_entity_spec.rb'
- './ee/spec/serializers/clusters/environment_serializer_spec.rb'
@@ -2469,7 +2407,6 @@
- './ee/spec/serializers/dependency_list_serializer_spec.rb'
- './ee/spec/serializers/ee/admin/user_entity_spec.rb'
- './ee/spec/serializers/ee/blob_entity_spec.rb'
-- './ee/spec/serializers/ee/board_simple_entity_spec.rb'
- './ee/spec/serializers/ee/build_details_entity_spec.rb'
- './ee/spec/serializers/ee/ci/job_entity_spec.rb'
- './ee/spec/serializers/ee/ci/pipeline_entity_spec.rb'
@@ -2596,7 +2533,6 @@
- './ee/spec/services/app_sec/fuzzing/api/ci_configuration_create_service_spec.rb'
- './ee/spec/services/app_sec/fuzzing/coverage/corpuses/create_service_spec.rb'
- './ee/spec/services/arkose/blocked_users_report_service_spec.rb'
-- './ee/spec/services/arkose/user_verification_service_spec.rb'
- './ee/spec/services/audit_events/build_service_spec.rb'
- './ee/spec/services/audit_events/custom_audit_event_service_spec.rb'
- './ee/spec/services/audit_event_service_spec.rb'
@@ -2744,11 +2680,9 @@
- './ee/spec/services/ee/issues/after_create_service_spec.rb'
- './ee/spec/services/ee/issues/build_from_vulnerability_service_spec.rb'
- './ee/spec/services/ee/issues/clone_service_spec.rb'
-- './ee/spec/services/ee/issues/close_service_spec.rb'
- './ee/spec/services/ee/issues/create_from_vulnerability_data_service_spec.rb'
- './ee/spec/services/ee/issues/create_service_spec.rb'
- './ee/spec/services/ee/issues/move_service_spec.rb'
-- './ee/spec/services/ee/issues/reopen_service_spec.rb'
- './ee/spec/services/ee/issues/update_service_spec.rb'
- './ee/spec/services/ee/keys/destroy_service_spec.rb'
- './ee/spec/services/ee/labels/create_service_spec.rb'
@@ -2806,7 +2740,6 @@
- './ee/spec/services/ee/users/build_service_spec.rb'
- './ee/spec/services/ee/users/create_service_spec.rb'
- './ee/spec/services/ee/users/destroy_service_spec.rb'
-- './ee/spec/services/ee/users/migrate_to_ghost_user_service_spec.rb'
- './ee/spec/services/ee/users/reject_service_spec.rb'
- './ee/spec/services/ee/users/update_service_spec.rb'
- './ee/spec/services/ee/vulnerability_feedback_module/update_service_spec.rb'
@@ -2887,9 +2820,7 @@
- './ee/spec/services/geo/repository_verification_secondary_service_spec.rb'
- './ee/spec/services/geo/reset_checksum_event_store_spec.rb'
- './ee/spec/services/geo/wiki_sync_service_spec.rb'
-- './ee/spec/services/gitlab_subscriptions/activate_awaiting_users_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/activate_service_spec.rb'
-- './ee/spec/services/gitlab_subscriptions/apply_trial_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/check_future_renewal_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/create_hand_raise_lead_service_spec.rb'
- './ee/spec/services/gitlab_subscriptions/create_service_spec.rb'
@@ -2972,10 +2903,6 @@
- './ee/spec/services/milestones/destroy_service_spec.rb'
- './ee/spec/services/milestones/promote_service_spec.rb'
- './ee/spec/services/milestones/update_service_spec.rb'
-- './ee/spec/services/namespaces/free_user_cap/deactivate_members_over_limit_service_spec.rb'
-- './ee/spec/services/namespaces/free_user_cap/remove_group_group_links_outside_hierarchy_service_spec.rb'
-- './ee/spec/services/namespaces/free_user_cap/remove_project_group_links_outside_hierarchy_service_spec.rb'
-- './ee/spec/services/namespaces/free_user_cap/update_prevent_sharing_outside_hierarchy_service_spec.rb'
- './ee/spec/services/namespaces/in_product_marketing_emails_service_spec.rb'
- './ee/spec/services/namespaces/storage/email_notification_service_spec.rb'
- './ee/spec/services/path_locks/lock_service_spec.rb'
@@ -3004,8 +2931,6 @@
- './ee/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb'
- './ee/spec/services/projects/import_export/export_service_spec.rb'
- './ee/spec/services/projects/import_service_spec.rb'
-- './ee/spec/services/projects/licenses/create_policy_service_spec.rb'
-- './ee/spec/services/projects/licenses/update_policy_service_spec.rb'
- './ee/spec/services/projects/mark_for_deletion_service_spec.rb'
- './ee/spec/services/projects/open_issues_count_service_spec.rb'
- './ee/spec/services/projects/operations/update_service_spec.rb'
@@ -3034,7 +2959,6 @@
- './ee/spec/services/requirements_management/map_export_fields_service_spec.rb'
- './ee/spec/services/requirements_management/prepare_import_csv_service_spec.rb'
- './ee/spec/services/requirements_management/process_test_reports_service_spec.rb'
-- './ee/spec/services/requirements_management/update_requirement_service_spec.rb'
- './ee/spec/services/resource_access_tokens/create_service_spec.rb'
- './ee/spec/services/resource_access_tokens/revoke_service_spec.rb'
- './ee/spec/services/resource_events/change_weight_service_spec.rb'
@@ -3047,7 +2971,6 @@
- './ee/spec/services/security/auto_fix_service_spec.rb'
- './ee/spec/services/security/configuration/save_auto_fix_service_spec.rb'
- './ee/spec/services/security/dependency_list_service_spec.rb'
-- './ee/spec/services/security/findings/cleanup_service_spec.rb'
- './ee/spec/services/security/ingestion/finding_map_collection_spec.rb'
- './ee/spec/services/security/ingestion/finding_map_spec.rb'
- './ee/spec/services/security/ingestion/ingest_report_service_spec.rb'
@@ -3120,7 +3043,6 @@
- './ee/spec/services/todo_service_spec.rb'
- './ee/spec/services/upcoming_reconciliations/update_service_spec.rb'
- './ee/spec/services/user_permissions/export_service_spec.rb'
-- './ee/spec/services/users/abuse/excessive_projects_download_ban_service_spec.rb'
- './ee/spec/services/users/abuse/git_abuse/namespace_throttle_service_spec.rb'
- './ee/spec/services/users/abuse/namespace_bans/create_service_spec.rb'
- './ee/spec/services/users/abuse/namespace_bans/destroy_service_spec.rb'
@@ -3169,7 +3091,6 @@
- './ee/spec/tasks/gitlab/license_rake_spec.rb'
- './ee/spec/tasks/gitlab/seed/group_seed_rake_spec.rb'
- './ee/spec/tasks/gitlab/spdx_rake_spec.rb'
-- './ee/spec/tasks/gitlab/uploads/migrate_rake_spec.rb'
- './ee/spec/validators/json_schema_validator_spec.rb'
- './ee/spec/validators/ldap_filter_validator_spec.rb'
- './ee/spec/validators/password/complexity_validator_spec.rb'
@@ -3202,8 +3123,6 @@
- './ee/spec/views/groups/security/discover/show.html.haml_spec.rb'
- './ee/spec/views/groups/settings/_remove.html.haml_spec.rb'
- './ee/spec/views/groups/settings/reporting/show.html.haml_spec.rb'
-- './ee/spec/views/groups/show.html.haml_spec.rb'
-- './ee/spec/views/groups/usage_quotas/index.html.haml_spec.rb'
- './ee/spec/views/layouts/application.html.haml_spec.rb'
- './ee/spec/views/layouts/checkout.html.haml_spec.rb'
- './ee/spec/views/layouts/header/_current_user_dropdown.html.haml_spec.rb'
@@ -3220,12 +3139,9 @@
- './ee/spec/views/operations/index.html.haml_spec.rb'
- './ee/spec/views/profiles/preferences/show.html.haml_spec.rb'
- './ee/spec/views/projects/edit.html.haml_spec.rb'
-- './ee/spec/views/projects/empty.html.haml_spec.rb'
- './ee/spec/views/projects/issues/show.html.haml_spec.rb'
-- './ee/spec/views/projects/merge_requests/_merge_request_approvals.html.haml_spec.rb'
- './ee/spec/views/projects/_merge_request_status_checks_settings.html.haml_spec.rb'
- './ee/spec/views/projects/on_demand_scans/index.html.haml_spec.rb'
-- './ee/spec/views/projects/pipelines/_tabs_content.html.haml_spec.rb'
- './ee/spec/views/projects/project_members/index.html.haml_spec.rb'
- './ee/spec/views/projects/security/corpus_management/show.html.haml_spec.rb'
- './ee/spec/views/projects/security/dast_profiles/show.html.haml_spec.rb'
@@ -3237,12 +3153,8 @@
- './ee/spec/views/projects/security/policies/index.html.haml_spec.rb'
- './ee/spec/views/projects/security/sast_configuration/show.html.haml_spec.rb'
- './ee/spec/views/projects/settings/subscriptions/_index.html.haml_spec.rb'
-- './ee/spec/views/projects/show.html.haml_spec.rb'
-- './ee/spec/views/registrations/groups/new.html.haml_spec.rb'
- './ee/spec/views/registrations/groups_projects/new.html.haml_spec.rb'
-- './ee/spec/views/registrations/projects/new.html.haml_spec.rb'
- './ee/spec/views/registrations/welcome/continuous_onboarding_getting_started.html.haml_spec.rb'
-- './ee/spec/views/registrations/welcome/show.html.haml_spec.rb'
- './ee/spec/views/search/_category.html.haml_spec.rb'
- './ee/spec/views/shared/billings/_billing_plan_actions.html.haml_spec.rb'
- './ee/spec/views/shared/billings/_billing_plan.html.haml_spec.rb'
@@ -3253,7 +3165,6 @@
- './ee/spec/views/shared/credentials_inventory/_expiry_date.html.haml_spec.rb'
- './ee/spec/views/shared/credentials_inventory/gpg_keys/_gpg_key.html.haml_spec.rb'
- './ee/spec/views/shared/credentials_inventory/personal_access_tokens/_personal_access_token.html.haml_spec.rb'
-- './ee/spec/views/shared/credentials_inventory/project_access_tokens/_project_access_token.html.haml_spec.rb'
- './ee/spec/views/shared/credentials_inventory/ssh_keys/_ssh_key.html.haml_spec.rb'
- './ee/spec/views/shared/issuable/_approver_suggestion.html.haml_spec.rb'
- './ee/spec/views/shared/issuable/_epic_dropdown.html.haml_spec.rb'
@@ -3271,8 +3182,6 @@
- './ee/spec/views/subscriptions/buy_storage.html.haml_spec.rb'
- './ee/spec/views/subscriptions/groups/edit.html.haml_spec.rb'
- './ee/spec/views/subscriptions/new.html.haml_spec.rb'
-- './ee/spec/views/trial_registrations/new.html.haml_spec.rb'
-- './ee/spec/views/trials/_skip_trial.html.haml_spec.rb'
- './ee/spec/workers/active_user_count_threshold_worker_spec.rb'
- './ee/spec/workers/adjourned_group_deletion_worker_spec.rb'
- './ee/spec/workers/adjourned_project_deletion_worker_spec.rb'
@@ -3336,7 +3245,6 @@
- './ee/spec/workers/geo/batch_event_create_worker_spec.rb'
- './ee/spec/workers/geo/batch/project_registry_scheduler_worker_spec.rb'
- './ee/spec/workers/geo/batch/project_registry_worker_spec.rb'
-- './ee/spec/workers/geo/container_repository_sync_dispatch_worker_spec.rb'
- './ee/spec/workers/geo/container_repository_sync_worker_spec.rb'
- './ee/spec/workers/geo/create_repository_updated_event_worker_spec.rb'
- './ee/spec/workers/geo/design_repository_shard_sync_worker_spec.rb'
@@ -3391,7 +3299,6 @@
- './ee/spec/workers/merge_request_reset_approvals_worker_spec.rb'
- './ee/spec/workers/merge_requests/stream_approval_audit_event_worker_spec.rb'
- './ee/spec/workers/merge_requests/sync_code_owner_approval_rules_worker_spec.rb'
-- './ee/spec/workers/namespaces/free_user_cap/remediation_worker_spec.rb'
- './ee/spec/workers/namespaces/sync_namespace_name_worker_spec.rb'
- './ee/spec/workers/new_epic_worker_spec.rb'
- './ee/spec/workers/personal_access_tokens/groups/policy_worker_spec.rb'
@@ -3410,8 +3317,6 @@
- './ee/spec/workers/scan_security_report_secrets_worker_spec.rb'
- './ee/spec/workers/security/auto_fix_worker_spec.rb'
- './ee/spec/workers/security/create_orchestration_policy_worker_spec.rb'
-- './ee/spec/workers/security/findings/cleanup_worker_spec.rb'
-- './ee/spec/workers/security/findings/delete_by_job_id_worker_spec.rb'
- './ee/spec/workers/security/orchestration_policy_rule_schedule_namespace_worker_spec.rb'
- './ee/spec/workers/security/orchestration_policy_rule_schedule_worker_spec.rb'
- './ee/spec/workers/security/store_scans_worker_spec.rb'
@@ -3454,7 +3359,6 @@
- './spec/config/application_spec.rb'
- './spec/config/inject_enterprise_edition_module_spec.rb'
- './spec/config/mail_room_spec.rb'
-- './spec/config/metrics/aggregates/aggregated_metrics_spec.rb'
- './spec/config/object_store_settings_spec.rb'
- './spec/config/settings_spec.rb'
- './spec/config/smime_signature_settings_spec.rb'
@@ -3488,10 +3392,7 @@
- './spec/controllers/admin/users_controller_spec.rb'
- './spec/controllers/application_controller_spec.rb'
- './spec/controllers/autocomplete_controller_spec.rb'
-- './spec/controllers/boards/issues_controller_spec.rb'
-- './spec/controllers/boards/lists_controller_spec.rb'
- './spec/controllers/chaos_controller_spec.rb'
-- './spec/controllers/concerns/boards_responses_spec.rb'
- './spec/controllers/concerns/check_rate_limit_spec.rb'
- './spec/controllers/concerns/checks_collaboration_spec.rb'
- './spec/controllers/concerns/confirm_email_warning_spec.rb'
@@ -3563,7 +3464,6 @@
- './spec/controllers/groups/variables_controller_spec.rb'
- './spec/controllers/health_check_controller_spec.rb'
- './spec/controllers/help_controller_spec.rb'
-- './spec/controllers/import/available_namespaces_controller_spec.rb'
- './spec/controllers/import/bitbucket_controller_spec.rb'
- './spec/controllers/import/bitbucket_server_controller_spec.rb'
- './spec/controllers/import/bulk_imports_controller_spec.rb'
@@ -3670,7 +3570,6 @@
- './spec/controllers/projects/pipelines_settings_controller_spec.rb'
- './spec/controllers/projects/pipelines/stages_controller_spec.rb'
- './spec/controllers/projects/pipelines/tests_controller_spec.rb'
-- './spec/controllers/projects/product_analytics_controller_spec.rb'
- './spec/controllers/projects/project_members_controller_spec.rb'
- './spec/controllers/projects/prometheus/alerts_controller_spec.rb'
- './spec/controllers/projects/prometheus/metrics_controller_spec.rb'
@@ -3707,7 +3606,6 @@
- './spec/controllers/projects/web_ide_terminals_controller_spec.rb'
- './spec/controllers/projects/wikis_controller_spec.rb'
- './spec/controllers/registrations_controller_spec.rb'
-- './spec/controllers/registrations/welcome_controller_spec.rb'
- './spec/controllers/repositories/git_http_controller_spec.rb'
- './spec/controllers/repositories/lfs_storage_controller_spec.rb'
- './spec/controllers/root_controller_spec.rb'
@@ -3935,7 +3833,6 @@
- './spec/features/ide/clientside_preview_csp_spec.rb'
- './spec/features/ide_spec.rb'
- './spec/features/ide/static_object_external_storage_csp_spec.rb'
-- './spec/features/ide/user_commits_changes_spec.rb'
- './spec/features/ide/user_opens_merge_request_spec.rb'
- './spec/features/import/manifest_import_spec.rb'
- './spec/features/invites_spec.rb'
@@ -4058,7 +3955,6 @@
- './spec/features/merge_request/user_edits_reviewers_sidebar_spec.rb'
- './spec/features/merge_request/user_expands_diff_spec.rb'
- './spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb'
-- './spec/features/merge_request/user_jumps_to_discussion_spec.rb'
- './spec/features/merge_request/user_locks_discussion_spec.rb'
- './spec/features/merge_request/user_manages_subscription_spec.rb'
- './spec/features/merge_request/user_marks_merge_request_as_draft_spec.rb'
@@ -4113,7 +4009,6 @@
- './spec/features/merge_request/user_views_diffs_spec.rb'
- './spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb'
- './spec/features/merge_request/user_views_open_merge_request_spec.rb'
-- './spec/features/merge_request/user_views_user_status_on_merge_request_spec.rb'
- './spec/features/milestone_spec.rb'
- './spec/features/milestones/user_creates_milestone_spec.rb'
- './spec/features/milestones/user_deletes_milestone_spec.rb'
@@ -4174,7 +4069,6 @@
- './spec/features/projects/blobs/blob_show_spec.rb'
- './spec/features/projects/blobs/edit_spec.rb'
- './spec/features/projects/blobs/shortcuts_blob_spec.rb'
-- './spec/features/projects/blobs/user_creates_new_blob_in_new_project_spec.rb'
- './spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb'
- './spec/features/projects/blobs/user_views_pipeline_editor_button_spec.rb'
- './spec/features/projects/branches/download_buttons_spec.rb'
@@ -4334,14 +4228,8 @@
- './spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb'
- './spec/features/projects/pages/user_edits_settings_spec.rb'
- './spec/features/projects/pipeline_schedules_spec.rb'
-- './spec/features/projects/pipelines/legacy_pipeline_spec.rb'
-- './spec/features/projects/pipelines/legacy_pipelines_spec.rb'
- './spec/features/projects/pipelines/pipeline_spec.rb'
- './spec/features/projects/pipelines/pipelines_spec.rb'
-- './spec/features/projects/product_analytics/events_spec.rb'
-- './spec/features/projects/product_analytics/graphs_spec.rb'
-- './spec/features/projects/product_analytics/setup_spec.rb'
-- './spec/features/projects/product_analytics/test_spec.rb'
- './spec/features/projects/raw/user_interacts_with_raw_endpoint_spec.rb'
- './spec/features/projects/releases/user_creates_release_spec.rb'
- './spec/features/projects/releases/user_views_edit_release_spec.rb'
@@ -4490,7 +4378,6 @@
- './spec/features/users/anonymous_sessions_spec.rb'
- './spec/features/users/bizible_csp_spec.rb'
- './spec/features/users/confirmation_spec.rb'
-- './spec/features/user_sees_marketing_header_spec.rb'
- './spec/features/user_sees_revert_modal_spec.rb'
- './spec/features/users/email_verification_on_login_spec.rb'
- './spec/features/users/google_analytics_csp_spec.rb'
@@ -4570,7 +4457,6 @@
- './spec/finders/feature_flags_user_lists_finder_spec.rb'
- './spec/finders/fork_projects_finder_spec.rb'
- './spec/finders/fork_targets_finder_spec.rb'
-- './spec/finders/freeze_periods_finder_spec.rb'
- './spec/finders/group_descendants_finder_spec.rb'
- './spec/finders/group_members_finder_spec.rb'
- './spec/finders/group_projects_finder_spec.rb'
@@ -4590,7 +4476,6 @@
- './spec/finders/members_finder_spec.rb'
- './spec/finders/merge_request/metrics_finder_spec.rb'
- './spec/finders/merge_requests/by_approvals_finder_spec.rb'
-- './spec/finders/merge_requests_finder/params_spec.rb'
- './spec/finders/merge_requests_finder_spec.rb'
- './spec/finders/merge_requests/oldest_per_commit_finder_spec.rb'
- './spec/finders/merge_request_target_project_finder_spec.rb'
@@ -4705,7 +4590,6 @@
- './spec/frontend/fixtures/u2f.rb'
- './spec/frontend/fixtures/webauthn.rb'
- './spec/graphql/features/authorization_spec.rb'
-- './spec/graphql/features/feature_flag_spec.rb'
- './spec/graphql/gitlab_schema_spec.rb'
- './spec/graphql/graphql_triggers_spec.rb'
- './spec/graphql/mutations/alert_management/alerts/set_assignees_spec.rb'
@@ -4803,7 +4687,6 @@
- './spec/graphql/mutations/todos/restore_spec.rb'
- './spec/graphql/mutations/user_callouts/create_spec.rb'
- './spec/graphql/mutations/work_items/update_task_spec.rb'
-- './spec/graphql/mutations/work_items/update_widgets_spec.rb'
- './spec/graphql/resolvers/admin/analytics/usage_trends/measurements_resolver_spec.rb'
- './spec/graphql/resolvers/alert_management/alert_resolver_spec.rb'
- './spec/graphql/resolvers/alert_management/alert_status_counts_resolver_spec.rb'
@@ -4867,7 +4750,6 @@
- './spec/graphql/resolvers/group_packages_resolver_spec.rb'
- './spec/graphql/resolvers/group_resolver_spec.rb'
- './spec/graphql/resolvers/groups_resolver_spec.rb'
-- './spec/graphql/resolvers/issues_resolver_spec.rb'
- './spec/graphql/resolvers/issue_status_counts_resolver_spec.rb'
- './spec/graphql/resolvers/kas/agent_configurations_resolver_spec.rb'
- './spec/graphql/resolvers/kas/agent_connections_resolver_spec.rb'
@@ -5367,8 +5249,6 @@
- './spec/initializers/action_mailer_hooks_spec.rb'
- './spec/initializers/active_record_locking_spec.rb'
- './spec/initializers/asset_proxy_setting_spec.rb'
-- './spec/initializers/attr_encrypted_no_db_connection_spec.rb'
-- './spec/initializers/attr_encrypted_thread_safe_spec.rb'
- './spec/initializers/carrierwave_patch_spec.rb'
- './spec/initializers/cookies_serializer_spec.rb'
- './spec/initializers/database_config_spec.rb'
@@ -5436,7 +5316,6 @@
- './spec/lib/api/entities/nuget/search_result_spec.rb'
- './spec/lib/api/entities/package_spec.rb'
- './spec/lib/api/entities/personal_access_token_spec.rb'
-- './spec/lib/api/entities/personal_access_token_with_details_spec.rb'
- './spec/lib/api/entities/plan_limit_spec.rb'
- './spec/lib/api/entities/project_import_failed_relation_spec.rb'
- './spec/lib/api/entities/project_import_status_spec.rb'
@@ -5469,7 +5348,6 @@
- './spec/lib/api/helpers_spec.rb'
- './spec/lib/api/helpers/variables_helpers_spec.rb'
- './spec/lib/api/helpers/version_spec.rb'
-- './spec/lib/api/integrations/slack/events/url_verification_spec.rb'
- './spec/lib/api/support/git_access_actor_spec.rb'
- './spec/lib/api/validations/validators/absence_spec.rb'
- './spec/lib/api/validations/validators/array_none_any_spec.rb'
@@ -5819,7 +5697,6 @@
- './spec/lib/gitlab/auth/unique_ips_limiter_spec.rb'
- './spec/lib/gitlab/auth/user_access_denied_reason_spec.rb'
- './spec/lib/gitlab/avatar_cache_spec.rb'
-- './spec/lib/gitlab/background_migration/add_primary_email_to_emails_if_user_confirmed_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_ci_queuing_tables_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_draft_status_on_merge_requests_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_draft_status_on_merge_requests_with_corrected_regex_spec.rb'
@@ -5841,7 +5718,6 @@
- './spec/lib/gitlab/background_migration/backfill_project_member_namespace_id_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_project_settings_spec.rb'
-- './spec/lib/gitlab/background_migration/backfill_projects_with_coverage_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_topics_title_spec.rb'
- './spec/lib/gitlab/background_migration/backfill_upvotes_count_on_issues_spec.rb'
@@ -5850,7 +5726,6 @@
- './spec/lib/gitlab/background_migration/backfill_work_item_type_id_for_issues_spec.rb'
- './spec/lib/gitlab/background_migration/base_job_spec.rb'
- './spec/lib/gitlab/background_migration/batched_migration_job_spec.rb'
-- './spec/lib/gitlab/background_migration/batching_strategies/backfill_issue_work_item_type_batching_strategy_spec.rb'
- './spec/lib/gitlab/background_migration/batching_strategies/backfill_project_namespace_per_group_batching_strategy_spec.rb'
- './spec/lib/gitlab/background_migration/batching_strategies/backfill_project_statistics_with_container_registry_size_batching_strategy_spec.rb'
- './spec/lib/gitlab/background_migration/batching_strategies/base_strategy_spec.rb'
@@ -5919,7 +5794,6 @@
- './spec/lib/gitlab/backtrace_cleaner_spec.rb'
- './spec/lib/gitlab/bare_repository_import/importer_spec.rb'
- './spec/lib/gitlab/bare_repository_import/repository_spec.rb'
-- './spec/lib/gitlab/batch_pop_queueing_spec.rb'
- './spec/lib/gitlab/batch_worker_context_spec.rb'
- './spec/lib/gitlab/bitbucket_import/importer_spec.rb'
- './spec/lib/gitlab/bitbucket_import/project_creator_spec.rb'
@@ -5986,7 +5860,6 @@
- './spec/lib/gitlab/ci/badge/release/template_spec.rb'
- './spec/lib/gitlab/ci/build/artifacts/adapters/gzip_stream_spec.rb'
- './spec/lib/gitlab/ci/build/artifacts/adapters/raw_stream_spec.rb'
-- './spec/lib/gitlab/ci/build/artifacts/adapters/zip_stream_spec.rb'
- './spec/lib/gitlab/ci/build/artifacts/metadata/entry_spec.rb'
- './spec/lib/gitlab/ci/build/artifacts/metadata_spec.rb'
- './spec/lib/gitlab/ci/build/artifacts/path_spec.rb'
@@ -6160,8 +6033,6 @@
- './spec/lib/gitlab/ci/pipeline/quota/deployments_spec.rb'
- './spec/lib/gitlab/ci/pipeline/seed/build/cache_spec.rb'
- './spec/lib/gitlab/ci/pipeline/seed/build_spec.rb'
-- './spec/lib/gitlab/ci/pipeline/seed/deployment_spec.rb'
-- './spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb'
- './spec/lib/gitlab/ci/pipeline/seed/pipeline_spec.rb'
- './spec/lib/gitlab/ci/pipeline/seed/processable/resource_group_spec.rb'
- './spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb'
@@ -6553,7 +6424,6 @@
- './spec/lib/gitlab/discussions_diff/file_collection_spec.rb'
- './spec/lib/gitlab/discussions_diff/highlight_cache_spec.rb'
- './spec/lib/gitlab/doctor/secrets_spec.rb'
-- './spec/lib/gitlab/doorkeeper_secret_storing/pbkdf2_sha512_spec.rb'
- './spec/lib/gitlab_edition_spec.rb'
- './spec/lib/gitlab/email/attachment_uploader_spec.rb'
- './spec/lib/gitlab/email/failure_handler_spec.rb'
@@ -6613,10 +6483,6 @@
- './spec/lib/gitlab/exclusive_lease_helpers/sleeping_lock_spec.rb'
- './spec/lib/gitlab/exclusive_lease_helpers_spec.rb'
- './spec/lib/gitlab/exclusive_lease_spec.rb'
-- './spec/lib/gitlab/experimentation/controller_concern_spec.rb'
-- './spec/lib/gitlab/experimentation/experiment_spec.rb'
-- './spec/lib/gitlab/experimentation/group_types_spec.rb'
-- './spec/lib/gitlab/experimentation_spec.rb'
- './spec/lib/gitlab/experiment/rollout/feature_spec.rb'
- './spec/lib/gitlab/external_authorization/access_spec.rb'
- './spec/lib/gitlab/external_authorization/cache_spec.rb'
@@ -6665,7 +6531,6 @@
- './spec/lib/gitlab/gitaly_client_spec.rb'
- './spec/lib/gitlab/gitaly_client/storage_settings_spec.rb'
- './spec/lib/gitlab/gitaly_client/util_spec.rb'
-- './spec/lib/gitlab/gitaly_client/wiki_service_spec.rb'
- './spec/lib/gitlab/git/attributes_at_ref_parser_spec.rb'
- './spec/lib/gitlab/git/attributes_parser_spec.rb'
- './spec/lib/gitlab/git/base_error_spec.rb'
@@ -6681,7 +6546,6 @@
- './spec/lib/gitlab/git/conflict/file_spec.rb'
- './spec/lib/gitlab/git/conflict/parser_spec.rb'
- './spec/lib/gitlab/git/conflict/resolver_spec.rb'
-- './spec/lib/gitlab/git/cross_repo_comparer_spec.rb'
- './spec/lib/gitlab/git/diff_collection_spec.rb'
- './spec/lib/gitlab/git/diff_spec.rb'
- './spec/lib/gitlab/git/diff_stats_collection_spec.rb'
@@ -6774,7 +6638,6 @@
- './spec/lib/gitlab/git/user_spec.rb'
- './spec/lib/gitlab/git/util_spec.rb'
- './spec/lib/gitlab/git/wiki_page_version_spec.rb'
-- './spec/lib/gitlab/git/wiki_spec.rb'
- './spec/lib/gitlab/git/wraps_gitaly_errors_spec.rb'
- './spec/lib/gitlab/global_id/deprecations_spec.rb'
- './spec/lib/gitlab/global_id_spec.rb'
@@ -6817,7 +6680,6 @@
- './spec/lib/gitlab/graphql/pagination/connections_spec.rb'
- './spec/lib/gitlab/graphql/pagination/externally_paginated_array_connection_spec.rb'
- './spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb'
-- './spec/lib/gitlab/graphql/pagination/keyset/last_items_spec.rb'
- './spec/lib/gitlab/graphql/pagination/offset_active_record_relation_connection_spec.rb'
- './spec/lib/gitlab/graphql/present/field_extension_spec.rb'
- './spec/lib/gitlab/graphql/queries_spec.rb'
@@ -6843,13 +6705,6 @@
- './spec/lib/gitlab/health_checks/middleware_spec.rb'
- './spec/lib/gitlab/health_checks/probes/collection_spec.rb'
- './spec/lib/gitlab/health_checks/puma_check_spec.rb'
-- './spec/lib/gitlab/health_checks/redis/cache_check_spec.rb'
-- './spec/lib/gitlab/health_checks/redis/queues_check_spec.rb'
-- './spec/lib/gitlab/health_checks/redis/rate_limiting_check_spec.rb'
-- './spec/lib/gitlab/health_checks/redis/redis_check_spec.rb'
-- './spec/lib/gitlab/health_checks/redis/sessions_check_spec.rb'
-- './spec/lib/gitlab/health_checks/redis/shared_state_check_spec.rb'
-- './spec/lib/gitlab/health_checks/redis/trace_chunks_check_spec.rb'
- './spec/lib/gitlab/health_checks/server_spec.rb'
- './spec/lib/gitlab/highlight_spec.rb'
- './spec/lib/gitlab/hook_data/base_builder_spec.rb'
@@ -6895,8 +6750,6 @@
- './spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb'
- './spec/lib/gitlab/import_export/file_importer_spec.rb'
- './spec/lib/gitlab/import_export/fork_spec.rb'
-- './spec/lib/gitlab/import_export/group/legacy_tree_restorer_spec.rb'
-- './spec/lib/gitlab/import_export/group/legacy_tree_saver_spec.rb'
- './spec/lib/gitlab/import_export/group/object_builder_spec.rb'
- './spec/lib/gitlab/import_export/group/relation_factory_spec.rb'
- './spec/lib/gitlab/import_export/group/relation_tree_restorer_spec.rb'
@@ -7074,7 +6927,6 @@
- './spec/lib/gitlab/memory/reports_daemon_spec.rb'
- './spec/lib/gitlab/memory/reports/jemalloc_stats_spec.rb'
- './spec/lib/gitlab/memory/watchdog_spec.rb'
-- './spec/lib/gitlab/merge_requests/commit_message_generator_spec.rb'
- './spec/lib/gitlab/merge_requests/mergeability/check_result_spec.rb'
- './spec/lib/gitlab/merge_requests/mergeability/redis_interface_spec.rb'
- './spec/lib/gitlab/merge_requests/mergeability/results_store_spec.rb'
@@ -7353,7 +7205,6 @@
- './spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb'
- './spec/lib/gitlab/sidekiq_middleware/extra_done_log_metadata_spec.rb'
- './spec/lib/gitlab/sidekiq_middleware/instrumentation_logger_spec.rb'
-- './spec/lib/gitlab/sidekiq_middleware/memory_killer_spec.rb'
- './spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb'
- './spec/lib/gitlab/sidekiq_middleware/query_analyzer_spec.rb'
- './spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb'
@@ -7513,13 +7364,12 @@
- './spec/lib/gitlab/usage/metrics/instrumentations/uuid_metric_spec.rb'
- './spec/lib/gitlab/usage/metrics/key_path_processor_spec.rb'
- './spec/lib/gitlab/usage/metrics/names_suggestions/generator_spec.rb'
-- './spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/constraints_spec.rb'
- './spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/joins_spec.rb'
- './spec/lib/gitlab/usage/metrics/name_suggestion_spec.rb'
- './spec/lib/gitlab/usage/metric_spec.rb'
- './spec/lib/gitlab/usage/metrics/query_spec.rb'
- './spec/lib/gitlab/usage/service_ping/instrumented_payload_spec.rb'
-- './spec/lib/gitlab/usage/service_ping/legacy_metric_timing_decorator_spec.rb'
+- './spec/lib/gitlab/usage/service_ping/legacy_metric_metadata_decorator_spec.rb'
- './spec/lib/gitlab/usage/service_ping/payload_keys_processor_spec.rb'
- './spec/lib/gitlab/usage/service_ping_report_spec.rb'
- './spec/lib/gitlab/user_access_snippet_spec.rb'
@@ -7606,8 +7456,6 @@
- './spec/lib/security/ci_configuration/sast_iac_build_action_spec.rb'
- './spec/lib/security/ci_configuration/secret_detection_build_action_spec.rb'
- './spec/lib/security/report_schema_version_matcher_spec.rb'
-- './spec/lib/serializers/json_spec.rb'
-- './spec/lib/serializers/symbolized_json_spec.rb'
- './spec/lib/serializers/unsafe_json_spec.rb'
- './spec/lib/service_ping/build_payload_spec.rb'
- './spec/lib/service_ping/devops_report_spec.rb'
@@ -7686,15 +7534,6 @@
- './spec/mailers/notify_spec.rb'
- './spec/mailers/repository_check_mailer_spec.rb'
- './spec/metrics_server/metrics_server_spec.rb'
-- './spec/migrations/20210406144743_backfill_total_tuple_count_for_batched_migrations_spec.rb'
-- './spec/migrations/20210423160427_schedule_drop_invalid_vulnerabilities_spec.rb'
-- './spec/migrations/20210430134202_copy_adoption_snapshot_namespace_spec.rb'
-- './spec/migrations/20210430135954_copy_adoption_segments_namespace_spec.rb'
-- './spec/migrations/20210503105845_add_project_value_stream_id_to_project_stages_spec.rb'
-- './spec/migrations/20210511142748_schedule_drop_invalid_vulnerabilities2_spec.rb'
-- './spec/migrations/20210514063252_schedule_cleanup_orphaned_lfs_objects_projects_spec.rb'
-- './spec/migrations/20210601073400_fix_total_stage_in_vsa_spec.rb'
-- './spec/migrations/20210601080039_group_protected_environments_add_index_and_constraint_spec.rb'
- './spec/migrations/20210603222333_remove_builds_email_service_from_services_spec.rb'
- './spec/migrations/20210610153556_delete_legacy_operations_feature_flags_spec.rb'
- './spec/migrations/2021061716138_cascade_delete_freeze_periods_spec.rb'
@@ -7706,7 +7545,6 @@
- './spec/migrations/20210805192450_update_trial_plans_ci_daily_pipeline_schedule_triggers_spec.rb'
- './spec/migrations/20210811122206_update_external_project_bots_spec.rb'
- './spec/migrations/20210812013042_remove_duplicate_project_authorizations_spec.rb'
-- './spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb'
- './spec/migrations/20210819145000_drop_temporary_columns_and_triggers_for_ci_builds_runner_session_spec.rb'
- './spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb'
- './spec/migrations/20210902144144_drop_temporary_columns_and_triggers_for_ci_build_needs_spec.rb'
@@ -7803,11 +7641,9 @@
- './spec/migrations/20220801155858_schedule_disable_legacy_open_source_licence_for_recent_public_projects_spec.rb'
- './spec/migrations/20220802114351_reschedule_backfill_container_registry_size_into_project_statistics_spec.rb'
- './spec/migrations/20220802204737_remove_deactivated_user_highest_role_stats_spec.rb'
-- './spec/migrations/20220809002011_schedule_destroy_invalid_group_members_spec.rb'
- './spec/migrations/active_record/schema_spec.rb'
- './spec/migrations/add_default_project_approval_rules_vuln_allowed_spec.rb'
- './spec/migrations/add_epics_relative_position_spec.rb'
-- './spec/migrations/add_new_trail_plans_spec.rb'
- './spec/migrations/add_open_source_plan_spec.rb'
- './spec/migrations/add_premium_and_ultimate_plan_limits_spec.rb'
- './spec/migrations/add_triggers_to_integrations_type_new_spec.rb'
@@ -7816,9 +7652,7 @@
- './spec/migrations/associate_existing_dast_builds_with_variables_spec.rb'
- './spec/migrations/backfill_all_project_namespaces_spec.rb'
- './spec/migrations/backfill_cadence_id_for_boards_scoped_to_iteration_spec.rb'
-- './spec/migrations/backfill_clusters_integration_prometheus_enabled_spec.rb'
- './spec/migrations/backfill_cycle_analytics_aggregations_spec.rb'
-- './spec/migrations/backfill_escalation_policies_for_oncall_schedules_spec.rb'
- './spec/migrations/backfill_group_features_spec.rb'
- './spec/migrations/backfill_integrations_enable_ssl_verification_spec.rb'
- './spec/migrations/backfill_integrations_type_new_spec.rb'
@@ -7826,26 +7660,19 @@
- './spec/migrations/backfill_member_namespace_id_for_group_members_spec.rb'
- './spec/migrations/backfill_namespace_id_for_namespace_routes_spec.rb'
- './spec/migrations/backfill_namespace_id_for_project_routes_spec.rb'
-- './spec/migrations/backfill_nuget_temporary_packages_to_processing_status_spec.rb'
- './spec/migrations/backfill_project_import_level_spec.rb'
- './spec/migrations/backfill_project_namespaces_for_group_spec.rb'
- './spec/migrations/backfill_stage_event_hash_spec.rb'
- './spec/migrations/backfill_user_namespace_spec.rb'
- './spec/migrations/bulk_insert_cluster_enabled_grants_spec.rb'
- './spec/migrations/change_public_projects_cost_factor_spec.rb'
-- './spec/migrations/change_web_hook_events_default_spec.rb'
-- './spec/migrations/cleanup_after_add_primary_email_to_emails_if_user_confirmed_spec.rb'
- './spec/migrations/cleanup_after_fixing_issue_when_admin_changed_primary_email_spec.rb'
- './spec/migrations/cleanup_after_fixing_regression_with_new_users_emails_spec.rb'
- './spec/migrations/cleanup_backfill_integrations_enable_ssl_verification_spec.rb'
-- './spec/migrations/cleanup_move_container_registry_enabled_to_project_feature_spec.rb'
- './spec/migrations/cleanup_mr_attention_request_todos_spec.rb'
- './spec/migrations/cleanup_orphaned_routes_spec.rb'
-- './spec/migrations/clean_up_pending_builds_table_spec.rb'
- './spec/migrations/cleanup_remaining_orphan_invites_spec.rb'
- './spec/migrations/confirm_security_bot_spec.rb'
-- './spec/migrations/confirm_support_bot_user_spec.rb'
-- './spec/migrations/delete_security_findings_without_uuid_spec.rb'
- './spec/migrations/disable_expiration_policies_linked_to_no_container_images_spec.rb'
- './spec/migrations/disable_job_token_scope_when_unused_spec.rb'
- './spec/migrations/finalize_orphaned_routes_cleanup_spec.rb'
@@ -7855,23 +7682,17 @@
- './spec/migrations/fix_and_backfill_project_namespaces_for_projects_with_duplicate_name_spec.rb'
- './spec/migrations/fix_batched_migrations_old_format_job_arguments_spec.rb'
- './spec/migrations/generate_customers_dot_jwt_signing_key_spec.rb'
-- './spec/migrations/insert_ci_daily_pipeline_schedule_triggers_plan_limits_spec.rb'
-- './spec/migrations/migrate_elastic_index_settings_spec.rb'
- './spec/migrations/migrate_protected_attribute_to_pending_builds_spec.rb'
-- './spec/migrations/move_container_registry_enabled_to_project_features3_spec.rb'
- './spec/migrations/orphaned_invite_tokens_cleanup_spec.rb'
- './spec/migrations/populate_audit_event_streaming_verification_token_spec.rb'
-- './spec/migrations/populate_dismissal_information_for_vulnerabilities_spec.rb'
- './spec/migrations/populate_operation_visibility_permissions_spec.rb'
- './spec/migrations/queue_backfill_project_feature_package_registry_access_level_spec.rb'
- './spec/migrations/recreate_index_security_ci_builds_on_name_and_id_parser_features_spec.rb'
- './spec/migrations/recreate_index_security_ci_builds_on_name_and_id_parser_with_new_features_spec.rb'
- './spec/migrations/remove_duplicate_dast_site_tokens_spec.rb'
- './spec/migrations/remove_duplicate_dast_site_tokens_with_same_token_spec.rb'
-- './spec/migrations/remove_hipchat_service_records_spec.rb'
- './spec/migrations/remove_invalid_integrations_spec.rb'
- './spec/migrations/remove_not_null_contraint_on_title_from_sprints_spec.rb'
-- './spec/migrations/remove_records_without_group_from_webhooks_table_spec.rb'
- './spec/migrations/remove_schedule_and_status_from_pending_alert_escalations_spec.rb'
- './spec/migrations/remove_wiki_notes_spec.rb'
- './spec/migrations/rename_services_to_integrations_spec.rb'
@@ -7883,22 +7704,17 @@
- './spec/migrations/reset_job_token_scope_enabled_spec.rb'
- './spec/migrations/reset_severity_levels_to_new_default_spec.rb'
- './spec/migrations/retry_backfill_traversal_ids_spec.rb'
-- './spec/migrations/schedule_add_primary_email_to_emails_if_user_confirmed_spec.rb'
- './spec/migrations/schedule_backfill_draft_status_on_merge_requests_corrected_regex_spec.rb'
- './spec/migrations/schedule_backfilling_the_namespace_id_for_vulnerability_reads_spec.rb'
- './spec/migrations/schedule_copy_ci_builds_columns_to_security_scans2_spec.rb'
-- './spec/migrations/schedule_disable_expiration_policies_linked_to_no_container_images_spec.rb'
- './spec/migrations/schedule_fix_incorrect_max_seats_used2_spec.rb'
- './spec/migrations/schedule_fix_incorrect_max_seats_used_spec.rb'
-- './spec/migrations/schedule_migrate_shared_vulnerability_scanners_spec.rb'
- './spec/migrations/schedule_populate_requirements_issue_id_spec.rb'
- './spec/migrations/schedule_purging_stale_security_scans_spec.rb'
- './spec/migrations/schedule_recalculate_vulnerability_finding_signatures_for_findings_spec.rb'
- './spec/migrations/schedule_security_setting_creation_spec.rb'
- './spec/migrations/schedule_set_correct_vulnerability_state_spec.rb'
- './spec/migrations/schedule_update_timelogs_null_spent_at_spec.rb'
-- './spec/migrations/schedule_update_timelogs_project_id_spec.rb'
-- './spec/migrations/schedule_update_users_where_two_factor_auth_required_from_group_spec.rb'
- './spec/migrations/set_default_job_token_scope_true_spec.rb'
- './spec/migrations/slice_merge_request_diff_commit_migrations_spec.rb'
- './spec/migrations/start_backfill_ci_queuing_tables_spec.rb'
@@ -7909,7 +7725,6 @@
- './spec/migrations/update_default_scan_method_of_dast_site_profile_spec.rb'
- './spec/migrations/update_integrations_trigger_type_new_on_insert_spec.rb'
- './spec/migrations/update_invalid_member_states_spec.rb'
-- './spec/migrations/update_invalid_web_hooks_spec.rb'
- './spec/models/ability_spec.rb'
- './spec/models/abuse_report_spec.rb'
- './spec/models/active_session_spec.rb'
@@ -7994,7 +7809,6 @@
- './spec/models/ci/daily_build_group_report_result_spec.rb'
- './spec/models/ci/deleted_object_spec.rb'
- './spec/models/ci/freeze_period_spec.rb'
-- './spec/models/ci/freeze_period_status_spec.rb'
- './spec/models/ci/group_spec.rb'
- './spec/models/ci/group_variable_spec.rb'
- './spec/models/ci/instance_variable_spec.rb'
@@ -8066,7 +7880,6 @@
- './spec/models/compare_spec.rb'
- './spec/models/concerns/access_requestable_spec.rb'
- './spec/models/concerns/after_commit_queue_spec.rb'
-- './spec/models/concerns/approvable_base_spec.rb'
- './spec/models/concerns/as_cte_spec.rb'
- './spec/models/concerns/atomic_internal_id_spec.rb'
- './spec/models/concerns/avatarable_spec.rb'
@@ -8080,13 +7893,11 @@
- './spec/models/concerns/bulk_insert_safe_spec.rb'
- './spec/models/concerns/cacheable_attributes_spec.rb'
- './spec/models/concerns/cache_markdown_field_spec.rb'
-- './spec/models/concerns/cascading_namespace_setting_attribute_spec.rb'
- './spec/models/concerns/case_sensitivity_spec.rb'
- './spec/models/concerns/checksummable_spec.rb'
- './spec/models/concerns/chronic_duration_attribute_spec.rb'
- './spec/models/concerns/ci/artifactable_spec.rb'
- './spec/models/concerns/ci/bulk_insertable_tags_spec.rb'
-- './spec/models/concerns/ci/has_deployment_name_spec.rb'
- './spec/models/concerns/ci/has_ref_spec.rb'
- './spec/models/concerns/ci/has_status_spec.rb'
- './spec/models/concerns/ci/has_variable_spec.rb'
@@ -8223,9 +8034,6 @@
- './spec/models/error_tracking/error_spec.rb'
- './spec/models/error_tracking/project_error_tracking_setting_spec.rb'
- './spec/models/event_spec.rb'
-- './spec/models/experiment_spec.rb'
-- './spec/models/experiment_subject_spec.rb'
-- './spec/models/experiment_user_spec.rb'
- './spec/models/exported_protected_branch_spec.rb'
- './spec/models/external_issue_spec.rb'
- './spec/models/external_pull_request_spec.rb'
@@ -8318,7 +8126,6 @@
- './spec/models/internal_id_spec.rb'
- './spec/models/issuable_severity_spec.rb'
- './spec/models/issue_assignee_spec.rb'
-- './spec/models/issue_collection_spec.rb'
- './spec/models/issue_email_participant_spec.rb'
- './spec/models/issue/email_spec.rb'
- './spec/models/issue_link_spec.rb'
@@ -8390,7 +8197,6 @@
- './spec/models/notification_setting_spec.rb'
- './spec/models/oauth_access_grant_spec.rb'
- './spec/models/oauth_access_token_spec.rb'
-- './spec/models/onboarding_progress_spec.rb'
- './spec/models/operations/feature_flags_client_spec.rb'
- './spec/models/operations/feature_flag_spec.rb'
- './spec/models/operations/feature_flags/strategy_spec.rb'
@@ -8566,7 +8372,6 @@
- './spec/models/users/group_callout_spec.rb'
- './spec/models/users/in_product_marketing_email_spec.rb'
- './spec/models/users/merge_request_interaction_spec.rb'
-- './spec/models/users/namespace_callout_spec.rb'
- './spec/models/user_spec.rb'
- './spec/models/users/project_callout_spec.rb'
- './spec/models/users/saved_reply_spec.rb'
@@ -8612,7 +8417,6 @@
- './spec/policies/commit_policy_spec.rb'
- './spec/policies/concerns/crud_policy_helpers_spec.rb'
- './spec/policies/concerns/policy_actor_spec.rb'
-- './spec/policies/concerns/readonly_abilities_spec.rb'
- './spec/policies/container_expiration_policy_policy_spec.rb'
- './spec/policies/custom_emoji_policy_spec.rb'
- './spec/policies/deploy_key_policy_spec.rb'
@@ -8624,7 +8428,6 @@
- './spec/policies/group_deploy_key_policy_spec.rb'
- './spec/policies/group_deploy_keys_group_policy_spec.rb'
- './spec/policies/group_member_policy_spec.rb'
-- './spec/policies/group_policy_spec.rb'
- './spec/policies/identity_provider_policy_spec.rb'
- './spec/policies/instance_metadata_policy_spec.rb'
- './spec/policies/integration_policy_spec.rb'
@@ -8962,7 +8765,6 @@
- './spec/requests/api/graphql/mutations/work_items/delete_task_spec.rb'
- './spec/requests/api/graphql/mutations/work_items/update_spec.rb'
- './spec/requests/api/graphql/mutations/work_items/update_task_spec.rb'
-- './spec/requests/api/graphql/mutations/work_items/update_widgets_spec.rb'
- './spec/requests/api/graphql/namespace/package_settings_spec.rb'
- './spec/requests/api/graphql/namespace/projects_spec.rb'
- './spec/requests/api/graphql/namespace_query_spec.rb'
@@ -9058,7 +8860,6 @@
- './spec/requests/api/import_bitbucket_server_spec.rb'
- './spec/requests/api/import_github_spec.rb'
- './spec/requests/api/integrations/jira_connect/subscriptions_spec.rb'
-- './spec/requests/api/integrations/slack/events_spec.rb'
- './spec/requests/api/integrations_spec.rb'
- './spec/requests/api/internal/base_spec.rb'
- './spec/requests/api/internal/container_registry/migration_spec.rb'
@@ -9078,7 +8879,6 @@
- './spec/requests/api/keys_spec.rb'
- './spec/requests/api/labels_spec.rb'
- './spec/requests/api/lint_spec.rb'
-- './spec/requests/api/markdown_golden_master_spec.rb'
- './spec/requests/api/markdown_snapshot_spec.rb'
- './spec/requests/api/markdown_spec.rb'
- './spec/requests/api/maven_packages_spec.rb'
@@ -9157,9 +8957,7 @@
- './spec/requests/api/users_preferences_spec.rb'
- './spec/requests/api/users_spec.rb'
- './spec/requests/api/v3/github_spec.rb'
-- './spec/requests/api/version_spec.rb'
- './spec/requests/api/wikis_spec.rb'
-- './spec/requests/boards/lists_controller_spec.rb'
- './spec/requests/concerns/planning_hierarchy_spec.rb'
- './spec/requests/content_security_policy_spec.rb'
- './spec/requests/dashboard_controller_spec.rb'
@@ -9201,8 +8999,6 @@
- './spec/requests/oauth/tokens_controller_spec.rb'
- './spec/requests/oauth_tokens_spec.rb'
- './spec/requests/openid_connect_spec.rb'
-- './spec/requests/product_analytics/collector_app_attack_spec.rb'
-- './spec/requests/product_analytics/collector_app_spec.rb'
- './spec/requests/profiles/notifications_controller_spec.rb'
- './spec/requests/projects/ci/promeheus_metrics/histograms_controller_spec.rb'
- './spec/requests/projects/cluster_agents_controller_spec.rb'
@@ -9258,7 +9054,6 @@
- './spec/requests/users_controller_spec.rb'
- './spec/requests/user_sends_malformed_strings_spec.rb'
- './spec/requests/users/group_callouts_spec.rb'
-- './spec/requests/users/namespace_callouts_spec.rb'
- './spec/requests/user_spoofs_ip_spec.rb'
- './spec/requests/users/project_callouts_spec.rb'
- './spec/requests/verifies_with_email_spec.rb'
@@ -9288,8 +9083,6 @@
- './spec/serializers/analytics_summary_serializer_spec.rb'
- './spec/serializers/base_discussion_entity_spec.rb'
- './spec/serializers/blob_entity_spec.rb'
-- './spec/serializers/board_serializer_spec.rb'
-- './spec/serializers/board_simple_entity_spec.rb'
- './spec/serializers/build_action_entity_spec.rb'
- './spec/serializers/build_artifact_entity_spec.rb'
- './spec/serializers/build_details_entity_spec.rb'
@@ -9498,7 +9291,6 @@
- './spec/services/boards/issues/move_service_spec.rb'
- './spec/services/boards/lists/create_service_spec.rb'
- './spec/services/boards/lists/destroy_service_spec.rb'
-- './spec/services/boards/lists/generate_service_spec.rb'
- './spec/services/boards/lists/list_service_spec.rb'
- './spec/services/boards/lists/move_service_spec.rb'
- './spec/services/boards/lists/update_service_spec.rb'
@@ -9528,7 +9320,6 @@
- './spec/services/chat_names/authorize_user_service_spec.rb'
- './spec/services/chat_names/find_user_service_spec.rb'
- './spec/services/ci/abort_pipelines_service_spec.rb'
-- './spec/services/ci/after_requeue_job_service_spec.rb'
- './spec/services/ci/append_build_trace_service_spec.rb'
- './spec/services/ci/archive_trace_service_spec.rb'
- './spec/services/ci/build_cancel_service_spec.rb'
@@ -9641,37 +9432,14 @@
- './spec/services/clusters/agents/refresh_authorization_service_spec.rb'
- './spec/services/clusters/agent_tokens/create_service_spec.rb'
- './spec/services/clusters/agent_tokens/track_usage_service_spec.rb'
-- './spec/services/clusters/applications/check_ingress_ip_address_service_spec.rb'
-- './spec/services/clusters/applications/check_installation_progress_service_spec.rb'
-- './spec/services/clusters/applications/check_uninstall_progress_service_spec.rb'
-- './spec/services/clusters/applications/check_upgrade_progress_service_spec.rb'
-- './spec/services/clusters/applications/create_service_spec.rb'
-- './spec/services/clusters/applications/destroy_service_spec.rb'
-- './spec/services/clusters/applications/install_service_spec.rb'
-- './spec/services/clusters/applications/patch_service_spec.rb'
-- './spec/services/clusters/applications/prometheus_config_service_spec.rb'
-- './spec/services/clusters/applications/prometheus_update_service_spec.rb'
-- './spec/services/clusters/applications/uninstall_service_spec.rb'
-- './spec/services/clusters/applications/update_service_spec.rb'
-- './spec/services/clusters/applications/upgrade_service_spec.rb'
-- './spec/services/clusters/aws/authorize_role_service_spec.rb'
-- './spec/services/clusters/aws/fetch_credentials_service_spec.rb'
-- './spec/services/clusters/aws/finalize_creation_service_spec.rb'
-- './spec/services/clusters/aws/provision_service_spec.rb'
-- './spec/services/clusters/aws/verify_provision_status_service_spec.rb'
- './spec/services/clusters/build_kubernetes_namespace_service_spec.rb'
- './spec/services/clusters/build_service_spec.rb'
- './spec/services/clusters/cleanup/project_namespace_service_spec.rb'
- './spec/services/clusters/cleanup/service_account_service_spec.rb'
- './spec/services/clusters/create_service_spec.rb'
- './spec/services/clusters/destroy_service_spec.rb'
-- './spec/services/clusters/gcp/fetch_operation_service_spec.rb'
-- './spec/services/clusters/gcp/finalize_creation_service_spec.rb'
-- './spec/services/clusters/gcp/provision_service_spec.rb'
-- './spec/services/clusters/gcp/verify_provision_status_service_spec.rb'
- './spec/services/clusters/integrations/create_service_spec.rb'
- './spec/services/clusters/integrations/prometheus_health_check_service_spec.rb'
-- './spec/services/clusters/kubernetes/configure_istio_ingress_service_spec.rb'
- './spec/services/clusters/kubernetes/create_or_update_namespace_service_spec.rb'
- './spec/services/clusters/kubernetes/create_or_update_service_account_service_spec.rb'
- './spec/services/clusters/kubernetes/fetch_kubernetes_token_service_spec.rb'
@@ -10238,14 +10006,12 @@
- './spec/services/users/destroy_service_spec.rb'
- './spec/services/users/dismiss_callout_service_spec.rb'
- './spec/services/users/dismiss_group_callout_service_spec.rb'
-- './spec/services/users/dismiss_namespace_callout_service_spec.rb'
- './spec/services/users/dismiss_project_callout_service_spec.rb'
- './spec/services/users/email_verification/generate_token_service_spec.rb'
- './spec/services/users/email_verification/validate_token_service_spec.rb'
- './spec/services/users/in_product_marketing_email_records_spec.rb'
- './spec/services/users/keys_count_service_spec.rb'
- './spec/services/users/last_push_event_service_spec.rb'
-- './spec/services/users/migrate_to_ghost_user_service_spec.rb'
- './spec/services/users/refresh_authorized_projects_service_spec.rb'
- './spec/services/users/registrations_build_service_spec.rb'
- './spec/services/users/reject_service_spec.rb'
@@ -10296,7 +10062,6 @@
- './spec/sidekiq_cluster/sidekiq_cluster_spec.rb'
- './spec/sidekiq/cron/job_gem_dependency_spec.rb'
- './spec/spam/concerns/has_spam_action_response_fields_spec.rb'
-- './spec/support_specs/database/multiple_databases_spec.rb'
- './spec/support_specs/database/prevent_cross_joins_spec.rb'
- './spec/support_specs/graphql/arguments_spec.rb'
- './spec/support_specs/graphql/field_selection_spec.rb'
@@ -10416,7 +10181,6 @@
- './spec/validators/addressable_url_validator_spec.rb'
- './spec/validators/any_field_validator_spec.rb'
- './spec/validators/array_members_validator_spec.rb'
-- './spec/validators/branch_filter_validator_spec.rb'
- './spec/validators/color_validator_spec.rb'
- './spec/validators/cron_freeze_period_timezone_validator_spec.rb'
- './spec/validators/cron_validator_spec.rb'
@@ -10510,7 +10274,6 @@
- './spec/views/profiles/notifications/show.html.haml_spec.rb'
- './spec/views/profiles/preferences/show.html.haml_spec.rb'
- './spec/views/profiles/show.html.haml_spec.rb'
-- './spec/views/projects/artifacts/_artifact.html.haml_spec.rb'
- './spec/views/projects/blob/_viewer.html.haml_spec.rb'
- './spec/views/projects/branches/index.html.haml_spec.rb'
- './spec/views/projects/commit/branches.html.haml_spec.rb'
@@ -10555,7 +10318,6 @@
- './spec/views/registrations/welcome/show.html.haml_spec.rb'
- './spec/views/search/_results.html.haml_spec.rb'
- './spec/views/search/show.html.haml_spec.rb'
-- './spec/views/shared/deploy_tokens/_form.html.haml_spec.rb'
- './spec/views/shared/groups/_dropdown.html.haml_spec.rb'
- './spec/views/shared/issuable/_sidebar.html.haml_spec.rb'
- './spec/views/shared/_label_row.html.haml_spec.rb'
@@ -10570,7 +10332,6 @@
- './spec/views/shared/projects/_project.html.haml_spec.rb'
- './spec/views/shared/runners/_runner_details.html.haml_spec.rb'
- './spec/views/shared/snippets/_snippet.html.haml_spec.rb'
-- './spec/views/shared/ssh_keys/_key_details.html.haml_spec.rb'
- './spec/views/shared/wikis/_sidebar.html.haml_spec.rb'
- './spec/workers/admin_email_worker_spec.rb'
- './spec/workers/analytics/usage_trends/counter_job_worker_spec.rb'
@@ -10635,18 +10396,12 @@
- './spec/workers/ci/track_failed_build_worker_spec.rb'
- './spec/workers/ci/update_locked_unknown_artifacts_worker_spec.rb'
- './spec/workers/cleanup_container_repository_worker_spec.rb'
-- './spec/workers/cluster_configure_istio_worker_spec.rb'
-- './spec/workers/cluster_provision_worker_spec.rb'
- './spec/workers/clusters/agents/delete_expired_events_worker_spec.rb'
- './spec/workers/clusters/applications/activate_integration_worker_spec.rb'
- './spec/workers/clusters/applications/deactivate_integration_worker_spec.rb'
-- './spec/workers/clusters/applications/wait_for_uninstall_app_worker_spec.rb'
- './spec/workers/clusters/cleanup/project_namespace_worker_spec.rb'
- './spec/workers/clusters/cleanup/service_account_worker_spec.rb'
- './spec/workers/clusters/integrations/check_prometheus_health_worker_spec.rb'
-- './spec/workers/cluster_update_app_worker_spec.rb'
-- './spec/workers/cluster_wait_for_app_update_worker_spec.rb'
-- './spec/workers/cluster_wait_for_ingress_ip_address_worker_spec.rb'
- './spec/workers/concerns/application_worker_spec.rb'
- './spec/workers/concerns/cluster_agent_queue_spec.rb'
- './spec/workers/concerns/cluster_queue_spec.rb'
@@ -10799,10 +10554,6 @@
- './spec/workers/metrics/dashboard/sync_dashboards_worker_spec.rb'
- './spec/workers/migrate_external_diffs_worker_spec.rb'
- './spec/workers/namespaces/in_product_marketing_emails_worker_spec.rb'
-- './spec/workers/namespaces/onboarding_issue_created_worker_spec.rb'
-- './spec/workers/namespaces/onboarding_pipeline_created_worker_spec.rb'
-- './spec/workers/namespaces/onboarding_progress_worker_spec.rb'
-- './spec/workers/namespaces/onboarding_user_added_worker_spec.rb'
- './spec/workers/namespaces/process_sync_events_worker_spec.rb'
- './spec/workers/namespaces/prune_aggregation_schedules_worker_spec.rb'
- './spec/workers/namespaces/root_statistics_worker_spec.rb'
@@ -10918,7 +10669,6 @@
- './spec/workers/users/create_statistics_worker_spec.rb'
- './spec/workers/users/deactivate_dormant_users_worker_spec.rb'
- './spec/workers/user_status_cleanup/batch_worker_spec.rb'
-- './spec/workers/wait_for_cluster_creation_worker_spec.rb'
- './spec/workers/web_hooks/log_destroy_worker_spec.rb'
- './spec/workers/web_hook_worker_spec.rb'
- './spec/workers/wikis/git_garbage_collect_worker_spec.rb'
diff --git a/spec/support/services/clusters/create_service_shared.rb b/spec/support/services/clusters/create_service_shared.rb
index f8a58a828ce..80fa7c58515 100644
--- a/spec/support/services/clusters/create_service_shared.rb
+++ b/spec/support/services/clusters/create_service_shared.rb
@@ -37,9 +37,7 @@ RSpec.shared_context 'invalid cluster create params' do
end
RSpec.shared_examples 'create cluster service success' do
- it 'creates a cluster object and performs a worker' do
- expect(ClusterProvisionWorker).to receive(:perform_async)
-
+ it 'creates a cluster object' do
expect { subject }
.to change { Clusters::Cluster.count }.by(1)
.and change { Clusters::Providers::Gcp.count }.by(1)
@@ -60,7 +58,6 @@ end
RSpec.shared_examples 'create cluster service error' do
it 'returns an error' do
- expect(ClusterProvisionWorker).not_to receive(:perform_async)
expect { subject }.to change { Clusters::Cluster.count }.by(0)
expect(subject.errors[:"provider_gcp.gcp_project_id"]).to be_present
end
diff --git a/spec/support/shared_contexts/bulk_imports_requests_shared_context.rb b/spec/support/shared_contexts/bulk_imports_requests_shared_context.rb
index 2f74d3131ab..e8fc498cbf7 100644
--- a/spec/support/shared_contexts/bulk_imports_requests_shared_context.rb
+++ b/spec/support/shared_contexts/bulk_imports_requests_shared_context.rb
@@ -15,7 +15,7 @@ RSpec.shared_context 'bulk imports requests context' do |url|
let(:request_headers) { { 'Content-Type' => 'application/json' } }
before do
- stub_request(:get, "#{url}/api/v4/version?page=1&per_page=20&private_token=demo-pat")
+ stub_request(:get, "#{url}/api/v4/version?private_token=demo-pat")
.with(headers: request_headers)
.to_return(
status: 200,
diff --git a/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
index ca2fe8a6c54..bf5158c9a92 100644
--- a/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
+++ b/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
@@ -40,7 +40,7 @@ Integration.available_integration_names.each do |integration|
let(:integration_attrs) do
integration_attrs_list.inject({}) do |hash, k|
- if k =~ /^(token*|.*_token|.*_key)/
+ if k =~ /^(token*|.*_token|.*_key)/ && k =~ /^[^app_store]/
hash.merge!(k => 'secrettoken')
elsif integration == 'confluence' && k == :confluence_url
hash.merge!(k => 'https://example.atlassian.net/wiki')
@@ -68,6 +68,12 @@ Integration.available_integration_names.each do |integration|
hash.merge!(k => "match_any")
elsif integration == 'campfire' && k == :room
hash.merge!(k => '1234')
+ elsif integration == 'apple_app_store' && k == :app_store_issuer_id
+ hash.merge!(k => 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee')
+ elsif integration == 'apple_app_store' && k == :app_store_private_key
+ hash.merge!(k => File.read('spec/fixtures/ssl_key.pem'))
+ elsif integration == 'apple_app_store' && k == :app_store_key_id
+ hash.merge!(k => 'ABC1')
else
hash.merge!(k => "someword")
end
diff --git a/spec/support/shared_contexts/markdown_golden_master_shared_examples.rb b/spec/support/shared_contexts/markdown_golden_master_shared_examples.rb
deleted file mode 100644
index 72e23e6d5fa..00000000000
--- a/spec/support/shared_contexts/markdown_golden_master_shared_examples.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-# See spec/fixtures/markdown/markdown_golden_master_examples.yml for documentation on how this spec works.
-RSpec.shared_context 'API::Markdown Golden Master shared context' do |markdown_yml_file_path|
- include ApiHelpers
- include WikiHelpers
-
- let_it_be(:user) { create(:user, username: 'gfm_user') }
-
- let_it_be(:group) { create(:group, :public) }
- let_it_be(:project) { create(:project, :public, :repository, group: group) }
-
- let_it_be(:label) { create(:label, project: project, title: 'bug') }
- let_it_be(:label2) { create(:label, project: project, title: 'UX bug') }
-
- let_it_be(:milestone) { create(:milestone, project: project, title: '1.1') }
- let_it_be(:issue) { create(:issue, project: project) }
- let_it_be(:merge_request) { create(:merge_request, source_project: project) }
-
- let_it_be(:project_wiki) { create(:project_wiki, project: project, user: user) }
-
- let_it_be(:project_wiki_page) { create(:wiki_page, wiki: project_wiki) }
-
- before(:all) do
- group.add_owner(user)
- project.add_maintainer(user)
- end
-
- before do
- sign_in(user)
- end
-
- markdown_examples = begin
- yaml = File.read(markdown_yml_file_path)
- YAML.safe_load(yaml, symbolize_names: true, aliases: true)
- end
-
- it "examples must be unique and alphabetized by name", :unlimited_max_formatted_output_length do
- names = markdown_examples.map { |example| example[:name] }
- expect(names).to eq(names.sort.uniq)
- end
-
- if focused_markdown_examples_string = ENV['FOCUSED_MARKDOWN_EXAMPLES']
- focused_markdown_examples = focused_markdown_examples_string.split(',').map(&:strip) || []
- markdown_examples.reject! { |markdown_example| !focused_markdown_examples.include?(markdown_example.fetch(:name)) }
- end
-
- markdown_examples.each do |markdown_example|
- name = markdown_example.fetch(:name)
- api_context = markdown_example[:api_context]
-
- if api_context && !name.end_with?("_for_#{api_context}")
- raise "Name must have suffix of '_for_#{api_context}' to the api_context"
- end
-
- context "for #{name}#{api_context ? " (api_context: #{api_context})" : ''}" do
- let(:pending_reason) do
- pending_value = markdown_example.fetch(:pending, nil)
- get_pending_reason(pending_value)
- end
-
- let(:example_markdown) { markdown_example.fetch(:markdown) }
- let(:example_html) { markdown_example.fetch(:html) }
- let(:substitutions) { markdown_example.fetch(:substitutions, {}) }
-
- it "verifies conversion of GFM to HTML", :unlimited_max_formatted_output_length do
- stub_application_setting(plantuml_enabled: true, plantuml_url: 'http://localhost:8080')
- stub_application_setting(kroki_enabled: true, kroki_url: 'http://localhost:8000')
-
- pending pending_reason if pending_reason
-
- normalized_example_html = normalize_html(example_html, substitutions)
-
- api_url = get_url_for_api_context(api_context)
-
- post api_url, params: { text: example_markdown, gfm: true }
- expect(response).to be_successful
- response_body = Gitlab::Json.parse(response.body)
- # Some requests have the HTML in the `html` key, others in the `body` key.
- response_html = response_body['body'] ? response_body.fetch('body') : response_body.fetch('html')
- normalized_response_html = normalize_html(response_html, substitutions)
-
- expect(normalized_response_html).to eq(normalized_example_html)
- end
-
- def get_pending_reason(pending_value)
- return false unless pending_value
-
- return pending_value if pending_value.is_a?(String)
-
- pending_value[:backend] || false
- end
-
- def normalize_html(html, substitutions)
- normalized_html = html.dup
- # Note: having the top level `substitutions` data structure be a hash of arrays
- # allows us to compose multiple substitutions via YAML anchors (YAML anchors
- # pointing to arrays can't be combined)
- substitutions.each_value do |substitution_entry|
- substitution_entry.each do |substitution|
- regex = substitution.fetch(:regex)
- replacement = substitution.fetch(:replacement)
- normalized_html.gsub!(%r{#{regex}}, replacement)
- end
- end
-
- normalized_html
- end
- end
- end
-
- def supported_api_contexts
- %w(project group project_wiki)
- end
-
- def get_url_for_api_context(api_context)
- case api_context
- when 'project'
- "/#{project.full_path}/preview_markdown"
- when 'group'
- "/groups/#{group.full_path}/preview_markdown"
- when 'project_wiki'
- "/#{project.full_path}/-/wikis/#{project_wiki_page.slug}/preview_markdown"
- when nil
- api "/markdown"
- else
- raise "Error: 'context' extension was '#{api_context}'. It must be one of: #{supported_api_contexts.join(',')}"
- end
- end
-end
diff --git a/spec/support/shared_contexts/navbar_structure_context.rb b/spec/support/shared_contexts/navbar_structure_context.rb
index af35a5ff068..9c7cf831241 100644
--- a/spec/support/shared_contexts/navbar_structure_context.rb
+++ b/spec/support/shared_contexts/navbar_structure_context.rb
@@ -221,3 +221,46 @@ RSpec.shared_context 'group navbar structure' do
]
end
end
+
+RSpec.shared_context 'dashboard navbar structure' do
+ let(:structure) do
+ [
+ {
+ nav_item: "Your work",
+ nav_sub_items: []
+ },
+ {
+ nav_item: _("Projects"),
+ nav_sub_items: []
+ },
+ {
+ nav_item: _("Groups"),
+ nav_sub_items: []
+ },
+ {
+ nav_item: _("Issues"),
+ nav_sub_items: []
+ },
+ {
+ nav_item: _("Merge requests"),
+ nav_sub_items: []
+ },
+ {
+ nav_item: _("To-Do List"),
+ nav_sub_items: []
+ },
+ {
+ nav_item: _("Milestones"),
+ nav_sub_items: []
+ },
+ {
+ nav_item: _("Snippets"),
+ nav_sub_items: []
+ },
+ {
+ nav_item: _("Activity"),
+ nav_sub_items: []
+ }
+ ]
+ end
+end
diff --git a/spec/support/shared_contexts/policies/group_policy_shared_context.rb b/spec/support/shared_contexts/policies/group_policy_shared_context.rb
index f6ac98c7669..fddcecbe125 100644
--- a/spec/support/shared_contexts/policies/group_policy_shared_context.rb
+++ b/spec/support/shared_contexts/policies/group_policy_shared_context.rb
@@ -12,7 +12,7 @@ RSpec.shared_context 'GroupPolicy context' do
let(:public_permissions) do
%i[
- read_group read_counts
+ read_group read_counts read_achievement
read_label read_issue_board_list read_milestone read_issue_board
]
end
@@ -57,6 +57,7 @@ RSpec.shared_context 'GroupPolicy context' do
create_projects
create_cluster update_cluster admin_cluster add_cluster
destroy_upload
+ admin_achievement
]
end
diff --git a/spec/support/shared_examples/analytics/cycle_analytics/parentable_examples.rb b/spec/support/shared_examples/analytics/cycle_analytics/parentable_examples.rb
new file mode 100644
index 00000000000..5fd0e685c67
--- /dev/null
+++ b/spec/support/shared_examples/analytics/cycle_analytics/parentable_examples.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'value stream analytics namespace models' do
+ let(:factory_name) { nil }
+
+ context 'when ProjectNamespace is given' do
+ it 'is valid' do
+ project_namespace = create(:project_namespace)
+ model = build(factory_name, namespace: project_namespace)
+
+ expect(model).to be_valid
+ expect(model.save).to be(true)
+ expect(model.namespace).to eq(project_namespace)
+ end
+ end
+
+ context 'when Namespace is given' do
+ it 'fails' do
+ namespace = create(:namespace)
+ model = build(factory_name, namespace: namespace)
+
+ expect(model).to be_invalid
+
+ error_message = s_('CycleAnalytics|the assigned object is not supported')
+ expect(model.errors.messages_for(:namespace)).to eq([error_message])
+ end
+ end
+end
diff --git a/spec/support/shared_examples/controllers/githubish_import_controller_shared_examples.rb b/spec/support/shared_examples/controllers/githubish_import_controller_shared_examples.rb
index 5506b05ca55..de38d1ff9f8 100644
--- a/spec/support/shared_examples/controllers/githubish_import_controller_shared_examples.rb
+++ b/spec/support/shared_examples/controllers/githubish_import_controller_shared_examples.rb
@@ -258,7 +258,7 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
.to receive(:new).with(provider_repo, provider_repo[:name], user.namespace, user, type: provider, **access_params)
.and_return(double(execute: project))
- post :create, format: :json
+ post :create, params: { target_namespace: user.namespace }, format: :json
expect(response).to have_gitlab_http_status(:ok)
end
@@ -272,7 +272,7 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
.to receive(:new).with(provider_repo, provider_repo[:name], user.namespace, user, type: provider, **access_params)
.and_return(double(execute: project))
- post :create, format: :json
+ post :create, params: { target_namespace: user.namespace_path }, format: :json
expect(response).to have_gitlab_http_status(:unprocessable_entity)
expect(json_response['errors']).to eq('Name is invalid, Path is old')
@@ -286,7 +286,7 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
expect(store).to receive(:touch) { "realtime_changes_import_#{provider}_path" }
end
- post :create, format: :json
+ post :create, params: { target_namespace: user.namespace_path }, format: :json
end
context "when the repository owner is the provider user" do
@@ -296,7 +296,7 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
.to receive(:new).with(provider_repo, provider_repo[:name], user.namespace, user, type: provider, **access_params)
.and_return(double(execute: project))
- post :create, format: :json
+ post :create, params: { target_namespace: user.namespace_path }, format: :json
end
end
@@ -308,7 +308,7 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
.to receive(:new).with(provider_repo, provider_repo[:name], user.namespace, user, type: provider, **access_params)
.and_return(double(execute: project))
- post :create, format: :json
+ post :create, params: { target_namespace: user.namespace_path }, format: :json
end
end
end
@@ -333,7 +333,7 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
.to receive(:new).with(provider_repo, provider_repo[:name], existing_namespace, user, type: provider, **access_params)
.and_return(double(execute: project))
- post :create, format: :json
+ post :create, params: { target_namespace: user.namespace_path }, format: :json
end
end
@@ -345,47 +345,17 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
.to receive(:new).with(provider_repo, provider_repo[:name], user.namespace, user, type: provider, **access_params)
.and_return(double(execute: project))
- post :create, format: :json
+ post :create, params: { target_namespace: user.namespace_path }, format: :json
end
end
end
context "when a namespace with the provider user's username doesn't exist" do
context "when current user can create namespaces" do
- it "creates the namespace" do
- expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).and_return(double(execute: project))
-
- expect { post :create, params: { target_namespace: provider_repo[:name] }, format: :json }.to change { Namespace.count }.by(1)
- end
-
- it "takes the new namespace" do
- expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, provider_repo[:name], an_instance_of(Group), user, type: provider, **access_params)
- .and_return(double(execute: project))
-
- post :create, params: { target_namespace: provider_repo[:name] }, format: :json
- end
- end
-
- context "when current user can't create namespaces" do
- before do
- user.update_attribute(:can_create_group, false)
- end
-
- it "doesn't create the namespace" do
- expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).and_return(double(execute: project))
-
- expect { post :create, format: :json }.not_to change { Namespace.count }
- end
+ it "does not create the namespace" do
+ expect(Gitlab::LegacyGithubImport::ProjectCreator).not_to receive(:new)
- it "takes the current user's namespace" do
- expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, provider_repo[:name], user.namespace, user, type: provider, **access_params)
- .and_return(double(execute: project))
-
- post :create, format: :json
+ expect { post :create, params: { target_namespace: provider_repo[:name] }, format: :json }.not_to change { Namespace.count }
end
end
end
@@ -405,14 +375,6 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
post :create, params: { target_namespace: test_namespace.name, new_name: test_name }, format: :json
end
-
- it 'takes the selected name and default namespace' do
- expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, user.namespace, user, type: provider, **access_params)
- .and_return(double(execute: project))
-
- post :create, params: { new_name: test_name }, format: :json
- end
end
context 'user has chosen an existing nested namespace and name for the project' do
@@ -437,31 +399,16 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
context 'user has chosen a non-existent nested namespaces and name for the project' do
let(:test_name) { 'test_name' }
- it 'takes the selected namespace and name' do
+ it 'does not take the selected namespace and name' do
expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, type: provider, **access_params)
- .and_return(double(execute: project))
+ .not_to receive(:new)
post :create, params: { target_namespace: 'foo/bar', new_name: test_name }, format: :json
end
- it 'creates the namespaces' do
- allow(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, type: provider, **access_params)
- .and_return(double(execute: project))
-
+ it 'does not create namespaces' do
expect { post :create, params: { target_namespace: 'foo/bar', new_name: test_name }, format: :json }
- .to change { Namespace.count }.by(2)
- end
-
- it 'new namespace has the right parent' do
- allow(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, type: provider, **access_params)
- .and_return(double(execute: project))
-
- post :create, params: { target_namespace: 'foo/bar', new_name: test_name }, format: :json
-
- expect(Namespace.find_by_path_or_name('bar').parent.path).to eq('foo')
+ .not_to change { Namespace.count }
end
end
@@ -473,55 +420,25 @@ RSpec.shared_examples 'a GitHub-ish import controller: POST create' do
parent_namespace.add_owner(user)
end
- it 'takes the selected namespace and name' do
- expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, type: provider, **access_params)
- .and_return(double(execute: project))
+ it 'does not take the selected namespace and name' do
+ expect(Gitlab::LegacyGithubImport::ProjectCreator).not_to receive(:new)
post :create, params: { target_namespace: 'foo/foobar/bar', new_name: test_name }, format: :json
end
- it 'creates the namespaces' do
- allow(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, type: provider, **access_params)
- .and_return(double(execute: project))
-
+ it 'does not create the namespaces' do
expect { post :create, params: { target_namespace: 'foo/foobar/bar', new_name: test_name }, format: :json }
- .to change { Namespace.count }.by(2)
+ .not_to change { Namespace.count }
end
it 'does not create a new namespace under the user namespace' do
- expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, user.namespace, user, type: provider, **access_params)
- .and_return(double(execute: project))
+ expect(Gitlab::LegacyGithubImport::ProjectCreator).not_to receive(:new)
expect { post :create, params: { target_namespace: "#{user.namespace_path}/test_group", new_name: test_name }, format: :js }
.not_to change { Namespace.count }
end
end
- context 'user cannot create a subgroup inside a group is not a member of' do
- let(:test_name) { 'test_name' }
- let!(:parent_namespace) { create(:group, name: 'foo') }
-
- it 'does not take the selected namespace and name' do
- expect(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, user.namespace, user, type: provider, **access_params)
- .and_return(double(execute: project))
-
- post :create, params: { target_namespace: 'foo/foobar/bar', new_name: test_name }, format: :js
- end
-
- it 'does not create the namespaces' do
- allow(Gitlab::LegacyGithubImport::ProjectCreator)
- .to receive(:new).with(provider_repo, test_name, kind_of(Namespace), user, type: provider, **access_params)
- .and_return(double(execute: project))
-
- expect { post :create, params: { target_namespace: 'foo/foobar/bar', new_name: test_name }, format: :js }
- .not_to change { Namespace.count }
- end
- end
-
context 'user can use a group without having permissions to create a group' do
let(:test_name) { 'test_name' }
let!(:group) { create(:group, name: 'foo') }
diff --git a/spec/support/shared_examples/controllers/issuables_list_metadata_shared_examples.rb b/spec/support/shared_examples/controllers/issuables_list_metadata_shared_examples.rb
index 02915206cc5..446bc4cd92f 100644
--- a/spec/support/shared_examples/controllers/issuables_list_metadata_shared_examples.rb
+++ b/spec/support/shared_examples/controllers/issuables_list_metadata_shared_examples.rb
@@ -42,6 +42,10 @@ RSpec.shared_examples 'issuables list meta-data' do |issuable_type, action = nil
let(:result_issuable) { issuables.first }
let(:search) { result_issuable.title }
+ before do
+ stub_application_setting(search_rate_limit: 0, search_rate_limit_unauthenticated: 0)
+ end
+
# .simple_sorts is the same across all Sortable classes
sorts = ::Issue.simple_sorts.keys + %w[popularity priority label_priority]
sorts.each do |sort|
diff --git a/spec/support/shared_examples/controllers/rate_limited_endpoint_shared_examples.rb b/spec/support/shared_examples/controllers/rate_limited_endpoint_shared_examples.rb
index 20edca1ee9f..b34038ca0e4 100644
--- a/spec/support/shared_examples/controllers/rate_limited_endpoint_shared_examples.rb
+++ b/spec/support/shared_examples/controllers/rate_limited_endpoint_shared_examples.rb
@@ -5,7 +5,9 @@
# - current_user
# - error_message # optional
-RSpec.shared_examples 'rate limited endpoint' do |rate_limit_key:|
+RSpec.shared_examples 'rate limited endpoint' do |rate_limit_key:, graphql: false|
+ let(:error_message) { _('This endpoint has been requested too many times. Try again later.') }
+
context 'when rate limiter enabled', :freeze_time, :clean_gitlab_redis_rate_limiting do
let(:expected_logger_attributes) do
{
@@ -25,8 +27,6 @@ RSpec.shared_examples 'rate limited endpoint' do |rate_limit_key:|
end
end
- let(:error_message) { _('This endpoint has been requested too many times. Try again later.') }
-
before do
allow(Gitlab::ApplicationRateLimiter).to receive(:threshold).with(rate_limit_key).and_return(1)
end
@@ -37,12 +37,16 @@ RSpec.shared_examples 'rate limited endpoint' do |rate_limit_key:|
request
request
- expect(response).to have_gitlab_http_status(:too_many_requests)
+ if graphql
+ expect_graphql_errors_to_include(error_message)
+ else
+ expect(response).to have_gitlab_http_status(:too_many_requests)
- if example.metadata[:type] == :controller
- expect(response.body).to eq(error_message)
- else # it is API spec
- expect(response.body).to eq({ message: { error: error_message } }.to_json)
+ if response.content_type == 'application/json' # it is API spec
+ expect(response.body).to eq({ message: { error: error_message } }.to_json)
+ else
+ expect(response.body).to eq(error_message)
+ end
end
end
end
@@ -57,7 +61,11 @@ RSpec.shared_examples 'rate limited endpoint' do |rate_limit_key:|
request
- expect(response).not_to have_gitlab_http_status(:too_many_requests)
+ if graphql
+ expect_graphql_errors_to_be_empty
+ else
+ expect(response).not_to have_gitlab_http_status(:too_many_requests)
+ end
end
end
end
diff --git a/spec/support/shared_examples/features/code_highlight_shared_examples.rb b/spec/support/shared_examples/features/code_highlight_shared_examples.rb
new file mode 100644
index 00000000000..3917ac9b489
--- /dev/null
+++ b/spec/support/shared_examples/features/code_highlight_shared_examples.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'code highlight' do
+ include PreferencesHelper
+
+ let_it_be(:current_user) { user }
+ let_it_be(:scheme_class) { user_color_scheme }
+
+ it 'has highlighted code', :js do
+ wait_for_requests
+ expect(subject).to have_selector(".js-syntax-highlight.#{scheme_class}")
+ end
+end
diff --git a/spec/support/shared_examples/features/content_editor_shared_examples.rb b/spec/support/shared_examples/features/content_editor_shared_examples.rb
index efdf7513b2d..6cd9c4ce1c4 100644
--- a/spec/support/shared_examples/features/content_editor_shared_examples.rb
+++ b/spec/support/shared_examples/features/content_editor_shared_examples.rb
@@ -4,7 +4,8 @@ RSpec.shared_examples 'edits content using the content editor' do
let(:content_editor_testid) { '[data-testid="content-editor"] [contenteditable].ProseMirror' }
def switch_to_content_editor
- find('[data-testid="toggle-editing-mode-button"] label', text: 'Rich text').click
+ click_button _('View rich text')
+ click_button _('Rich text')
end
def type_in_content_editor(keys)
diff --git a/spec/support/shared_examples/features/dashboard/sidebar_shared_examples.rb b/spec/support/shared_examples/features/dashboard/sidebar_shared_examples.rb
new file mode 100644
index 00000000000..efbd735c451
--- /dev/null
+++ b/spec/support/shared_examples/features/dashboard/sidebar_shared_examples.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples "a dashboard page with sidebar" do |page_path, menu_label|
+ before do
+ sign_in(user)
+ visit send(page_path)
+ end
+
+ let(:sidebar_css) { "aside.nav-sidebar[aria-label=\"Your work\"]" }
+ let(:active_menu_item_css) { "li.active[data-track-label=\"#{menu_label}_menu\"]" }
+
+ it "shows the \"Your work\" sidebar" do
+ expect(page).to have_css(sidebar_css)
+ end
+
+ it "shows the correct sidebar menu item as active" do
+ within(sidebar_css) do
+ expect(page).to have_css(active_menu_item_css)
+ end
+ end
+end
diff --git a/spec/support/shared_examples/features/reportable_note_shared_examples.rb b/spec/support/shared_examples/features/reportable_note_shared_examples.rb
index c35f711111b..9d859403465 100644
--- a/spec/support/shared_examples/features/reportable_note_shared_examples.rb
+++ b/spec/support/shared_examples/features/reportable_note_shared_examples.rb
@@ -36,7 +36,7 @@ RSpec.shared_examples 'reportable note' do |type|
dropdown.click_link('Report abuse to administrator')
expect(find('#user_name')['value']).to match(note.author.username)
- expect(find('#abuse_report_message')['value']).to match(noteable_note_url(note))
+ expect(find('#abuse_report_reported_from_url')['value']).to match(noteable_note_url(note))
end
def open_dropdown(dropdown)
diff --git a/spec/support/shared_examples/finders/issues_finder_shared_examples.rb b/spec/support/shared_examples/finders/issues_finder_shared_examples.rb
index 9d1f05d5543..6f4072ba762 100644
--- a/spec/support/shared_examples/finders/issues_finder_shared_examples.rb
+++ b/spec/support/shared_examples/finders/issues_finder_shared_examples.rb
@@ -550,6 +550,24 @@ RSpec.shared_examples 'issues or work items finder' do |factory, execute_context
expect(items).to contain_exactly(item1, item4, item5)
end
end
+
+ context 'using OR' do
+ let(:params) { { or: { label_name: [label.title, label2.title].join(',') } } }
+
+ it 'returns items that have at least one of the given labels' do
+ expect(items).to contain_exactly(item2, item3)
+ end
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(or_issuable_queries: false)
+ end
+
+ it 'does not add any filter' do
+ expect(items).to contain_exactly(item1, item2, item3, item4, item5)
+ end
+ end
+ end
end
context 'filtering by a label that includes any or none in the title' do
diff --git a/spec/support/shared_examples/graphql/types/merge_request_interactions_type_shared_examples.rb b/spec/support/shared_examples/graphql/types/merge_request_interactions_type_shared_examples.rb
index 0d0dbb112de..19ceb465383 100644
--- a/spec/support/shared_examples/graphql/types/merge_request_interactions_type_shared_examples.rb
+++ b/spec/support/shared_examples/graphql/types/merge_request_interactions_type_shared_examples.rb
@@ -14,7 +14,10 @@ RSpec.shared_examples "a user type with merge request interaction type" do
name
username
email
+ emails
publicEmail
+ commitEmail
+ namespaceCommitEmails
avatarUrl
webUrl
webPath
diff --git a/spec/support/shared_examples/lib/sidebars/your_work/menus/menu_item_examples.rb b/spec/support/shared_examples/lib/sidebars/your_work/menus/menu_item_examples.rb
new file mode 100644
index 00000000000..19c94a3ba5b
--- /dev/null
+++ b/spec/support/shared_examples/lib/sidebars/your_work/menus/menu_item_examples.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.shared_examples 'menu item shows pill based on count' do |count|
+ describe '#has_pill?' do
+ context 'when count is zero' do
+ it 'returns false' do
+ allow(user).to receive(count).and_return(0)
+ expect(subject.has_pill?).to eq false
+ end
+ end
+
+ context 'when count is larger than zero' do
+ it 'returns true' do
+ allow(user).to receive(count).and_return(3)
+ expect(subject.has_pill?).to eq true
+ end
+ end
+ end
+
+ describe '#pill_count' do
+ it "returns the #{count} of the user" do
+ allow(user).to receive(count).and_return(123)
+ expect(subject.pill_count).to eq 123
+ end
+
+ it 'memoizes the query' do
+ subject.pill_count
+
+ control = ActiveRecord::QueryRecorder.new do
+ subject.pill_count
+ end
+
+ expect(control.count).to eq 0
+ end
+ end
+end
diff --git a/spec/support/shared_examples/models/concerns/counter_attribute_shared_examples.rb b/spec/support/shared_examples/models/concerns/counter_attribute_shared_examples.rb
index a20bb794095..f98be12523d 100644
--- a/spec/support/shared_examples/models/concerns/counter_attribute_shared_examples.rb
+++ b/spec/support/shared_examples/models/concerns/counter_attribute_shared_examples.rb
@@ -14,13 +14,14 @@ RSpec.shared_examples_for CounterAttribute do |counter_attributes|
counter_attributes.each do |attribute|
describe attribute do
describe '#increment_counter', :redis do
- let(:increment) { 10 }
+ let(:amount) { 10 }
+ let(:increment) { Gitlab::Counters::Increment.new(amount: amount) }
let(:counter_key) { model.counter(attribute).key }
subject { model.increment_counter(attribute, increment) }
context 'when attribute is a counter attribute' do
- where(:increment) { [10, -3] }
+ where(:amount) { [10, -3] }
with_them do
it 'increments the counter in Redis and logs it' do
@@ -29,8 +30,8 @@ RSpec.shared_examples_for CounterAttribute do |counter_attributes|
message: 'Increment counter attribute',
attribute: attribute,
project_id: model.project_id,
- increment: increment,
- new_counter_value: 0 + increment,
+ increment: amount,
+ new_counter_value: 0 + amount,
current_db_value: model.read_attribute(attribute),
'correlation_id' => an_instance_of(String),
'meta.feature_category' => 'test',
@@ -42,7 +43,7 @@ RSpec.shared_examples_for CounterAttribute do |counter_attributes|
Gitlab::Redis::SharedState.with do |redis|
counter = redis.get(counter_key)
- expect(counter).to eq(increment.to_s)
+ expect(counter).to eq(amount.to_s)
end
end
@@ -59,8 +60,8 @@ RSpec.shared_examples_for CounterAttribute do |counter_attributes|
end
end
- context 'when increment is 0' do
- let(:increment) { 0 }
+ context 'when increment amount is 0' do
+ let(:amount) { 0 }
it 'does nothing' do
expect(FlushCounterIncrementsWorker).not_to receive(:perform_in)
@@ -71,37 +72,49 @@ RSpec.shared_examples_for CounterAttribute do |counter_attributes|
end
end
end
- end
- end
- describe '#reset_counter!' do
- let(:attribute) { counter_attributes.first }
- let(:counter_key) { model.counter(attribute).key }
+ describe '#bulk_increment_counter', :redis do
+ let(:increments) { [Gitlab::Counters::Increment.new(amount: 10), Gitlab::Counters::Increment.new(amount: 5)] }
+ let(:total_amount) { increments.sum(&:amount) }
+ let(:counter_key) { model.counter(attribute).key }
- before do
- model.update!(attribute => 123)
- model.increment_counter(attribute, 10)
- end
+ subject { model.bulk_increment_counter(attribute, increments) }
- subject { model.reset_counter!(attribute) }
+ context 'when attribute is a counter attribute' do
+ it 'increments the counter in Redis and logs it' do
+ expect(Gitlab::AppLogger).to receive(:info).with(
+ hash_including(
+ message: 'Increment counter attribute',
+ attribute: attribute,
+ project_id: model.project_id,
+ increment: total_amount,
+ new_counter_value: 0 + total_amount,
+ current_db_value: model.read_attribute(attribute),
+ 'correlation_id' => an_instance_of(String),
+ 'meta.feature_category' => 'test',
+ 'meta.caller_id' => 'caller'
+ )
+ )
- it 'resets the attribute value to 0 and clears existing counter', :aggregate_failures do
- expect { subject }.to change { model.reload.send(attribute) }.from(123).to(0)
+ subject
- Gitlab::Redis::SharedState.with do |redis|
- key_exists = redis.exists?(counter_key)
- expect(key_exists).to be_falsey
- end
- end
+ Gitlab::Redis::SharedState.with do |redis|
+ counter = redis.get(counter_key)
+ expect(counter).to eq(total_amount.to_s)
+ end
+ end
- it_behaves_like 'obtaining lease to update database' do
- context 'when the execution raises error' do
- before do
- allow(model).to receive(:update!).and_raise(StandardError, 'Something went wrong')
- end
+ it 'does not increment the counter for the record' do
+ expect { subject }.not_to change { model.reset.read_attribute(attribute) }
+ end
- it 'reraises error' do
- expect { subject }.to raise_error(StandardError, 'Something went wrong')
+ it 'schedules a worker to flush counter increments asynchronously' do
+ expect(FlushCounterIncrementsWorker).to receive(:perform_in)
+ .with(Gitlab::Counters::BufferedCounter::WORKER_DELAY, model.class.name, model.id, attribute)
+ .and_call_original
+
+ subject
+ end
end
end
end
diff --git a/spec/support/shared_examples/models/concerns/integrations/reset_secret_fields_shared_examples.rb b/spec/support/shared_examples/models/concerns/integrations/reset_secret_fields_shared_examples.rb
index 873f858e432..c51a6c4f6fd 100644
--- a/spec/support/shared_examples/models/concerns/integrations/reset_secret_fields_shared_examples.rb
+++ b/spec/support/shared_examples/models/concerns/integrations/reset_secret_fields_shared_examples.rb
@@ -42,7 +42,7 @@ RSpec.shared_examples Integrations::ResetSecretFields do
# Treat values as persisted
integration.reset_updated_properties
- integration.instance_variable_set('@old_data_fields', nil) if integration.supports_data_fields?
+ integration.instance_variable_set(:@old_data_fields, nil) if integration.supports_data_fields?
end
context 'when an exposing field has changed' do
diff --git a/spec/support/shared_examples/models/cycle_analytics_stage_shared_examples.rb b/spec/support/shared_examples/models/cycle_analytics_stage_shared_examples.rb
index 457ee49938f..5eeefacdeb9 100644
--- a/spec/support/shared_examples/models/cycle_analytics_stage_shared_examples.rb
+++ b/spec/support/shared_examples/models/cycle_analytics_stage_shared_examples.rb
@@ -25,7 +25,7 @@ RSpec.shared_examples 'value stream analytics stage' do
stage = described_class.new(valid_params.except(:parent))
expect(stage).to be_invalid
- expect(stage.errors[parent_name]).to include("can't be blank")
+ expect(stage.errors[parent_name]).to include('must exist')
end
it 'validates presence of start_event_identifier' do
diff --git a/spec/support/shared_examples/models/member_shared_examples.rb b/spec/support/shared_examples/models/member_shared_examples.rb
index f8cff5c5558..7159c55e303 100644
--- a/spec/support/shared_examples/models/member_shared_examples.rb
+++ b/spec/support/shared_examples/models/member_shared_examples.rb
@@ -207,16 +207,14 @@ RSpec.shared_examples_for "member creation" do
source.request_access(user)
end
- it 'does not add the requester as a regular member', :aggregate_failures do
+ it 'adds the requester as a member', :aggregate_failures do
expect(source.users).not_to include(user)
- expect(source.requesters.exists?(user_id: user)).to be_truthy
+ expect(source.requesters.exists?(user_id: user)).to eq(true)
- expect do
- described_class.add_member(source, user, :maintainer)
- end.to raise_error(Gitlab::Access::AccessDeniedError)
+ described_class.add_member(source, user, :maintainer)
- expect(source.users.reload).not_to include(user)
- expect(source.requesters.reload.exists?(user_id: user)).to be_truthy
+ expect(source.users.reload).to include(user)
+ expect(source.requesters.reload.exists?(user_id: user)).to eq(false)
end
end
diff --git a/spec/support/shared_examples/models/members_notifications_shared_example.rb b/spec/support/shared_examples/models/members_notifications_shared_example.rb
index e74aab95e46..e28220334ac 100644
--- a/spec/support/shared_examples/models/members_notifications_shared_example.rb
+++ b/spec/support/shared_examples/models/members_notifications_shared_example.rb
@@ -51,7 +51,7 @@ RSpec.shared_examples 'members notifications' do |entity_type|
it "calls NotificationService.new_#{entity_type}_member" do
expect(notification_service).to receive(:"new_#{entity_type}_member").with(member)
- member.accept_request
+ member.accept_request(create(:user))
end
end
diff --git a/spec/support/shared_examples/models/relative_positioning_shared_examples.rb b/spec/support/shared_examples/models/relative_positioning_shared_examples.rb
index b8d12a6da59..2b46c8c8fb9 100644
--- a/spec/support/shared_examples/models/relative_positioning_shared_examples.rb
+++ b/spec/support/shared_examples/models/relative_positioning_shared_examples.rb
@@ -20,6 +20,7 @@ RSpec.shared_examples 'a class that supports relative positioning' do
let(:new_item) { create_item(relative_position: nil) }
let(:set_size) { RelativePositioning.mover.context(item1).scoped_items.count }
+ let(:items_with_nil_position_sample_quantity) { 101 }
def create_item(params = {})
create(factory, params.merge(default_params))
@@ -163,7 +164,7 @@ RSpec.shared_examples 'a class that supports relative positioning' do
end
it 'can move many nulls' do
- nils = create_items_with_positions([nil] * 101)
+ nils = create_items_with_positions([nil] * items_with_nil_position_sample_quantity)
described_class.move_nulls_to_end(nils)
diff --git a/spec/support/shared_examples/models/resource_event_shared_examples.rb b/spec/support/shared_examples/models/resource_event_shared_examples.rb
index 80806ee768a..8cab2de076d 100644
--- a/spec/support/shared_examples/models/resource_event_shared_examples.rb
+++ b/spec/support/shared_examples/models/resource_event_shared_examples.rb
@@ -161,3 +161,15 @@ RSpec.shared_examples 'a resource event for merge requests' do
end
end
end
+
+RSpec.shared_examples 'a note for work item resource event' do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project) }
+ let_it_be(:work_item) { create(:work_item, :task, project: project, author: user) }
+
+ it 'builds synthetic note with correct synthetic_note_class' do
+ event = build(described_class.name.underscore.to_sym, issue: work_item)
+
+ expect(event.work_item_synthetic_system_note.class.name).to eq(event.synthetic_note_class.name)
+ end
+end
diff --git a/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb b/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
index eb742921d35..5aaa93aecef 100644
--- a/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
+++ b/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
@@ -60,8 +60,11 @@ RSpec.shared_examples 'UpdateProjectStatistics' do |with_counter_attribute|
end
it 'stores pending increments for async update' do
+ expected_increment = have_attributes(amount: delta, ref: subject.id)
+
expect(ProjectStatistics)
.to receive(:increment_statistic)
+ .with(project, project_statistics_name, expected_increment)
.and_call_original
subject.write_attribute(statistic_attribute, read_attribute + delta)
@@ -108,11 +111,8 @@ RSpec.shared_examples 'UpdateProjectStatistics' do |with_counter_attribute|
end
context 'when it is destroyed from the project level' do
- it 'does not update the project statistics' do
- expect(ProjectStatistics)
- .not_to receive(:increment_statistic)
-
- expect(Projects::DestroyService.new(project, project.first_owner).execute).to eq(true)
+ it 'does not store pending increments for async update' do
+ expect { Projects::DestroyService.new(project, project.first_owner).execute }.not_to change { read_pending_increment }
end
it 'does not schedule a namespace statistics worker' do
diff --git a/spec/support/shared_examples/namespaces/members.rb b/spec/support/shared_examples/namespaces/members.rb
new file mode 100644
index 00000000000..ed1ea23226c
--- /dev/null
+++ b/spec/support/shared_examples/namespaces/members.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'query without source filters' do
+ it do
+ expect(subject.where_values_hash.keys).not_to include('source_id', 'source_type')
+ end
+end
+
+RSpec.shared_examples 'query with source filters' do
+ it do
+ expect(subject.where_values_hash.keys).to include('source_id', 'source_type')
+ end
+end
diff --git a/spec/support/shared_examples/observability/csp_shared_examples.rb b/spec/support/shared_examples/observability/csp_shared_examples.rb
index 868d7023d14..0cd211f69eb 100644
--- a/spec/support/shared_examples/observability/csp_shared_examples.rb
+++ b/spec/support/shared_examples/observability/csp_shared_examples.rb
@@ -2,9 +2,17 @@
# Verifies that the proper CSP rules for Observabilty UI are applied to a given controller/path
#
-# The path under test needs to be declared with `let(:tested_path) { .. }` in the context including this example
+# It requires the following variables declared in the context including this example:
+#
+# - `tested_path`: the path under test
+# - `user`: the test user
+# - `group`: the test group
+#
+# e.g.
#
# ```
+# let_it_be(:group) { create(:group) }
+# let_it_be(:user) { create(:user) }
# it_behaves_like "observability csp policy" do
# let(:tested_path) { ....the path under test }
# end
@@ -33,6 +41,9 @@ RSpec.shared_examples 'observability csp policy' do |controller_class = describe
before do
setup_csp_for_controller(controller_class, csp, any_time: true)
+ group.add_developer(user)
+ login_as(user)
+ allow(Gitlab::Observability).to receive(:observability_enabled?).and_return(true)
end
subject do
@@ -48,6 +59,40 @@ RSpec.shared_examples 'observability csp policy' do |controller_class = describe
end
end
+ context 'when observability is disabled' do
+ let(:csp) do
+ ActionDispatch::ContentSecurityPolicy.new do |p|
+ p.frame_src 'https://something.test'
+ end
+ end
+
+ before do
+ allow(Gitlab::Observability).to receive(:observability_enabled?).and_return(false)
+ end
+
+ it 'does not add observability urls to the csp header' do
+ expect(subject).to include("frame-src https://something.test")
+ expect(subject).not_to include("#{observability_url} #{signin_url} #{oauth_url}")
+ end
+ end
+
+ context 'when checking if observability is enabled' do
+ let(:csp) do
+ ActionDispatch::ContentSecurityPolicy.new do |p|
+ p.frame_src 'https://something.test'
+ end
+ end
+
+ it 'check access for a given user and group' do
+ allow(Gitlab::Observability).to receive(:observability_enabled?)
+
+ get tested_path
+
+ expect(Gitlab::Observability).to have_received(:observability_enabled?)
+ .with(user, group).at_least(:once)
+ end
+ end
+
context 'when frame-src exists in the CSP config' do
let(:csp) do
ActionDispatch::ContentSecurityPolicy.new do |p|
diff --git a/spec/support/shared_examples/quick_actions/issuable/close_quick_action_shared_examples.rb b/spec/support/shared_examples/quick_actions/issuable/close_quick_action_shared_examples.rb
index ca6536444fd..d8690356f81 100644
--- a/spec/support/shared_examples/quick_actions/issuable/close_quick_action_shared_examples.rb
+++ b/spec/support/shared_examples/quick_actions/issuable/close_quick_action_shared_examples.rb
@@ -12,10 +12,10 @@ RSpec.shared_examples 'close quick action' do |issuable_type|
before do
case issuable_type
when :merge_request
- visit public_send('namespace_project_new_merge_request_path', project.namespace, project, new_url_opts)
+ visit public_send(:namespace_project_new_merge_request_path, project.namespace, project, new_url_opts)
wait_for_all_requests
when :issue
- visit public_send('new_namespace_project_issue_path', project.namespace, project, new_url_opts)
+ visit public_send(:new_namespace_project_issue_path, project.namespace, project, new_url_opts)
wait_for_all_requests
end
end
diff --git a/spec/support/shared_examples/quick_actions/issue/promote_to_incident_quick_action_shared_examples.rb b/spec/support/shared_examples/quick_actions/issue/promote_to_incident_quick_action_shared_examples.rb
index 5167d27f8b9..3f1a98ca08e 100644
--- a/spec/support/shared_examples/quick_actions/issue/promote_to_incident_quick_action_shared_examples.rb
+++ b/spec/support/shared_examples/quick_actions/issue/promote_to_incident_quick_action_shared_examples.rb
@@ -36,5 +36,33 @@ RSpec.shared_examples 'promote_to_incident quick action' do
expect(page).to have_content('Could not apply promote_to_incident command')
end
end
+
+ context 'on issue creation' do
+ it 'promotes issue to incident' do
+ visit new_project_issue_path(project)
+ fill_in('Title', with: 'Title')
+ fill_in('Description', with: '/promote_to_incident')
+ click_button('Create issue')
+
+ wait_for_all_requests
+
+ expect(page).to have_content("Incident created just now by #{user.name}")
+ end
+
+ context 'when incident is selected for issue type' do
+ it 'promotes issue to incident' do
+ visit new_project_issue_path(project)
+ fill_in('Title', with: 'Title')
+ find('.js-issuable-type-filter-dropdown-wrap').click
+ click_link('Incident')
+ fill_in('Description', with: '/promote_to_incident')
+ click_button('Create issue')
+
+ wait_for_all_requests
+
+ expect(page).to have_content("Incident created just now by #{user.name}")
+ end
+ end
+ end
end
end
diff --git a/spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb b/spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb
index d4479e462af..d4af9e570d1 100644
--- a/spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/graphql/issue_list_shared_examples.rb
@@ -17,6 +17,11 @@ RSpec.shared_examples 'graphql issue list request spec' do
end
describe 'filters' do
+ before_all do
+ issue_a.assignee_ids = current_user.id
+ issue_b.assignee_ids = another_user.id
+ end
+
context 'when filtering by assignees' do
context 'when both assignee_username filters are provided' do
let(:issue_filter_params) do
@@ -44,12 +49,30 @@ RSpec.shared_examples 'graphql issue list request spec' do
end
context 'when filtering by unioned arguments' do
- let(:issue_filter_params) { { or: { assignee_usernames: [current_user.username, another_user.username] } } }
+ context 'when filtering by assignees' do
+ let(:issue_filter_params) { { or: { assignee_usernames: [current_user.username, another_user.username] } } }
- it 'returns correctly filtered issues' do
- post_query
+ it 'returns correctly filtered issues' do
+ post_query
- expect(issue_ids).to match_array(expected_unioned_assignee_issues.map { |i| i.to_gid.to_s })
+ expect(issue_ids).to match_array([issue_a, issue_b].map { |i| i.to_gid.to_s })
+ end
+ end
+
+ context 'when filtering by labels' do
+ let_it_be(:label_a) { create(:label, project: issue_a.project) }
+ let_it_be(:label_b) { create(:label, project: issue_b.project) }
+
+ let(:issue_filter_params) { { or: { label_names: [label_a.title, label_b.title] } } }
+
+ it 'returns correctly filtered issues' do
+ issue_a.label_ids = label_a.id
+ issue_b.label_ids = label_b.id
+
+ post_graphql(query, current_user: current_user)
+
+ expect(issue_ids).to match_array([issue_a, issue_b].map { |i| i.to_gid.to_s })
+ end
end
context 'when argument is blank' do
@@ -63,6 +86,8 @@ RSpec.shared_examples 'graphql issue list request spec' do
end
context 'when feature flag is disabled' do
+ let(:issue_filter_params) { { or: { assignee_usernames: [current_user.username] } } }
+
it 'returns an error' do
stub_feature_flags(or_issuable_queries: false)
diff --git a/spec/support/shared_examples/requests/api/issuable_search_shared_examples.rb b/spec/support/shared_examples/requests/api/issuable_search_shared_examples.rb
index 9f67bd69560..fcde3b65b4f 100644
--- a/spec/support/shared_examples/requests/api/issuable_search_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/issuable_search_shared_examples.rb
@@ -34,3 +34,35 @@ RSpec.shared_examples 'issuable anonymous search' do
end
end
end
+
+RSpec.shared_examples 'issuable API rate-limited search' do
+ it_behaves_like 'rate limited endpoint', rate_limit_key: :search_rate_limit do
+ let(:current_user) { user }
+
+ def request
+ get api(url, current_user), params: { scope: 'all', search: issuable.title }
+ end
+ end
+
+ it_behaves_like 'rate limited endpoint', rate_limit_key: :search_rate_limit_unauthenticated do
+ def request
+ get api(url), params: { scope: 'all', search: issuable.title }
+ end
+ end
+
+ context 'when rate_limit_issuable_searches is disabled', :freeze_time, :clean_gitlab_redis_rate_limiting do
+ before do
+ stub_feature_flags(rate_limit_issuable_searches: false)
+
+ allow(Gitlab::ApplicationRateLimiter).to receive(:threshold)
+ .with(:search_rate_limit_unauthenticated).and_return(1)
+ end
+
+ it 'does not enforce the rate limit' do
+ get api(url), params: { scope: 'all', search: issuable.title }
+ get api(url), params: { scope: 'all', search: issuable.title }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ end
+ end
+end
diff --git a/spec/support/shared_examples/requests/api/nuget_endpoints_shared_examples.rb b/spec/support/shared_examples/requests/api/nuget_endpoints_shared_examples.rb
index 290bf58fb6b..17d8b9c7fab 100644
--- a/spec/support/shared_examples/requests/api/nuget_endpoints_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/nuget_endpoints_shared_examples.rb
@@ -1,6 +1,11 @@
# frozen_string_literal: true
-RSpec.shared_examples 'handling nuget service requests' do |anonymous_requests_example_name: 'process nuget service index request', anonymous_requests_status: :success|
+RSpec.shared_examples 'handling nuget service requests' do |example_names_with_status: {}|
+ anonymous_requests_example_name = example_names_with_status.fetch(:anonymous_requests_example_name, 'process nuget service index request')
+ anonymous_requests_status = example_names_with_status.fetch(:anonymous_requests_status, :success)
+ guest_requests_example_name = example_names_with_status.fetch(:guest_requests_example_name, 'rejects nuget packages access')
+ guest_requests_status = example_names_with_status.fetch(:guest_requests_status, :forbidden)
+
subject { get api(url) }
context 'with valid target' do
@@ -18,7 +23,7 @@ RSpec.shared_examples 'handling nuget service requests' do |anonymous_requests_e
'PUBLIC' | :guest | false | false | 'rejects nuget packages access' | :unauthorized
'PUBLIC' | :anonymous | false | true | anonymous_requests_example_name | anonymous_requests_status
'PRIVATE' | :developer | true | true | 'process nuget service index request' | :success
- 'PRIVATE' | :guest | true | true | 'rejects nuget packages access' | :forbidden
+ 'PRIVATE' | :guest | true | true | guest_requests_example_name | guest_requests_status
'PRIVATE' | :developer | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :guest | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :developer | false | true | 'rejects nuget packages access' | :not_found
@@ -54,7 +59,7 @@ RSpec.shared_examples 'handling nuget service requests' do |anonymous_requests_e
'PUBLIC' | :guest | false | false | 'rejects nuget packages access' | :unauthorized
'PUBLIC' | :anonymous | false | true | anonymous_requests_example_name | anonymous_requests_status
'PRIVATE' | :developer | true | true | 'process nuget service index request' | :success
- 'PRIVATE' | :guest | true | true | 'rejects nuget packages access' | :forbidden
+ 'PRIVATE' | :guest | true | true | guest_requests_example_name | guest_requests_status
'PRIVATE' | :developer | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :guest | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :developer | false | true | 'rejects nuget packages access' | :not_found
@@ -90,9 +95,14 @@ RSpec.shared_examples 'handling nuget service requests' do |anonymous_requests_e
it_behaves_like 'rejects nuget access with invalid target id'
end
-RSpec.shared_examples 'handling nuget metadata requests with package name' do |anonymous_requests_example_name: 'process nuget metadata request at package name level', anonymous_requests_status: :success|
+RSpec.shared_examples 'handling nuget metadata requests with package name' do |example_names_with_status: {}|
include_context 'with expected presenters dependency groups'
+ anonymous_requests_example_name = example_names_with_status.fetch(:anonymous_requests_example_name, 'process nuget metadata request at package name level')
+ anonymous_requests_status = example_names_with_status.fetch(:anonymous_requests_status, :success)
+ guest_requests_example_name = example_names_with_status.fetch(:guest_requests_example_name, 'rejects nuget packages access')
+ guest_requests_status = example_names_with_status.fetch(:guest_requests_status, :forbidden)
+
let_it_be(:package_name) { 'Dummy.Package' }
let_it_be(:packages) { create_list(:nuget_package, 5, :with_metadatum, name: package_name, project: project) }
let_it_be(:tags) { packages.each { |pkg| create(:packages_tag, package: pkg, name: 'test') } }
@@ -117,7 +127,7 @@ RSpec.shared_examples 'handling nuget metadata requests with package name' do |a
'PUBLIC' | :guest | false | false | 'rejects nuget packages access' | :unauthorized
'PUBLIC' | :anonymous | false | true | anonymous_requests_example_name | anonymous_requests_status
'PRIVATE' | :developer | true | true | 'process nuget metadata request at package name level' | :success
- 'PRIVATE' | :guest | true | true | 'rejects nuget packages access' | :forbidden
+ 'PRIVATE' | :guest | true | true | guest_requests_example_name | guest_requests_status
'PRIVATE' | :developer | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :guest | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :developer | false | true | 'rejects nuget packages access' | :not_found
@@ -152,9 +162,14 @@ RSpec.shared_examples 'handling nuget metadata requests with package name' do |a
end
end
-RSpec.shared_examples 'handling nuget metadata requests with package name and package version' do |anonymous_requests_example_name: 'process nuget metadata request at package name and package version level', anonymous_requests_status: :success|
+RSpec.shared_examples 'handling nuget metadata requests with package name and package version' do |example_names_with_status: {}|
include_context 'with expected presenters dependency groups'
+ anonymous_requests_example_name = example_names_with_status.fetch(:anonymous_requests_example_name, 'process nuget metadata request at package name and package version level')
+ anonymous_requests_status = example_names_with_status.fetch(:anonymous_requests_status, :success)
+ guest_requests_example_name = example_names_with_status.fetch(:guest_requests_example_name, 'rejects nuget packages access')
+ guest_requests_status = example_names_with_status.fetch(:guest_requests_status, :forbidden)
+
let_it_be(:package_name) { 'Dummy.Package' }
let_it_be(:package) { create(:nuget_package, :with_metadatum, name: package_name, project: project) }
let_it_be(:tag) { create(:packages_tag, package: package, name: 'test') }
@@ -179,7 +194,7 @@ RSpec.shared_examples 'handling nuget metadata requests with package name and pa
'PUBLIC' | :guest | false | false | 'rejects nuget packages access' | :unauthorized
'PUBLIC' | :anonymous | false | true | anonymous_requests_example_name | anonymous_requests_status
'PRIVATE' | :developer | true | true | 'process nuget metadata request at package name and package version level' | :success
- 'PRIVATE' | :guest | true | true | 'rejects nuget packages access' | :forbidden
+ 'PRIVATE' | :guest | true | true | guest_requests_example_name | guest_requests_status
'PRIVATE' | :developer | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :guest | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :developer | false | true | 'rejects nuget packages access' | :not_found
@@ -214,7 +229,12 @@ RSpec.shared_examples 'handling nuget metadata requests with package name and pa
it_behaves_like 'rejects nuget access with invalid target id'
end
-RSpec.shared_examples 'handling nuget search requests' do |anonymous_requests_example_name: 'process nuget search request', anonymous_requests_status: :success|
+RSpec.shared_examples 'handling nuget search requests' do |example_names_with_status: {}|
+ anonymous_requests_example_name = example_names_with_status.fetch(:anonymous_requests_example_name, 'process nuget search request')
+ anonymous_requests_status = example_names_with_status.fetch(:anonymous_requests_status, :success)
+ guest_requests_example_name = example_names_with_status.fetch(:guest_requests_example_name, 'rejects nuget packages access')
+ guest_requests_status = example_names_with_status.fetch(:guest_requests_status, :forbidden)
+
let_it_be(:package_a) { create(:nuget_package, :with_metadatum, name: 'Dummy.PackageA', project: project) }
let_it_be(:tag) { create(:packages_tag, package: package_a, name: 'test') }
let_it_be(:packages_b) { create_list(:nuget_package, 5, name: 'Dummy.PackageB', project: project) }
@@ -244,7 +264,7 @@ RSpec.shared_examples 'handling nuget search requests' do |anonymous_requests_ex
'PUBLIC' | :guest | false | false | 'rejects nuget packages access' | :unauthorized
'PUBLIC' | :anonymous | false | true | anonymous_requests_example_name | anonymous_requests_status
'PRIVATE' | :developer | true | true | 'process nuget search request' | :success
- 'PRIVATE' | :guest | true | true | 'rejects nuget packages access' | :forbidden
+ 'PRIVATE' | :guest | true | true | guest_requests_example_name | guest_requests_status
'PRIVATE' | :developer | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :guest | true | false | 'rejects nuget packages access' | :unauthorized
'PRIVATE' | :developer | false | true | 'rejects nuget packages access' | :not_found
diff --git a/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb b/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb
index bace570e47a..3abe545db59 100644
--- a/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb
@@ -379,6 +379,26 @@ RSpec.shared_examples 'process nuget search request' do |user_type, status, add_
end
end
+RSpec.shared_examples 'process empty nuget search request' do |user_type, status, add_member = true|
+ before do
+ target.send("add_#{user_type}", user) if add_member && user_type != :anonymous
+ end
+
+ it_behaves_like 'returning response status', status
+
+ it 'returns a valid json response' do
+ subject
+
+ expect(response.media_type).to eq('application/json')
+ expect(json_response).to be_a(Hash)
+ expect(json_response).to match_schema('public_api/v4/packages/nuget/search')
+ expect(json_response['totalHits']).to eq(0)
+ expect(json_response['data'].map { |e| e['versions'].size }).to be_empty
+ end
+
+ it_behaves_like 'a package tracking event', 'API::NugetPackages', 'search_package'
+end
+
RSpec.shared_examples 'rejects nuget access with invalid target id' do
context 'with a target id with invalid integers' do
using RSpec::Parameterized::TableSyntax
diff --git a/spec/support/shared_examples/services/issuable_links/create_links_shared_examples.rb b/spec/support/shared_examples/services/issuable_links/create_links_shared_examples.rb
index 12f2b5d78a5..e47ff2fcd59 100644
--- a/spec/support/shared_examples/services/issuable_links/create_links_shared_examples.rb
+++ b/spec/support/shared_examples/services/issuable_links/create_links_shared_examples.rb
@@ -30,7 +30,7 @@ RSpec.shared_examples 'issuable link creation' do
context 'when user has no permission to target issuable' do
let(:params) do
- { issuable_references: [guest_issuable.to_reference(issuable_parent)] }
+ { issuable_references: [restricted_issuable.to_reference(issuable_parent)] }
end
it 'returns error' do
diff --git a/spec/support/shared_examples/services/issuable_links/destroyable_issuable_links_shared_examples.rb b/spec/support/shared_examples/services/issuable_links/destroyable_issuable_links_shared_examples.rb
index cc170c6544d..1532e870dcc 100644
--- a/spec/support/shared_examples/services/issuable_links/destroyable_issuable_links_shared_examples.rb
+++ b/spec/support/shared_examples/services/issuable_links/destroyable_issuable_links_shared_examples.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
-RSpec.shared_examples 'a destroyable issuable link' do
+RSpec.shared_examples 'a destroyable issuable link' do |required_role: :reporter|
context 'when successfully removes an issuable link' do
before do
- issuable_link.source.resource_parent.add_reporter(user)
- issuable_link.target.resource_parent.add_reporter(user)
+ [issuable_link.target, issuable_link.source].each do |issuable|
+ issuable.resource_parent.try(:"add_#{required_role}", user)
+ end
end
it 'removes related issue' do
diff --git a/spec/support/shared_examples/services/repositories/housekeeping_shared_examples.rb b/spec/support/shared_examples/services/repositories/housekeeping_shared_examples.rb
index 8a937303711..8cc71230ba4 100644
--- a/spec/support/shared_examples/services/repositories/housekeeping_shared_examples.rb
+++ b/spec/support/shared_examples/services/repositories/housekeeping_shared_examples.rb
@@ -65,12 +65,9 @@ RSpec.shared_examples 'housekeeps repository' do
# At push 200
expect(resource.git_garbage_collect_worker_klass).to receive(:perform_async).with(resource.id, :gc, :the_lease_key, :the_uuid)
.once
- # At push 50, 100, 150
- expect(resource.git_garbage_collect_worker_klass).to receive(:perform_async).with(resource.id, :full_repack, :the_lease_key, :the_uuid)
- .exactly(3).times
- # At push 10, 20, ... (except those above)
+ # At push 10, 20, ... (except the gc call)
expect(resource.git_garbage_collect_worker_klass).to receive(:perform_async).with(resource.id, :incremental_repack, :the_lease_key, :the_uuid)
- .exactly(16).times
+ .exactly(19).times
201.times do
subject.increment!
@@ -79,37 +76,6 @@ RSpec.shared_examples 'housekeeps repository' do
expect(resource.pushes_since_gc).to eq(1)
end
-
- context 'when optimized_repository feature flag is disabled' do
- before do
- stub_feature_flags(optimized_housekeeping: false)
- end
-
- it 'calls also the garbage collect worker with pack_refs every 6 commits' do
- allow(subject).to receive(:try_obtain_lease).and_return(:the_uuid)
- allow(subject).to receive(:lease_key).and_return(:the_lease_key)
-
- # At push 200
- expect(resource.git_garbage_collect_worker_klass).to receive(:perform_async).with(resource.id, :gc, :the_lease_key, :the_uuid)
- .once
- # At push 50, 100, 150
- expect(resource.git_garbage_collect_worker_klass).to receive(:perform_async).with(resource.id, :full_repack, :the_lease_key, :the_uuid)
- .exactly(3).times
- # At push 10, 20, ... (except those above)
- expect(resource.git_garbage_collect_worker_klass).to receive(:perform_async).with(resource.id, :incremental_repack, :the_lease_key, :the_uuid)
- .exactly(16).times
- # At push 6, 12, 18, ... (except those above)
- expect(resource.git_garbage_collect_worker_klass).to receive(:perform_async).with(resource.id, :pack_refs, :the_lease_key, :the_uuid)
- .exactly(27).times
-
- 201.times do
- subject.increment!
- subject.execute if subject.needed?
- end
-
- expect(resource.pushes_since_gc).to eq(1)
- end
- end
end
it 'runs the task specifically requested' do
@@ -136,15 +102,11 @@ RSpec.shared_examples 'housekeeps repository' do
expect(subject.needed?).to eq(true)
end
- context 'when optimized_housekeeping is disabled' do
- before do
- stub_feature_flags(optimized_housekeeping: false)
- end
+ it 'when incremental repack period is not multiple of gc period' do
+ allow(Gitlab::CurrentSettings).to receive(:housekeeping_incremental_repack_period).and_return(12)
+ allow(resource).to receive(:pushes_since_gc).and_return(200)
- it 'returns true pack refs is needed' do
- allow(resource).to receive(:pushes_since_gc).and_return(described_class::PACK_REFS_PERIOD)
- expect(subject.needed?).to eq(true)
- end
+ expect(subject.needed?).to eq(true)
end
end
diff --git a/spec/support/shared_examples/services/security/ci_configuration/create_service_shared_examples.rb b/spec/support/shared_examples/services/security/ci_configuration/create_service_shared_examples.rb
index 105c4247ff7..716be8c6210 100644
--- a/spec/support/shared_examples/services/security/ci_configuration/create_service_shared_examples.rb
+++ b/spec/support/shared_examples/services/security/ci_configuration/create_service_shared_examples.rb
@@ -88,6 +88,68 @@ RSpec.shared_examples_for 'services security ci configuration create service' do
end
end
+ context 'when existing ci config contains anchors/aliases' do
+ let(:params) { {} }
+ let(:unsupported_yaml) do
+ <<-YAML
+ image: python:latest
+
+ cache: &global_cache
+ key: 'common-cache'
+ paths:
+ - .cache/pip
+ - venv/
+
+ test:
+ cache:
+ <<: *global_cache
+ key: 'custom-cache'
+ script:
+ - python setup.py test
+ - pip install tox flake8 # you can also use tox
+ - tox -e py36,flake8
+ YAML
+ end
+
+ it 'fails with error' do
+ expect(project).to receive(:ci_config_for).and_return(unsupported_yaml)
+
+ expect { result }.to raise_error(Gitlab::Graphql::Errors::MutationError, '.gitlab-ci.yml with aliases/anchors is not supported. Please change the CI configuration manually.')
+ end
+ end
+
+ context 'when parsing existing ci config gives a Psych error' do
+ let(:params) { {} }
+ let(:invalid_yaml) do
+ <<-YAML
+ image: python:latest
+
+ test:
+ script:
+ - python setup.py test
+ - pip install tox flake8 # you can also use tox
+ - tox -e py36,flake8
+ YAML
+ end
+
+ it 'fails with error' do
+ expect(project).to receive(:ci_config_for).and_return(invalid_yaml)
+ expect(YAML).to receive(:safe_load).and_raise(Psych::Exception)
+
+ expect { result }.to raise_error(Gitlab::Graphql::Errors::MutationError, /merge request creation mutation failed/)
+ end
+ end
+
+ context 'when parsing existing ci config gives any other error' do
+ let(:params) { {} }
+ let_it_be(:repository) { project.repository }
+
+ it 'is successful' do
+ expect(repository).to receive(:root_ref_sha).and_raise(StandardError)
+ expect(result.status).to eq(:success)
+ end
+ end
+
unless skip_w_params
context 'with parameters' do
let(:params) { non_empty_params }
diff --git a/spec/support/shared_examples/workers/batched_background_migration_worker_shared_examples.rb b/spec/support/shared_examples/workers/batched_background_migration_worker_shared_examples.rb
index 09ebc495e61..8ec955940c0 100644
--- a/spec/support/shared_examples/workers/batched_background_migration_worker_shared_examples.rb
+++ b/spec/support/shared_examples/workers/batched_background_migration_worker_shared_examples.rb
@@ -256,6 +256,7 @@ RSpec.shared_examples 'it runs batched background migration jobs' do |tracking_d
Class.new(Gitlab::BackgroundMigration::BatchedMigrationJob) do
job_arguments :matching_status
operation_name :update_all
+ feature_category :code_review_workflow
def perform
each_sub_batch(
@@ -325,16 +326,16 @@ RSpec.shared_examples 'it runs batched background migration jobs' do |tracking_d
stub_const('Gitlab::BackgroundMigration::ExampleDataMigration', migration_class)
end
- shared_examples 'batched background migration execution' do
- subject(:full_migration_run) do
- # process all batches, then do an extra execution to mark the job as finished
- (number_of_batches + 1).times do
- described_class.new.perform
+ subject(:full_migration_run) do
+ # process all batches, then do an extra execution to mark the job as finished
+ (number_of_batches + 1).times do
+ described_class.new.perform
- travel_to((migration.interval + described_class::INTERVAL_VARIANCE).seconds.from_now)
- end
+ travel_to((migration.interval + described_class::INTERVAL_VARIANCE).seconds.from_now)
end
+ end
+ shared_examples 'batched background migration execution' do
it 'marks the migration record as finished' do
expect { full_migration_run }.to change { migration.reload.status }.from(1).to(3) # active -> finished
end
@@ -404,6 +405,15 @@ RSpec.shared_examples 'it runs batched background migration jobs' do |tracking_d
end
it_behaves_like 'batched background migration execution'
+
+ it 'assigns proper feature category to the context and the worker' do
+ expected_feature_category = migration_class.feature_category.to_s
+
+ expect { full_migration_run }.to change {
+ Gitlab::ApplicationContext.current["meta.feature_category"]
+ }.to(expected_feature_category)
+ .and change { described_class.get_feature_category }.from(:database).to(expected_feature_category)
+ end
end
context 'when parallel execution is enabled', :sidekiq_inline do
diff --git a/spec/support/shared_examples/workers/concerns/git_garbage_collect_methods_shared_examples.rb b/spec/support/shared_examples/workers/concerns/git_garbage_collect_methods_shared_examples.rb
index 503e331ea2e..ba1bdfa7aa8 100644
--- a/spec/support/shared_examples/workers/concerns/git_garbage_collect_methods_shared_examples.rb
+++ b/spec/support/shared_examples/workers/concerns/git_garbage_collect_methods_shared_examples.rb
@@ -24,19 +24,6 @@ RSpec.shared_examples 'can collect git garbage' do |update_statistics: true|
subject.perform(*params)
end
-
- context 'when optimized_housekeeping feature is disabled' do
- before do
- stub_feature_flags(optimized_housekeeping: false)
- end
-
- specify do
- expect(subject).to receive(:get_gitaly_client).with(task, repository.raw_repository).and_return(repository_service)
- expect(repository_service).to receive(gitaly_task)
-
- subject.perform(*params)
- end
- end
end
shared_examples 'it updates the resource statistics' do
@@ -91,20 +78,6 @@ RSpec.shared_examples 'can collect git garbage' do |update_statistics: true|
expect { subject.perform(*params) }.to raise_exception(Gitlab::Git::Repository::NoRepository)
end
-
- context 'when optimized_housekeeping feature flag is disabled' do
- before do
- stub_feature_flags(optimized_housekeeping: false)
- end
-
- it 'handles gRPC errors' do
- allow_next_instance_of(Gitlab::GitalyClient::RepositoryService, repository.raw_repository) do |instance|
- allow(instance).to receive(:garbage_collect).and_raise(GRPC::NotFound)
- end
-
- expect { subject.perform(*params) }.to raise_exception(Gitlab::Git::Repository::NoRepository)
- end
- end
end
context 'with different lease than the active one' do
@@ -161,51 +134,6 @@ RSpec.shared_examples 'can collect git garbage' do |update_statistics: true|
end
end
- context 'repack_full' do
- let(:task) { :full_repack }
- let(:gitaly_task) { :repack_full }
-
- before do
- expect(subject).to receive(:get_lease_uuid).and_return(lease_uuid)
- end
-
- it_behaves_like 'it calls Gitaly'
- it_behaves_like 'it updates the resource statistics' if update_statistics
- end
-
- context 'pack_refs' do
- let(:task) { :pack_refs }
- let(:gitaly_task) { :pack_refs }
-
- before do
- expect(subject).to receive(:get_lease_uuid).and_return(lease_uuid)
- end
-
- it_behaves_like 'it calls Gitaly' do
- let(:repository_service) { instance_double(Gitlab::GitalyClient::RefService) }
- end
-
- it 'does not update the resource statistics' do
- expect(statistics_service_klass).not_to receive(:new)
-
- subject.perform(*params)
- end
- end
-
- context 'repack_incremental' do
- let(:task) { :incremental_repack }
- let(:gitaly_task) { :repack_incremental }
-
- before do
- expect(subject).to receive(:get_lease_uuid).and_return(lease_uuid)
-
- statistics_keys.delete(:repository_size)
- end
-
- it_behaves_like 'it calls Gitaly'
- it_behaves_like 'it updates the resource statistics' if update_statistics
- end
-
context 'prune' do
before do
expect(subject).to receive(:get_lease_uuid).and_return(lease_uuid)
@@ -219,41 +147,5 @@ RSpec.shared_examples 'can collect git garbage' do |update_statistics: true|
subject.perform(resource.id, 'prune', lease_key, lease_uuid)
end
end
-
- shared_examples 'gc tasks' do
- before do
- allow(subject).to receive(:get_lease_uuid).and_return(lease_uuid)
- allow(subject).to receive(:bitmaps_enabled?).and_return(bitmaps_enabled)
-
- stub_feature_flags(optimized_housekeeping: false)
- end
-
- it 'cleans up repository after finishing' do
- expect(resource).to receive(:cleanup).and_call_original
-
- subject.perform(resource.id, 'gc', lease_key, lease_uuid)
- end
-
- it 'prune calls garbage_collect with the option prune: true' do
- repository_service = instance_double(Gitlab::GitalyClient::RepositoryService)
-
- expect(subject).to receive(:get_gitaly_client).with(:prune, repository.raw_repository).and_return(repository_service)
- expect(repository_service).to receive(:garbage_collect).with(bitmaps_enabled, prune: true)
-
- subject.perform(resource.id, 'prune', lease_key, lease_uuid)
- end
- end
-
- context 'with bitmaps enabled' do
- let(:bitmaps_enabled) { true }
-
- include_examples 'gc tasks'
- end
-
- context 'with bitmaps disabled' do
- let(:bitmaps_enabled) { false }
-
- include_examples 'gc tasks'
- end
end
end
diff --git a/spec/support/shared_examples/workers/update_repository_move_shared_examples.rb b/spec/support/shared_examples/workers/update_repository_move_shared_examples.rb
index c50dc6d5372..9b7183a9eac 100644
--- a/spec/support/shared_examples/workers/update_repository_move_shared_examples.rb
+++ b/spec/support/shared_examples/workers/update_repository_move_shared_examples.rb
@@ -1,6 +1,10 @@
# frozen_string_literal: true
RSpec.shared_examples 'an update storage move worker' do
+ it 'has the `until_executed` deduplicate strategy' do
+ expect(described_class.get_deduplicate_strategy).to eq(:until_executed)
+ end
+
describe '#perform' do
let(:service) { double(:update_repository_storage_service) }
diff --git a/spec/support/tmpdir.rb b/spec/support/tmpdir.rb
new file mode 100644
index 00000000000..ea8e26d2878
--- /dev/null
+++ b/spec/support/tmpdir.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module TmpdirHelper
+ def mktmpdir
+ @tmpdir_helper_dirs ||= []
+ @tmpdir_helper_dirs << Dir.mktmpdir
+ @tmpdir_helper_dirs.last
+ end
+
+ def self.included(base)
+ base.after do
+ if @tmpdir_helper_dirs
+ FileUtils.rm_rf(@tmpdir_helper_dirs)
+ @tmpdir_helper_dirs = nil
+ end
+ end
+ end
+end