summaryrefslogtreecommitdiff
path: root/spec/support/helpers/stubbed_feature.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/helpers/stubbed_feature.rb')
-rw-r--r--spec/support/helpers/stubbed_feature.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/spec/support/helpers/stubbed_feature.rb b/spec/support/helpers/stubbed_feature.rb
new file mode 100644
index 00000000000..e78efcf6b75
--- /dev/null
+++ b/spec/support/helpers/stubbed_feature.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+# Extend the Feature class with the ability to stub feature flags.
+module StubbedFeature
+ extend ActiveSupport::Concern
+
+ class_methods do
+ # Turn stubbed feature flags on or off.
+ def stub=(stub)
+ @stub = stub
+ end
+
+ def stub?
+ @stub.nil? ? true : @stub
+ end
+
+ # Wipe any previously set feature flags.
+ def reset_flipper
+ @flipper = nil
+ end
+
+ # Replace #flipper method with the optional stubbed/unstubbed version.
+ def flipper
+ if stub?
+ @flipper ||= Flipper.new(Flipper::Adapters::Memory.new)
+ else
+ super
+ end
+ end
+
+ # Replace #enabled? method with the optional stubbed/unstubbed version.
+ def enabled?(*args)
+ feature_flag = super(*args)
+ return feature_flag unless stub?
+
+ # If feature flag is not persisted we mark the feature flag as enabled
+ # We do `m.call` as we want to validate the execution of method arguments
+ # and a feature flag state if it is not persisted
+ unless Feature.persisted_name?(args.first)
+ # TODO: this is hack to support `promo_feature_available?`
+ # We enable all feature flags by default unless they are `promo_`
+ # Issue: https://gitlab.com/gitlab-org/gitlab/-/issues/218667
+ feature_flag = true unless args.first.to_s.start_with?('promo_')
+ end
+
+ feature_flag
+ end
+ end
+end