Merge branch '44713-fast-spec-helper' into 'master'
Resolve "Skip setup of gitlab-shell, gitaly, ... for specs that don't need it." Closes #44713 See merge request gitlab-org/gitlab-ce!18074
This commit is contained in:
commit
1f062ee0d0
115 changed files with 366 additions and 287 deletions
|
@ -143,7 +143,7 @@ Lint/MissingCopEnableDirective:
|
|||
Lint/NestedPercentLiteral:
|
||||
Exclude:
|
||||
- 'lib/gitlab/git/repository.rb'
|
||||
- 'spec/support/email_format_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/email_format_shared_examples.rb'
|
||||
|
||||
# Offense count: 1
|
||||
Lint/ReturnInVoidContext:
|
||||
|
@ -195,8 +195,8 @@ Naming/HeredocDelimiterCase:
|
|||
- 'spec/lib/gitlab/diff/parser_spec.rb'
|
||||
- 'spec/lib/json_web_token/rsa_token_spec.rb'
|
||||
- 'spec/models/commit_spec.rb'
|
||||
- 'spec/support/repo_helpers.rb'
|
||||
- 'spec/support/seed_repo.rb'
|
||||
- 'spec/support/helpers/repo_helpers.rb'
|
||||
- 'spec/support/helpers/seed_repo.rb'
|
||||
|
||||
# Offense count: 112
|
||||
# Configuration parameters: Blacklist.
|
||||
|
@ -496,7 +496,7 @@ Style/EmptyLiteral:
|
|||
- 'spec/lib/gitlab/request_context_spec.rb'
|
||||
- 'spec/lib/gitlab/workhorse_spec.rb'
|
||||
- 'spec/requests/api/jobs_spec.rb'
|
||||
- 'spec/support/chat_slash_commands_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/chat_slash_commands_shared_examples.rb'
|
||||
|
||||
# Offense count: 102
|
||||
# Cop supports --auto-correct.
|
||||
|
|
|
@ -1,131 +1,4 @@
|
|||
# rubocop:disable GitlabSecurity/PublicSend
|
||||
|
||||
require_dependency Rails.root.join('lib/gitlab') # Load Gitlab as soon as possible
|
||||
|
||||
class Settings < Settingslogic
|
||||
source ENV.fetch('GITLAB_CONFIG') { "#{Rails.root}/config/gitlab.yml" }
|
||||
namespace Rails.env
|
||||
|
||||
class << self
|
||||
def gitlab_on_standard_port?
|
||||
on_standard_port?(gitlab)
|
||||
end
|
||||
|
||||
def host_without_www(url)
|
||||
host(url).sub('www.', '')
|
||||
end
|
||||
|
||||
def build_gitlab_ci_url
|
||||
custom_port =
|
||||
if on_standard_port?(gitlab)
|
||||
nil
|
||||
else
|
||||
":#{gitlab.port}"
|
||||
end
|
||||
|
||||
[
|
||||
gitlab.protocol,
|
||||
"://",
|
||||
gitlab.host,
|
||||
custom_port,
|
||||
gitlab.relative_url_root
|
||||
].join('')
|
||||
end
|
||||
|
||||
def build_pages_url
|
||||
base_url(pages).join('')
|
||||
end
|
||||
|
||||
def build_gitlab_shell_ssh_path_prefix
|
||||
user_host = "#{gitlab_shell.ssh_user}@#{gitlab_shell.ssh_host}"
|
||||
|
||||
if gitlab_shell.ssh_port != 22
|
||||
"ssh://#{user_host}:#{gitlab_shell.ssh_port}/"
|
||||
else
|
||||
if gitlab_shell.ssh_host.include? ':'
|
||||
"[#{user_host}]:"
|
||||
else
|
||||
"#{user_host}:"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def build_base_gitlab_url
|
||||
base_url(gitlab).join('')
|
||||
end
|
||||
|
||||
def build_gitlab_url
|
||||
(base_url(gitlab) + [gitlab.relative_url_root]).join('')
|
||||
end
|
||||
|
||||
# check that values in `current` (string or integer) is a contant in `modul`.
|
||||
def verify_constant_array(modul, current, default)
|
||||
values = default || []
|
||||
unless current.nil?
|
||||
values = []
|
||||
current.each do |constant|
|
||||
values.push(verify_constant(modul, constant, nil))
|
||||
end
|
||||
values.delete_if { |value| value.nil? }
|
||||
end
|
||||
|
||||
values
|
||||
end
|
||||
|
||||
# check that `current` (string or integer) is a contant in `modul`.
|
||||
def verify_constant(modul, current, default)
|
||||
constant = modul.constants.find { |name| modul.const_get(name) == current }
|
||||
value = constant.nil? ? default : modul.const_get(constant)
|
||||
if current.is_a? String
|
||||
value = modul.const_get(current.upcase) rescue default
|
||||
end
|
||||
|
||||
value
|
||||
end
|
||||
|
||||
def absolute(path)
|
||||
File.expand_path(path, Rails.root)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def base_url(config)
|
||||
custom_port = on_standard_port?(config) ? nil : ":#{config.port}"
|
||||
|
||||
[
|
||||
config.protocol,
|
||||
"://",
|
||||
config.host,
|
||||
custom_port
|
||||
]
|
||||
end
|
||||
|
||||
def on_standard_port?(config)
|
||||
config.port.to_i == (config.https ? 443 : 80)
|
||||
end
|
||||
|
||||
# Extract the host part of the given +url+.
|
||||
def host(url)
|
||||
url = url.downcase
|
||||
url = "http://#{url}" unless url.start_with?('http')
|
||||
|
||||
# Get rid of the path so that we don't even have to encode it
|
||||
url_without_path = url.sub(%r{(https?://[^/]+)/?.*}, '\1')
|
||||
|
||||
URI.parse(url_without_path).host
|
||||
end
|
||||
|
||||
# Runs every minute in a random ten-minute period on Sundays, to balance the
|
||||
# load on the server receiving these pings. The usage ping is safe to run
|
||||
# multiple times because of a 24 hour exclusive lock.
|
||||
def cron_for_usage_ping
|
||||
hour = rand(24)
|
||||
minute = rand(6)
|
||||
|
||||
"#{minute}0-#{minute}9 #{hour} * * 0"
|
||||
end
|
||||
end
|
||||
end
|
||||
require_dependency File.expand_path('../../lib/gitlab', __dir__) # Load Gitlab as soon as possible
|
||||
|
||||
# Default settings
|
||||
Settings['ldap'] ||= Settingslogic.new({})
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
module Gitlab
|
||||
def self.config
|
||||
Settings
|
||||
end
|
||||
|
||||
VERSION = File.read(Rails.root.join("VERSION")).strip.freeze
|
||||
REVISION = Gitlab::Popen.popen(%W(#{config.git.bin_path} log --pretty=format:%h -n 1)).first.chomp.freeze
|
||||
end
|
|
@ -1,5 +1,5 @@
|
|||
require './spec/support/sidekiq'
|
||||
require './spec/support/test_env'
|
||||
require './spec/support/helpers/test_env'
|
||||
|
||||
class Gitlab::Seeder::CycleAnalytics
|
||||
def initialize(project, perf: false)
|
||||
|
|
|
@ -90,6 +90,25 @@ Finished in 34.51 seconds (files took 0.76702 seconds to load)
|
|||
|
||||
Note: `live_debug` only works on javascript enabled specs.
|
||||
|
||||
### Fast unit tests
|
||||
|
||||
Some classes are well-isolated from Rails and you should be able to test them
|
||||
without the overhead added by the Rails environment and Bundler's `:default`
|
||||
group's gem loading. In these cases, you can `require 'fast_spec_helper'`
|
||||
instead of `require 'spec_helper'` in your test file, and your test should run
|
||||
really fast since:
|
||||
|
||||
- Gems loading is skipped
|
||||
- Rails app boot is skipped
|
||||
- gitlab-shell and Gitaly setup are skipped
|
||||
- Test repositories setup are skipped
|
||||
|
||||
Note that in some cases, you might have to add some `require_dependency 'foo'`
|
||||
in your file under test since Rails autoloading is not available in these cases.
|
||||
|
||||
This shouldn't be a problem since explicitely listing dependencies should be
|
||||
considered a good practice anyway.
|
||||
|
||||
### `let` variables
|
||||
|
||||
GitLab's RSpec suite has made extensive use of `let` variables to reduce
|
||||
|
@ -281,14 +300,13 @@ All fixtures should be be placed under `spec/fixtures/`.
|
|||
|
||||
RSpec config files are files that change the RSpec config (i.e.
|
||||
`RSpec.configure do |config|` blocks). They should be placed under
|
||||
`spec/support/config/`.
|
||||
`spec/support/`.
|
||||
|
||||
Each file should be related to a specific domain, e.g.
|
||||
`spec/support/config/capybara.rb`, `spec/support/config/carrierwave.rb`, etc.
|
||||
`spec/support/capybara.rb`, `spec/support/carrierwave.rb`, etc.
|
||||
|
||||
Helpers can be included in the `spec/support/config/rspec.rb` file. If a
|
||||
helpers module applies only to a certain kind of specs, it should add modifiers
|
||||
to the `config.include` call. For instance if
|
||||
If a helpers module applies only to a certain kind of specs, it should add
|
||||
modifiers to the `config.include` call. For instance if
|
||||
`spec/support/helpers/cycle_analytics_helpers.rb` applies to `:lib` and
|
||||
`type: :model` specs only, you would write the following:
|
||||
|
||||
|
@ -299,6 +317,14 @@ RSpec.configure do |config|
|
|||
end
|
||||
```
|
||||
|
||||
If a config file only consists of `config.include`, you can add these
|
||||
`config.include` directly in `spec/spec_helper.rb`.
|
||||
|
||||
For very generic helpers, consider including them in the `spec/support/rspec.rb`
|
||||
file which is used by the `spec/fast_spec_helper.rb` file. See
|
||||
[Fast unit tests](#fast-unit-tests) for more details about the
|
||||
`spec/fast_spec_helper.rb` file.
|
||||
|
||||
---
|
||||
|
||||
[Return to Testing documentation](index.md)
|
||||
|
|
|
@ -9,7 +9,7 @@ At a minimum, requiring the Rake helper will redirect `stdout`, include the
|
|||
runtime task helpers, and include the `RakeHelpers` Spec support module.
|
||||
|
||||
The `RakeHelpers` module exposes a `run_rake_task(<task>)` method to make
|
||||
executing tasks simple. See `spec/support/rake_helpers.rb` for all available
|
||||
executing tasks simple. See `spec/support/helpers/rake_helpers.rb` for all available
|
||||
methods.
|
||||
|
||||
Example:
|
||||
|
|
|
@ -12,7 +12,11 @@ end
|
|||
|
||||
WebMock.enable!
|
||||
|
||||
%w(select2_helper test_env repo_helpers wait_for_requests sidekiq project_forks_helper webmock).each do |f|
|
||||
%w(select2_helper test_env repo_helpers wait_for_requests project_forks_helper).each do |f|
|
||||
require Rails.root.join('spec', 'support', 'helpers', f)
|
||||
end
|
||||
|
||||
%w(sidekiq webmock).each do |f|
|
||||
require Rails.root.join('spec', 'support', f)
|
||||
end
|
||||
|
||||
|
|
|
@ -1,9 +1,20 @@
|
|||
require_dependency 'gitlab/git'
|
||||
require_dependency 'settings'
|
||||
require_dependency 'gitlab/popen'
|
||||
|
||||
module Gitlab
|
||||
def self.root
|
||||
Pathname.new(File.expand_path('..', __dir__))
|
||||
end
|
||||
|
||||
def self.config
|
||||
Settings
|
||||
end
|
||||
|
||||
COM_URL = 'https://gitlab.com'.freeze
|
||||
APP_DIRS_PATTERN = %r{^/?(app|config|ee|lib|spec|\(\w*\))}
|
||||
SUBDOMAIN_REGEX = %r{\Ahttps://[a-z0-9]+\.gitlab\.com\z}
|
||||
VERSION = File.read(root.join("VERSION")).strip.freeze
|
||||
REVISION = Gitlab::Popen.popen(%W(#{config.git.bin_path} log --pretty=format:%h -n 1)).first.chomp.freeze
|
||||
|
||||
def self.com?
|
||||
# Check `gl_subdomain?` as well to keep parity with gitlab.com
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
require_dependency 'gitlab/encoding_helper'
|
||||
|
||||
module Gitlab
|
||||
module Git
|
||||
# The ID of empty tree.
|
||||
|
|
126
lib/settings.rb
Normal file
126
lib/settings.rb
Normal file
|
@ -0,0 +1,126 @@
|
|||
require 'settingslogic'
|
||||
|
||||
class Settings < Settingslogic
|
||||
source ENV.fetch('GITLAB_CONFIG') { Pathname.new(File.expand_path('..', __dir__)).join('config/gitlab.yml') }
|
||||
namespace ENV.fetch('GITLAB_ENV') { Rails.env }
|
||||
|
||||
class << self
|
||||
def gitlab_on_standard_port?
|
||||
on_standard_port?(gitlab)
|
||||
end
|
||||
|
||||
def host_without_www(url)
|
||||
host(url).sub('www.', '')
|
||||
end
|
||||
|
||||
def build_gitlab_ci_url
|
||||
custom_port =
|
||||
if on_standard_port?(gitlab)
|
||||
nil
|
||||
else
|
||||
":#{gitlab.port}"
|
||||
end
|
||||
|
||||
[
|
||||
gitlab.protocol,
|
||||
"://",
|
||||
gitlab.host,
|
||||
custom_port,
|
||||
gitlab.relative_url_root
|
||||
].join('')
|
||||
end
|
||||
|
||||
def build_pages_url
|
||||
base_url(pages).join('')
|
||||
end
|
||||
|
||||
def build_gitlab_shell_ssh_path_prefix
|
||||
user_host = "#{gitlab_shell.ssh_user}@#{gitlab_shell.ssh_host}"
|
||||
|
||||
if gitlab_shell.ssh_port != 22
|
||||
"ssh://#{user_host}:#{gitlab_shell.ssh_port}/"
|
||||
else
|
||||
if gitlab_shell.ssh_host.include? ':'
|
||||
"[#{user_host}]:"
|
||||
else
|
||||
"#{user_host}:"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def build_base_gitlab_url
|
||||
base_url(gitlab).join('')
|
||||
end
|
||||
|
||||
def build_gitlab_url
|
||||
(base_url(gitlab) + [gitlab.relative_url_root]).join('')
|
||||
end
|
||||
|
||||
# check that values in `current` (string or integer) is a contant in `modul`.
|
||||
def verify_constant_array(modul, current, default)
|
||||
values = default || []
|
||||
unless current.nil?
|
||||
values = []
|
||||
current.each do |constant|
|
||||
values.push(verify_constant(modul, constant, nil))
|
||||
end
|
||||
values.delete_if { |value| value.nil? }
|
||||
end
|
||||
|
||||
values
|
||||
end
|
||||
|
||||
# check that `current` (string or integer) is a contant in `modul`.
|
||||
def verify_constant(modul, current, default)
|
||||
constant = modul.constants.find { |name| modul.const_get(name) == current }
|
||||
value = constant.nil? ? default : modul.const_get(constant)
|
||||
if current.is_a? String
|
||||
value = modul.const_get(current.upcase) rescue default
|
||||
end
|
||||
|
||||
value
|
||||
end
|
||||
|
||||
def absolute(path)
|
||||
File.expand_path(path, Rails.root)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def base_url(config)
|
||||
custom_port = on_standard_port?(config) ? nil : ":#{config.port}"
|
||||
|
||||
[
|
||||
config.protocol,
|
||||
"://",
|
||||
config.host,
|
||||
custom_port
|
||||
]
|
||||
end
|
||||
|
||||
def on_standard_port?(config)
|
||||
config.port.to_i == (config.https ? 443 : 80)
|
||||
end
|
||||
|
||||
# Extract the host part of the given +url+.
|
||||
def host(url)
|
||||
url = url.downcase
|
||||
url = "http://#{url}" unless url.start_with?('http')
|
||||
|
||||
# Get rid of the path so that we don't even have to encode it
|
||||
url_without_path = url.sub(%r{(https?://[^/]+)/?.*}, '\1')
|
||||
|
||||
URI.parse(url_without_path).host
|
||||
end
|
||||
|
||||
# Runs every minute in a random ten-minute period on Sundays, to balance the
|
||||
# load on the server receiving these pings. The usage ping is safe to run
|
||||
# multiple times because of a 24 hour exclusive lock.
|
||||
def cron_for_usage_ping
|
||||
hour = rand(24)
|
||||
minute = rand(6)
|
||||
|
||||
"#{minute}0-#{minute}9 #{hour} * * 0"
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,6 +1,6 @@
|
|||
module RuboCop
|
||||
module SpecHelpers
|
||||
SPEC_HELPERS = %w[spec_helper.rb rails_helper.rb].freeze
|
||||
SPEC_HELPERS = %w[fast_spec_helper.rb rails_helper.rb spec_helper.rb].freeze
|
||||
|
||||
# Returns true if the given node originated from the spec directory.
|
||||
def in_spec?(node)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require_relative '../support/repo_helpers'
|
||||
require_relative '../support/helpers/repo_helpers'
|
||||
|
||||
FactoryBot.define do
|
||||
factory :commit do
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
require_relative '../support/gpg_helpers'
|
||||
|
||||
FactoryBot.define do
|
||||
factory :gpg_key_subkey do
|
||||
gpg_key
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require_relative '../support/gpg_helpers'
|
||||
require_relative '../support/helpers/gpg_helpers'
|
||||
|
||||
FactoryBot.define do
|
||||
factory :gpg_key do
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
require_relative '../support/gpg_helpers'
|
||||
|
||||
FactoryBot.define do
|
||||
factory :gpg_signature do
|
||||
commit_sha { Digest::SHA1.hexdigest(SecureRandom.hex) }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require_relative '../support/repo_helpers'
|
||||
require_relative '../support/helpers/repo_helpers'
|
||||
|
||||
include ActionDispatch::TestProcess
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require_relative '../support/test_env'
|
||||
require_relative '../support/helpers/test_env'
|
||||
|
||||
FactoryBot.define do
|
||||
# Project without repository
|
||||
|
|
15
spec/fast_spec_helper.rb
Normal file
15
spec/fast_spec_helper.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
require 'bundler/setup'
|
||||
|
||||
ENV['GITLAB_ENV'] = 'test'
|
||||
ENV['IN_MEMORY_APPLICATION_SETTINGS'] = 'true'
|
||||
|
||||
unless Object.respond_to?(:require_dependency)
|
||||
class Object
|
||||
alias_method :require_dependency, :require
|
||||
end
|
||||
end
|
||||
|
||||
# Defines Gitlab and Gitlab.config which are at the center of the app
|
||||
require_relative '../lib/gitlab' unless defined?(Gitlab.config)
|
||||
|
||||
require_relative 'support/rspec'
|
|
@ -1,6 +1,14 @@
|
|||
require 'rails_helper'
|
||||
require 'fast_spec_helper'
|
||||
|
||||
require_dependency 'gitlab'
|
||||
|
||||
describe Gitlab do
|
||||
describe '.root' do
|
||||
it 'returns the root path of the app' do
|
||||
expect(described_class.root).to eq(Pathname.new(File.expand_path('../..', __dir__)))
|
||||
end
|
||||
end
|
||||
|
||||
describe '.com?' do
|
||||
it 'is true when on GitLab.com' do
|
||||
stub_config_setting(url: 'https://gitlab.com')
|
||||
|
|
|
@ -32,42 +32,19 @@ require 'rainbow/ext/string'
|
|||
|
||||
# Requires supporting ruby files with custom matchers and macros, etc,
|
||||
# in spec/support/ and its subdirectories.
|
||||
# Requires helpers, and shared contexts/examples first since they're used in other support files
|
||||
Dir[Rails.root.join("spec/support/helpers/*.rb")].each { |f| require f }
|
||||
Dir[Rails.root.join("spec/support/shared_contexts/*.rb")].each { |f| require f }
|
||||
Dir[Rails.root.join("spec/support/shared_examples/*.rb")].each { |f| require f }
|
||||
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.use_transactional_fixtures = false
|
||||
config.use_instantiated_fixtures = false
|
||||
config.mock_with :rspec
|
||||
|
||||
config.verbose_retry = true
|
||||
config.display_try_failure_messages = true
|
||||
|
||||
config.include Devise::Test::ControllerHelpers, type: :controller
|
||||
config.include Devise::Test::ControllerHelpers, type: :view
|
||||
config.include Devise::Test::IntegrationHelpers, type: :feature
|
||||
config.include Warden::Test::Helpers, type: :request
|
||||
config.include LoginHelpers, type: :feature
|
||||
config.include SearchHelpers, type: :feature
|
||||
config.include CookieHelper, :js
|
||||
config.include InputHelper, :js
|
||||
config.include SelectionHelper, :js
|
||||
config.include InspectRequests, :js
|
||||
config.include WaitForRequests, :js
|
||||
config.include LiveDebugger, :js
|
||||
config.include StubConfiguration
|
||||
config.include EmailHelpers, :mailer, type: :mailer
|
||||
config.include TestEnv
|
||||
config.include ActiveJob::TestHelper
|
||||
config.include ActiveSupport::Testing::TimeHelpers
|
||||
config.include StubGitlabCalls
|
||||
config.include StubGitlabData
|
||||
config.include ApiHelpers, :api
|
||||
config.include Gitlab::Routing, type: :routing
|
||||
config.include MigrationsHelpers, :migration
|
||||
config.include StubFeatureFlags
|
||||
config.include StubENV
|
||||
config.include ExpectOffense
|
||||
|
||||
config.infer_spec_type_from_file_location!
|
||||
|
||||
config.define_derived_metadata(file_path: %r{/spec/}) do |metadata|
|
||||
|
@ -82,7 +59,33 @@ RSpec.configure do |config|
|
|||
metadata[:type] = match[1].singularize.to_sym if match
|
||||
end
|
||||
|
||||
config.raise_errors_for_deprecations!
|
||||
config.include ActiveJob::TestHelper
|
||||
config.include ActiveSupport::Testing::TimeHelpers
|
||||
config.include CycleAnalyticsHelpers
|
||||
config.include ExpectOffense
|
||||
config.include FactoryBot::Syntax::Methods
|
||||
config.include FixtureHelpers
|
||||
config.include GitlabRoutingHelper
|
||||
config.include StubFeatureFlags
|
||||
config.include StubGitlabCalls
|
||||
config.include StubGitlabData
|
||||
config.include TestEnv
|
||||
config.include Devise::Test::ControllerHelpers, type: :controller
|
||||
config.include Devise::Test::IntegrationHelpers, type: :feature
|
||||
config.include LoginHelpers, type: :feature
|
||||
config.include SearchHelpers, type: :feature
|
||||
config.include EmailHelpers, :mailer, type: :mailer
|
||||
config.include Warden::Test::Helpers, type: :request
|
||||
config.include Gitlab::Routing, type: :routing
|
||||
config.include Devise::Test::ControllerHelpers, type: :view
|
||||
config.include ApiHelpers, :api
|
||||
config.include CookieHelper, :js
|
||||
config.include InputHelper, :js
|
||||
config.include SelectionHelper, :js
|
||||
config.include InspectRequests, :js
|
||||
config.include WaitForRequests, :js
|
||||
config.include LiveDebugger, :js
|
||||
config.include MigrationsHelpers, :migration
|
||||
|
||||
if ENV['CI']
|
||||
# This includes the first try, i.e. tests will be run 4 times before failing.
|
||||
|
|
|
@ -60,6 +60,8 @@ Capybara::Screenshot.register_driver(:chrome) do |driver, path|
|
|||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include CapybaraHelpers, type: :feature
|
||||
|
||||
config.before(:context, :js) do
|
||||
next if $capybara_server_already_started
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
RSpec.configure do |config|
|
||||
config.include FactoryBot::Syntax::Methods
|
||||
end
|
|
@ -8,7 +8,7 @@
|
|||
#
|
||||
# Usage:
|
||||
#
|
||||
# ./spec/support/generate-seed-repo-rb > spec/support/seed_repo.rb
|
||||
# ./spec/support/generate-seed-repo-rb > spec/support/helpers/seed_repo.rb
|
||||
#
|
||||
#
|
||||
|
||||
|
|
|
@ -12,5 +12,5 @@ inflate the size of the gitlab-ce repository.
|
|||
- make changes in your local clone of gitlab-git-test
|
||||
- run `git push` which will push to your local source `gitlab-ce/spec/support/gitlab-git-test.git`
|
||||
- in gitlab-ce: run `spec/support/prepare-gitlab-git-test-for-commit`
|
||||
- in gitlab-ce: `git add spec/support/seed_repo.rb spec/support/gitlab-git-test.git`
|
||||
- in gitlab-ce: `git add spec/support/helpers/seed_repo.rb spec/support/gitlab-git-test.git`
|
||||
- commit your changes in gitlab-ce
|
||||
|
|
|
@ -41,7 +41,3 @@ module CapybaraHelpers
|
|||
page.driver.browser.manage.delete_cookie('_gitlab_session')
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include CapybaraHelpers, type: :feature
|
||||
end
|
|
@ -135,7 +135,3 @@ module CycleAnalyticsHelpers
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include CycleAnalyticsHelpers
|
||||
end
|
|
@ -9,7 +9,3 @@ module FixtureHelpers
|
|||
File.expand_path(Rails.root.join(dir, 'spec', 'fixtures', filename))
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include FixtureHelpers
|
||||
end
|
25
spec/support/helpers/gitlab_verify_helpers.rb
Normal file
25
spec/support/helpers/gitlab_verify_helpers.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
module GitlabVerifyHelpers
|
||||
def collect_ranges(args = {})
|
||||
verifier = described_class.new(args.merge(batch_size: 1))
|
||||
|
||||
collect_results(verifier).map { |range, _| range }
|
||||
end
|
||||
|
||||
def collect_failures
|
||||
verifier = described_class.new(batch_size: 1)
|
||||
|
||||
out = {}
|
||||
|
||||
collect_results(verifier).map { |_, failures| out.merge!(failures) }
|
||||
|
||||
out
|
||||
end
|
||||
|
||||
def collect_results(verifier)
|
||||
out = []
|
||||
|
||||
verifier.run_batches { |*args| out << args }
|
||||
|
||||
out
|
||||
end
|
||||
end
|
38
spec/support/helpers/query_recorder.rb
Normal file
38
spec/support/helpers/query_recorder.rb
Normal file
|
@ -0,0 +1,38 @@
|
|||
module ActiveRecord
|
||||
class QueryRecorder
|
||||
attr_reader :log, :cached
|
||||
|
||||
def initialize(&block)
|
||||
@log = []
|
||||
@cached = []
|
||||
ActiveSupport::Notifications.subscribed(method(:callback), 'sql.active_record', &block)
|
||||
end
|
||||
|
||||
def show_backtrace(values)
|
||||
Rails.logger.debug("QueryRecorder SQL: #{values[:sql]}")
|
||||
caller.each { |line| Rails.logger.debug(" --> #{line}") }
|
||||
end
|
||||
|
||||
def callback(name, start, finish, message_id, values)
|
||||
show_backtrace(values) if ENV['QUERY_RECORDER_DEBUG']
|
||||
|
||||
if values[:name]&.include?("CACHE")
|
||||
@cached << values[:sql]
|
||||
elsif !values[:name]&.include?("SCHEMA")
|
||||
@log << values[:sql]
|
||||
end
|
||||
end
|
||||
|
||||
def count
|
||||
@log.count
|
||||
end
|
||||
|
||||
def cached_count
|
||||
@cached.count
|
||||
end
|
||||
|
||||
def log_message
|
||||
@log.join("\n\n")
|
||||
end
|
||||
end
|
||||
end
|
10
spec/support/helpers/quick_actions_helpers.rb
Normal file
10
spec/support/helpers/quick_actions_helpers.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
module QuickActionsHelpers
|
||||
def write_note(text)
|
||||
Sidekiq::Testing.fake! do
|
||||
page.within('.js-main-target-form') do
|
||||
fill_in 'note[note]', with: text
|
||||
find('.js-comment-submit-button').click
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,7 +9,7 @@ TEST_MUTABLE_REPO_PATH = 'mutable-repo.git'.freeze
|
|||
TEST_BROKEN_REPO_PATH = 'broken-repo.git'.freeze
|
||||
|
||||
module SeedHelper
|
||||
GITLAB_GIT_TEST_REPO_URL = File.expand_path('../gitlab-git-test.git', __FILE__).freeze
|
||||
GITLAB_GIT_TEST_REPO_URL = File.expand_path('../gitlab-git-test.git', __dir__).freeze
|
||||
|
||||
def ensure_seeds
|
||||
if File.exist?(SEED_STORAGE_PATH)
|
||||
|
@ -108,11 +108,3 @@ bla/bla.txt
|
|||
{ 'GIT_TEMPLATE_DIR' => '' }
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include SeedHelper, :seed_helper
|
||||
|
||||
config.before(:all, :seed_helper) do
|
||||
ensure_seeds
|
||||
end
|
||||
end
|
18
spec/support/helpers/sorting_helper.rb
Normal file
18
spec/support/helpers/sorting_helper.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Helper allows you to sort items
|
||||
#
|
||||
# Params
|
||||
# value - value for sorting
|
||||
#
|
||||
# Usage:
|
||||
# include SortingHelper
|
||||
#
|
||||
# sorting_by('Oldest updated')
|
||||
#
|
||||
module SortingHelper
|
||||
def sorting_by(value)
|
||||
find('button.dropdown-toggle').click
|
||||
page.within('.content ul.dropdown-menu.dropdown-menu-align-right li') do
|
||||
click_link value
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,3 +1,6 @@
|
|||
require 'active_support/core_ext/hash/transform_values'
|
||||
require 'active_support/hash_with_indifferent_access'
|
||||
|
||||
module StubConfiguration
|
||||
def stub_application_setting(messages)
|
||||
add_predicates(messages)
|
|
@ -1,4 +1,4 @@
|
|||
module StubConfiguration
|
||||
module StubObjectStorage
|
||||
def stub_object_storage_uploader(
|
||||
config:,
|
||||
uploader:,
|
|
@ -1,7 +1,3 @@
|
|||
shared_context 'JSON response' do
|
||||
let(:json_response) { JSON.parse(response.body) }
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.include_context 'JSON response'
|
||||
config.include_context 'JSON response', type: :request
|
|
@ -1,42 +1,3 @@
|
|||
module ActiveRecord
|
||||
class QueryRecorder
|
||||
attr_reader :log, :cached
|
||||
|
||||
def initialize(&block)
|
||||
@log = []
|
||||
@cached = []
|
||||
ActiveSupport::Notifications.subscribed(method(:callback), 'sql.active_record', &block)
|
||||
end
|
||||
|
||||
def show_backtrace(values)
|
||||
Rails.logger.debug("QueryRecorder SQL: #{values[:sql]}")
|
||||
caller.each { |line| Rails.logger.debug(" --> #{line}") }
|
||||
end
|
||||
|
||||
def callback(name, start, finish, message_id, values)
|
||||
show_backtrace(values) if ENV['QUERY_RECORDER_DEBUG']
|
||||
|
||||
if values[:name]&.include?("CACHE")
|
||||
@cached << values[:sql]
|
||||
elsif !values[:name]&.include?("SCHEMA")
|
||||
@log << values[:sql]
|
||||
end
|
||||
end
|
||||
|
||||
def count
|
||||
@log.count
|
||||
end
|
||||
|
||||
def cached_count
|
||||
@cached.count
|
||||
end
|
||||
|
||||
def log_message
|
||||
@log.join("\n\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
RSpec::Matchers.define :exceed_query_limit do |expected|
|
||||
supports_block_expectations
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
abort unless [
|
||||
system('spec/support/generate-seed-repo-rb', out: 'spec/support/seed_repo.rb'),
|
||||
system('spec/support/generate-seed-repo-rb', out: 'spec/support/helpers/seed_repo.rb'),
|
||||
system('spec/support/unpack-gitlab-git-test')
|
||||
].all?
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
RSpec.configure do |config|
|
||||
config.include GitlabRoutingHelper
|
||||
end
|
12
spec/support/rspec.rb
Normal file
12
spec/support/rspec.rb
Normal file
|
@ -0,0 +1,12 @@
|
|||
require_relative "helpers/stub_configuration"
|
||||
require_relative "helpers/stub_object_storage"
|
||||
require_relative "helpers/stub_env"
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.mock_with :rspec
|
||||
config.raise_errors_for_deprecations!
|
||||
|
||||
config.include StubConfiguration
|
||||
config.include StubObjectStorage
|
||||
config.include StubENV
|
||||
end
|
7
spec/support/seed.rb
Normal file
7
spec/support/seed.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
RSpec.configure do |config|
|
||||
config.include SeedHelper, :seed_helper
|
||||
|
||||
config.before(:all, :seed_helper) do
|
||||
ensure_seeds
|
||||
end
|
||||
end
|
|
@ -0,0 +1,3 @@
|
|||
shared_context 'JSON response' do
|
||||
let(:json_response) { JSON.parse(response.body) }
|
||||
end
|
|
@ -17,29 +17,3 @@ RSpec.shared_examples 'Gitlab::Verify::BatchVerifier subclass' do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
module GitlabVerifyHelpers
|
||||
def collect_ranges(args = {})
|
||||
verifier = described_class.new(args.merge(batch_size: 1))
|
||||
|
||||
collect_results(verifier).map { |range, _| range }
|
||||
end
|
||||
|
||||
def collect_failures
|
||||
verifier = described_class.new(batch_size: 1)
|
||||
|
||||
out = {}
|
||||
|
||||
collect_results(verifier).map { |_, failures| out.merge!(failures) }
|
||||
|
||||
out
|
||||
end
|
||||
|
||||
def collect_results(verifier)
|
||||
out = []
|
||||
|
||||
verifier.run_batches { |*args| out << args }
|
||||
|
||||
out
|
||||
end
|
||||
end
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue