diff options
Diffstat (limited to 'spec/rubocop/cop/gitlab/feature_available_usage_spec.rb')
-rw-r--r-- | spec/rubocop/cop/gitlab/feature_available_usage_spec.rb | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/spec/rubocop/cop/gitlab/feature_available_usage_spec.rb b/spec/rubocop/cop/gitlab/feature_available_usage_spec.rb new file mode 100644 index 00000000000..514ef357785 --- /dev/null +++ b/spec/rubocop/cop/gitlab/feature_available_usage_spec.rb @@ -0,0 +1,96 @@ +# frozen_string_literal: true + +require 'fast_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?') + expect_no_offenses('subject { described_class.feature_available? }') + end + end + + context 'one argument given' do + it 'does not flag the use of License.feature_available?' do + expect_no_offenses('License.feature_available?(:push_rules)') + end + + it 'flags the use with a dynamic feature as nil' do + expect_offense(<<~SOURCE) + feature_available?(nil) + ^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`nil` given), use `licensed_feature_available?(feature)` instead. + SOURCE + expect_offense(<<~SOURCE) + project.feature_available?(nil) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`nil` given), use `licensed_feature_available?(feature)` instead. + SOURCE + end + + it 'flags the use with an OSS project feature' do + expect_offense(<<~SOURCE) + project.feature_available?(:issues) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should be called with two arguments: `feature` and `user`. + SOURCE + expect_offense(<<~SOURCE) + feature_available?(:issues) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should be called with two arguments: `feature` and `user`. + SOURCE + end + + it 'flags the use with a feature that is not a project feature' do + expect_offense(<<~SOURCE) + feature_available?(:foo) + ^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`:foo` given), use `licensed_feature_available?(feature)` instead. + SOURCE + expect_offense(<<~SOURCE) + project.feature_available?(:foo) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`:foo` given), use `licensed_feature_available?(feature)` instead. + SOURCE + expect_offense(<<~SOURCE) + feature_available?(foo) + ^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`foo` isn't a literal so we cannot say if it's legit or not), using `licensed_feature_available?(feature)` may be more appropriate. + SOURCE + expect_offense(<<~SOURCE) + foo = :feature + feature_available?(foo) + ^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`foo` isn't a literal so we cannot say if it's legit or not), using `licensed_feature_available?(feature)` may be more appropriate. + SOURCE + end + end + + context 'two arguments given' do + it 'does not flag the use with an OSS project feature' do + expect_no_offenses('feature_available?(:issues, user)') + expect_no_offenses('project.feature_available?(:issues, user)') + end + + it 'does not flag the use with an EE project feature' do + expect_no_offenses('feature_available?(:requirements, user)') + expect_no_offenses('project.feature_available?(:requirements, user)') + end + + it 'flags the use with a dynamic feature as a method call with two args' do + expect_offense(<<~SOURCE) + feature_available?(:foo, current_user) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`:foo` given), use `licensed_feature_available?(feature)` instead. + SOURCE + expect_offense(<<~SOURCE) + project.feature_available?(:foo, current_user) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`:foo` given), use `licensed_feature_available?(feature)` instead. + SOURCE + expect_offense(<<~SOURCE) + feature_available?(foo, current_user) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`foo` isn't a literal so we cannot say if it's legit or not), using `licensed_feature_available?(feature)` may be more appropriate. + SOURCE + expect_offense(<<~SOURCE) + project.feature_available?(foo, current_user) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `feature_available?` should not be called for features that can be licensed (`foo` isn't a literal so we cannot say if it's legit or not), using `licensed_feature_available?(feature)` may be more appropriate. + SOURCE + end + end +end |