diff options
Diffstat (limited to 'spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb')
-rw-r--r-- | spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb b/spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb new file mode 100644 index 00000000000..31324331e61 --- /dev/null +++ b/spec/rubocop/cop/usage_data/instrumentation_superclass_spec.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' + +require_relative '../../../../rubocop/cop/usage_data/instrumentation_superclass' + +RSpec.describe RuboCop::Cop::UsageData::InstrumentationSuperclass do + let(:allowed_classes) { %i[GenericMetric DatabaseMetric RedisHllMetric] } + let(:msg) { "Instrumentation classes should subclass one of the following: #{allowed_classes.join(', ')}." } + + let(:config) do + RuboCop::Config.new('UsageData/InstrumentationSuperclass' => { + 'AllowedClasses' => allowed_classes + }) + 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 + expect_no_offenses('class NewMetric < GenericMetric; end') + end + end + + context 'when inheriting from some other superclass' do + it 'registers an offense' do + expect_offense(<<~CODE) + class NewMetric < BaseMetric; end + ^^^^^^^^^^ #{msg} + CODE + end + end + + context 'when not inheriting' do + it 'does not register an offense' do + expect_no_offenses('class NewMetric; end') + end + end + end + + context 'with dynamic class definition' do + context 'when inheriting from allowed superclass' do + it 'does not register an offense' do + expect_no_offenses('NewMetric = Class.new(GenericMetric)') + end + end + + context 'when inheriting from some other superclass' do + it 'registers an offense' do + expect_offense(<<~CODE) + NewMetric = Class.new(BaseMetric) + ^^^^^^^^^^ #{msg} + CODE + end + end + + context 'when not inheriting' do + it 'does not register an offense' do + expect_no_offenses('NewMetric = Class.new') + end + end + end +end |