summaryrefslogtreecommitdiff
path: root/spec/lib/feature_spec.rb
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2019-07-12 21:40:43 -0700
committerStan Hu <stanhu@gmail.com>2019-07-12 21:40:43 -0700
commitaffe8baab2cbaf45478c5d0ba0554a5605ab6f3a (patch)
treefdff1c60d90246068132012316ff7e11ef64fe78 /spec/lib/feature_spec.rb
parent0caa793c2e0c0707ee1a5f0193045efb2d7b3a4d (diff)
downloadgitlab-ce-sh-fix-feature-flags.tar.gz
Fix handling of default_enabledsh-fix-feature-flags
Diffstat (limited to 'spec/lib/feature_spec.rb')
-rw-r--r--spec/lib/feature_spec.rb25
1 files changed, 24 insertions, 1 deletions
diff --git a/spec/lib/feature_spec.rb b/spec/lib/feature_spec.rb
index bf92a03b898..0271b8e38b8 100644
--- a/spec/lib/feature_spec.rb
+++ b/spec/lib/feature_spec.rb
@@ -167,6 +167,7 @@ describe Feature do
described_class.enable(:enabled_feature_flag)
flipper_key = "flipper/v1/feature/enabled_feature_flag"
+ expect(described_class.l1_cache_backend).to receive(:fetch).with('flipper:persisted_names', expires_in: 1.minute).and_call_original
expect(described_class.l2_cache_backend)
.to receive(:fetch)
.once
@@ -184,11 +185,33 @@ describe Feature do
end
end
+ context 'with actor', :request_store do
+ let(:flag) { :actor_flag }
+ let(:actor) { create(:project) }
+
+ it 'persisted feature prioritizes gate state over default_enabled' do
+ described_class.enable(flag, actor)
+
+ expect(described_class.enabled?(flag, actor, default_enabled: true)).to be_truthy
+ expect(described_class.enabled?(flag, actor, default_enabled: false)).to be_truthy
+ expect(described_class.enabled?(flag, default_enabled: true)).to be_truthy
+ expect(described_class.enabled?(flag, default_enabled: false)).to be_falsey
+ end
+
+ it 'unpersisted feature respects default_enabled' do
+ expect(described_class.enabled?(flag, actor, default_enabled: true)).to be_truthy
+ expect(described_class.enabled?(flag, actor, default_enabled: false)).to be_falsey
+ expect(described_class.enabled?(flag, default_enabled: true)).to be_truthy
+ expect(described_class.enabled?(flag, default_enabled: false)).to be_falsey
+ end
+ end
+
context 'cached feature flag', :request_store do
let(:flag) { :some_feature_flag }
before do
described_class.flipper.memoize = false
+ described_class.enable(flag)
described_class.enabled?(flag)
end
@@ -206,7 +229,7 @@ describe Feature do
expect(described_class.l1_cache_backend).to receive(:fetch).once.and_call_original
expect(described_class.l2_cache_backend).to receive(:fetch).once.and_call_original
expect(described_class.enabled?(flag)).to be_truthy
- end.not_to exceed_query_limit(0)
+ end.not_to exceed_query_limit(1) # One query for persisted_names
end
end