diff options
Diffstat (limited to 'spec/rubocop')
140 files changed, 717 insertions, 434 deletions
diff --git a/spec/rubocop/check_graceful_task_spec.rb b/spec/rubocop/check_graceful_task_spec.rb new file mode 100644 index 00000000000..0364820a602 --- /dev/null +++ b/spec/rubocop/check_graceful_task_spec.rb @@ -0,0 +1,125 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require 'stringio' + +require_relative '../support/helpers/next_instance_of' +require_relative '../../rubocop/check_graceful_task' + +RSpec.describe RuboCop::CheckGracefulTask do + include NextInstanceOf + + let(:output) { StringIO.new } + + subject(:task) { described_class.new(output) } + + describe '#run' do + let(:status_success) { RuboCop::CLI::STATUS_SUCCESS } + let(:status_offenses) { RuboCop::CLI::STATUS_OFFENSES } + let(:rubocop_status) { status_success } + let(:adjusted_rubocop_status) { rubocop_status } + + subject { task.run(args) } + + before do + # Don't notify Slack accidentally. + allow(Gitlab::Popen).to receive(:popen).and_raise('Notifications forbidden.') + stub_const('ENV', ENV.to_hash.delete_if { |key, _| key.start_with?('CI_') }) + + allow_next_instance_of(RuboCop::CLI) do |cli| + allow(cli).to receive(:run).and_return(rubocop_status) + end + + allow(RuboCop::Formatter::GracefulFormatter) + .to receive(:adjusted_exit_status).and_return(adjusted_rubocop_status) + end + + shared_examples 'rubocop scan' do |rubocop_args:| + it 'invokes a RuboCop scan' do + rubocop_options = %w[--parallel --format RuboCop::Formatter::GracefulFormatter] + rubocop_options.concat(rubocop_args) + + expect_next_instance_of(RuboCop::CLI) do |cli| + expect(cli).to receive(:run).with(rubocop_options).and_return(rubocop_status) + end + + subject + + expect(output.string) + .to include('Running RuboCop in graceful mode:') + .and include("rubocop #{rubocop_options.join(' ')}") + .and include('This might take a while...') + end + end + + context 'without args' do + let(:args) { [] } + + it_behaves_like 'rubocop scan', rubocop_args: [] + + context 'with adjusted rubocop status' do + let(:rubocop_status) { status_offenses } + let(:adjusted_rubocop_status) { status_success } + + context 'with sufficient environment variables' do + let(:channel) { 'f_rubocop' } + + before do + env = { + 'CI_SLACK_WEBHOOK_URL' => 'webhook_url', + 'CI_JOB_NAME' => 'job_name', + 'CI_JOB_URL' => 'job_url' + } + + stub_const('ENV', ENV.to_hash.update(env)) + end + + it 'notifies slack' do + popen_args = ['scripts/slack', channel, kind_of(String), 'rubocop', kind_of(String)] + popen_result = ['', 0] + expect(Gitlab::Popen).to receive(:popen).with(popen_args).and_return(popen_result) + + subject + + expect(output.string).to include("Notifying Slack ##{channel}.") + end + + context 'with when notification fails' do + it 'prints that notification failed' do + popen_result = ['', 1] + expect(Gitlab::Popen).to receive(:popen).and_return(popen_result) + + subject + + expect(output.string).to include("Failed to notify Slack channel ##{channel}.") + end + end + end + + context 'with missing environment variables' do + it 'skips slack notification' do + expect(Gitlab::Popen).not_to receive(:popen) + + subject + + expect(output.string).to include('Skipping Slack notification.') + end + end + end + end + + context 'with args' do + let(:args) { %w[a.rb Lint/EmptyFile b.rb Lint/Syntax] } + + it_behaves_like 'rubocop scan', rubocop_args: %w[--only Lint/EmptyFile,Lint/Syntax a.rb b.rb] + + it 'does not notify slack' do + expect(Gitlab::Popen).not_to receive(:popen) + + subject + + expect(output.string).not_to include('Skipping Slack notification.') + end + end + end +end diff --git a/spec/rubocop/code_reuse_helpers_spec.rb b/spec/rubocop/code_reuse_helpers_spec.rb index 0d06d37d67a..a112c9754f3 100644 --- a/spec/rubocop/code_reuse_helpers_spec.rb +++ b/spec/rubocop/code_reuse_helpers_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'parser/current' require_relative '../../rubocop/code_reuse_helpers' @@ -172,31 +172,6 @@ RSpec.describe RuboCop::CodeReuseHelpers do end end - describe '#in_graphql_types?' do - %w[ - app/graphql/types - ee/app/graphql/ee/types - ee/app/graphql/types - ].each do |path| - it "returns true for a node in #{path}" do - node = build_and_parse_source('10', rails_root_join(path, 'foo.rb')) - - expect(cop.in_graphql_types?(node)).to eq(true) - end - end - - %w[ - app/graphql/resolvers - app/foo - ].each do |path| - it "returns false for a node in #{path}" do - node = build_and_parse_source('10', rails_root_join(path, 'foo.rb')) - - expect(cop.in_graphql_types?(node)).to eq(false) - end - end - end - describe '#in_api?' do it 'returns true for a node in the API directory' do node = build_and_parse_source('10', rails_root_join('lib', 'api', 'foo.rb')) @@ -367,7 +342,7 @@ RSpec.describe RuboCop::CodeReuseHelpers do expect(cop) .to receive(:add_offense) - .with(send_node, location: :expression, message: 'oops') + .with(send_node, message: 'oops') cop.disallow_send_to(def_node, 'Finder', 'oops') end diff --git a/spec/rubocop/cop/active_model_errors_direct_manipulation_spec.rb b/spec/rubocop/cop/active_model_errors_direct_manipulation_spec.rb index 37fcdb38907..6be2f4945fd 100644 --- a/spec/rubocop/cop/active_model_errors_direct_manipulation_spec.rb +++ b/spec/rubocop/cop/active_model_errors_direct_manipulation_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/active_model_errors_direct_manipulation' RSpec.describe RuboCop::Cop::ActiveModelErrorsDirectManipulation do - subject(:cop) { described_class.new } - context 'when modifying errors' do it 'registers an offense' do expect_offense(<<~PATTERN) diff --git a/spec/rubocop/cop/active_record_association_reload_spec.rb b/spec/rubocop/cop/active_record_association_reload_spec.rb index 1c0518815ee..9f101b80d9a 100644 --- a/spec/rubocop/cop/active_record_association_reload_spec.rb +++ b/spec/rubocop/cop/active_record_association_reload_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/active_record_association_reload' RSpec.describe RuboCop::Cop::ActiveRecordAssociationReload do - subject(:cop) { described_class.new } - context 'when using ActiveRecord::Base' do it 'registers an offense on reload usage' do expect_offense(<<~PATTERN) diff --git a/spec/rubocop/cop/api/base_spec.rb b/spec/rubocop/cop/api/base_spec.rb index 547d3f53a08..66e99b75643 100644 --- a/spec/rubocop/cop/api/base_spec.rb +++ b/spec/rubocop/cop/api/base_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/api/base' RSpec.describe RuboCop::Cop::API::Base do - subject(:cop) { described_class.new } - let(:corrected) do <<~CORRECTED class SomeAPI < ::API::Base diff --git a/spec/rubocop/cop/api/grape_array_missing_coerce_spec.rb b/spec/rubocop/cop/api/grape_array_missing_coerce_spec.rb index 01f1fc71f9a..1d1754df838 100644 --- a/spec/rubocop/cop/api/grape_array_missing_coerce_spec.rb +++ b/spec/rubocop/cop/api/grape_array_missing_coerce_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/api/grape_array_missing_coerce' RSpec.describe RuboCop::Cop::API::GrapeArrayMissingCoerce do @@ -10,8 +10,6 @@ RSpec.describe RuboCop::Cop::API::GrapeArrayMissingCoerce do "https://github.com/ruby-grape/grape/blob/master/UPGRADING.md#ensure-that-array-types-have-explicit-coercions" end - subject(:cop) { described_class.new } - it 'adds an offense with a required parameter' do expect_offense(<<~TYPE) class SomeAPI < Grape::API::Instance diff --git a/spec/rubocop/cop/avoid_becomes_spec.rb b/spec/rubocop/cop/avoid_becomes_spec.rb index 3ab1544b00d..d67b79329c9 100644 --- a/spec/rubocop/cop/avoid_becomes_spec.rb +++ b/spec/rubocop/cop/avoid_becomes_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/avoid_becomes' RSpec.describe RuboCop::Cop::AvoidBecomes do - subject(:cop) { described_class.new } - it 'flags the use of becomes with a constant parameter' do expect_offense(<<~CODE) foo.becomes(Project) diff --git a/spec/rubocop/cop/avoid_break_from_strong_memoize_spec.rb b/spec/rubocop/cop/avoid_break_from_strong_memoize_spec.rb index cc851045c3c..9b7d988cb24 100644 --- a/spec/rubocop/cop/avoid_break_from_strong_memoize_spec.rb +++ b/spec/rubocop/cop/avoid_break_from_strong_memoize_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/avoid_break_from_strong_memoize' RSpec.describe RuboCop::Cop::AvoidBreakFromStrongMemoize do - subject(:cop) { described_class.new } - it 'flags violation for break inside strong_memoize' do expect_offense(<<~RUBY) strong_memoize(:result) do diff --git a/spec/rubocop/cop/avoid_keyword_arguments_in_sidekiq_workers_spec.rb b/spec/rubocop/cop/avoid_keyword_arguments_in_sidekiq_workers_spec.rb index 90ee5772b66..eb2417a7eef 100644 --- a/spec/rubocop/cop/avoid_keyword_arguments_in_sidekiq_workers_spec.rb +++ b/spec/rubocop/cop/avoid_keyword_arguments_in_sidekiq_workers_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/avoid_keyword_arguments_in_sidekiq_workers' RSpec.describe RuboCop::Cop::AvoidKeywordArgumentsInSidekiqWorkers do - subject(:cop) { described_class.new } - it 'flags violation for keyword arguments usage in perform method signature' do expect_offense(<<~RUBY) def perform(id:) diff --git a/spec/rubocop/cop/avoid_return_from_blocks_spec.rb b/spec/rubocop/cop/avoid_return_from_blocks_spec.rb index 86098f1afcc..e35705ae791 100644 --- a/spec/rubocop/cop/avoid_return_from_blocks_spec.rb +++ b/spec/rubocop/cop/avoid_return_from_blocks_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/avoid_return_from_blocks' RSpec.describe RuboCop::Cop::AvoidReturnFromBlocks do - subject(:cop) { described_class.new } - it 'flags violation for return inside a block' do expect_offense(<<~RUBY) call do diff --git a/spec/rubocop/cop/avoid_route_redirect_leading_slash_spec.rb b/spec/rubocop/cop/avoid_route_redirect_leading_slash_spec.rb index 61d6f45b5ba..377050eb301 100644 --- a/spec/rubocop/cop/avoid_route_redirect_leading_slash_spec.rb +++ b/spec/rubocop/cop/avoid_route_redirect_leading_slash_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/avoid_route_redirect_leading_slash' RSpec.describe RuboCop::Cop::AvoidRouteRedirectLeadingSlash do - subject(:cop) { described_class.new } - before do allow(cop).to receive(:in_routes?).and_return(true) end diff --git a/spec/rubocop/cop/ban_catch_throw_spec.rb b/spec/rubocop/cop/ban_catch_throw_spec.rb index f255d27e7c7..a41868410eb 100644 --- a/spec/rubocop/cop/ban_catch_throw_spec.rb +++ b/spec/rubocop/cop/ban_catch_throw_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/ban_catch_throw' RSpec.describe RuboCop::Cop::BanCatchThrow do - subject(:cop) { described_class.new } - it 'registers an offense when `catch` or `throw` are used' do expect_offense(<<~CODE) catch(:foo) { diff --git a/spec/rubocop/cop/code_reuse/finder_spec.rb b/spec/rubocop/cop/code_reuse/finder_spec.rb index 36f44ca79da..8e285e3d988 100644 --- a/spec/rubocop/cop/code_reuse/finder_spec.rb +++ b/spec/rubocop/cop/code_reuse/finder_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/code_reuse/finder' RSpec.describe RuboCop::Cop::CodeReuse::Finder do - subject(:cop) { described_class.new } - it 'flags the use of a Finder inside another Finder' do allow(cop) .to receive(:in_finder?) diff --git a/spec/rubocop/cop/code_reuse/presenter_spec.rb b/spec/rubocop/cop/code_reuse/presenter_spec.rb index 070a7ed760c..fb7a95f930d 100644 --- a/spec/rubocop/cop/code_reuse/presenter_spec.rb +++ b/spec/rubocop/cop/code_reuse/presenter_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/code_reuse/presenter' RSpec.describe RuboCop::Cop::CodeReuse::Presenter do - subject(:cop) { described_class.new } - it 'flags the use of a Presenter in a Service class' do allow(cop) .to receive(:in_service_class?) diff --git a/spec/rubocop/cop/code_reuse/serializer_spec.rb b/spec/rubocop/cop/code_reuse/serializer_spec.rb index d5577caa2b4..b1f22c7b969 100644 --- a/spec/rubocop/cop/code_reuse/serializer_spec.rb +++ b/spec/rubocop/cop/code_reuse/serializer_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/code_reuse/serializer' RSpec.describe RuboCop::Cop::CodeReuse::Serializer do - subject(:cop) { described_class.new } - it 'flags the use of a Serializer in a Service class' do allow(cop) .to receive(:in_service_class?) diff --git a/spec/rubocop/cop/code_reuse/service_class_spec.rb b/spec/rubocop/cop/code_reuse/service_class_spec.rb index 353225b2c42..5792b86a535 100644 --- a/spec/rubocop/cop/code_reuse/service_class_spec.rb +++ b/spec/rubocop/cop/code_reuse/service_class_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/code_reuse/service_class' RSpec.describe RuboCop::Cop::CodeReuse::ServiceClass do - subject(:cop) { described_class.new } - it 'flags the use of a Service class in a Finder' do allow(cop) .to receive(:in_finder?) diff --git a/spec/rubocop/cop/code_reuse/worker_spec.rb b/spec/rubocop/cop/code_reuse/worker_spec.rb index a548e90d8e1..2df5ebc56fa 100644 --- a/spec/rubocop/cop/code_reuse/worker_spec.rb +++ b/spec/rubocop/cop/code_reuse/worker_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/code_reuse/worker' RSpec.describe RuboCop::Cop::CodeReuse::Worker do - subject(:cop) { described_class.new } - it 'flags the use of a worker in a controller' do allow(cop) .to receive(:in_controller?) diff --git a/spec/rubocop/cop/database/disable_referential_integrity_spec.rb b/spec/rubocop/cop/database/disable_referential_integrity_spec.rb index 9ac67363cb6..5d31e55e586 100644 --- a/spec/rubocop/cop/database/disable_referential_integrity_spec.rb +++ b/spec/rubocop/cop/database/disable_referential_integrity_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/database/disable_referential_integrity' RSpec.describe RuboCop::Cop::Database::DisableReferentialIntegrity do - subject(:cop) { described_class.new } - it 'does not flag the use of disable_referential_integrity with a send receiver' do expect_offense(<<~SOURCE) foo.disable_referential_integrity diff --git a/spec/rubocop/cop/database/establish_connection_spec.rb b/spec/rubocop/cop/database/establish_connection_spec.rb index 3919872b5e7..987f68def75 100644 --- a/spec/rubocop/cop/database/establish_connection_spec.rb +++ b/spec/rubocop/cop/database/establish_connection_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/database/establish_connection' RSpec.describe RuboCop::Cop::Database::EstablishConnection do - subject(:cop) { described_class.new } - it 'flags the use of ActiveRecord::Base.establish_connection' do expect_offense(<<~CODE) ActiveRecord::Base.establish_connection diff --git a/spec/rubocop/cop/database/multiple_databases_spec.rb b/spec/rubocop/cop/database/multiple_databases_spec.rb index 6ee1e7b13ca..124e8aaf39c 100644 --- a/spec/rubocop/cop/database/multiple_databases_spec.rb +++ b/spec/rubocop/cop/database/multiple_databases_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/database/multiple_databases' RSpec.describe RuboCop::Cop::Database::MultipleDatabases do - subject(:cop) { described_class.new } - it 'flags the use of ActiveRecord::Base.connection' do expect_offense(<<~SOURCE) ActiveRecord::Base.connection.inspect diff --git a/spec/rubocop/cop/database/rescue_query_canceled_spec.rb b/spec/rubocop/cop/database/rescue_query_canceled_spec.rb index 56314a18bf5..2418b45e3bb 100644 --- a/spec/rubocop/cop/database/rescue_query_canceled_spec.rb +++ b/spec/rubocop/cop/database/rescue_query_canceled_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/database/rescue_query_canceled' RSpec.describe RuboCop::Cop::Database::RescueQueryCanceled do - subject(:cop) { described_class.new } - it 'flags the use of ActiveRecord::QueryCanceled' do expect_offense(<<~CODE) begin diff --git a/spec/rubocop/cop/database/rescue_statement_timeout_spec.rb b/spec/rubocop/cop/database/rescue_statement_timeout_spec.rb index b9b2ce1c16b..bfeba2b4d00 100644 --- a/spec/rubocop/cop/database/rescue_statement_timeout_spec.rb +++ b/spec/rubocop/cop/database/rescue_statement_timeout_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/database/rescue_statement_timeout' RSpec.describe RuboCop::Cop::Database::RescueStatementTimeout do - subject(:cop) { described_class.new } - it 'flags the use of ActiveRecord::StatementTimeout' do expect_offense(<<~CODE) begin diff --git a/spec/rubocop/cop/default_scope_spec.rb b/spec/rubocop/cop/default_scope_spec.rb index 4fac0d465e0..d1f26cdce46 100644 --- a/spec/rubocop/cop/default_scope_spec.rb +++ b/spec/rubocop/cop/default_scope_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/default_scope' RSpec.describe RuboCop::Cop::DefaultScope do - subject(:cop) { described_class.new } - it 'does not flag the use of default_scope with a send receiver' do expect_no_offenses('foo.default_scope') end diff --git a/spec/rubocop/cop/destroy_all_spec.rb b/spec/rubocop/cop/destroy_all_spec.rb index 468b10c3816..f984822a4e8 100644 --- a/spec/rubocop/cop/destroy_all_spec.rb +++ b/spec/rubocop/cop/destroy_all_spec.rb @@ -1,21 +1,19 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/destroy_all' RSpec.describe RuboCop::Cop::DestroyAll do - subject(:cop) { described_class.new } - it 'flags the use of destroy_all with a send receiver' do expect_offense(<<~CODE) - foo.destroy_all # rubocop: disable Cop/DestroyAll + foo.destroy_all ^^^^^^^^^^^^^^^ Use `delete_all` instead of `destroy_all`. [...] CODE end it 'flags the use of destroy_all with a constant receiver' do expect_offense(<<~CODE) - User.destroy_all # rubocop: disable Cop/DestroyAll + User.destroy_all ^^^^^^^^^^^^^^^^ Use `delete_all` instead of `destroy_all`. [...] CODE end @@ -30,7 +28,7 @@ RSpec.describe RuboCop::Cop::DestroyAll do it 'flags the use of destroy_all with a local variable receiver' do expect_offense(<<~CODE) users = User.all - users.destroy_all # rubocop: disable Cop/DestroyAll + users.destroy_all ^^^^^^^^^^^^^^^^^ Use `delete_all` instead of `destroy_all`. [...] CODE end diff --git a/spec/rubocop/cop/file_decompression_spec.rb b/spec/rubocop/cop/file_decompression_spec.rb index 7be1a784001..19d71a2e85b 100644 --- a/spec/rubocop/cop/file_decompression_spec.rb +++ b/spec/rubocop/cop/file_decompression_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/file_decompression' RSpec.describe RuboCop::Cop::FileDecompression do - subject(:cop) { described_class.new } - it 'does not flag when using a system command not related to file decompression' do expect_no_offenses('system("ls")') end diff --git a/spec/rubocop/cop/filename_length_spec.rb b/spec/rubocop/cop/filename_length_spec.rb index ee128cb2781..1ea368d282f 100644 --- a/spec/rubocop/cop/filename_length_spec.rb +++ b/spec/rubocop/cop/filename_length_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rubocop/rspec/support' require_relative '../../../rubocop/cop/filename_length' RSpec.describe RuboCop::Cop::FilenameLength do - subject(:cop) { described_class.new } - it 'does not flag files with names 100 characters long' do expect_no_offenses('puts "it does not matter"', 'a' * 100) end diff --git a/spec/rubocop/cop/gemspec/avoid_executing_git_spec.rb b/spec/rubocop/cop/gemspec/avoid_executing_git_spec.rb index f94a990a2f7..6a1982d8101 100644 --- a/spec/rubocop/cop/gemspec/avoid_executing_git_spec.rb +++ b/spec/rubocop/cop/gemspec/avoid_executing_git_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gemspec/avoid_executing_git' RSpec.describe RuboCop::Cop::Gemspec::AvoidExecutingGit do - subject(:cop) { described_class.new } - it 'flags violation for executing git' do expect_offense(<<~RUBY) Gem::Specification.new do |gem| diff --git a/spec/rubocop/cop/gitlab/avoid_feature_category_not_owned_spec.rb b/spec/rubocop/cop/gitlab/avoid_feature_category_not_owned_spec.rb index f6c6955f6bb..9cacee5f75d 100644 --- a/spec/rubocop/cop/gitlab/avoid_feature_category_not_owned_spec.rb +++ b/spec/rubocop/cop/gitlab/avoid_feature_category_not_owned_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/avoid_feature_category_not_owned' RSpec.describe RuboCop::Cop::Gitlab::AvoidFeatureCategoryNotOwned do - subject(:cop) { described_class.new } - shared_examples 'defining feature category on a class' do it 'flags a method call on a class' do expect_offense(<<~SOURCE) @@ -31,7 +29,7 @@ RSpec.describe RuboCop::Cop::Gitlab::AvoidFeatureCategoryNotOwned do context 'in controllers' do before do - allow(subject).to receive(:in_controller?).and_return(true) + allow(cop).to receive(:in_controller?).and_return(true) end it_behaves_like 'defining feature category on a class' @@ -39,7 +37,7 @@ RSpec.describe RuboCop::Cop::Gitlab::AvoidFeatureCategoryNotOwned do context 'in workers' do before do - allow(subject).to receive(:in_worker?).and_return(true) + allow(cop).to receive(:in_worker?).and_return(true) end it_behaves_like 'defining feature category on a class' @@ -47,7 +45,7 @@ RSpec.describe RuboCop::Cop::Gitlab::AvoidFeatureCategoryNotOwned do context 'for grape endpoints' do before do - allow(subject).to receive(:in_api?).and_return(true) + allow(cop).to receive(:in_api?).and_return(true) end it_behaves_like 'defining feature category on a class' diff --git a/spec/rubocop/cop/gitlab/avoid_feature_get_spec.rb b/spec/rubocop/cop/gitlab/avoid_feature_get_spec.rb new file mode 100644 index 00000000000..b5017bebd28 --- /dev/null +++ b/spec/rubocop/cop/gitlab/avoid_feature_get_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'rubocop_spec_helper' + +require_relative '../../../../rubocop/cop/gitlab/avoid_feature_get' + +RSpec.describe RuboCop::Cop::Gitlab::AvoidFeatureGet do + let(:msg) { described_class::MSG } + + subject(:cop) { described_class.new } + + it 'bans use of Feature.ban' do + expect_offense(<<~RUBY) + Feature.get + ^^^ #{msg} + Feature.get(x) + ^^^ #{msg} + ::Feature.get + ^^^ #{msg} + ::Feature.get(x) + ^^^ #{msg} + RUBY + end + + it 'ignores unrelated code' do + expect_no_offenses(<<~RUBY) + Namespace::Feature.get + Namespace::Feature.get(x) + Feature.remove(:x) + RUBY + end +end diff --git a/spec/rubocop/cop/gitlab/avoid_uploaded_file_from_params_spec.rb b/spec/rubocop/cop/gitlab/avoid_uploaded_file_from_params_spec.rb index 6d69eb5456f..09d5552d40c 100644 --- a/spec/rubocop/cop/gitlab/avoid_uploaded_file_from_params_spec.rb +++ b/spec/rubocop/cop/gitlab/avoid_uploaded_file_from_params_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/avoid_uploaded_file_from_params' RSpec.describe RuboCop::Cop::Gitlab::AvoidUploadedFileFromParams do - subject(:cop) { described_class.new } - context 'when using UploadedFile.from_params' do it 'flags its call' do expect_offense(<<~SOURCE) diff --git a/spec/rubocop/cop/gitlab/bulk_insert_spec.rb b/spec/rubocop/cop/gitlab/bulk_insert_spec.rb index 7cd003d0a70..28fdd18b0f5 100644 --- a/spec/rubocop/cop/gitlab/bulk_insert_spec.rb +++ b/spec/rubocop/cop/gitlab/bulk_insert_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/bulk_insert' RSpec.describe RuboCop::Cop::Gitlab::BulkInsert do - subject(:cop) { described_class.new } - it 'flags the use of ApplicationRecord.legacy_bulk_insert' do expect_offense(<<~SOURCE) ApplicationRecord.legacy_bulk_insert('merge_request_diff_files', rows) diff --git a/spec/rubocop/cop/gitlab/change_timezone_spec.rb b/spec/rubocop/cop/gitlab/change_timezone_spec.rb index ff6365aa0f7..d5100cb662a 100644 --- a/spec/rubocop/cop/gitlab/change_timezone_spec.rb +++ b/spec/rubocop/cop/gitlab/change_timezone_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/change_timezone' RSpec.describe RuboCop::Cop::Gitlab::ChangeTimezone do - subject(:cop) { described_class.new } - context 'Time.zone=' do it 'registers an offense with no 2nd argument' do expect_offense(<<~PATTERN) diff --git a/spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb b/spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb index 1d99ec93e25..99cc9e0b469 100644 --- a/spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb +++ b/spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/const_get_inherit_false' RSpec.describe RuboCop::Cop::Gitlab::ConstGetInheritFalse do - subject(:cop) { described_class.new } - context 'Object.const_get' do it 'registers an offense with no 2nd argument and corrects' do expect_offense(<<~PATTERN) diff --git a/spec/rubocop/cop/gitlab/delegate_predicate_methods_spec.rb b/spec/rubocop/cop/gitlab/delegate_predicate_methods_spec.rb index 1ceff0dd681..1b497954aee 100644 --- a/spec/rubocop/cop/gitlab/delegate_predicate_methods_spec.rb +++ b/spec/rubocop/cop/gitlab/delegate_predicate_methods_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/delegate_predicate_methods' RSpec.describe RuboCop::Cop::Gitlab::DelegatePredicateMethods do - subject(:cop) { described_class.new } - it 'registers offense for single predicate method with allow_nil:true' do expect_offense(<<~SOURCE) delegate :is_foo?, :do_foo, to: :bar, allow_nil: true diff --git a/spec/rubocop/cop/gitlab/deprecate_track_redis_hll_event_spec.rb b/spec/rubocop/cop/gitlab/deprecate_track_redis_hll_event_spec.rb index 453f0c36c14..eed30e11a98 100644 --- a/spec/rubocop/cop/gitlab/deprecate_track_redis_hll_event_spec.rb +++ b/spec/rubocop/cop/gitlab/deprecate_track_redis_hll_event_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/deprecate_track_redis_hll_event' RSpec.describe RuboCop::Cop::Gitlab::DeprecateTrackRedisHLLEvent do - subject(:cop) { described_class.new } - it 'does not flag the use of track_event' do expect_no_offenses('track_event :show, name: "p_analytics_insights"') end diff --git a/spec/rubocop/cop/gitlab/duplicate_spec_location_spec.rb b/spec/rubocop/cop/gitlab/duplicate_spec_location_spec.rb index 3b3d5b01a30..9a1639806c8 100644 --- a/spec/rubocop/cop/gitlab/duplicate_spec_location_spec.rb +++ b/spec/rubocop/cop/gitlab/duplicate_spec_location_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/duplicate_spec_location' RSpec.describe RuboCop::Cop::Gitlab::DuplicateSpecLocation do - subject(:cop) { described_class.new } - let(:rails_root) { '../../../../' } def full_path(path) diff --git a/spec/rubocop/cop/gitlab/event_store_subscriber_spec.rb b/spec/rubocop/cop/gitlab/event_store_subscriber_spec.rb index e17fb71f9bc..7c692d5aad4 100644 --- a/spec/rubocop/cop/gitlab/event_store_subscriber_spec.rb +++ b/spec/rubocop/cop/gitlab/event_store_subscriber_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/event_store_subscriber' RSpec.describe RuboCop::Cop::Gitlab::EventStoreSubscriber do - subject(:cop) { described_class.new } - context 'when an event store subscriber overrides #perform' do it 'registers an offense' do expect_offense(<<~WORKER) diff --git a/spec/rubocop/cop/gitlab/except_spec.rb b/spec/rubocop/cop/gitlab/except_spec.rb index 04cfe261cf2..47048b8f658 100644 --- a/spec/rubocop/cop/gitlab/except_spec.rb +++ b/spec/rubocop/cop/gitlab/except_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/except' RSpec.describe RuboCop::Cop::Gitlab::Except do - subject(:cop) { described_class.new } - it 'flags the use of Gitlab::SQL::Except.new' do expect_offense(<<~SOURCE) Gitlab::SQL::Except.new([foo]) diff --git a/spec/rubocop/cop/gitlab/feature_available_usage_spec.rb b/spec/rubocop/cop/gitlab/feature_available_usage_spec.rb index 514ef357785..30edd33a318 100644 --- a/spec/rubocop/cop/gitlab/feature_available_usage_spec.rb +++ b/spec/rubocop/cop/gitlab/feature_available_usage_spec.rb @@ -1,13 +1,11 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rubocop' require 'rubocop/rspec/support' require_relative '../../../../rubocop/cop/gitlab/feature_available_usage' RSpec.describe RuboCop::Cop::Gitlab::FeatureAvailableUsage do - subject(:cop) { described_class.new } - context 'no arguments given' do it 'does not flag the use of Gitlab::Sourcegraph.feature_available? with no arguments' do expect_no_offenses('Gitlab::Sourcegraph.feature_available?') diff --git a/spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb b/spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb index d2cd06d77c5..6e01ef1bdec 100644 --- a/spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb +++ b/spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/finder_with_find_by' RSpec.describe RuboCop::Cop::Gitlab::FinderWithFindBy do - subject(:cop) { described_class.new } - context 'when calling execute.find' do it 'registers an offense and corrects' do expect_offense(<<~CODE) diff --git a/spec/rubocop/cop/gitlab/httparty_spec.rb b/spec/rubocop/cop/gitlab/httparty_spec.rb index 98b1aa36586..09204009d9b 100644 --- a/spec/rubocop/cop/gitlab/httparty_spec.rb +++ b/spec/rubocop/cop/gitlab/httparty_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/httparty' RSpec.describe RuboCop::Cop::Gitlab::HTTParty do # rubocop:disable RSpec/FilePath - subject(:cop) { described_class.new } - shared_examples('registering include offense') do it 'registers an offense when the class includes HTTParty' do expect_offense(source) diff --git a/spec/rubocop/cop/gitlab/intersect_spec.rb b/spec/rubocop/cop/gitlab/intersect_spec.rb index f3cb1412f35..c81dae9af97 100644 --- a/spec/rubocop/cop/gitlab/intersect_spec.rb +++ b/spec/rubocop/cop/gitlab/intersect_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/intersect' RSpec.describe RuboCop::Cop::Gitlab::Intersect do - subject(:cop) { described_class.new } - it 'flags the use of Gitlab::SQL::Intersect.new' do expect_offense(<<~SOURCE) Gitlab::SQL::Intersect.new([foo]) diff --git a/spec/rubocop/cop/gitlab/json_spec.rb b/spec/rubocop/cop/gitlab/json_spec.rb index 7998f26da4e..e4ec107747d 100644 --- a/spec/rubocop/cop/gitlab/json_spec.rb +++ b/spec/rubocop/cop/gitlab/json_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/json' RSpec.describe RuboCop::Cop::Gitlab::Json do - subject(:cop) { described_class.new } - context 'when ::JSON is called' do it 'registers an offense' do expect_offense(<<~RUBY) diff --git a/spec/rubocop/cop/gitlab/keys_first_and_values_first_spec.rb b/spec/rubocop/cop/gitlab/keys_first_and_values_first_spec.rb new file mode 100644 index 00000000000..073c78e78c0 --- /dev/null +++ b/spec/rubocop/cop/gitlab/keys_first_and_values_first_spec.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'rubocop_spec_helper' + +require_relative '../../../../rubocop/cop/gitlab/keys_first_and_values_first' + +RSpec.describe RuboCop::Cop::Gitlab::KeysFirstAndValuesFirst do + let(:msg) { described_class::MSG } + + subject(:cop) { described_class.new } + + shared_examples 'inspect use of keys or values first' do |method, autocorrect| + describe ".#{method}.first" do + it 'flags and autocorrects' do + expect_offense(<<~RUBY, method: method, autocorrect: autocorrect) + hash.%{method}.first + _{method} ^^^^^ Prefer `.%{autocorrect}.first` over `.%{method}.first`. [...] + var = {a: 1}; var.%{method}.first + _{method} ^^^^^ Prefer `.%{autocorrect}.first` over `.%{method}.first`. [...] + {a: 1}.%{method}.first + _{method} ^^^^^ Prefer `.%{autocorrect}.first` over `.%{method}.first`. [...] + CONST.%{method}.first + _{method} ^^^^^ Prefer `.%{autocorrect}.first` over `.%{method}.first`. [...] + ::CONST.%{method}.first + _{method} ^^^^^ Prefer `.%{autocorrect}.first` over `.%{method}.first`. [...] + RUBY + + expect_correction(<<~RUBY) + hash.#{autocorrect}.first + var = {a: 1}; var.#{autocorrect}.first + {a: 1}.#{autocorrect}.first + CONST.#{autocorrect}.first + ::CONST.#{autocorrect}.first + RUBY + end + + it 'does not flag unrelated code' do + expect_no_offenses(<<~RUBY) + array.first + hash.#{method}.last + hash.#{method} + #{method}.first + 1.#{method}.first + 'string'.#{method}.first + RUBY + end + end + end + + it_behaves_like 'inspect use of keys or values first', :keys, :each_key + it_behaves_like 'inspect use of keys or values first', :values, :each_value +end diff --git a/spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb b/spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb index 9ab5cdc24a4..ac7e41dda44 100644 --- a/spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb +++ b/spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rubocop' require 'rubocop/rspec/support' require_relative '../../../../rubocop/cop/gitlab/mark_used_feature_flags' @@ -10,8 +10,6 @@ RSpec.describe RuboCop::Cop::Gitlab::MarkUsedFeatureFlags do %w[a_feature_flag foo_hello foo_world baz_experiment_percentage bar_baz] end - subject(:cop) { described_class.new } - before do allow(cop).to receive(:defined_feature_flags).and_return(defined_feature_flags) allow(cop).to receive(:usage_data_counters_known_event_feature_flags).and_return([]) @@ -48,6 +46,7 @@ RSpec.describe RuboCop::Cop::Gitlab::MarkUsedFeatureFlags do Feature.enabled? Feature.disabled? push_frontend_feature_flag + YamlProcessor::FeatureFlags.enabled? ].each do |feature_flag_method| context "#{feature_flag_method} method" do context 'a string feature flag' do @@ -212,19 +211,6 @@ RSpec.describe RuboCop::Cop::Gitlab::MarkUsedFeatureFlags do include_examples 'does not set any flags as used', 'deduplicate :delayed' end - describe 'GraphQL `field` method' do - before do - allow(cop).to receive(:in_graphql_types?).and_return(true) - end - - include_examples 'sets flag as used', 'field :runners, Types::Ci::RunnerType.connection_type, null: true, _deprecated_feature_flag: :foo', 'foo' - include_examples 'sets flag as used', 'field :runners, null: true, _deprecated_feature_flag: :foo', 'foo' - include_examples 'does not set any flags as used', 'field :solution' - include_examples 'does not set any flags as used', 'field :runners, Types::Ci::RunnerType.connection_type' - include_examples 'does not set any flags as used', 'field :runners, Types::Ci::RunnerType.connection_type, null: true, description: "hello world"' - include_examples 'does not set any flags as used', 'field :solution, type: GraphQL::Types::String, null: true, description: "URL to the vulnerabilitys details page."' - end - describe "tracking of usage data metrics known events happens at the beginning of inspection" do let(:usage_data_counters_known_event_feature_flags) { ['an_event_feature_flag'] } diff --git a/spec/rubocop/cop/gitlab/module_with_instance_variables_spec.rb b/spec/rubocop/cop/gitlab/module_with_instance_variables_spec.rb index d46dec3b2e3..9f1691696eb 100644 --- a/spec/rubocop/cop/gitlab/module_with_instance_variables_spec.rb +++ b/spec/rubocop/cop/gitlab/module_with_instance_variables_spec.rb @@ -1,13 +1,11 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/module_with_instance_variables' RSpec.describe RuboCop::Cop::Gitlab::ModuleWithInstanceVariables do let(:msg) { "Do not use instance variables in a module. [...]" } - subject(:cop) { described_class.new } - shared_examples('registering offense') do it 'registers an offense when instance variable is used in a module' do expect_offense(source) diff --git a/spec/rubocop/cop/gitlab/namespaced_class_spec.rb b/spec/rubocop/cop/gitlab/namespaced_class_spec.rb index 83d0eaf4884..b16c3aba5c7 100644 --- a/spec/rubocop/cop/gitlab/namespaced_class_spec.rb +++ b/spec/rubocop/cop/gitlab/namespaced_class_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/namespaced_class' RSpec.describe RuboCop::Cop::Gitlab::NamespacedClass do - subject(:cop) { described_class.new } - shared_examples 'enforces namespaced classes' do def namespaced(code) return code unless namespace diff --git a/spec/rubocop/cop/gitlab/policy_rule_boolean_spec.rb b/spec/rubocop/cop/gitlab/policy_rule_boolean_spec.rb index f73fc71b601..d00a9861c77 100644 --- a/spec/rubocop/cop/gitlab/policy_rule_boolean_spec.rb +++ b/spec/rubocop/cop/gitlab/policy_rule_boolean_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/policy_rule_boolean' RSpec.describe RuboCop::Cop::Gitlab::PolicyRuleBoolean do - subject(:cop) { described_class.new } - it 'registers offense for &&' do expect_offense(<<~SOURCE) rule { conducts_electricity && batteries }.enable :light_bulb diff --git a/spec/rubocop/cop/gitlab/predicate_memoization_spec.rb b/spec/rubocop/cop/gitlab/predicate_memoization_spec.rb index 903c02ba194..1ca34ad90da 100644 --- a/spec/rubocop/cop/gitlab/predicate_memoization_spec.rb +++ b/spec/rubocop/cop/gitlab/predicate_memoization_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/predicate_memoization' RSpec.describe RuboCop::Cop::Gitlab::PredicateMemoization do - subject(:cop) { described_class.new } - shared_examples('not registering offense') do it 'does not register offenses' do expect_no_offenses(source) diff --git a/spec/rubocop/cop/gitlab/rails_logger_spec.rb b/spec/rubocop/cop/gitlab/rails_logger_spec.rb index 24f49bf3044..c9d361b49b8 100644 --- a/spec/rubocop/cop/gitlab/rails_logger_spec.rb +++ b/spec/rubocop/cop/gitlab/rails_logger_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/rails_logger' RSpec.describe RuboCop::Cop::Gitlab::RailsLogger do - subject(:cop) { described_class.new } - described_class::LOG_METHODS.each do |method| it "flags the use of Rails.logger.#{method} with a constant receiver" do node = "Rails.logger.#{method}('some error')" diff --git a/spec/rubocop/cop/gitlab/union_spec.rb b/spec/rubocop/cop/gitlab/union_spec.rb index ce84c75338d..4042fe0263a 100644 --- a/spec/rubocop/cop/gitlab/union_spec.rb +++ b/spec/rubocop/cop/gitlab/union_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/gitlab/union' RSpec.describe RuboCop::Cop::Gitlab::Union do - subject(:cop) { described_class.new } - it 'flags the use of Gitlab::SQL::Union.new' do expect_offense(<<~SOURCE) Gitlab::SQL::Union.new([foo]) diff --git a/spec/rubocop/cop/graphql/authorize_types_spec.rb b/spec/rubocop/cop/graphql/authorize_types_spec.rb index 7aa36030526..a30cd5a1688 100644 --- a/spec/rubocop/cop/graphql/authorize_types_spec.rb +++ b/spec/rubocop/cop/graphql/authorize_types_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/graphql/authorize_types' RSpec.describe RuboCop::Cop::Graphql::AuthorizeTypes do - subject(:cop) { described_class.new } - it 'adds an offense when there is no authorize call' do expect_offense(<<~TYPE) module Types diff --git a/spec/rubocop/cop/graphql/descriptions_spec.rb b/spec/rubocop/cop/graphql/descriptions_spec.rb index 84520a89b08..8826e700fdf 100644 --- a/spec/rubocop/cop/graphql/descriptions_spec.rb +++ b/spec/rubocop/cop/graphql/descriptions_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/graphql/descriptions' RSpec.describe RuboCop::Cop::Graphql::Descriptions do - subject(:cop) { described_class.new } - context 'with fields' do it 'adds an offense when there is no description' do expect_offense(<<~TYPE) diff --git a/spec/rubocop/cop/graphql/gid_expected_type_spec.rb b/spec/rubocop/cop/graphql/gid_expected_type_spec.rb index 47a6ce24d53..563c16a99df 100644 --- a/spec/rubocop/cop/graphql/gid_expected_type_spec.rb +++ b/spec/rubocop/cop/graphql/gid_expected_type_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/graphql/gid_expected_type' RSpec.describe RuboCop::Cop::Graphql::GIDExpectedType do - subject(:cop) { described_class.new } - it 'adds an offense when there is no expected_type parameter' do expect_offense(<<~TYPE) GitlabSchema.object_from_id(received_id) diff --git a/spec/rubocop/cop/graphql/graphql_name_position_spec.rb b/spec/rubocop/cop/graphql/graphql_name_position_spec.rb index 42cc398ed84..5db6fe6a801 100644 --- a/spec/rubocop/cop/graphql/graphql_name_position_spec.rb +++ b/spec/rubocop/cop/graphql/graphql_name_position_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/graphql/graphql_name_position' RSpec.describe RuboCop::Cop::Graphql::GraphqlNamePosition do - subject(:cop) { described_class.new } - it 'adds an offense when graphql_name is not on the first line' do expect_offense(<<~TYPE) module Types diff --git a/spec/rubocop/cop/graphql/id_type_spec.rb b/spec/rubocop/cop/graphql/id_type_spec.rb index d71031c6e1a..3a56753d39e 100644 --- a/spec/rubocop/cop/graphql/id_type_spec.rb +++ b/spec/rubocop/cop/graphql/id_type_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/graphql/id_type' RSpec.describe RuboCop::Cop::Graphql::IDType do - subject(:cop) { described_class.new } - it 'adds an offense when GraphQL::Types::ID is used as a param to #argument' do expect_offense(<<~TYPE) argument :some_arg, GraphQL::Types::ID, some: other, params: do_not_matter diff --git a/spec/rubocop/cop/graphql/json_type_spec.rb b/spec/rubocop/cop/graphql/json_type_spec.rb index 882e2b2ef88..c72e5b5b1c9 100644 --- a/spec/rubocop/cop/graphql/json_type_spec.rb +++ b/spec/rubocop/cop/graphql/json_type_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/graphql/json_type' RSpec.describe RuboCop::Cop::Graphql::JSONType do @@ -8,8 +8,6 @@ RSpec.describe RuboCop::Cop::Graphql::JSONType do 'Avoid using GraphQL::Types::JSON. See: https://docs.gitlab.com/ee/development/api_graphql_styleguide.html#json' end - subject(:cop) { described_class.new } - context 'fields' do it 'adds an offense when GraphQL::Types::JSON is used' do expect_offense(<<~RUBY) diff --git a/spec/rubocop/cop/graphql/old_types_spec.rb b/spec/rubocop/cop/graphql/old_types_spec.rb index 5cf3b11548f..45d47f3b516 100644 --- a/spec/rubocop/cop/graphql/old_types_spec.rb +++ b/spec/rubocop/cop/graphql/old_types_spec.rb @@ -1,14 +1,12 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rspec-parameterized' require_relative '../../../../rubocop/cop/graphql/old_types' RSpec.describe RuboCop::Cop::Graphql::OldTypes do using RSpec::Parameterized::TableSyntax - subject(:cop) { described_class.new } - where(:old_type, :message) do 'GraphQL::ID_TYPE' | 'Avoid using GraphQL::ID_TYPE. Use GraphQL::Types::ID instead' 'GraphQL::INT_TYPE' | 'Avoid using GraphQL::INT_TYPE. Use GraphQL::Types::Int instead' diff --git a/spec/rubocop/cop/graphql/resolver_type_spec.rb b/spec/rubocop/cop/graphql/resolver_type_spec.rb index 06bf90a8a07..ade1bfc2cca 100644 --- a/spec/rubocop/cop/graphql/resolver_type_spec.rb +++ b/spec/rubocop/cop/graphql/resolver_type_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/graphql/resolver_type' RSpec.describe RuboCop::Cop::Graphql::ResolverType do - subject(:cop) { described_class.new } - it 'adds an offense when there is no type annotation' do expect_offense(<<~SRC) module Resolvers diff --git a/spec/rubocop/cop/group_public_or_visible_to_user_spec.rb b/spec/rubocop/cop/group_public_or_visible_to_user_spec.rb index 2348552f9e4..c948ea606b8 100644 --- a/spec/rubocop/cop/group_public_or_visible_to_user_spec.rb +++ b/spec/rubocop/cop/group_public_or_visible_to_user_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/group_public_or_visible_to_user' RSpec.describe RuboCop::Cop::GroupPublicOrVisibleToUser do @@ -9,8 +9,6 @@ RSpec.describe RuboCop::Cop::GroupPublicOrVisibleToUser do "Please ensure that you are not using it on its own and that the amount of rows being filtered is reasonable." end - subject(:cop) { described_class.new } - it 'flags the use of Group.public_or_visible_to_user with a constant receiver' do expect_offense(<<~CODE) Group.public_or_visible_to_user diff --git a/spec/rubocop/cop/ignored_columns_spec.rb b/spec/rubocop/cop/ignored_columns_spec.rb index f87b1a1e520..c6c44399624 100644 --- a/spec/rubocop/cop/ignored_columns_spec.rb +++ b/spec/rubocop/cop/ignored_columns_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/ignored_columns' RSpec.describe RuboCop::Cop::IgnoredColumns do - subject(:cop) { described_class.new } - it 'flags direct use of ignored_columns instead of the IgnoredColumns concern' do expect_offense(<<~RUBY) class Foo < ApplicationRecord diff --git a/spec/rubocop/cop/include_sidekiq_worker_spec.rb b/spec/rubocop/cop/include_sidekiq_worker_spec.rb index 8c706925ab9..f86bb1427db 100644 --- a/spec/rubocop/cop/include_sidekiq_worker_spec.rb +++ b/spec/rubocop/cop/include_sidekiq_worker_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/include_sidekiq_worker' RSpec.describe RuboCop::Cop::IncludeSidekiqWorker do - subject(:cop) { described_class.new } - context 'when `Sidekiq::Worker` is included' do it 'registers an offense and corrects', :aggregate_failures do expect_offense(<<~CODE) diff --git a/spec/rubocop/cop/inject_enterprise_edition_module_spec.rb b/spec/rubocop/cop/inject_enterprise_edition_module_spec.rb index 3596badc599..3063a474bd7 100644 --- a/spec/rubocop/cop/inject_enterprise_edition_module_spec.rb +++ b/spec/rubocop/cop/inject_enterprise_edition_module_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/inject_enterprise_edition_module' RSpec.describe RuboCop::Cop::InjectEnterpriseEditionModule do - subject(:cop) { described_class.new } - it 'flags the use of `prepend_mod_with` in the middle of a file' do expect_offense(<<~SOURCE) class Foo diff --git a/spec/rubocop/cop/lint/last_keyword_argument_spec.rb b/spec/rubocop/cop/lint/last_keyword_argument_spec.rb index b1b4c88e0f6..b0551a79c50 100644 --- a/spec/rubocop/cop/lint/last_keyword_argument_spec.rb +++ b/spec/rubocop/cop/lint/last_keyword_argument_spec.rb @@ -1,19 +1,18 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/lint/last_keyword_argument' RSpec.describe RuboCop::Cop::Lint::LastKeywordArgument do - subject(:cop) { described_class.new } - before do described_class.instance_variable_set(:@keyword_warnings, nil) + allow(Dir).to receive(:glob).and_call_original + allow(File).to receive(:read).and_call_original end context 'deprecation files does not exist' do before do - allow(Dir).to receive(:glob).and_return([]) - allow(File).to receive(:exist?).and_return(false) + allow(Dir).to receive(:glob).with(described_class::DEPRECATIONS_GLOB).and_return([]) end it 'does not register an offense' do @@ -58,7 +57,8 @@ RSpec.describe RuboCop::Cop::Lint::LastKeywordArgument do before do allow(Dir).to receive(:glob).and_return(['deprecations/service/create_spec.yml', 'deprecations/api/projects_spec.yml']) - allow(File).to receive(:read).and_return(create_spec_yaml, projects_spec_yaml) + allow(File).to receive(:read).with('deprecations/service/create_spec.yml').and_return(create_spec_yaml) + allow(File).to receive(:read).with('deprecations/api/projects_spec.yml').and_return(projects_spec_yaml) end it 'registers an offense for last keyword warning' do diff --git a/spec/rubocop/cop/migration/add_column_with_default_spec.rb b/spec/rubocop/cop/migration/add_column_with_default_spec.rb index 3f47613280f..865f567db44 100644 --- a/spec/rubocop/cop/migration/add_column_with_default_spec.rb +++ b/spec/rubocop/cop/migration/add_column_with_default_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/add_column_with_default' RSpec.describe RuboCop::Cop::Migration::AddColumnWithDefault do diff --git a/spec/rubocop/cop/migration/add_columns_to_wide_tables_spec.rb b/spec/rubocop/cop/migration/add_columns_to_wide_tables_spec.rb index b78ec971245..7cc88946cf1 100644 --- a/spec/rubocop/cop/migration/add_columns_to_wide_tables_spec.rb +++ b/spec/rubocop/cop/migration/add_columns_to_wide_tables_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/add_columns_to_wide_tables' RSpec.describe RuboCop::Cop::Migration::AddColumnsToWideTables do diff --git a/spec/rubocop/cop/migration/add_concurrent_foreign_key_spec.rb b/spec/rubocop/cop/migration/add_concurrent_foreign_key_spec.rb index 572c0d414b3..aa39f5f1603 100644 --- a/spec/rubocop/cop/migration/add_concurrent_foreign_key_spec.rb +++ b/spec/rubocop/cop/migration/add_concurrent_foreign_key_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/add_concurrent_foreign_key' RSpec.describe RuboCop::Cop::Migration::AddConcurrentForeignKey do diff --git a/spec/rubocop/cop/migration/add_concurrent_index_spec.rb b/spec/rubocop/cop/migration/add_concurrent_index_spec.rb index 52b3a5769ff..185b64b0334 100644 --- a/spec/rubocop/cop/migration/add_concurrent_index_spec.rb +++ b/spec/rubocop/cop/migration/add_concurrent_index_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/add_concurrent_index' RSpec.describe RuboCop::Cop::Migration::AddConcurrentIndex do - subject(:cop) { described_class.new } - context 'when in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/add_index_spec.rb b/spec/rubocop/cop/migration/add_index_spec.rb index 088bfe434f4..338dbf73a3a 100644 --- a/spec/rubocop/cop/migration/add_index_spec.rb +++ b/spec/rubocop/cop/migration/add_index_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/add_index' RSpec.describe RuboCop::Cop::Migration::AddIndex do - subject(:cop) { described_class.new } - context 'in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/add_limit_to_text_columns_spec.rb b/spec/rubocop/cop/migration/add_limit_to_text_columns_spec.rb index f6bed0d74fb..85a86a27c48 100644 --- a/spec/rubocop/cop/migration/add_limit_to_text_columns_spec.rb +++ b/spec/rubocop/cop/migration/add_limit_to_text_columns_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/add_limit_to_text_columns' RSpec.describe RuboCop::Cop::Migration::AddLimitToTextColumns do - subject(:cop) { described_class.new } - context 'when in migration' do let(:msg) { 'Text columns should always have a limit set (255 is suggested)[...]' } diff --git a/spec/rubocop/cop/migration/add_reference_spec.rb b/spec/rubocop/cop/migration/add_reference_spec.rb index 9445780e9ed..bb3fe7068b4 100644 --- a/spec/rubocop/cop/migration/add_reference_spec.rb +++ b/spec/rubocop/cop/migration/add_reference_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/add_reference' RSpec.describe RuboCop::Cop::Migration::AddReference do diff --git a/spec/rubocop/cop/migration/add_timestamps_spec.rb b/spec/rubocop/cop/migration/add_timestamps_spec.rb index 2a11d46be6e..fcc2f4aa363 100644 --- a/spec/rubocop/cop/migration/add_timestamps_spec.rb +++ b/spec/rubocop/cop/migration/add_timestamps_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/add_timestamps' RSpec.describe RuboCop::Cop::Migration::AddTimestamps do - subject(:cop) { described_class.new } - let(:migration_with_add_timestamps) do %q( class Users < ActiveRecord::Migration[4.2] diff --git a/spec/rubocop/cop/migration/background_migration_base_class_spec.rb b/spec/rubocop/cop/migration/background_migration_base_class_spec.rb index 0a110418139..8cc85ac692c 100644 --- a/spec/rubocop/cop/migration/background_migration_base_class_spec.rb +++ b/spec/rubocop/cop/migration/background_migration_base_class_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/background_migration_base_class' RSpec.describe RuboCop::Cop::Migration::BackgroundMigrationBaseClass do - subject(:cop) { described_class.new } - context 'when the migration class inherits from BatchedMigrationJob' do it 'does not register any offenses' do expect_no_offenses(<<~RUBY) diff --git a/spec/rubocop/cop/migration/background_migration_record_spec.rb b/spec/rubocop/cop/migration/background_migration_record_spec.rb index b5724ef1efd..d5a451e00c9 100644 --- a/spec/rubocop/cop/migration/background_migration_record_spec.rb +++ b/spec/rubocop/cop/migration/background_migration_record_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/background_migration_record' RSpec.describe RuboCop::Cop::Migration::BackgroundMigrationRecord do - subject(:cop) { described_class.new } - context 'outside of a migration' do it 'does not register any offenses' do expect_no_offenses(<<~SOURCE) diff --git a/spec/rubocop/cop/migration/background_migrations_spec.rb b/spec/rubocop/cop/migration/background_migrations_spec.rb index 3242211ab47..681bbd84562 100644 --- a/spec/rubocop/cop/migration/background_migrations_spec.rb +++ b/spec/rubocop/cop/migration/background_migrations_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/background_migrations' RSpec.describe RuboCop::Cop::Migration::BackgroundMigrations do diff --git a/spec/rubocop/cop/migration/complex_indexes_require_name_spec.rb b/spec/rubocop/cop/migration/complex_indexes_require_name_spec.rb index ac814c10550..7329d399330 100644 --- a/spec/rubocop/cop/migration/complex_indexes_require_name_spec.rb +++ b/spec/rubocop/cop/migration/complex_indexes_require_name_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true # -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/complex_indexes_require_name' RSpec.describe RuboCop::Cop::Migration::ComplexIndexesRequireName do - subject(:cop) { described_class.new } - context 'when in migration' do let(:msg) { 'indexes added with custom options must be explicitly named' } diff --git a/spec/rubocop/cop/migration/create_table_with_foreign_keys_spec.rb b/spec/rubocop/cop/migration/create_table_with_foreign_keys_spec.rb index 6a8df2b507d..072edb5827b 100644 --- a/spec/rubocop/cop/migration/create_table_with_foreign_keys_spec.rb +++ b/spec/rubocop/cop/migration/create_table_with_foreign_keys_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/create_table_with_foreign_keys' RSpec.describe RuboCop::Cop::Migration::CreateTableWithForeignKeys do @@ -192,7 +192,7 @@ RSpec.describe RuboCop::Cop::Migration::CreateTableWithForeignKeys do include_context 'when there is a target to a high traffic table', :foreign_key do let(:explicit_target_opts) { ", to_table: :#{table_name}" } - let(:implicit_target_opts) { } + let(:implicit_target_opts) {} end end end diff --git a/spec/rubocop/cop/migration/datetime_spec.rb b/spec/rubocop/cop/migration/datetime_spec.rb index 95a875b3baa..400abe3be70 100644 --- a/spec/rubocop/cop/migration/datetime_spec.rb +++ b/spec/rubocop/cop/migration/datetime_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/datetime' RSpec.describe RuboCop::Cop::Migration::Datetime do - subject(:cop) { described_class.new } - let(:create_table_migration_without_datetime) do %q( class Users < ActiveRecord::Migration[6.0] diff --git a/spec/rubocop/cop/migration/drop_table_spec.rb b/spec/rubocop/cop/migration/drop_table_spec.rb index f1bd710f5e6..dd5f93eaafc 100644 --- a/spec/rubocop/cop/migration/drop_table_spec.rb +++ b/spec/rubocop/cop/migration/drop_table_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/drop_table' RSpec.describe RuboCop::Cop::Migration::DropTable do - subject(:cop) { described_class.new } - context 'when in deployment migration' do let(:msg) do '`drop_table` in deployment migrations requires downtime. Drop tables in post-deployment migrations instead.' diff --git a/spec/rubocop/cop/migration/migration_record_spec.rb b/spec/rubocop/cop/migration/migration_record_spec.rb index bfe6228c421..96a1d8fa107 100644 --- a/spec/rubocop/cop/migration/migration_record_spec.rb +++ b/spec/rubocop/cop/migration/migration_record_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/migration_record' RSpec.describe RuboCop::Cop::Migration::MigrationRecord do - subject(:cop) { described_class.new } - shared_examples 'a disabled cop' do |klass| it 'does not register any offenses' do expect_no_offenses(<<~SOURCE) diff --git a/spec/rubocop/cop/migration/prevent_global_enable_lock_retries_with_disable_ddl_transaction_spec.rb b/spec/rubocop/cop/migration/prevent_global_enable_lock_retries_with_disable_ddl_transaction_spec.rb index aa63259288d..1035ed2fb4a 100644 --- a/spec/rubocop/cop/migration/prevent_global_enable_lock_retries_with_disable_ddl_transaction_spec.rb +++ b/spec/rubocop/cop/migration/prevent_global_enable_lock_retries_with_disable_ddl_transaction_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/prevent_global_enable_lock_retries_with_disable_ddl_transaction' RSpec.describe RuboCop::Cop::Migration::PreventGlobalEnableLockRetriesWithDisableDdlTransaction do - subject(:cop) { described_class.new } - context 'when in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/prevent_index_creation_spec.rb b/spec/rubocop/cop/migration/prevent_index_creation_spec.rb index ed7c8974d8d..9d886467a48 100644 --- a/spec/rubocop/cop/migration/prevent_index_creation_spec.rb +++ b/spec/rubocop/cop/migration/prevent_index_creation_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/prevent_index_creation' RSpec.describe RuboCop::Cop::Migration::PreventIndexCreation do - subject(:cop) { described_class.new } - let(:forbidden_tables) { %w(ci_builds) } let(:forbidden_tables_list) { forbidden_tables.join(', ') } diff --git a/spec/rubocop/cop/migration/prevent_strings_spec.rb b/spec/rubocop/cop/migration/prevent_strings_spec.rb index d1760c2db88..f1adeae6786 100644 --- a/spec/rubocop/cop/migration/prevent_strings_spec.rb +++ b/spec/rubocop/cop/migration/prevent_strings_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/prevent_strings' RSpec.describe RuboCop::Cop::Migration::PreventStrings do - subject(:cop) { described_class.new } - context 'when in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/refer_to_index_by_name_spec.rb b/spec/rubocop/cop/migration/refer_to_index_by_name_spec.rb index c65f86d1e13..acdc6843584 100644 --- a/spec/rubocop/cop/migration/refer_to_index_by_name_spec.rb +++ b/spec/rubocop/cop/migration/refer_to_index_by_name_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true # -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/refer_to_index_by_name' RSpec.describe RuboCop::Cop::Migration::ReferToIndexByName do - subject(:cop) { described_class.new } - context 'when in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/remove_column_spec.rb b/spec/rubocop/cop/migration/remove_column_spec.rb index f72a5b048d5..4aa842969fe 100644 --- a/spec/rubocop/cop/migration/remove_column_spec.rb +++ b/spec/rubocop/cop/migration/remove_column_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/remove_column' RSpec.describe RuboCop::Cop::Migration::RemoveColumn do - subject(:cop) { described_class.new } - def source(meth = 'change') "def #{meth}; remove_column :table, :column; end" end diff --git a/spec/rubocop/cop/migration/remove_concurrent_index_spec.rb b/spec/rubocop/cop/migration/remove_concurrent_index_spec.rb index 10ca0353b0f..1d59390d659 100644 --- a/spec/rubocop/cop/migration/remove_concurrent_index_spec.rb +++ b/spec/rubocop/cop/migration/remove_concurrent_index_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/remove_concurrent_index' RSpec.describe RuboCop::Cop::Migration::RemoveConcurrentIndex do - subject(:cop) { described_class.new } - context 'in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/remove_index_spec.rb b/spec/rubocop/cop/migration/remove_index_spec.rb index 5d1ffef2589..24823b47d53 100644 --- a/spec/rubocop/cop/migration/remove_index_spec.rb +++ b/spec/rubocop/cop/migration/remove_index_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/remove_index' RSpec.describe RuboCop::Cop::Migration::RemoveIndex do - subject(:cop) { described_class.new } - context 'when in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/safer_boolean_column_spec.rb b/spec/rubocop/cop/migration/safer_boolean_column_spec.rb index cf9bdbeef91..2050051cac7 100644 --- a/spec/rubocop/cop/migration/safer_boolean_column_spec.rb +++ b/spec/rubocop/cop/migration/safer_boolean_column_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/safer_boolean_column' RSpec.describe RuboCop::Cop::Migration::SaferBooleanColumn do - subject(:cop) { described_class.new } - context 'in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/schedule_async_spec.rb b/spec/rubocop/cop/migration/schedule_async_spec.rb index 09d2c77369c..59e03db07c0 100644 --- a/spec/rubocop/cop/migration/schedule_async_spec.rb +++ b/spec/rubocop/cop/migration/schedule_async_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/schedule_async' diff --git a/spec/rubocop/cop/migration/sidekiq_queue_migrate_spec.rb b/spec/rubocop/cop/migration/sidekiq_queue_migrate_spec.rb index 499351b3585..46c460b5d49 100644 --- a/spec/rubocop/cop/migration/sidekiq_queue_migrate_spec.rb +++ b/spec/rubocop/cop/migration/sidekiq_queue_migrate_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/sidekiq_queue_migrate' RSpec.describe RuboCop::Cop::Migration::SidekiqQueueMigrate do - subject(:cop) { described_class.new } - def source(meth = 'change') "def #{meth}; sidekiq_queue_migrate 'queue', to: 'new_queue'; end" end diff --git a/spec/rubocop/cop/migration/timestamps_spec.rb b/spec/rubocop/cop/migration/timestamps_spec.rb index 2f99a3ff35b..706fd8a3d0f 100644 --- a/spec/rubocop/cop/migration/timestamps_spec.rb +++ b/spec/rubocop/cop/migration/timestamps_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/timestamps' RSpec.describe RuboCop::Cop::Migration::Timestamps do - subject(:cop) { described_class.new } - let(:migration_with_timestamps) do %q( class Users < ActiveRecord::Migration[4.2] diff --git a/spec/rubocop/cop/migration/update_column_in_batches_spec.rb b/spec/rubocop/cop/migration/update_column_in_batches_spec.rb index a12ae94c22b..005d3fb6b2a 100644 --- a/spec/rubocop/cop/migration/update_column_in_batches_spec.rb +++ b/spec/rubocop/cop/migration/update_column_in_batches_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/update_column_in_batches' diff --git a/spec/rubocop/cop/migration/versioned_migration_class_spec.rb b/spec/rubocop/cop/migration/versioned_migration_class_spec.rb index d9b0cd4546c..b44f5d64a62 100644 --- a/spec/rubocop/cop/migration/versioned_migration_class_spec.rb +++ b/spec/rubocop/cop/migration/versioned_migration_class_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/versioned_migration_class' RSpec.describe RuboCop::Cop::Migration::VersionedMigrationClass do - subject(:cop) { described_class.new } - let(:migration) do <<~SOURCE class TestMigration < Gitlab::Database::Migration[1.0] diff --git a/spec/rubocop/cop/migration/with_lock_retries_disallowed_method_spec.rb b/spec/rubocop/cop/migration/with_lock_retries_disallowed_method_spec.rb index 298ca273256..5762f78820c 100644 --- a/spec/rubocop/cop/migration/with_lock_retries_disallowed_method_spec.rb +++ b/spec/rubocop/cop/migration/with_lock_retries_disallowed_method_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/with_lock_retries_disallowed_method' RSpec.describe RuboCop::Cop::Migration::WithLockRetriesDisallowedMethod do - subject(:cop) { described_class.new } - context 'when in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/migration/with_lock_retries_with_change_spec.rb b/spec/rubocop/cop/migration/with_lock_retries_with_change_spec.rb index f2e84a8697c..fed9176ea97 100644 --- a/spec/rubocop/cop/migration/with_lock_retries_with_change_spec.rb +++ b/spec/rubocop/cop/migration/with_lock_retries_with_change_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/with_lock_retries_with_change' RSpec.describe RuboCop::Cop::Migration::WithLockRetriesWithChange do - subject(:cop) { described_class.new } - context 'when in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) diff --git a/spec/rubocop/cop/performance/active_record_subtransaction_methods_spec.rb b/spec/rubocop/cop/performance/active_record_subtransaction_methods_spec.rb index df18121e2df..ac58ca1edf3 100644 --- a/spec/rubocop/cop/performance/active_record_subtransaction_methods_spec.rb +++ b/spec/rubocop/cop/performance/active_record_subtransaction_methods_spec.rb @@ -1,13 +1,11 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rspec-parameterized' require_relative '../../../../rubocop/cop/performance/active_record_subtransaction_methods' RSpec.describe RuboCop::Cop::Performance::ActiveRecordSubtransactionMethods do - subject(:cop) { described_class.new } - let(:message) { described_class::MSG } shared_examples 'a method that uses a subtransaction' do |method_name| diff --git a/spec/rubocop/cop/performance/active_record_subtransactions_spec.rb b/spec/rubocop/cop/performance/active_record_subtransactions_spec.rb index 0da2e30062a..e839a3e9367 100644 --- a/spec/rubocop/cop/performance/active_record_subtransactions_spec.rb +++ b/spec/rubocop/cop/performance/active_record_subtransactions_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/performance/active_record_subtransactions' RSpec.describe RuboCop::Cop::Performance::ActiveRecordSubtransactions do - subject(:cop) { described_class.new } - let(:message) { described_class::MSG } context 'when calling #transaction with only requires_new: true' do diff --git a/spec/rubocop/cop/performance/ar_count_each_spec.rb b/spec/rubocop/cop/performance/ar_count_each_spec.rb index 4aeb9e13b18..a86b3f2b983 100644 --- a/spec/rubocop/cop/performance/ar_count_each_spec.rb +++ b/spec/rubocop/cop/performance/ar_count_each_spec.rb @@ -1,14 +1,12 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/performance/ar_count_each' RSpec.describe RuboCop::Cop::Performance::ARCountEach do - subject(:cop) { described_class.new } - context 'when it is not haml file' do it 'does not flag it as an offense' do - expect(subject).to receive(:in_haml_file?).with(anything).at_least(:once).and_return(false) + expect(cop).to receive(:in_haml_file?).with(anything).at_least(:once).and_return(false) expect_no_offenses <<~SOURCE show(@users.count) @@ -19,7 +17,7 @@ RSpec.describe RuboCop::Cop::Performance::ARCountEach do context 'when it is haml file' do before do - expect(subject).to receive(:in_haml_file?).with(anything).at_least(:once).and_return(true) + expect(cop).to receive(:in_haml_file?).with(anything).at_least(:once).and_return(true) end context 'when the same object uses count and each' do diff --git a/spec/rubocop/cop/performance/ar_exists_and_present_blank_spec.rb b/spec/rubocop/cop/performance/ar_exists_and_present_blank_spec.rb index e95220756ed..070e792eeec 100644 --- a/spec/rubocop/cop/performance/ar_exists_and_present_blank_spec.rb +++ b/spec/rubocop/cop/performance/ar_exists_and_present_blank_spec.rb @@ -1,14 +1,12 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/performance/ar_exists_and_present_blank' RSpec.describe RuboCop::Cop::Performance::ARExistsAndPresentBlank do - subject(:cop) { described_class.new } - context 'when it is not haml file' do it 'does not flag it as an offense' do - expect(subject).to receive(:in_haml_file?).with(anything).at_least(:once).and_return(false) + expect(cop).to receive(:in_haml_file?).with(anything).at_least(:once).and_return(false) expect_no_offenses <<~SOURCE return unless @users.exists? @@ -19,7 +17,7 @@ RSpec.describe RuboCop::Cop::Performance::ARExistsAndPresentBlank do context 'when it is haml file' do before do - expect(subject).to receive(:in_haml_file?).with(anything).at_least(:once).and_return(true) + expect(cop).to receive(:in_haml_file?).with(anything).at_least(:once).and_return(true) end context 'the same object uses exists? and present?' do diff --git a/spec/rubocop/cop/performance/readlines_each_spec.rb b/spec/rubocop/cop/performance/readlines_each_spec.rb index 0a8b168ce5d..d876cbf79a5 100644 --- a/spec/rubocop/cop/performance/readlines_each_spec.rb +++ b/spec/rubocop/cop/performance/readlines_each_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/performance/readlines_each' RSpec.describe RuboCop::Cop::Performance::ReadlinesEach do - subject(:cop) { described_class.new } - let(:message) { 'Avoid `IO.readlines.each`, since it reads contents into memory in full. Use `IO.each_line` or `IO.each` instead.' } shared_examples_for(:class_read) do |klass| diff --git a/spec/rubocop/cop/prefer_class_methods_over_module_spec.rb b/spec/rubocop/cop/prefer_class_methods_over_module_spec.rb index 1261ca7891c..a2a4270c48e 100644 --- a/spec/rubocop/cop/prefer_class_methods_over_module_spec.rb +++ b/spec/rubocop/cop/prefer_class_methods_over_module_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/prefer_class_methods_over_module' RSpec.describe RuboCop::Cop::PreferClassMethodsOverModule do - subject(:cop) { described_class.new } - it 'flags violation when using module ClassMethods and corrects', :aggregate_failures do expect_offense(<<~RUBY) module Foo diff --git a/spec/rubocop/cop/project_path_helper_spec.rb b/spec/rubocop/cop/project_path_helper_spec.rb index b3c920f9d25..3153c928c77 100644 --- a/spec/rubocop/cop/project_path_helper_spec.rb +++ b/spec/rubocop/cop/project_path_helper_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/project_path_helper' RSpec.describe RuboCop::Cop::ProjectPathHelper do - subject(:cop) { described_class.new } - context "when using namespace_project with the project's namespace" do let(:source) { 'edit_namespace_project_issue_path(@issue.project.namespace, @issue.project, @issue)' } let(:correct_source) { 'edit_project_issue_path(@issue.project, @issue)' } diff --git a/spec/rubocop/cop/put_group_routes_under_scope_spec.rb b/spec/rubocop/cop/put_group_routes_under_scope_spec.rb index 366fc4b5657..8697345cddc 100644 --- a/spec/rubocop/cop/put_group_routes_under_scope_spec.rb +++ b/spec/rubocop/cop/put_group_routes_under_scope_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/put_group_routes_under_scope' RSpec.describe RuboCop::Cop::PutGroupRoutesUnderScope do - subject(:cop) { described_class.new } - %w[resource resources get post put patch delete].each do |route_method| it "registers an offense when route is outside scope for `#{route_method}`" do offense = "#{route_method} :notes" diff --git a/spec/rubocop/cop/put_project_routes_under_scope_spec.rb b/spec/rubocop/cop/put_project_routes_under_scope_spec.rb index 9d226db09ef..65d330b0f05 100644 --- a/spec/rubocop/cop/put_project_routes_under_scope_spec.rb +++ b/spec/rubocop/cop/put_project_routes_under_scope_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/put_project_routes_under_scope' RSpec.describe RuboCop::Cop::PutProjectRoutesUnderScope do - subject(:cop) { described_class.new } - %w[resource resources get post put patch delete].each do |route_method| it "registers an offense when route is outside scope for `#{route_method}`" do offense = "#{route_method} :notes" diff --git a/spec/rubocop/cop/qa/ambiguous_page_object_name_spec.rb b/spec/rubocop/cop/qa/ambiguous_page_object_name_spec.rb index 9335b8d01ee..ab270090c7d 100644 --- a/spec/rubocop/cop/qa/ambiguous_page_object_name_spec.rb +++ b/spec/rubocop/cop/qa/ambiguous_page_object_name_spec.rb @@ -1,14 +1,12 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/qa/ambiguous_page_object_name' RSpec.describe RuboCop::Cop::QA::AmbiguousPageObjectName do let(:source_file) { 'qa/page.rb' } - subject(:cop) { described_class.new } - context 'in a QA file' do before do allow(cop).to receive(:in_qa_file?).and_return(true) diff --git a/spec/rubocop/cop/qa/element_with_pattern_spec.rb b/spec/rubocop/cop/qa/element_with_pattern_spec.rb index d3e79525c62..1febdaf9c3b 100644 --- a/spec/rubocop/cop/qa/element_with_pattern_spec.rb +++ b/spec/rubocop/cop/qa/element_with_pattern_spec.rb @@ -1,14 +1,12 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/qa/element_with_pattern' RSpec.describe RuboCop::Cop::QA::ElementWithPattern do let(:source_file) { 'qa/page.rb' } - subject(:cop) { described_class.new } - context 'in a QA file' do before do allow(cop).to receive(:in_qa_file?).and_return(true) diff --git a/spec/rubocop/cop/qa/selector_usage_spec.rb b/spec/rubocop/cop/qa/selector_usage_spec.rb index b40c57f8991..0ec289c1da6 100644 --- a/spec/rubocop/cop/qa/selector_usage_spec.rb +++ b/spec/rubocop/cop/qa/selector_usage_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/qa/selector_usage' RSpec.describe RuboCop::Cop::QA::SelectorUsage do - subject(:cop) { described_class.new } - shared_examples 'non-qa file usage' do it 'reports an offense' do expect_offense(<<-RUBY) diff --git a/spec/rubocop/cop/rspec/any_instance_of_spec.rb b/spec/rubocop/cop/rspec/any_instance_of_spec.rb index e7675ded25e..f9675e17842 100644 --- a/spec/rubocop/cop/rspec/any_instance_of_spec.rb +++ b/spec/rubocop/cop/rspec/any_instance_of_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/any_instance_of' RSpec.describe RuboCop::Cop::RSpec::AnyInstanceOf do - subject(:cop) { described_class.new } - context 'when calling allow_any_instance_of' do let(:source) do <<~SRC diff --git a/spec/rubocop/cop/rspec/be_success_matcher_spec.rb b/spec/rubocop/cop/rspec/be_success_matcher_spec.rb index 678e62048b8..c26fa32db8e 100644 --- a/spec/rubocop/cop/rspec/be_success_matcher_spec.rb +++ b/spec/rubocop/cop/rspec/be_success_matcher_spec.rb @@ -1,13 +1,11 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/be_success_matcher' RSpec.describe RuboCop::Cop::RSpec::BeSuccessMatcher do let(:source_file) { 'spec/foo_spec.rb' } - subject(:cop) { described_class.new } - shared_examples 'cop' do |good:, bad:| context "using #{bad} call" do it 'registers an offense and corrects', :aggregate_failures do diff --git a/spec/rubocop/cop/rspec/env_assignment_spec.rb b/spec/rubocop/cop/rspec/env_assignment_spec.rb index 0fd09eeae11..6212cda0b88 100644 --- a/spec/rubocop/cop/rspec/env_assignment_spec.rb +++ b/spec/rubocop/cop/rspec/env_assignment_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/env_assignment' @@ -10,8 +10,6 @@ RSpec.describe RuboCop::Cop::RSpec::EnvAssignment do let(:source_file) { 'spec/foo_spec.rb' } - subject(:cop) { described_class.new } - shared_examples 'an offensive and correction ENV#[]= call' do |content, autocorrected_content| it "registers an offense for `#{content}` and corrects", :aggregate_failures do expect_offense(<<~CODE) diff --git a/spec/rubocop/cop/rspec/expect_gitlab_tracking_spec.rb b/spec/rubocop/cop/rspec/expect_gitlab_tracking_spec.rb index e36feecdd66..a07cf472ef0 100644 --- a/spec/rubocop/cop/rspec/expect_gitlab_tracking_spec.rb +++ b/spec/rubocop/cop/rspec/expect_gitlab_tracking_spec.rb @@ -1,13 +1,11 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/expect_gitlab_tracking' RSpec.describe RuboCop::Cop::RSpec::ExpectGitlabTracking do let(:source_file) { 'spec/foo_spec.rb' } - subject(:cop) { described_class.new } - good_samples = [ 'expect_snowplow_event(category: nil, action: nil)', 'expect_snowplow_event(category: "EventCategory", action: "event_action")', diff --git a/spec/rubocop/cop/rspec/factories_in_migration_specs_spec.rb b/spec/rubocop/cop/rspec/factories_in_migration_specs_spec.rb index 74c1521fa0e..e41dd338387 100644 --- a/spec/rubocop/cop/rspec/factories_in_migration_specs_spec.rb +++ b/spec/rubocop/cop/rspec/factories_in_migration_specs_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/factories_in_migration_specs' RSpec.describe RuboCop::Cop::RSpec::FactoriesInMigrationSpecs do - subject(:cop) { described_class.new } - shared_examples 'an offensive factory call' do |namespace| %i[build build_list create create_list attributes_for].each do |forbidden_method| namespaced_forbidden_method = "#{namespace}#{forbidden_method}(:user)" diff --git a/spec/rubocop/cop/rspec/factory_bot/inline_association_spec.rb b/spec/rubocop/cop/rspec/factory_bot/inline_association_spec.rb index 194e2436ff2..008af734a99 100644 --- a/spec/rubocop/cop/rspec/factory_bot/inline_association_spec.rb +++ b/spec/rubocop/cop/rspec/factory_bot/inline_association_spec.rb @@ -1,13 +1,11 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rspec-parameterized' require_relative '../../../../../rubocop/cop/rspec/factory_bot/inline_association' RSpec.describe RuboCop::Cop::RSpec::FactoryBot::InlineAssociation do - subject(:cop) { described_class.new } - shared_examples 'offense' do |code_snippet, autocorrected| # We allow `create` or `FactoryBot.create` or `::FactoryBot.create` let(:type) { code_snippet[/^(?:::)?(?:FactoryBot\.)?(\w+)/, 1] } diff --git a/spec/rubocop/cop/rspec/have_gitlab_http_status_spec.rb b/spec/rubocop/cop/rspec/have_gitlab_http_status_spec.rb index 9bdbe145f4c..e8a60b9cad7 100644 --- a/spec/rubocop/cop/rspec/have_gitlab_http_status_spec.rb +++ b/spec/rubocop/cop/rspec/have_gitlab_http_status_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rspec-parameterized' require_relative '../../../../rubocop/cop/rspec/have_gitlab_http_status' @@ -10,8 +10,6 @@ RSpec.describe RuboCop::Cop::RSpec::HaveGitlabHttpStatus do let(:source_file) { 'spec/foo_spec.rb' } - subject(:cop) { described_class.new } - shared_examples 'offense' do |bad, good| it 'registers an offense', :aggregate_failures do expect_offense(<<~CODE, node: bad) diff --git a/spec/rubocop/cop/rspec/htt_party_basic_auth_spec.rb b/spec/rubocop/cop/rspec/htt_party_basic_auth_spec.rb index eac6ceb3ddf..537a7a9a7e9 100644 --- a/spec/rubocop/cop/rspec/htt_party_basic_auth_spec.rb +++ b/spec/rubocop/cop/rspec/htt_party_basic_auth_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/httparty_basic_auth' RSpec.describe RuboCop::Cop::RSpec::HTTPartyBasicAuth do - subject(:cop) { described_class.new } - context 'when passing `basic_auth: { user: ... }`' do it 'registers an offense and corrects', :aggregate_failures do expect_offense(<<~SOURCE, 'spec/foo.rb') diff --git a/spec/rubocop/cop/rspec/modify_sidekiq_middleware_spec.rb b/spec/rubocop/cop/rspec/modify_sidekiq_middleware_spec.rb index 7a2b7c92bd1..3227b075758 100644 --- a/spec/rubocop/cop/rspec/modify_sidekiq_middleware_spec.rb +++ b/spec/rubocop/cop/rspec/modify_sidekiq_middleware_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/modify_sidekiq_middleware' RSpec.describe RuboCop::Cop::RSpec::ModifySidekiqMiddleware do - subject(:cop) { described_class.new } - it 'registers an offense and corrects', :aggregate_failures do expect_offense(<<~CODE) Sidekiq::Testing.server_middleware do |chain| diff --git a/spec/rubocop/cop/rspec/timecop_freeze_spec.rb b/spec/rubocop/cop/rspec/timecop_freeze_spec.rb index b8d16d58d9e..4361f587da3 100644 --- a/spec/rubocop/cop/rspec/timecop_freeze_spec.rb +++ b/spec/rubocop/cop/rspec/timecop_freeze_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/timecop_freeze' RSpec.describe RuboCop::Cop::RSpec::TimecopFreeze do - subject(:cop) { described_class.new } - context 'when calling Timecop.freeze' do it 'registers an offense and corrects', :aggregate_failures do expect_offense(<<~CODE) diff --git a/spec/rubocop/cop/rspec/timecop_travel_spec.rb b/spec/rubocop/cop/rspec/timecop_travel_spec.rb index 16e09fb8c45..89c46ff6c59 100644 --- a/spec/rubocop/cop/rspec/timecop_travel_spec.rb +++ b/spec/rubocop/cop/rspec/timecop_travel_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/timecop_travel' RSpec.describe RuboCop::Cop::RSpec::TimecopTravel do - subject(:cop) { described_class.new } - context 'when calling Timecop.travel' do it 'registers an offense and corrects', :aggregate_failures do expect_offense(<<~CODE) diff --git a/spec/rubocop/cop/rspec/top_level_describe_path_spec.rb b/spec/rubocop/cop/rspec/top_level_describe_path_spec.rb index 78e6bec51d4..90101e09023 100644 --- a/spec/rubocop/cop/rspec/top_level_describe_path_spec.rb +++ b/spec/rubocop/cop/rspec/top_level_describe_path_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/top_level_describe_path' RSpec.describe RuboCop::Cop::RSpec::TopLevelDescribePath do - subject(:cop) { described_class.new } - context 'when the file ends in _spec.rb' do it 'registers no offenses' do expect_no_offenses(<<~SOURCE, 'spec/foo_spec.rb') diff --git a/spec/rubocop/cop/rspec/web_mock_enable_spec.rb b/spec/rubocop/cop/rspec/web_mock_enable_spec.rb index 61a85064a61..63ffc06f1ca 100644 --- a/spec/rubocop/cop/rspec/web_mock_enable_spec.rb +++ b/spec/rubocop/cop/rspec/web_mock_enable_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/rspec/web_mock_enable' RSpec.describe RuboCop::Cop::RSpec::WebMockEnable do - subject(:cop) { described_class.new } - context 'when calling WebMock.disable_net_connect!' do it 'registers an offence and autocorrects it' do expect_offense(<<~RUBY) diff --git a/spec/rubocop/cop/ruby_interpolation_in_translation_spec.rb b/spec/rubocop/cop/ruby_interpolation_in_translation_spec.rb index c21999be917..b687e91601c 100644 --- a/spec/rubocop/cop/ruby_interpolation_in_translation_spec.rb +++ b/spec/rubocop/cop/ruby_interpolation_in_translation_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/ruby_interpolation_in_translation' @@ -9,8 +9,6 @@ require_relative '../../../rubocop/cop/ruby_interpolation_in_translation' RSpec.describe RuboCop::Cop::RubyInterpolationInTranslation do let(:msg) { "Don't use ruby interpolation \#{} inside translated strings, instead use %{}" } - subject(:cop) { described_class.new } - it 'does not add an offense for a regular messages' do expect_no_offenses('_("Hello world")') end diff --git a/spec/rubocop/cop/safe_params_spec.rb b/spec/rubocop/cop/safe_params_spec.rb index 9a064b93b16..e6d86019d18 100644 --- a/spec/rubocop/cop/safe_params_spec.rb +++ b/spec/rubocop/cop/safe_params_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/safe_params' RSpec.describe RuboCop::Cop::SafeParams do - subject(:cop) { described_class.new } - it 'flags the params as an argument of url_for' do expect_offense(<<~SOURCE) url_for(params) diff --git a/spec/rubocop/cop/scalability/bulk_perform_with_context_spec.rb b/spec/rubocop/cop/scalability/bulk_perform_with_context_spec.rb index 74912b53d37..bd248cd028a 100644 --- a/spec/rubocop/cop/scalability/bulk_perform_with_context_spec.rb +++ b/spec/rubocop/cop/scalability/bulk_perform_with_context_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/scalability/bulk_perform_with_context' RSpec.describe RuboCop::Cop::Scalability::BulkPerformWithContext do - subject(:cop) { described_class.new } - it "adds an offense when calling bulk_perform_async" do expect_offense(<<~CODE) Worker.bulk_perform_async(args) diff --git a/spec/rubocop/cop/scalability/cron_worker_context_spec.rb b/spec/rubocop/cop/scalability/cron_worker_context_spec.rb index 28db12fd075..bcf93b04d6a 100644 --- a/spec/rubocop/cop/scalability/cron_worker_context_spec.rb +++ b/spec/rubocop/cop/scalability/cron_worker_context_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/scalability/cron_worker_context' RSpec.describe RuboCop::Cop::Scalability::CronWorkerContext do - subject(:cop) { described_class.new } - it 'adds an offense when including CronjobQueue' do expect_offense(<<~CODE) class SomeWorker diff --git a/spec/rubocop/cop/scalability/file_uploads_spec.rb b/spec/rubocop/cop/scalability/file_uploads_spec.rb index ca25b0246f0..1395615479f 100644 --- a/spec/rubocop/cop/scalability/file_uploads_spec.rb +++ b/spec/rubocop/cop/scalability/file_uploads_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/scalability/file_uploads' RSpec.describe RuboCop::Cop::Scalability::FileUploads do - subject(:cop) { described_class.new } - let(:message) { 'Do not upload files without workhorse acceleration. Please refer to https://docs.gitlab.com/ee/development/uploads.html' } context 'with required params' do diff --git a/spec/rubocop/cop/scalability/idempotent_worker_spec.rb b/spec/rubocop/cop/scalability/idempotent_worker_spec.rb index 53c0c06f6c9..b1984721803 100644 --- a/spec/rubocop/cop/scalability/idempotent_worker_spec.rb +++ b/spec/rubocop/cop/scalability/idempotent_worker_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/scalability/idempotent_worker' RSpec.describe RuboCop::Cop::Scalability::IdempotentWorker do - subject(:cop) { described_class.new } - before do allow(cop) .to receive(:in_worker?) diff --git a/spec/rubocop/cop/sidekiq_load_balancing/worker_data_consistency_spec.rb b/spec/rubocop/cop/sidekiq_load_balancing/worker_data_consistency_spec.rb index cf8d0d1b66f..7b6578a0744 100644 --- a/spec/rubocop/cop/sidekiq_load_balancing/worker_data_consistency_spec.rb +++ b/spec/rubocop/cop/sidekiq_load_balancing/worker_data_consistency_spec.rb @@ -1,11 +1,9 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/sidekiq_load_balancing/worker_data_consistency' RSpec.describe RuboCop::Cop::SidekiqLoadBalancing::WorkerDataConsistency do - subject(:cop) { described_class.new } - before do allow(cop) .to receive(:in_worker?) diff --git a/spec/rubocop/cop/sidekiq_options_queue_spec.rb b/spec/rubocop/cop/sidekiq_options_queue_spec.rb index 346a8d82475..da126090a81 100644 --- a/spec/rubocop/cop/sidekiq_options_queue_spec.rb +++ b/spec/rubocop/cop/sidekiq_options_queue_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../rubocop/cop/sidekiq_options_queue' RSpec.describe RuboCop::Cop::SidekiqOptionsQueue do - subject(:cop) { described_class.new } - it 'registers an offense when `sidekiq_options` is used with the `queue` option' do expect_offense(<<~CODE) sidekiq_options queue: "some_queue" diff --git a/spec/rubocop/cop/static_translation_definition_spec.rb b/spec/rubocop/cop/static_translation_definition_spec.rb index 372fc194c56..10b4f162504 100644 --- a/spec/rubocop/cop/static_translation_definition_spec.rb +++ b/spec/rubocop/cop/static_translation_definition_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rspec-parameterized' @@ -11,8 +11,6 @@ RSpec.describe RuboCop::Cop::StaticTranslationDefinition do let(:msg) { described_class::MSG } - subject(:cop) { described_class.new } - shared_examples 'offense' do |code| it 'registers an offense' do expect_offense(code) diff --git a/spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb b/spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb index 384a834a512..1d1c0852db2 100644 --- a/spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb +++ b/spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/style/regexp_literal_mixed_preserve' diff --git a/spec/rubocop/cop/usage_data/distinct_count_by_large_foreign_key_spec.rb b/spec/rubocop/cop/usage_data/distinct_count_by_large_foreign_key_spec.rb index f377dfe36d8..b4d113a9bcc 100644 --- a/spec/rubocop/cop/usage_data/distinct_count_by_large_foreign_key_spec.rb +++ b/spec/rubocop/cop/usage_data/distinct_count_by_large_foreign_key_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/usage_data/distinct_count_by_large_foreign_key' @@ -13,8 +13,6 @@ RSpec.describe RuboCop::Cop::UsageData::DistinctCountByLargeForeignKey do }) end - subject(:cop) { described_class.new(config) } - context 'when counting by disallowed key' do it 'registers an offense' do expect_offense(<<~CODE) diff --git a/spec/rubocop/cop/usage_data/histogram_with_large_table_spec.rb b/spec/rubocop/cop/usage_data/histogram_with_large_table_spec.rb index 56aecc3ec4e..efa4e27dc9c 100644 --- a/spec/rubocop/cop/usage_data/histogram_with_large_table_spec.rb +++ b/spec/rubocop/cop/usage_data/histogram_with_large_table_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/usage_data/histogram_with_large_table' @@ -14,8 +14,6 @@ RSpec.describe RuboCop::Cop::UsageData::HistogramWithLargeTable do }) end - subject(:cop) { described_class.new(config) } - context 'with large tables' do context 'with one-level constants' do context 'when calling histogram(Issue)' do diff --git a/spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb b/spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb index 31324331e61..a55f0852f35 100644 --- a/spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb +++ b/spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/usage_data/instrumentation_superclass' @@ -14,8 +14,6 @@ RSpec.describe RuboCop::Cop::UsageData::InstrumentationSuperclass do }) end - subject(:cop) { described_class.new(config) } - context 'with class definition' do context 'when inheriting from allowed superclass' do it 'does not register an offense' do diff --git a/spec/rubocop/cop/usage_data/large_table_spec.rb b/spec/rubocop/cop/usage_data/large_table_spec.rb index a6b22fd7f0d..fa94f878cea 100644 --- a/spec/rubocop/cop/usage_data/large_table_spec.rb +++ b/spec/rubocop/cop/usage_data/large_table_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/usage_data/large_table' @@ -18,8 +18,6 @@ RSpec.describe RuboCop::Cop::UsageData::LargeTable do }) end - subject(:cop) { described_class.new(config) } - context 'when in usage_data files' do before do allow(cop).to receive(:usage_data_files?).and_return(true) diff --git a/spec/rubocop/cop/user_admin_spec.rb b/spec/rubocop/cop/user_admin_spec.rb index 3bf458348f3..99e87d619c0 100644 --- a/spec/rubocop/cop/user_admin_spec.rb +++ b/spec/rubocop/cop/user_admin_spec.rb @@ -1,13 +1,11 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'rubocop' require_relative '../../../rubocop/cop/user_admin' RSpec.describe RuboCop::Cop::UserAdmin do - subject(:cop) { described_class.new } - it 'flags a method call' do expect_offense(<<~SOURCE) user.admin? diff --git a/spec/rubocop/cop_todo_spec.rb b/spec/rubocop/cop_todo_spec.rb index 978df2c01ee..3f9c378b303 100644 --- a/spec/rubocop/cop_todo_spec.rb +++ b/spec/rubocop/cop_todo_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require_relative '../../rubocop/cop_todo' RSpec.describe RuboCop::CopTodo do @@ -14,7 +14,8 @@ RSpec.describe RuboCop::CopTodo do cop_name: cop_name, files: be_empty, offense_count: 0, - previously_disabled: false + previously_disabled: false, + grace_period: false ) end end @@ -102,6 +103,23 @@ RSpec.describe RuboCop::CopTodo do end end + context 'with grace period' do + specify do + cop_todo.record('a.rb', 1) + cop_todo.record('b.rb', 2) + cop_todo.grace_period = true + + expect(yaml).to eq(<<~YAML) + --- + #{cop_name}: + Details: grace period + Exclude: + - 'a.rb' + - 'b.rb' + YAML + end + end + context 'with multiple files' do before do cop_todo.record('a.rb', 0) diff --git a/spec/rubocop/formatter/graceful_formatter_spec.rb b/spec/rubocop/formatter/graceful_formatter_spec.rb new file mode 100644 index 00000000000..0e0c1d52067 --- /dev/null +++ b/spec/rubocop/formatter/graceful_formatter_spec.rb @@ -0,0 +1,239 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require 'rspec-parameterized' +require 'rubocop/rspec/shared_contexts' +require 'stringio' + +require_relative '../../../rubocop/formatter/graceful_formatter' +require_relative '../../../rubocop/todo_dir' + +RSpec.describe RuboCop::Formatter::GracefulFormatter, :isolated_environment do + # Set by :isolated_environment + let(:todo_dir) { RuboCop::TodoDir.new("#{Dir.pwd}/.rubocop_todo") } + let(:stdout) { StringIO.new } + + subject(:formatter) { described_class.new(stdout) } + + shared_examples 'summary reporting' do |inspected:, offenses: 0, silenced: 0| + it "reports summary with #{inspected} inspected, #{offenses} offenses, #{silenced} silenced" do + expect(stdout.string) + .to match(/Inspecting #{inspected} files/) + .and match(/#{inspected} files inspected/) + + if offenses > 0 + expect(stdout.string).to match(/Offenses:/) + expect(stdout.string).to match(/#{offenses} offenses detected/) + else + expect(stdout.string).not_to match(/Offenses:/) + expect(stdout.string).to match(/no offenses detected/) + end + + if silenced > 0 + expect(stdout.string).to match(/Silenced offenses:/) + expect(stdout.string).to match(/#{silenced} offenses silenced/) + else + expect(stdout.string).not_to match(/Silenced offenses:/) + expect(stdout.string).not_to match(/offenses silenced/) + end + end + end + + context 'with offenses' do + let(:offense1) { fake_offense('Cop1') } + let(:offense2) { fake_offense('Cop2') } + + before do + FileUtils.touch('.rubocop_todo.yml') + + File.write('.rubocop.yml', <<~YAML) + inherit_from: + <% Dir.glob('.rubocop_todo/**/*.yml').each do |rubocop_todo_yaml| %> + - '<%= rubocop_todo_yaml %>' + <% end %> + - '.rubocop_todo.yml' + + AllCops: + NewCops: enable # Avoiding RuboCop warnings + YAML + + # These cops are unknown and would raise an validation error + allow(RuboCop::Cop::Registry.global).to receive(:contains_cop_matching?) + .and_return(true) + end + + context 'with active only' do + before do + formatter.started(%w[a.rb b.rb]) + formatter.file_finished('a.rb', [offense1]) + formatter.file_finished('b.rb', [offense2]) + formatter.finished(%w[a.rb b.rb]) + end + + it_behaves_like 'summary reporting', inspected: 2, offenses: 2 + end + + context 'with silenced only' do + before do + todo_dir.write('Cop1', <<~YAML) + --- + Cop1: + Details: grace period + YAML + + File.write('.rubocop_todo.yml', <<~YAML) + --- + Cop2: + Details: grace period + YAML + + formatter.started(%w[a.rb b.rb]) + formatter.file_finished('a.rb', [offense1]) + formatter.file_finished('b.rb', [offense2]) + formatter.finished(%w[a.rb b.rb]) + end + + it_behaves_like 'summary reporting', inspected: 2, silenced: 2 + end + + context 'with active and silenced' do + before do + todo_dir.write('Cop1', <<~YAML) + --- + Cop1: + Details: grace period + YAML + + formatter.started(%w[a.rb b.rb]) + formatter.file_finished('a.rb', [offense1, offense2]) + formatter.file_finished('b.rb', [offense2, offense1, offense1]) + formatter.finished(%w[a.rb b.rb]) + end + + it_behaves_like 'summary reporting', inspected: 2, offenses: 2, silenced: 3 + end + end + + context 'without offenses' do + before do + formatter.started(%w[a.rb b.rb]) + formatter.file_finished('a.rb', []) + formatter.file_finished('b.rb', []) + formatter.finished(%w[a.rb b.rb]) + end + + it_behaves_like 'summary reporting', inspected: 2 + end + + context 'without files to inspect' do + before do + formatter.started([]) + formatter.finished([]) + end + + it_behaves_like 'summary reporting', inspected: 0 + end + + context 'with missing @total_offense_count' do + it 'raises an error' do + formatter.started(%w[a.rb]) + + if formatter.instance_variable_defined?(:@total_offense_count) + formatter.remove_instance_variable(:@total_offense_count) + end + + expect do + formatter.finished(%w[a.rb]) + end.to raise_error(/RuboCop has changed its internals/) + end + end + + describe '.adjusted_exit_status' do + using RSpec::Parameterized::TableSyntax + + success = RuboCop::CLI::STATUS_SUCCESS + offenses = RuboCop::CLI::STATUS_OFFENSES + error = RuboCop::CLI::STATUS_ERROR + + subject { described_class.adjusted_exit_status(status) } + + where(:active_offenses, :status, :adjusted_status) do + 0 | success | success + 0 | offenses | success + 1 | offenses | offenses + 0 | error | error + 1 | error | error + # impossible cases + 1 | success | success + end + + with_them do + around do |example| + described_class.active_offenses = active_offenses + example.run + ensure + described_class.active_offenses = 0 + end + + it { is_expected.to eq(adjusted_status) } + end + end + + describe '.grace_period?' do + let(:cop_name) { 'Cop/Name' } + + subject { described_class.grace_period?(cop_name, config) } + + context 'with Details in config' do + let(:config) { { 'Details' => 'grace period' } } + + it { is_expected.to eq(true) } + end + + context 'with unknown value for Details in config' do + let(:config) { { 'Details' => 'unknown' } } + + specify do + expect { is_expected.to eq(false) } + .to output(/#{cop_name}: Unhandled value "unknown" for `Details` key./) + .to_stderr + end + end + + context 'with empty config' do + let(:config) { {} } + + it { is_expected.to eq(false) } + end + + context 'without Details in config' do + let(:config) { { 'Exclude' => false } } + + it { is_expected.to eq(false) } + end + end + + describe '.grace_period_key_value' do + subject { described_class.grace_period_key_value } + + it { is_expected.to eq('Details: grace period') } + end + + def fake_offense(cop_name) + # rubocop:disable RSpec/VerifiedDoubles + double(:offense, + cop_name: cop_name, + corrected?: false, + correctable?: false, + severity: double(:severity, name: 'convention', code: :C), + line: 5, + column: 23, + real_column: 23, + corrected_with_todo?: false, + message: "#{cop_name} message", + location: double(:location, source_line: 'line', first_line: 1, last_line: 2), + highlighted_area: double(:highlighted_area, begin_pos: 1, size: 2) + ) + # rubocop:enable RSpec/VerifiedDoubles + end +end diff --git a/spec/rubocop/formatter/todo_formatter_spec.rb b/spec/rubocop/formatter/todo_formatter_spec.rb index df56ee45931..edd84632409 100644 --- a/spec/rubocop/formatter/todo_formatter_spec.rb +++ b/spec/rubocop/formatter/todo_formatter_spec.rb @@ -2,8 +2,10 @@ # rubocop:disable RSpec/VerifiedDoubles require 'fast_spec_helper' -require 'stringio' + require 'fileutils' +require 'stringio' +require 'tmpdir' require_relative '../../../rubocop/formatter/todo_formatter' require_relative '../../../rubocop/todo_dir' @@ -174,6 +176,98 @@ RSpec.describe RuboCop::Formatter::TodoFormatter do end end + context 'with grace period' do + let(:yaml) do + <<~YAML + --- + B/TooManyOffenses: + Details: grace period + Exclude: + - 'x.rb' + YAML + end + + shared_examples 'keeps grace period' do + it 'keeps Details: grace period' do + run_formatter + + expect(todo_yml('B/TooManyOffenses')).to eq(<<~YAML) + --- + B/TooManyOffenses: + Details: grace period + Exclude: + - 'a.rb' + - 'c.rb' + YAML + end + end + + context 'in rubocop_todo/' do + before do + todo_dir.write('B/TooManyOffenses', yaml) + todo_dir.inspect_all + end + + it_behaves_like 'keeps grace period' + end + + context 'in rubocop_todo.yml' do + before do + File.write('.rubocop_todo.yml', yaml) + end + + it_behaves_like 'keeps grace period' + end + + context 'with invalid details value' do + let(:yaml) do + <<~YAML + --- + B/TooManyOffenses: + Details: something unknown + Exclude: + - 'x.rb' + YAML + end + + it 'ignores the details and warns' do + File.write('.rubocop_todo.yml', yaml) + + expect { run_formatter } + .to output(%r{B/TooManyOffenses: Unhandled value "something unknown" for `Details` key.}) + .to_stderr + + expect(todo_yml('B/TooManyOffenses')).to eq(<<~YAML) + --- + B/TooManyOffenses: + Exclude: + - 'a.rb' + - 'c.rb' + YAML + end + end + + context 'and previously disabled' do + let(:yaml) do + <<~YAML + --- + B/TooManyOffenses: + Enabled: false + Details: grace period + Exclude: + - 'x.rb' + YAML + end + + it 'raises an exception' do + File.write('.rubocop_todo.yml', yaml) + + expect { run_formatter } + .to raise_error(RuntimeError, 'B/TooManyOffenses: Cop must be enabled to use `Details: grace period`.') + end + end + end + context 'with cop configuration in both .rubocop_todo/ and .rubocop_todo.yml' do before do todo_dir.write('B/TooManyOffenses', <<~YAML) diff --git a/spec/rubocop/qa_helpers_spec.rb b/spec/rubocop/qa_helpers_spec.rb index 4b5566609e3..a50c8307733 100644 --- a/spec/rubocop/qa_helpers_spec.rb +++ b/spec/rubocop/qa_helpers_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'rubocop_spec_helper' require 'parser/current' require_relative '../../rubocop/qa_helpers' diff --git a/spec/rubocop/todo_dir_spec.rb b/spec/rubocop/todo_dir_spec.rb index a5c12e23896..e014c4c2c37 100644 --- a/spec/rubocop/todo_dir_spec.rb +++ b/spec/rubocop/todo_dir_spec.rb @@ -1,8 +1,10 @@ # frozen_string_literal: true require 'fast_spec_helper' -require 'fileutils' + require 'active_support/inflector/inflections' +require 'fileutils' +require 'tmpdir' require_relative '../../rubocop/todo_dir' |