mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-07-23 00:45:28 +00:00
134 lines
4.5 KiB
Ruby
134 lines
4.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
if $LOADED_FEATURES.include?(File.expand_path('spec_helper.rb', __dir__.to_s))
|
|
# There's no need to load anything here if spec_helper is already loaded
|
|
# because spec_helper is more extensive than fast_spec_helper
|
|
return
|
|
end
|
|
|
|
require_relative '../config/bundler_setup'
|
|
require 'benchmark'
|
|
|
|
# NOTE!: `defined?(FastSpecHelper)` is used in multiple places to check if we're in the
|
|
# fast_spec_helper context. If you rename the class, make sure you update all references!
|
|
module FastSpecHelper
|
|
# @return [void]
|
|
def self.slower_app_requires
|
|
require 'active_support/all'
|
|
require 'pry'
|
|
|
|
nil
|
|
end
|
|
|
|
# @return [void]
|
|
def self.app_requires
|
|
require_relative 'deprecation_warnings'
|
|
require 'gitlab/utils/all'
|
|
require_relative 'rails_autoload'
|
|
ENV['IN_MEMORY_APPLICATION_SETTINGS'] = 'true'
|
|
require_relative '../config/settings'
|
|
require_relative '../lib/gitlab'
|
|
|
|
nil
|
|
end
|
|
|
|
# @return [void]
|
|
def self.slower_spec_requires
|
|
require 'rspec-parameterized'
|
|
require_relative 'support/rspec'
|
|
|
|
nil
|
|
end
|
|
|
|
# @return [void]
|
|
def self.spec_requires_and_configuration
|
|
require 'gitlab/rspec/next_instance_of'
|
|
require 'hashdiff'
|
|
require_relative 'support/patches/rspec_mocks_doubles_fast_spec_helper_patch'
|
|
require_relative 'support/matchers/result_matchers'
|
|
require_relative 'support/railway_oriented_programming'
|
|
require_relative 'simplecov_env'
|
|
|
|
# NOTE: Consider making any common RSpec configuration tweaks in `spec/support/rspec.rb` instead of here,
|
|
# because it is also used by `spec/spec_helper.rb`.
|
|
RSpec.configure do |config|
|
|
config.include NextInstanceOf
|
|
config.disable_monkey_patching! # Enable zero monkey patching mode before loading any other RSpec code.
|
|
config.mock_with :rspec do |mocks|
|
|
mocks.verify_doubled_constant_names = false # Allow mocking of non-lib module/class names from Rails
|
|
end
|
|
|
|
# Mock out the GettextI18nRails `_` method to just pass through the key as the text
|
|
config.before do
|
|
allow(described_class).to(receive(:_)) { |key| key }
|
|
end
|
|
end
|
|
|
|
Time.zone = 'UTC' # rubocop:disable Gitlab/ChangeTimezone -- allow Time.zone to not be nil in fast_spec_helper, so Time.zone.now works
|
|
|
|
nil
|
|
end
|
|
|
|
# @return [void]
|
|
def self.domain_specific_spec_helper_support
|
|
# If you want to extensively use `fast_spec_helper` for your domain or
|
|
# bounded context (https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/modular_monolith/bounded_contexts/),
|
|
# but don't want to have to repeat the same require statement or configuration across multiple spec files, you can
|
|
# add a custom fast_spec_helper for your domain and require it here.
|
|
# Just make sure your additions don't do anything to noticably increase the runtime of `fast_spec_helper`!
|
|
|
|
# Remote Development domain
|
|
require_relative('../ee/spec/support/fast_spec/remote_development/fast_spec_helper_support') if Gitlab.ee?
|
|
|
|
# Web IDE domain
|
|
require_relative 'support/fast_spec/web_ide/fast_spec_helper_support'
|
|
|
|
nil
|
|
end
|
|
|
|
# @return [void]
|
|
def self.post_require_configuration
|
|
SimpleCovEnv.start!
|
|
ActiveSupport::XmlMini.backend = 'Nokogiri'
|
|
|
|
nil
|
|
end
|
|
|
|
# @param [Float] max_allowed
|
|
# @return [void]
|
|
def self.with_slow_execution_warning(max_allowed:)
|
|
data = Benchmark.measure do
|
|
yield
|
|
end
|
|
|
|
total = data.total
|
|
|
|
return if total < max_allowed
|
|
|
|
warn "\n\nWarning: fast_spec_helper submodule took longer than max allowed execution time " \
|
|
"of #{max_allowed}: #{total}\n"
|
|
warn "Slow submodule invoked from: #{caller[0]}\n\n"
|
|
|
|
nil
|
|
end
|
|
|
|
# @return [void]
|
|
def self.run
|
|
# NOTE: These max_allowed times are generally 2-4 times higher than the actual average
|
|
# execution times, to avoid false warnings on slower machines or CI runners.
|
|
with_slow_execution_warning(max_allowed: 2.0) { slower_app_requires }
|
|
with_slow_execution_warning(max_allowed: 0.2) { app_requires }
|
|
with_slow_execution_warning(max_allowed: 1.0) { slower_spec_requires }
|
|
with_slow_execution_warning(max_allowed: 0.2) { spec_requires_and_configuration }
|
|
with_slow_execution_warning(max_allowed: 1.0) { domain_specific_spec_helper_support }
|
|
with_slow_execution_warning(max_allowed: 0.2) { post_require_configuration }
|
|
|
|
nil
|
|
end
|
|
end
|
|
|
|
FastSpecHelper.run
|
|
|
|
# noinspection RubyResolve -- this file only exists in JiHu
|
|
require_relative('../jh/spec/fast_spec_helper') if Gitlab.jh?
|