97 lines
4.8 KiB
Ruby
97 lines
4.8 KiB
Ruby
|
# 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
|