summaryrefslogtreecommitdiff
path: root/spec/lib/feature_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/feature_spec.rb')
-rw-r--r--spec/lib/feature_spec.rb99
1 files changed, 46 insertions, 53 deletions
diff --git a/spec/lib/feature_spec.rb b/spec/lib/feature_spec.rb
index 37f8d3ad47d..acd7d97ac85 100644
--- a/spec/lib/feature_spec.rb
+++ b/spec/lib/feature_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Feature, stub_feature_flags: false do
+RSpec.describe Feature, stub_feature_flags: false do
before do
# reset Flipper AR-engine
Feature.reset
@@ -21,66 +21,29 @@ describe Feature, stub_feature_flags: false do
end
describe '.persisted_names' do
- context 'when FF_LEGACY_PERSISTED_NAMES=false' do
- before do
- stub_env('FF_LEGACY_PERSISTED_NAMES', 'false')
- end
-
- it 'returns the names of the persisted features' do
- Feature.enable('foo')
-
- expect(described_class.persisted_names).to contain_exactly('foo')
- end
-
- it 'returns an empty Array when no features are presisted' do
- expect(described_class.persisted_names).to be_empty
- end
-
- it 'caches the feature names when request store is active',
- :request_store, :use_clean_rails_memory_store_caching do
- Feature.enable('foo')
+ it 'returns the names of the persisted features' do
+ Feature.enable('foo')
- expect(Gitlab::ProcessMemoryCache.cache_backend)
- .to receive(:fetch)
- .once
- .with('flipper/v1/features', expires_in: 1.minute)
- .and_call_original
+ expect(described_class.persisted_names).to contain_exactly('foo')
+ end
- 2.times do
- expect(described_class.persisted_names).to contain_exactly('foo')
- end
- end
+ it 'returns an empty Array when no features are presisted' do
+ expect(described_class.persisted_names).to be_empty
end
- context 'when FF_LEGACY_PERSISTED_NAMES=true' do
- before do
- stub_env('FF_LEGACY_PERSISTED_NAMES', 'true')
- end
+ it 'caches the feature names when request store is active',
+ :request_store, :use_clean_rails_memory_store_caching do
+ Feature.enable('foo')
- it 'returns the names of the persisted features' do
- Feature.enable('foo')
+ expect(Gitlab::ProcessMemoryCache.cache_backend)
+ .to receive(:fetch)
+ .once
+ .with('flipper/v1/features', expires_in: 1.minute)
+ .and_call_original
+ 2.times do
expect(described_class.persisted_names).to contain_exactly('foo')
end
-
- it 'returns an empty Array when no features are presisted' do
- expect(described_class.persisted_names).to be_empty
- end
-
- it 'caches the feature names when request store is active',
- :request_store, :use_clean_rails_memory_store_caching do
- Feature.enable('foo')
-
- expect(Gitlab::ProcessMemoryCache.cache_backend)
- .to receive(:fetch)
- .once
- .with('flipper:persisted_names', expires_in: 1.minute)
- .and_call_original
-
- 2.times do
- expect(described_class.persisted_names).to contain_exactly('foo')
- end
- end
end
it 'fetches all flags once in a single query', :request_store do
@@ -279,6 +242,36 @@ describe Feature, stub_feature_flags: false do
end
end
end
+
+ context 'validates usage of feature flag with YAML definition' do
+ let(:definition) do
+ Feature::Definition.new('development/my_feature_flag.yml',
+ name: 'my_feature_flag',
+ type: 'development',
+ default_enabled: false
+ ).tap(&:validate!)
+ end
+
+ before do
+ allow(Feature::Definition).to receive(:definitions) do
+ { definition.key => definition }
+ end
+ end
+
+ it 'when usage is correct' do
+ expect { described_class.enabled?(:my_feature_flag) }.not_to raise_error
+ end
+
+ it 'when invalid type is used' do
+ expect { described_class.enabled?(:my_feature_flag, type: :licensed) }
+ .to raise_error(/The `type:` of/)
+ end
+
+ it 'when invalid default_enabled is used' do
+ expect { described_class.enabled?(:my_feature_flag, default_enabled: true) }
+ .to raise_error(/The `default_enabled:` of/)
+ end
+ end
end
describe '.disable?' do