From 332dc0aa60aed14ecbf54d4e1595eddbed4c77fa Mon Sep 17 00:00:00 2001
From: Vijay Hawoldar <vhawoldar@gitlab.com>
Date: Thu, 9 Nov 2023 13:46:08 +0000
Subject: [PATCH] Adjusts stub_saas_features to stub defaults

So that we can test flows that result in multiple calls to
Gitlab::Saas.feature_available?, we now stub the default value for all
known SaaS features to false
---
 spec/support/helpers/stub_saas_features.rb      |  5 ++++-
 .../helpers/stub_saas_features_spec.rb          | 17 ++++++++++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/spec/support/helpers/stub_saas_features.rb b/spec/support/helpers/stub_saas_features.rb
index d0aa7108a6a2..82ad6e59cb44 100644
--- a/spec/support/helpers/stub_saas_features.rb
+++ b/spec/support/helpers/stub_saas_features.rb
@@ -11,7 +11,10 @@ module StubSaasFeatures
   # - `stub_saas_features(onboarding: true)` ... Enable `onboarding`
   #   SaaS feature globally.
   def stub_saas_features(features)
-    features.each do |feature_name, value|
+    all_features = ::Gitlab::Saas::FEATURES.index_with { false }
+    all_features.merge!(features)
+
+    all_features.each do |feature_name, value|
       raise ArgumentError, 'value must be boolean' unless value.in? [true, false]
 
       allow(::Gitlab::Saas).to receive(:feature_available?).with(feature_name).and_return(value)
diff --git a/spec/support_specs/helpers/stub_saas_features_spec.rb b/spec/support_specs/helpers/stub_saas_features_spec.rb
index c3cec3f47aae..db608c774c0c 100644
--- a/spec/support_specs/helpers/stub_saas_features_spec.rb
+++ b/spec/support_specs/helpers/stub_saas_features_spec.rb
@@ -6,7 +6,12 @@
   describe '#stub_saas_features' do
     using RSpec::Parameterized::TableSyntax
 
-    let(:feature_name) { :some_saas_feature }
+    let(:feature_name) { :feature_one }
+    let(:all_features) { [feature_name, :feature_two, :feature_three] }
+
+    before do
+      stub_const("Gitlab::Saas::FEATURES", all_features)
+    end
 
     context 'when checking global state' do
       where(:feature_value) do
@@ -46,5 +51,15 @@
       expect(::Gitlab::Saas.feature_available?(feature_name)).to eq(false)
       expect(::Gitlab::Saas.feature_available?(:some_new_feature)).to eq(true)
     end
+
+    context 'when checking multiple features' do
+      it 'stubs defaults false value for other known features' do
+        stub_saas_features(feature_one: true)
+
+        expect(::Gitlab::Saas.feature_available?(:feature_one)).to eq(true)
+        expect(::Gitlab::Saas.feature_available?(:feature_two)).to eq(false)
+        expect(::Gitlab::Saas.feature_available?(:feature_three)).to eq(false)
+      end
+    end
   end
 end
-- 
GitLab