From cf7c57aaf53036483da35868da84596dcdae2aaf Mon Sep 17 00:00:00 2001
From: Robert Speicher <rspeicher@gmail.com>
Date: Wed, 1 Jul 2015 17:21:51 -0400
Subject: [PATCH] Use stub_application_setting in a few more specs

These specs also failed when run by themselves before this change, so
we've likely got some kind of cross-test contamination going on.
---
 spec/features/profile_spec.rb                 |  6 ++---
 spec/requests/api/projects_spec.rb            |  4 +--
 spec/services/create_snippet_service_spec.rb  |  6 +----
 spec/services/git_push_service_spec.rb        |  8 ++----
 spec/services/projects/create_service_spec.rb |  4 +--
 spec/services/projects/update_service_spec.rb |  4 +--
 spec/services/update_snippet_service_spec.rb  |  6 +----
 spec/support/stub_configuration.rb            | 26 +++++++++++++++++++
 8 files changed, 35 insertions(+), 29 deletions(-)

diff --git a/spec/features/profile_spec.rb b/spec/features/profile_spec.rb
index 9fe2e610555..c80253fead8 100644
--- a/spec/features/profile_spec.rb
+++ b/spec/features/profile_spec.rb
@@ -9,8 +9,7 @@ describe 'Profile account page', feature: true do
 
   describe 'when signup is enabled' do
     before do
-      allow_any_instance_of(ApplicationSetting).
-        to receive(:signup_enabled?).and_return(true)
+      stub_application_setting(signup_enabled: true)
       visit profile_account_path
     end
 
@@ -24,8 +23,7 @@ describe 'Profile account page', feature: true do
 
   describe 'when signup is disabled' do
     before do
-      allow_any_instance_of(ApplicationSetting).
-        to receive(:signup_enabled?).and_return(false)
+      stub_application_setting(signup_enabled: false)
       visit profile_account_path
     end
 
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index e9ff832603f..4178bb2e836 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -220,9 +220,7 @@ describe API::API, api: true  do
     context 'when a visibility level is restricted' do
       before do
         @project = attributes_for(:project, { public: true })
-        allow_any_instance_of(ApplicationSetting).to(
-          receive(:restricted_visibility_levels).and_return([20])
-        )
+        stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
       end
 
       it 'should not allow a non-admin to use a restricted visibility level' do
diff --git a/spec/services/create_snippet_service_spec.rb b/spec/services/create_snippet_service_spec.rb
index 08689c15ca8..8edabe9450b 100644
--- a/spec/services/create_snippet_service_spec.rb
+++ b/spec/services/create_snippet_service_spec.rb
@@ -14,11 +14,7 @@ describe CreateSnippetService do
 
   context 'When public visibility is restricted' do
     before do
-      allow_any_instance_of(ApplicationSetting).to(
-        receive(:restricted_visibility_levels).and_return(
-          [Gitlab::VisibilityLevel::PUBLIC]
-        )
-      )
+      stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
 
       @opts.merge!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
     end
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index 3373b97bfd4..62cef9db534 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -124,9 +124,7 @@ describe GitPushService do
       end
 
       it "when pushing a branch for the first time with default branch protection disabled" do
-        allow(ApplicationSetting.current_application_settings).
-          to receive(:default_branch_protection).
-          and_return(Gitlab::Access::PROTECTION_NONE)
+        stub_application_setting(default_branch_protection: Gitlab::Access::PROTECTION_NONE)
 
         expect(project).to receive(:execute_hooks)
         expect(project.default_branch).to eq("master")
@@ -135,9 +133,7 @@ describe GitPushService do
       end
 
       it "when pushing a branch for the first time with default branch protection set to 'developers can push'" do
-        allow(ApplicationSetting.current_application_settings).
-          to receive(:default_branch_protection).
-          and_return(Gitlab::Access::PROTECTION_DEV_CAN_PUSH)
+        stub_application_setting(default_branch_protection: Gitlab::Access::PROTECTION_DEV_CAN_PUSH)
 
         expect(project).to receive(:execute_hooks)
         expect(project.default_branch).to eq("master")
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index 337dae592dd..97b206c9854 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -58,9 +58,7 @@ describe Projects::CreateService do
 
     context 'restricted visibility level' do
       before do
-        allow_any_instance_of(ApplicationSetting).to(
-          receive(:restricted_visibility_levels).and_return([20])
-        )
+        stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
 
         @opts.merge!(
           visibility_level: Gitlab::VisibilityLevel.options['Public']
diff --git a/spec/services/projects/update_service_spec.rb b/spec/services/projects/update_service_spec.rb
index 0dd6980a44f..b347fa15f87 100644
--- a/spec/services/projects/update_service_spec.rb
+++ b/spec/services/projects/update_service_spec.rb
@@ -47,9 +47,7 @@ describe Projects::UpdateService do
 
     context 'respect configured visibility restrictions setting' do
       before(:each) do
-        allow_any_instance_of(ApplicationSetting).to(
-          receive(:restricted_visibility_levels).and_return([20])
-        )
+        stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
       end
 
       context 'should be private when updated to private' do
diff --git a/spec/services/update_snippet_service_spec.rb b/spec/services/update_snippet_service_spec.rb
index 841ef9bfed1..d7c516e3934 100644
--- a/spec/services/update_snippet_service_spec.rb
+++ b/spec/services/update_snippet_service_spec.rb
@@ -14,11 +14,7 @@ describe UpdateSnippetService do
 
   context 'When public visibility is restricted' do
     before do
-      allow_any_instance_of(ApplicationSetting).to(
-        receive(:restricted_visibility_levels).and_return(
-          [Gitlab::VisibilityLevel::PUBLIC]
-        )
-      )
+      stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
 
       @snippet = create_snippet(@project, @user, @opts)
       @opts.merge!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
diff --git a/spec/support/stub_configuration.rb b/spec/support/stub_configuration.rb
index ad86abdbb41..e4004ec8f79 100644
--- a/spec/support/stub_configuration.rb
+++ b/spec/support/stub_configuration.rb
@@ -1,5 +1,10 @@
 module StubConfiguration
   def stub_application_setting(messages)
+    add_predicates(messages)
+
+    # Stubbing both of these because we're not yet consistent with how we access
+    # current application settings
+    allow_any_instance_of(ApplicationSetting).to receive_messages(messages)
     allow(Gitlab::CurrentSettings.current_application_settings).
       to receive_messages(messages)
   end
@@ -11,4 +16,25 @@ module StubConfiguration
   def stub_gravatar_setting(messages)
     allow(Gitlab.config.gravatar).to receive_messages(messages)
   end
+
+  private
+
+  # Modifies stubbed messages to also stub possible predicate versions
+  #
+  # Examples:
+  #
+  #   add_predicates(foo: true)
+  #   # => {foo: true, foo?: true}
+  #
+  #   add_predicates(signup_enabled?: false)
+  #   # => {signup_enabled? false}
+  def add_predicates(messages)
+    # Only modify keys that aren't already predicates
+    keys = messages.keys.map(&:to_s).reject { |k| k.end_with?('?') }
+
+    keys.each do |key|
+      predicate = key + '?'
+      messages[predicate.to_sym] = messages[key.to_sym]
+    end
+  end
 end
-- 
GitLab