spec/rubocop/cop/migration/prevent_feature_flags_usage_spec.rb (113 lines of code) (raw):

# frozen_string_literal: true require 'rubocop_spec_helper' require_relative '../../../../rubocop/cop/migration/prevent_feature_flags_usage' RSpec.describe RuboCop::Cop::Migration::PreventFeatureFlagsUsage, feature_category: :database do include RuboCop::MigrationHelpers let(:offense) do "Do not use Feature.enabled? or Feature.disabled? in migrations. " \ "Use the feature_flag_enabled?(feature_name) migration helper method." end context 'when in migration' do before do allow(cop).to receive(:in_migration?).and_return(true) end context 'when using Feature.enabled?' do it 'registers an offense' do expect_offense(<<~RUBY) def change if Feature.enabled?(:some_feature) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{offense} do_something end end RUBY end it 'registers an offense with a variable' do expect_offense(<<~RUBY) def change feature_name = :some_feature if Feature.enabled?(feature_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{offense} do_something end end RUBY end it 'registers an offense with a string argument' do expect_offense(<<~RUBY) def change if Feature.enabled?('some_feature') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{offense} do_something end end RUBY end end context 'when using Feature.disabled?' do it 'registers an offense' do expect_offense(<<~RUBY) def change if Feature.disabled?(:some_feature) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{offense} do_something end end RUBY end it 'registers an offense with a variable' do expect_offense(<<~RUBY) def change feature_name = :some_feature if Feature.disabled?(feature_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{offense} do_something end end RUBY end end context 'when using feature_flag_enabled? helper' do it 'does not register an offense' do expect_no_offenses(<<~RUBY) def change if feature_flag_enabled?(:some_feature) do_something end end RUBY end end context 'when using other methods on Feature' do it 'does not register an offense' do expect_no_offenses(<<~RUBY) def change Feature.something_else(:some_feature) end RUBY end end end context 'when outside of migration' do before do allow(cop).to receive(:in_migration?).and_return(false) end it 'does not register an offense for Feature.enabled?' do expect_no_offenses(<<~RUBY) def some_method if Feature.enabled?(:some_feature) do_something end end RUBY end it 'does not register an offense for Feature.disabled?' do expect_no_offenses(<<~RUBY) def some_method if Feature.disabled?(:some_feature) do_something end end RUBY end end end