From 5a9ede472150ec78f8410ae15cf782095c8f056c Mon Sep 17 00:00:00 2001
From: Robert Speicher <rspeicher@gmail.com>
Date: Thu, 21 May 2015 17:49:06 -0400
Subject: [PATCH] Update mock and stub syntax for specs

---
 app/helpers/broadcast_messages_helper.rb      | 15 ++++--
 app/helpers/icons_helper.rb                   |  2 +
 app/helpers/notifications_helper.rb           |  2 +
 .../autocomplete_controller_spec.rb           |  6 +--
 .../features/gitlab_flavored_markdown_spec.rb |  3 +-
 spec/features/profile_spec.rb                 |  6 ++-
 spec/helpers/application_helper_spec.rb       | 10 ++--
 .../helpers/broadcast_messages_helper_spec.rb | 10 ++--
 spec/helpers/diff_helper_spec.rb              |  6 +--
 spec/helpers/notifications_helper_spec.rb     |  9 ++--
 spec/helpers/submodule_helper_spec.rb         | 26 ++++-----
 spec/lib/extracts_path_spec.rb                |  7 ++-
 spec/lib/gitlab/auth_spec.rb                  |  4 +-
 spec/lib/gitlab/backend/shell_spec.rb         |  2 +-
 spec/lib/gitlab/ldap/access_spec.rb           | 30 +++++++----
 spec/lib/gitlab/ldap/adapter_spec.rb          | 15 ++++--
 spec/lib/gitlab/ldap/authentication_spec.rb   | 53 ++++++++++---------
 spec/lib/gitlab/ldap/user_spec.rb             | 22 ++++----
 spec/lib/gitlab/upgrader_spec.rb              |  4 +-
 spec/models/commit_spec.rb                    |  8 +--
 spec/models/concerns/issuable_spec.rb         |  5 +-
 spec/models/forked_project_link_spec.rb       | 12 ++---
 spec/models/members/group_member_spec.rb      |  8 ++-
 spec/models/merge_request_spec.rb             | 10 ++--
 spec/models/milestone_spec.rb                 | 14 ++---
 spec/models/namespace_spec.rb                 |  6 +--
 .../project_services/asana_service_spec.rb    |  2 +-
 .../project_services/assembla_service_spec.rb |  2 +-
 .../buildkite_service_spec.rb                 |  6 +--
 .../project_services/flowdock_service_spec.rb |  2 +-
 .../gemnasium_service_spec.rb                 |  2 +-
 .../gitlab_ci_service_spec.rb                 | 19 +++----
 .../project_services/hipchat_service_spec.rb  | 10 ++--
 .../project_services/irker_service_spec.rb    |  6 +--
 .../project_services/pushover_service_spec.rb |  2 +-
 .../project_services/slack_service_spec.rb    | 16 +++---
 spec/models/project_spec.rb                   |  2 +-
 spec/models/service_spec.rb                   |  8 +--
 spec/models/user_spec.rb                      | 12 +++--
 spec/requests/api/api_helpers_spec.rb         |  2 +-
 spec/requests/api/branches_spec.rb            |  4 +-
 spec/requests/api/files_spec.rb               |  9 ++--
 spec/requests/api/groups_spec.rb              |  3 +-
 spec/requests/api/merge_requests_spec.rb      | 10 +++-
 spec/requests/api/projects_spec.rb            | 19 +++----
 spec/services/git_push_service_spec.rb        | 26 +++++----
 spec/support/test_env.rb                      |  6 ++-
 spec/tasks/gitlab/backup_rake_spec.rb         | 38 +++++++------
 spec/workers/post_receive_spec.rb             |  2 +-
 49 files changed, 283 insertions(+), 220 deletions(-)

diff --git a/app/helpers/broadcast_messages_helper.rb b/app/helpers/broadcast_messages_helper.rb
index 29ff47663da..6484dca6b55 100644
--- a/app/helpers/broadcast_messages_helper.rb
+++ b/app/helpers/broadcast_messages_helper.rb
@@ -1,9 +1,16 @@
 module BroadcastMessagesHelper
   def broadcast_styling(broadcast_message)
-    if(broadcast_message.color || broadcast_message.font)
-      "background-color:#{broadcast_message.color};color:#{broadcast_message.font}"
-    else
-      ""
+    styling = ''
+
+    if broadcast_message.color.present?
+      styling << "background-color: #{broadcast_message.color}"
+      styling << '; ' if broadcast_message.font.present?
     end
+
+    if broadcast_message.font.present?
+      styling << "color: #{broadcast_message.font}"
+    end
+
+    styling
   end
 end
diff --git a/app/helpers/icons_helper.rb b/app/helpers/icons_helper.rb
index a730684f8f3..30b17a736a7 100644
--- a/app/helpers/icons_helper.rb
+++ b/app/helpers/icons_helper.rb
@@ -1,4 +1,6 @@
 module IconsHelper
+  include FontAwesome::Rails::IconHelper
+
   # Creates an icon tag given icon name(s) and possible icon modifiers.
   #
   # Right now this method simply delegates directly to `fa_icon` from the
diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb
index f771fe761ef..2f8e64c375f 100644
--- a/app/helpers/notifications_helper.rb
+++ b/app/helpers/notifications_helper.rb
@@ -1,4 +1,6 @@
 module NotificationsHelper
+  include IconsHelper
+
   def notification_icon(notification)
     if notification.disabled?
       icon('volume-off', class: 'ns-mute')
diff --git a/spec/controllers/autocomplete_controller_spec.rb b/spec/controllers/autocomplete_controller_spec.rb
index 1ea1227b28b..9ad9cb41cc1 100644
--- a/spec/controllers/autocomplete_controller_spec.rb
+++ b/spec/controllers/autocomplete_controller_spec.rb
@@ -16,7 +16,7 @@ describe AutocompleteController do
     let(:body) { JSON.parse(response.body) }
 
     it { expect(body).to be_kind_of(Array) }
-    it { expect(body.size).to eq(1) }
+    it { expect(body.size).to eq 1 }
     it { expect(body.first["username"]).to eq user.username }
   end
 
@@ -33,7 +33,7 @@ describe AutocompleteController do
     let(:body) { JSON.parse(response.body) }
 
     it { expect(body).to be_kind_of(Array) }
-    it { expect(body.size).to eq(1) }
+    it { expect(body.size).to eq 1 }
     it { expect(body.first["username"]).to eq user.username }
   end
 
@@ -46,6 +46,6 @@ describe AutocompleteController do
     let(:body) { JSON.parse(response.body) }
 
     it { expect(body).to be_kind_of(Array) }
-    it { expect(body.size).to eq(User.count) }
+    it { expect(body.size).to eq User.count }
   end
 end
diff --git a/spec/features/gitlab_flavored_markdown_spec.rb b/spec/features/gitlab_flavored_markdown_spec.rb
index 16d1ca55f8d..0c1bc53cdb5 100644
--- a/spec/features/gitlab_flavored_markdown_spec.rb
+++ b/spec/features/gitlab_flavored_markdown_spec.rb
@@ -11,7 +11,8 @@ describe "GitLab Flavored Markdown", feature: true do
   end
 
   before do
-    Commit.any_instance.stub(title: "fix #{issue.to_reference}\n\nask #{fred.to_reference} for details")
+    allow_any_instance_of(Commit).to receive(:title).
+      and_return("fix #{issue.to_reference}\n\nask #{fred.to_reference} for details")
   end
 
   let(:commit) { project.commit }
diff --git a/spec/features/profile_spec.rb b/spec/features/profile_spec.rb
index 3d36a3c02d0..9fe2e610555 100644
--- a/spec/features/profile_spec.rb
+++ b/spec/features/profile_spec.rb
@@ -9,7 +9,8 @@ describe 'Profile account page', feature: true do
 
   describe 'when signup is enabled' do
     before do
-      ApplicationSetting.any_instance.stub(signup_enabled?: true)
+      allow_any_instance_of(ApplicationSetting).
+        to receive(:signup_enabled?).and_return(true)
       visit profile_account_path
     end
 
@@ -23,7 +24,8 @@ describe 'Profile account page', feature: true do
 
   describe 'when signup is disabled' do
     before do
-      ApplicationSetting.any_instance.stub(signup_enabled?: false)
+      allow_any_instance_of(ApplicationSetting).
+        to receive(:signup_enabled?).and_return(false)
       visit profile_account_path
     end
 
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index a62c801e6a2..14c697a4e40 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -76,8 +76,8 @@ describe ApplicationHelper do
     end
 
     it 'should return an url for the avatar with relative url' do
-      Gitlab.config.gitlab.stub(relative_url_root: '/gitlab')
-      Gitlab.config.gitlab.stub(url: Settings.send(:build_gitlab_url))
+      allow(Gitlab.config.gitlab).to receive(:relative_url_root).and_return('/gitlab')
+      allow(Gitlab.config.gitlab).to receive(:url).and_return(Settings.send(:build_gitlab_url))
 
       user = create(:user)
       user.avatar = File.open(avatar_file_path)
@@ -97,7 +97,7 @@ describe ApplicationHelper do
     let(:user_email) { 'user@email.com' }
 
     it 'should return a generic avatar path when Gravatar is disabled' do
-      ApplicationSetting.any_instance.stub(gravatar_enabled?: false)
+      allow_any_instance_of(ApplicationSetting).to receive(:gravatar_enabled?).and_return(false)
       expect(gravatar_icon(user_email)).to match('no_avatar.png')
     end
 
@@ -106,13 +106,13 @@ describe ApplicationHelper do
     end
 
     it 'should return default gravatar url' do
-      Gitlab.config.gitlab.stub(https: false)
+      allow(Gitlab.config.gitlab).to receive(:https).and_return(false)
       url = 'http://www.gravatar.com/avatar/b58c6f14d292556214bd64909bcdb118'
       expect(gravatar_icon(user_email)).to match(url)
     end
 
     it 'should use SSL when appropriate' do
-      Gitlab.config.gitlab.stub(https: true)
+      allow(Gitlab.config.gitlab).to receive(:https).and_return(true)
       expect(gravatar_icon(user_email)).to match('https://secure.gravatar.com')
     end
 
diff --git a/spec/helpers/broadcast_messages_helper_spec.rb b/spec/helpers/broadcast_messages_helper_spec.rb
index f6df12662bb..c7c6f45d144 100644
--- a/spec/helpers/broadcast_messages_helper_spec.rb
+++ b/spec/helpers/broadcast_messages_helper_spec.rb
@@ -2,20 +2,20 @@ require 'spec_helper'
 
 describe BroadcastMessagesHelper do
   describe 'broadcast_styling' do
-    let(:broadcast_message) { double(color: "", font: "") }
+    let(:broadcast_message) { double(color: '', font: '') }
 
     context "default style" do
       it "should have no style" do
-        expect(broadcast_styling(broadcast_message)).to match('')
+        expect(broadcast_styling(broadcast_message)).to eq ''
       end
     end
 
-    context "customiezd style" do
-      before { broadcast_message.stub(color: "#f2dede", font: "#b94a48") }
+    context "customized style" do
+      let(:broadcast_message) { double(color: "#f2dede", font: '#b94a48') }
 
       it "should have a customized style" do
         expect(broadcast_styling(broadcast_message)).
-          to match('background-color:#f2dede;color:#b94a48')
+          to match('background-color: #f2dede; color: #b94a48')
       end
     end
   end
diff --git a/spec/helpers/diff_helper_spec.rb b/spec/helpers/diff_helper_spec.rb
index e0be2df0e5e..7c96a74e581 100644
--- a/spec/helpers/diff_helper_spec.rb
+++ b/spec/helpers/diff_helper_spec.rb
@@ -48,19 +48,19 @@ describe DiffHelper do
     end
 
     it 'should return only the first file if the diff line count in the 2nd file takes the total beyond safe limits' do
-      diffs[1].diff.stub(lines: [""] * 4999) #simulate 4999 lines
+      allow(diffs[1].diff).to receive(:lines).and_return([""] * 4999) #simulate 4999 lines
       expect(safe_diff_files(diffs).length).to eq(1)
     end
 
     it 'should return all files from a commit that is beyond safe limit for numbers of lines if force diff is true' do
       allow(controller).to receive(:params) { { force_show_diff: true } }
-      diffs[1].diff.stub(lines: [""] * 4999) #simulate 4999 lines
+      allow(diffs[1].diff).to receive(:lines).and_return([""] * 4999) #simulate 4999 lines
       expect(safe_diff_files(diffs).length).to eq(2)
     end
 
     it 'should return only the first file if the diff line count in the 2nd file takes the total beyond hard limits' do
       allow(controller).to receive(:params) { { force_show_diff: true } }
-      diffs[1].diff.stub(lines: [""] * 49999) #simulate 49999 lines
+      allow(diffs[1].diff).to receive(:lines).and_return([""] * 49999) #simulate 49999 lines
       expect(safe_diff_files(diffs).length).to eq(1)
     end
 
diff --git a/spec/helpers/notifications_helper_spec.rb b/spec/helpers/notifications_helper_spec.rb
index 482cb33e94f..f1aba4cfdf3 100644
--- a/spec/helpers/notifications_helper_spec.rb
+++ b/spec/helpers/notifications_helper_spec.rb
@@ -1,14 +1,11 @@
 require 'spec_helper'
 
 describe NotificationsHelper do
-  include FontAwesome::Rails::IconHelper
-  include IconsHelper
-
   describe 'notification_icon' do
     let(:notification) { double(disabled?: false, participating?: false, watch?: false) }
 
     context "disabled notification" do
-      before { notification.stub(disabled?: true) }
+      before { allow(notification).to receive(:disabled?).and_return(true) }
 
       it "has a red icon" do
         expect(notification_icon(notification)).to match('class="fa fa-volume-off ns-mute"')
@@ -16,7 +13,7 @@ describe NotificationsHelper do
     end
 
     context "participating notification" do
-      before { notification.stub(participating?: true) }
+      before { allow(notification).to receive(:participating?).and_return(true) }
 
       it "has a blue icon" do
         expect(notification_icon(notification)).to match('class="fa fa-volume-down ns-part"')
@@ -24,7 +21,7 @@ describe NotificationsHelper do
     end
 
     context "watched notification" do
-      before { notification.stub(watch?: true) }
+      before { allow(notification).to receive(:watch?).and_return(true) }
 
       it "has a green icon" do
         expect(notification_icon(notification)).to match('class="fa fa-volume-up ns-watch"')
diff --git a/spec/helpers/submodule_helper_spec.rb b/spec/helpers/submodule_helper_spec.rb
index e98b75afabc..a7abf9d3839 100644
--- a/spec/helpers/submodule_helper_spec.rb
+++ b/spec/helpers/submodule_helper_spec.rb
@@ -14,41 +14,41 @@ describe SubmoduleHelper do
 
     context 'submodule on self' do
       before do
-        Gitlab.config.gitlab.stub(protocol: 'http') # set this just to be sure
+        allow(Gitlab.config.gitlab).to receive(:protocol).and_return('http') # set this just to be sure
       end
 
       it 'should detect ssh on standard port' do
-        Gitlab.config.gitlab_shell.stub(ssh_port: 22) # set this just to be sure
-        Gitlab.config.gitlab_shell.stub(ssh_path_prefix: Settings.send(:build_gitlab_shell_ssh_path_prefix))
+        allow(Gitlab.config.gitlab_shell).to receive(:ssh_port).and_return(22) # set this just to be sure
+        allow(Gitlab.config.gitlab_shell).to receive(:ssh_path_prefix).and_return(Settings.send(:build_gitlab_shell_ssh_path_prefix))
         stub_url([ config.user, '@', config.host, ':gitlab-org/gitlab-ce.git' ].join(''))
         expect(submodule_links(submodule_item)).to eq([ namespace_project_path('gitlab-org', 'gitlab-ce'), namespace_project_tree_path('gitlab-org', 'gitlab-ce', 'hash') ])
       end
 
       it 'should detect ssh on non-standard port' do
-        Gitlab.config.gitlab_shell.stub(ssh_port: 2222)
-        Gitlab.config.gitlab_shell.stub(ssh_path_prefix: Settings.send(:build_gitlab_shell_ssh_path_prefix))
+        allow(Gitlab.config.gitlab_shell).to receive(:ssh_port).and_return(2222)
+        allow(Gitlab.config.gitlab_shell).to receive(:ssh_path_prefix).and_return(Settings.send(:build_gitlab_shell_ssh_path_prefix))
         stub_url([ 'ssh://', config.user, '@', config.host, ':2222/gitlab-org/gitlab-ce.git' ].join(''))
         expect(submodule_links(submodule_item)).to eq([ namespace_project_path('gitlab-org', 'gitlab-ce'), namespace_project_tree_path('gitlab-org', 'gitlab-ce', 'hash') ])
       end
 
       it 'should detect http on standard port' do
-        Gitlab.config.gitlab.stub(port: 80)
-        Gitlab.config.gitlab.stub(url: Settings.send(:build_gitlab_url))
+        allow(Gitlab.config.gitlab).to receive(:port).and_return(80)
+        allow(Gitlab.config.gitlab).to receive(:url).and_return(Settings.send(:build_gitlab_url))
         stub_url([ 'http://', config.host, '/gitlab-org/gitlab-ce.git' ].join(''))
         expect(submodule_links(submodule_item)).to eq([ namespace_project_path('gitlab-org', 'gitlab-ce'), namespace_project_tree_path('gitlab-org', 'gitlab-ce', 'hash') ])
       end
 
       it 'should detect http on non-standard port' do
-        Gitlab.config.gitlab.stub(port: 3000)
-        Gitlab.config.gitlab.stub(url: Settings.send(:build_gitlab_url))
+        allow(Gitlab.config.gitlab).to receive(:port).and_return(3000)
+        allow(Gitlab.config.gitlab).to receive(:url).and_return(Settings.send(:build_gitlab_url))
         stub_url([ 'http://', config.host, ':3000/gitlab-org/gitlab-ce.git' ].join(''))
         expect(submodule_links(submodule_item)).to eq([ namespace_project_path('gitlab-org', 'gitlab-ce'), namespace_project_tree_path('gitlab-org', 'gitlab-ce', 'hash') ])
       end
 
       it 'should work with relative_url_root' do
-        Gitlab.config.gitlab.stub(port: 80) # set this just to be sure
-        Gitlab.config.gitlab.stub(relative_url_root: '/gitlab/root')
-        Gitlab.config.gitlab.stub(url: Settings.send(:build_gitlab_url))
+        allow(Gitlab.config.gitlab).to receive(:port).and_return(80) # set this just to be sure
+        allow(Gitlab.config.gitlab).to receive(:relative_url_root).and_return('/gitlab/root')
+        allow(Gitlab.config.gitlab).to receive(:url).and_return(Settings.send(:build_gitlab_url))
         stub_url([ 'http://', config.host, '/gitlab/root/gitlab-org/gitlab-ce.git' ].join(''))
         expect(submodule_links(submodule_item)).to eq([ namespace_project_path('gitlab-org', 'gitlab-ce'), namespace_project_tree_path('gitlab-org', 'gitlab-ce', 'hash') ])
       end
@@ -156,6 +156,6 @@ describe SubmoduleHelper do
   end
 
   def stub_url(url)
-    repo.stub(submodule_url_for: url)
+    allow(repo).to receive(:submodule_url_for).and_return(url)
   end
 end
diff --git a/spec/lib/extracts_path_spec.rb b/spec/lib/extracts_path_spec.rb
index 05bcebaa3a2..8e05e44defc 100644
--- a/spec/lib/extracts_path_spec.rb
+++ b/spec/lib/extracts_path_spec.rb
@@ -9,8 +9,11 @@ describe ExtractsPath do
 
   before do
     @project = project
-    project.stub(repository: double(ref_names: ['master', 'foo/bar/baz', 'v1.0.0', 'v2.0.0']))
-    project.stub(path_with_namespace: 'gitlab/gitlab-ci')
+
+    repo = double(ref_names: ['master', 'foo/bar/baz', 'v1.0.0', 'v2.0.0'])
+    allow(project).to receive(:repository).and_return(repo)
+    allow(project).to receive(:path_with_namespace).
+      and_return('gitlab/gitlab-ci')
   end
 
   describe '#assign_ref' do
diff --git a/spec/lib/gitlab/auth_spec.rb b/spec/lib/gitlab/auth_spec.rb
index 95fc7e16a11..81850d42c90 100644
--- a/spec/lib/gitlab/auth_spec.rb
+++ b/spec/lib/gitlab/auth_spec.rb
@@ -36,7 +36,9 @@ describe Gitlab::Auth do
     end
 
     context "with ldap enabled" do
-      before { Gitlab::LDAP::Config.stub(enabled?: true) }
+      before do
+        allow(Gitlab::LDAP::Config).to receive(:enabled?).and_return(true)
+      end
 
       it "tries to autheticate with db before ldap" do
         expect(Gitlab::LDAP::Authentication).not_to receive(:login)
diff --git a/spec/lib/gitlab/backend/shell_spec.rb b/spec/lib/gitlab/backend/shell_spec.rb
index 27279465c1a..b6d04330599 100644
--- a/spec/lib/gitlab/backend/shell_spec.rb
+++ b/spec/lib/gitlab/backend/shell_spec.rb
@@ -5,7 +5,7 @@ describe Gitlab::Shell do
   let(:gitlab_shell) { Gitlab::Shell.new }
 
   before do
-    Project.stub(find: project)
+    allow(Project).to receive(:find).and_return(project)
   end
 
   it { is_expected.to respond_to :add_key }
diff --git a/spec/lib/gitlab/ldap/access_spec.rb b/spec/lib/gitlab/ldap/access_spec.rb
index 038ac7e0d75..c38f212b405 100644
--- a/spec/lib/gitlab/ldap/access_spec.rb
+++ b/spec/lib/gitlab/ldap/access_spec.rb
@@ -8,16 +8,24 @@ describe Gitlab::LDAP::Access do
     subject { access.allowed? }
 
     context 'when the user cannot be found' do
-      before { Gitlab::LDAP::Person.stub(find_by_dn: nil) }
+      before do
+        allow(Gitlab::LDAP::Person).to receive(:find_by_dn).and_return(nil)
+      end
 
       it { is_expected.to be_falsey }
     end
 
     context 'when the user is found' do
-      before { Gitlab::LDAP::Person.stub(find_by_dn: :ldap_user) }
+      before do
+        allow(Gitlab::LDAP::Person).
+          to receive(:find_by_dn).and_return(:ldap_user)
+      end
 
       context 'and the user is disabled via active directory' do
-        before { Gitlab::LDAP::Person.stub(disabled_via_active_directory?: true) }
+        before do
+          allow(Gitlab::LDAP::Person).
+            to receive(:disabled_via_active_directory?).and_return(true)
+        end
 
         it { is_expected.to be_falsey }
 
@@ -30,8 +38,9 @@ describe Gitlab::LDAP::Access do
       context 'and has no disabled flag in active diretory' do
         before do
           user.block
-          
-          Gitlab::LDAP::Person.stub(disabled_via_active_directory?: false)
+
+          allow(Gitlab::LDAP::Person).
+            to receive(:disabled_via_active_directory?).and_return(false)
         end
 
         it { is_expected.to be_truthy }
@@ -39,7 +48,8 @@ describe Gitlab::LDAP::Access do
         context 'when auto-created users are blocked' do
 
           before do
-            Gitlab::LDAP::Config.any_instance.stub(block_auto_created_users: true)
+            allow_any_instance_of(Gitlab::LDAP::Config).
+              to receive(:block_auto_created_users).and_return(true)
           end
 
           it "does not unblock user in GitLab" do
@@ -51,7 +61,8 @@ describe Gitlab::LDAP::Access do
         context "when auto-created users are not blocked" do
 
           before do
-            Gitlab::LDAP::Config.any_instance.stub(block_auto_created_users: false)
+            allow_any_instance_of(Gitlab::LDAP::Config).
+              to receive(:block_auto_created_users).and_return(false)
           end
 
           it "should unblock user in GitLab" do
@@ -63,8 +74,9 @@ describe Gitlab::LDAP::Access do
 
       context 'without ActiveDirectory enabled' do
         before do
-          Gitlab::LDAP::Config.stub(enabled?: true)
-          Gitlab::LDAP::Config.any_instance.stub(active_directory: false)
+          allow(Gitlab::LDAP::Config).to receive(:enabled?).and_return(true)
+          allow_any_instance_of(Gitlab::LDAP::Config).
+            to receive(:active_directory).and_return(false)
         end
 
         it { is_expected.to be_truthy }
diff --git a/spec/lib/gitlab/ldap/adapter_spec.rb b/spec/lib/gitlab/ldap/adapter_spec.rb
index b609e4b38f2..38076602df9 100644
--- a/spec/lib/gitlab/ldap/adapter_spec.rb
+++ b/spec/lib/gitlab/ldap/adapter_spec.rb
@@ -3,27 +3,32 @@ require 'spec_helper'
 describe Gitlab::LDAP::Adapter do
   let(:adapter) { Gitlab::LDAP::Adapter.new 'ldapmain' }
 
-  describe :dn_matches_filter? do
+  describe '#dn_matches_filter?' do
     let(:ldap) { double(:ldap) }
     subject { adapter.dn_matches_filter?(:dn, :filter) }
-    before { adapter.stub(ldap: ldap) }
+    before { allow(adapter).to receive(:ldap).and_return(ldap) }
 
     context "when the search is successful" do
       context "and the result is non-empty" do
-        before { ldap.stub(search: [:foo]) }
+        before { allow(ldap).to receive(:search).and_return([:foo]) }
 
         it { is_expected.to be_truthy }
       end
 
       context "and the result is empty" do
-        before { ldap.stub(search: []) }
+        before { allow(ldap).to receive(:search).and_return([]) }
 
         it { is_expected.to be_falsey }
       end
     end
 
     context "when the search encounters an error" do
-      before { ldap.stub(search: nil, get_operation_result: double(code: 1, message: 'some error')) }
+      before do
+        allow(ldap).to receive_messages(
+          search: nil,
+          get_operation_result: double(code: 1, message: 'some error')
+        )
+      end
 
       it { is_expected.to be_falsey }
     end
diff --git a/spec/lib/gitlab/ldap/authentication_spec.rb b/spec/lib/gitlab/ldap/authentication_spec.rb
index 8afc2b21f46..6e3de914a45 100644
--- a/spec/lib/gitlab/ldap/authentication_spec.rb
+++ b/spec/lib/gitlab/ldap/authentication_spec.rb
@@ -1,53 +1,58 @@
 require 'spec_helper'
 
 describe Gitlab::LDAP::Authentication do
-  let(:klass) { Gitlab::LDAP::Authentication }
-  let(:user) { create(:omniauth_user, extern_uid: dn) }
-  let(:dn) { 'uid=john,ou=people,dc=example,dc=com' }
-  let(:login) { 'john' }
+  let(:user)     { create(:omniauth_user, extern_uid: dn) }
+  let(:dn)       { 'uid=john,ou=people,dc=example,dc=com' }
+  let(:login)    { 'john' }
   let(:password) { 'password' }
 
-  describe :login do
-    let(:adapter) { double :adapter }
+  describe 'login' do
     before do
-      Gitlab::LDAP::Config.stub(enabled?: true)
+      allow(Gitlab::LDAP::Config).to receive(:enabled?).and_return(true)
     end
 
     it "finds the user if authentication is successful" do
-      user
+      expect(user).not_to be_nil
+
       # try only to fake the LDAP call
-      klass.any_instance.stub(adapter: double(:adapter,
-        bind_as: double(:ldap_user, dn: dn)
-      ))
-      expect(klass.login(login, password)).to be_truthy
+      adapter = double('adapter', dn: dn).as_null_object
+      allow_any_instance_of(described_class).
+        to receive(:adapter).and_return(adapter)
+
+      expect(described_class.login(login, password)).to be_truthy
     end
 
     it "is false if the user does not exist" do
       # try only to fake the LDAP call
-      klass.any_instance.stub(adapter: double(:adapter,
-        bind_as: double(:ldap_user, dn: dn)
-      ))
-      expect(klass.login(login, password)).to be_falsey
+      adapter = double('adapter', dn: dn).as_null_object
+      allow_any_instance_of(described_class).
+        to receive(:adapter).and_return(adapter)
+
+      expect(described_class.login(login, password)).to be_falsey
     end
 
     it "is false if authentication fails" do
-      user
+      expect(user).not_to be_nil
+
       # try only to fake the LDAP call
-      klass.any_instance.stub(adapter: double(:adapter, bind_as: nil))
-      expect(klass.login(login, password)).to be_falsey
+      adapter = double('adapter', bind_as: nil).as_null_object
+      allow_any_instance_of(described_class).
+        to receive(:adapter).and_return(adapter)
+
+      expect(described_class.login(login, password)).to be_falsey
     end
 
     it "fails if ldap is disabled" do
-      Gitlab::LDAP::Config.stub(enabled?: false)
-      expect(klass.login(login, password)).to be_falsey
+      allow(Gitlab::LDAP::Config).to receive(:enabled?).and_return(false)
+      expect(described_class.login(login, password)).to be_falsey
     end
 
     it "fails if no login is supplied" do
-      expect(klass.login('', password)).to be_falsey
+      expect(described_class.login('', password)).to be_falsey
     end
 
     it "fails if no password is supplied" do
-      expect(klass.login(login, '')).to be_falsey
+      expect(described_class.login(login, '')).to be_falsey
     end
   end
-end
\ No newline at end of file
+end
diff --git a/spec/lib/gitlab/ldap/user_spec.rb b/spec/lib/gitlab/ldap/user_spec.rb
index 42015c28c81..8689b8c7edd 100644
--- a/spec/lib/gitlab/ldap/user_spec.rb
+++ b/spec/lib/gitlab/ldap/user_spec.rb
@@ -16,24 +16,24 @@ describe Gitlab::LDAP::User do
 
   describe :changed? do
     it "marks existing ldap user as changed" do
-      existing_user = create(:omniauth_user, extern_uid: 'my-uid', provider: 'ldapmain')
+      create(:omniauth_user, extern_uid: 'my-uid', provider: 'ldapmain')
       expect(ldap_user.changed?).to be_truthy
     end
 
     it "marks existing non-ldap user if the email matches as changed" do
-      existing_user = create(:user, email: 'john@example.com')
+      create(:user, email: 'john@example.com')
       expect(ldap_user.changed?).to be_truthy
     end
 
     it "dont marks existing ldap user as changed" do
-      existing_user = create(:omniauth_user, email: 'john@example.com', extern_uid: 'my-uid', provider: 'ldapmain')
+      create(:omniauth_user, email: 'john@example.com', extern_uid: 'my-uid', provider: 'ldapmain')
       expect(ldap_user.changed?).to be_falsey
     end
   end
 
   describe :find_or_create do
     it "finds the user if already existing" do
-      existing_user = create(:omniauth_user, extern_uid: 'my-uid', provider: 'ldapmain')
+      create(:omniauth_user, extern_uid: 'my-uid', provider: 'ldapmain')
 
       expect{ ldap_user.save }.to_not change{ User.count }
     end
@@ -52,11 +52,15 @@ describe Gitlab::LDAP::User do
     end
   end
 
-
   describe 'blocking' do
+    def configure_block(value)
+      allow_any_instance_of(Gitlab::LDAP::Config).
+        to receive(:block_auto_created_users).and_return(value)
+    end
+
     context 'signup' do
       context 'dont block on create' do
-        before { Gitlab::LDAP::Config.any_instance.stub block_auto_created_users: false }
+        before { configure_block(false) }
 
         it do
           ldap_user.save
@@ -66,7 +70,7 @@ describe Gitlab::LDAP::User do
       end
 
       context 'block on create' do
-        before { Gitlab::LDAP::Config.any_instance.stub block_auto_created_users: true }
+        before { configure_block(true) }
 
         it do
           ldap_user.save
@@ -83,7 +87,7 @@ describe Gitlab::LDAP::User do
       end
 
       context 'dont block on create' do
-        before { Gitlab::LDAP::Config.any_instance.stub block_auto_created_users: false }
+        before { configure_block(false) }
 
         it do
           ldap_user.save
@@ -93,7 +97,7 @@ describe Gitlab::LDAP::User do
       end
 
       context 'block on create' do
-        before { Gitlab::LDAP::Config.any_instance.stub block_auto_created_users: true }
+        before { configure_block(true) }
 
         it do
           ldap_user.save
diff --git a/spec/lib/gitlab/upgrader_spec.rb b/spec/lib/gitlab/upgrader_spec.rb
index baa4bd0f28f..8df84665e16 100644
--- a/spec/lib/gitlab/upgrader_spec.rb
+++ b/spec/lib/gitlab/upgrader_spec.rb
@@ -10,14 +10,14 @@ describe Gitlab::Upgrader do
 
   describe 'latest_version?' do
     it 'should be true if newest version' do
-      upgrader.stub(latest_version_raw: current_version)
+      allow(upgrader).to receive(:latest_version_raw).and_return(current_version)
       expect(upgrader.latest_version?).to be_truthy
     end
   end
 
   describe 'latest_version_raw' do
     it 'should be latest version for GitLab 5' do
-      upgrader.stub(current_version_raw: "5.3.0")
+      allow(upgrader).to receive(:current_version_raw).and_return("5.3.0")
       expect(upgrader.latest_version_raw).to eq("v5.4.2")
     end
 
diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb
index 27eb02a870b..e303a97e6b5 100644
--- a/spec/models/commit_spec.rb
+++ b/spec/models/commit_spec.rb
@@ -77,13 +77,13 @@ eos
     let(:other_issue) { create :issue, project: other_project }
 
     it 'detects issues that this commit is marked as closing' do
-      commit.stub(safe_message: "Fixes ##{issue.iid}")
+      allow(commit).to receive(:safe_message).and_return("Fixes ##{issue.iid}")
       expect(commit.closes_issues).to eq([issue])
     end
 
     it 'does not detect issues from other projects' do
       ext_ref = "#{other_project.path_with_namespace}##{other_issue.iid}"
-      commit.stub(safe_message: "Fixes #{ext_ref}")
+      allow(commit).to receive(:safe_message).and_return("Fixes #{ext_ref}")
       expect(commit.closes_issues).to be_empty
     end
   end
@@ -93,7 +93,9 @@ eos
 
     let(:author) { create(:user, email: commit.author_email) }
     let(:backref_text) { "commit #{subject.id}" }
-    let(:set_mentionable_text) { ->(txt){ subject.stub(safe_message: txt) } }
+    let(:set_mentionable_text) do
+      ->(txt) { allow(subject).to receive(:safe_message).and_return(txt) }
+    end
 
     # Include the subject in the repository stub.
     let(:extra_commits) { [subject] }
diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb
index 86c395a8e8e..b6d80451d2e 100644
--- a/spec/models/concerns/issuable_spec.rb
+++ b/spec/models/concerns/issuable_spec.rb
@@ -11,7 +11,10 @@ describe Issue, "Issuable" do
   end
 
   describe "Validation" do
-    before { subject.stub(set_iid: false) }
+    before do
+      allow(subject).to receive(:set_iid).and_return(false)
+    end
+
     it { is_expected.to validate_presence_of(:project) }
     it { is_expected.to validate_presence_of(:iid) }
     it { is_expected.to validate_presence_of(:author) }
diff --git a/spec/models/forked_project_link_spec.rb b/spec/models/forked_project_link_spec.rb
index 7d0ad44a92c..d90fbfe1ea5 100644
--- a/spec/models/forked_project_link_spec.rb
+++ b/spec/models/forked_project_link_spec.rb
@@ -58,10 +58,10 @@ describe :forked_from_project do
 end
 
 def fork_project(from_project, user)
-  context = Projects::ForkService.new(from_project, user)
-  shell = double("gitlab_shell")
-  shell.stub(fork_repository: true)
-  context.stub(gitlab_shell: shell)
-  context.execute
-end
+  shell = double('gitlab_shell', fork_repository: true)
+
+  service = Projects::ForkService.new(from_project, user)
+  allow(service).to receive(:gitlab_shell).and_return(shell)
 
+  service.execute
+end
diff --git a/spec/models/members/group_member_spec.rb b/spec/models/members/group_member_spec.rb
index 7c10c9f0f48..652026729bb 100644
--- a/spec/models/members/group_member_spec.rb
+++ b/spec/models/members/group_member_spec.rb
@@ -24,8 +24,11 @@ describe GroupMember do
     describe "#after_create" do
       it "should send email to user" do
         membership = build(:group_member)
-        membership.stub(notification_service: double('NotificationService').as_null_object)
+
+        allow(membership).to receive(:notification_service).
+          and_return(double('NotificationService').as_null_object)
         expect(membership).to receive(:notification_service)
+
         membership.save
       end
     end
@@ -33,7 +36,8 @@ describe GroupMember do
     describe "#after_update" do
       before do
         @group_member = create :group_member
-        @group_member.stub(notification_service: double('NotificationService').as_null_object)
+        allow(@group_member).to receive(:notification_service).
+          and_return(double('NotificationService').as_null_object)
       end
 
       it "should send email to user" do
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index 0465aa34843..73536b6ae96 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -111,17 +111,18 @@ describe MergeRequest do
     let(:commit2) { double('commit2', closes_issues: [issue1]) }
 
     before do
-      subject.stub(commits: [commit0, commit1, commit2])
+      allow(subject).to receive(:commits).and_return([commit0, commit1, commit2])
     end
 
     it 'accesses the set of issues that will be closed on acceptance' do
-      subject.project.stub(default_branch: subject.target_branch)
+      allow(subject.project).to receive(:default_branch).
+        and_return(subject.target_branch)
 
       expect(subject.closes_issues).to eq([issue0, issue1].sort_by(&:id))
     end
 
     it 'only lists issues as to be closed if it targets the default branch' do
-      subject.project.stub(default_branch: 'master')
+      allow(subject.project).to receive(:default_branch).and_return('master')
       subject.target_branch = 'something-else'
 
       expect(subject.closes_issues).to be_empty
@@ -130,7 +131,8 @@ describe MergeRequest do
     it 'detects issues mentioned in the description' do
       issue2 = create(:issue, project: subject.project)
       subject.description = "Closes #{issue2.to_reference}"
-      subject.project.stub(default_branch: subject.target_branch)
+      allow(subject.project).to receive(:default_branch).
+        and_return(subject.target_branch)
 
       expect(subject.closes_issues).to include(issue2)
     end
diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb
index eb73aa763fc..36352e1ecce 100644
--- a/spec/models/milestone_spec.rb
+++ b/spec/models/milestone_spec.rb
@@ -21,11 +21,11 @@ describe Milestone do
     it { is_expected.to have_many(:issues) }
   end
 
-  describe "Mass assignment" do
-  end
-
   describe "Validation" do
-    before { subject.stub(set_iid: false) }
+    before do
+      allow(subject).to receive(:set_iid).and_return(false)
+    end
+
     it { is_expected.to validate_presence_of(:title) }
     it { is_expected.to validate_presence_of(:project) }
   end
@@ -66,7 +66,7 @@ describe Milestone do
   describe :expired? do
     context "expired" do
       before do
-        milestone.stub(due_date: Date.today.prev_year)
+        allow(milestone).to receive(:due_date).and_return(Date.today.prev_year)
       end
 
       it { expect(milestone.expired?).to be_truthy }
@@ -74,7 +74,7 @@ describe Milestone do
 
     context "not expired" do
       before do
-        milestone.stub(due_date: Date.today.next_year)
+        allow(milestone).to receive(:due_date).and_return(Date.today.next_year)
       end
 
       it { expect(milestone.expired?).to be_falsey }
@@ -83,7 +83,7 @@ describe Milestone do
 
   describe :percent_complete do
     before do
-      milestone.stub(
+      allow(milestone).to receive_messages(
         closed_items_count: 3,
         total_items_count: 4
       )
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index e87432fdf62..1d72a9503ae 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -53,7 +53,7 @@ describe Namespace do
   describe :move_dir do
     before do
       @namespace = create :namespace
-      @namespace.stub(path_changed?: true)
+      allow(@namespace).to receive(:path_changed?).and_return(true)
     end
 
     it "should raise error when directory exists" do
@@ -62,8 +62,8 @@ describe Namespace do
 
     it "should move dir if path changed" do
       new_path = @namespace.path + "_new"
-      @namespace.stub(path_was: @namespace.path)
-      @namespace.stub(path: new_path)
+      allow(@namespace).to receive(:path_was).and_return(@namespace.path)
+      allow(@namespace).to receive(:path).and_return(new_path)
       expect(@namespace.move_dir).to be_truthy
     end
   end
diff --git a/spec/models/project_services/asana_service_spec.rb b/spec/models/project_services/asana_service_spec.rb
index cc1f99e0c72..64bb92fba95 100644
--- a/spec/models/project_services/asana_service_spec.rb
+++ b/spec/models/project_services/asana_service_spec.rb
@@ -42,7 +42,7 @@ describe AsanaService, models: true do
 
     before do
       @asana = AsanaService.new
-      @asana.stub(
+      allow(@asana).to receive_messages(
         project: project,
         project_id: project.id,
         service_hook: true,
diff --git a/spec/models/project_services/assembla_service_spec.rb b/spec/models/project_services/assembla_service_spec.rb
index 9aee754dd63..17e9361dd5c 100644
--- a/spec/models/project_services/assembla_service_spec.rb
+++ b/spec/models/project_services/assembla_service_spec.rb
@@ -32,7 +32,7 @@ describe AssemblaService, models: true do
 
     before do
       @assembla_service = AssemblaService.new
-      @assembla_service.stub(
+      allow(@assembla_service).to receive_messages(
         project_id: project.id,
         project: project,
         service_hook: true,
diff --git a/spec/models/project_services/buildkite_service_spec.rb b/spec/models/project_services/buildkite_service_spec.rb
index 6db54243eac..9445d96c337 100644
--- a/spec/models/project_services/buildkite_service_spec.rb
+++ b/spec/models/project_services/buildkite_service_spec.rb
@@ -29,12 +29,10 @@ describe BuildkiteService do
   describe 'commits methods' do
     before do
       @project = Project.new
-      @project.stub(
-        default_branch: 'default-brancho'
-      )
+      allow(@project).to receive(:default_branch).and_return('default-brancho')
 
       @service = BuildkiteService.new
-      @service.stub(
+      allow(@service).to receive_messages(
         project: @project,
         service_hook: true,
         project_url: 'https://buildkite.com/account-name/example-project',
diff --git a/spec/models/project_services/flowdock_service_spec.rb b/spec/models/project_services/flowdock_service_spec.rb
index e6e8fbba6a7..7e5b15cb09e 100644
--- a/spec/models/project_services/flowdock_service_spec.rb
+++ b/spec/models/project_services/flowdock_service_spec.rb
@@ -32,7 +32,7 @@ describe FlowdockService do
 
     before do
       @flowdock_service = FlowdockService.new
-      @flowdock_service.stub(
+      allow(@flowdock_service).to receive_messages(
         project_id: project.id,
         project: project,
         service_hook: true,
diff --git a/spec/models/project_services/gemnasium_service_spec.rb b/spec/models/project_services/gemnasium_service_spec.rb
index 1a7765e5c2a..9e156472316 100644
--- a/spec/models/project_services/gemnasium_service_spec.rb
+++ b/spec/models/project_services/gemnasium_service_spec.rb
@@ -32,7 +32,7 @@ describe GemnasiumService do
 
     before do
       @gemnasium_service = GemnasiumService.new
-      @gemnasium_service.stub(
+      allow(@gemnasium_service).to receive_messages(
         project_id: project.id,
         project: project,
         service_hook: true,
diff --git a/spec/models/project_services/gitlab_ci_service_spec.rb b/spec/models/project_services/gitlab_ci_service_spec.rb
index c92cf3cdae6..fedc37c9b94 100644
--- a/spec/models/project_services/gitlab_ci_service_spec.rb
+++ b/spec/models/project_services/gitlab_ci_service_spec.rb
@@ -21,18 +21,15 @@
 require 'spec_helper'
 
 describe GitlabCiService do
-  describe "Associations" do
-    it { is_expected.to belong_to :project }
-    it { is_expected.to have_one :service_hook }
-  end
-
-  describe "Mass assignment" do
+  describe 'associations' do
+    it { is_expected.to belong_to(:project) }
+    it { is_expected.to have_one(:service_hook) }
   end
 
   describe 'commits methods' do
     before do
       @service = GitlabCiService.new
-      @service.stub(
+      allow(@service).to receive_messages(
         service_hook: true,
         project_url: 'http://ci.gitlab.org/projects/2',
         token: 'verySecret'
@@ -56,9 +53,9 @@ describe GitlabCiService do
 
       it "calls ci_yaml_file" do
         service_hook = double
-        service_hook.should_receive(:execute)
-        @service.should_receive(:service_hook).and_return(service_hook)
-        @service.should_receive(:ci_yaml_file).with(push_sample_data[:checkout_sha])
+        expect(service_hook).to receive(:execute)
+        expect(@service).to receive(:service_hook).and_return(service_hook)
+        expect(@service).to receive(:ci_yaml_file).with(push_sample_data[:checkout_sha])
 
         @service.execute(push_sample_data)
       end
@@ -72,7 +69,7 @@ describe GitlabCiService do
       @user = create(:user)
 
       @service = GitlabCiService.new
-      @service.stub(
+      allow(@service).to receive_messages(
         service_hook: true,
         project_url: 'http://ci.gitlab.org/projects/2',
         token: 'verySecret',
diff --git a/spec/models/project_services/hipchat_service_spec.rb b/spec/models/project_services/hipchat_service_spec.rb
index e88615e1a2e..8ed03dd1da8 100644
--- a/spec/models/project_services/hipchat_service_spec.rb
+++ b/spec/models/project_services/hipchat_service_spec.rb
@@ -37,7 +37,7 @@ describe HipchatService do
     let(:push_sample_data) { Gitlab::PushDataBuilder.build_sample(project, user) }
 
     before(:each) do
-      hipchat.stub(
+      allow(hipchat).to receive_messages(
         project_id: project.id,
         project: project,
         room: 123456,
@@ -48,7 +48,7 @@ describe HipchatService do
     end
 
     it 'should use v1 if version is provided' do
-      hipchat.stub(api_version: 'v1')
+      allow(hipchat).to receive(:api_version).and_return('v1')
       expect(HipChat::Client).to receive(:new).
                                      with(token,
                                           api_version: 'v1',
@@ -59,7 +59,7 @@ describe HipchatService do
     end
 
     it 'should use v2 as the version when nothing is provided' do
-      hipchat.stub(api_version: '')
+      allow(hipchat).to receive(:api_version).and_return('')
       expect(HipChat::Client).to receive(:new).
                                      with(token,
                                           api_version: 'v2',
@@ -245,12 +245,12 @@ describe HipchatService do
       end
 
       it "should set notfiy to true" do
-        hipchat.stub(notify: '1')
+        allow(hipchat).to receive(:notify).and_return('1')
         expect(hipchat.send(:message_options)).to eq({notify: true, color: 'yellow'})
       end
 
       it "should set the color" do
-        hipchat.stub(color: 'red')
+        allow(hipchat).to receive(:color).and_return('red')
         expect(hipchat.send(:message_options)).to eq({notify: false, color: 'red'})
       end
     end
diff --git a/spec/models/project_services/irker_service_spec.rb b/spec/models/project_services/irker_service_spec.rb
index 4c437aab12b..37690434ec8 100644
--- a/spec/models/project_services/irker_service_spec.rb
+++ b/spec/models/project_services/irker_service_spec.rb
@@ -24,8 +24,8 @@ require 'json'
 
 describe IrkerService do
   describe 'Associations' do
-    it { should belong_to :project }
-    it { should have_one :service_hook }
+    it { is_expected.to belong_to :project }
+    it { is_expected.to have_one :service_hook }
   end
 
   describe 'Validations' do
@@ -66,7 +66,7 @@ describe IrkerService do
     let(:colorize_messages) { '1' }
 
     before do
-      irker.stub(
+      allow(irker).to receive_messages(
         active: true,
         project: project,
         project_id: project.id,
diff --git a/spec/models/project_services/pushover_service_spec.rb b/spec/models/project_services/pushover_service_spec.rb
index 5f93703b50a..ac10ffbd39b 100644
--- a/spec/models/project_services/pushover_service_spec.rb
+++ b/spec/models/project_services/pushover_service_spec.rb
@@ -52,7 +52,7 @@ describe PushoverService do
     let(:api_url) { 'https://api.pushover.net/1/messages.json' }
 
     before do
-      pushover.stub(
+      allow(pushover).to receive_messages(
         project: project,
         project_id: project.id,
         service_hook: true,
diff --git a/spec/models/project_services/slack_service_spec.rb b/spec/models/project_services/slack_service_spec.rb
index e9105677d23..69466b11f09 100644
--- a/spec/models/project_services/slack_service_spec.rb
+++ b/spec/models/project_services/slack_service_spec.rb
@@ -46,7 +46,7 @@ describe SlackService do
     let(:channel) { 'slack_channel' }
 
     before do
-      slack.stub(
+      allow(slack).to receive_messages(
         project: project,
         project_id: project.id,
         service_hook: true,
@@ -96,7 +96,7 @@ describe SlackService do
     end
 
     it 'should use the username as an option for slack when configured' do
-      slack.stub(username: username)
+      allow(slack).to receive(:username).and_return(username)
       expect(Slack::Notifier).to receive(:new).
        with(webhook_url, username: username).
        and_return(
@@ -106,7 +106,7 @@ describe SlackService do
     end
 
     it 'should use the channel as an option when it is configured' do
-      slack.stub(channel: channel)
+      allow(slack).to receive(:channel).and_return(channel)
       expect(Slack::Notifier).to receive(:new).
         with(webhook_url, channel: channel).
         and_return(
@@ -130,11 +130,11 @@ describe SlackService do
     let(:webhook_url) { 'https://hooks.slack.com/services/SVRWFV0VVAR97N/B02R25XN3/ZBqu7xMupaEEICInN685' }
 
     before do
-      slack.stub(
-          project: project,
-          project_id: project.id,
-          service_hook: true,
-          webhook: webhook_url
+      allow(slack).to receive_messages(
+        project: project,
+        project_id: project.id,
+        service_hook: true,
+        webhook: webhook_url
       )
 
       WebMock.stub_request(:post, webhook_url)
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 87c67fa32c3..63091e913ff 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -127,7 +127,7 @@ describe Project do
 
     describe 'last_activity' do
       it 'should alias last_activity to last_event' do
-        project.stub(last_event: last_event)
+        allow(project).to receive(:last_event).and_return(last_event)
         expect(project.last_activity).to eq(last_event)
       end
     end
diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb
index 5d4827ce92a..cb633216d3b 100644
--- a/spec/models/service_spec.rb
+++ b/spec/models/service_spec.rb
@@ -39,9 +39,7 @@ describe Service do
       let (:project) { create :project }
 
       before do
-        @service.stub(
-          project: project
-        )
+        allow(@service).to receive(:project).and_return(project)
         @testable = @service.can_test?
       end
 
@@ -54,9 +52,7 @@ describe Service do
       let (:project) { create :project }
 
       before do
-        @service.stub(
-          project: project
-        )
+        allow(@service).to receive(:project).and_return(project)
         @testable = @service.can_test?
       end
 
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index afdd9f71af2..9f7c83f3476 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -458,21 +458,25 @@ describe User do
 
     it 'is false when LDAP is disabled' do
       # Create a condition which would otherwise cause 'true' to be returned
-      user.stub(ldap_user?: true)
+      allow(user).to receive(:ldap_user?).and_return(true)
       user.last_credential_check_at = nil
       expect(user.requires_ldap_check?).to be_falsey
     end
 
     context 'when LDAP is enabled' do
-      before { Gitlab.config.ldap.stub(enabled: true) }
+      before do
+        allow(Gitlab.config.ldap).to receive(:enabled).and_return(true)
+      end
 
       it 'is false for non-LDAP users' do
-        user.stub(ldap_user?: false)
+        allow(user).to receive(:ldap_user?).and_return(false)
         expect(user.requires_ldap_check?).to be_falsey
       end
 
       context 'and when the user is an LDAP user' do
-        before { user.stub(ldap_user?: true) }
+        before do
+          allow(user).to receive(:ldap_user?).and_return(true)
+        end
 
         it 'is true when the user has never had an LDAP check before' do
           user.last_credential_check_at = nil
diff --git a/spec/requests/api/api_helpers_spec.rb b/spec/requests/api/api_helpers_spec.rb
index 20cb30a39bb..9a4102c752d 100644
--- a/spec/requests/api/api_helpers_spec.rb
+++ b/spec/requests/api/api_helpers_spec.rb
@@ -47,7 +47,7 @@ describe API, api: true do
 
     it "should return nil for a user without access" do
       env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = user.private_token
-      Gitlab::UserAccess.stub(allowed?: false)
+      allow(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
       expect(current_user).to be_nil
     end
 
diff --git a/spec/requests/api/branches_spec.rb b/spec/requests/api/branches_spec.rb
index f40d68b75a4..cb6e5e89625 100644
--- a/spec/requests/api/branches_spec.rb
+++ b/spec/requests/api/branches_spec.rb
@@ -141,7 +141,9 @@ describe API::API, api: true  do
   end
 
   describe "DELETE /projects/:id/repository/branches/:branch" do
-    before { Repository.any_instance.stub(rm_branch: true) }
+    before do
+      allow_any_instance_of(Repository).to receive(:rm_branch).and_return(true)
+    end
 
     it "should remove branch" do
       delete api("/projects/#{project.id}/repository/branches/#{branch_name}", user)
diff --git a/spec/requests/api/files_spec.rb b/spec/requests/api/files_spec.rb
index 15f547e128d..8a6b4b8a170 100644
--- a/spec/requests/api/files_spec.rb
+++ b/spec/requests/api/files_spec.rb
@@ -60,9 +60,8 @@ describe API::API, api: true  do
     end
 
     it "should return a 400 if editor fails to create file" do
-      Repository.any_instance.stub(
-        commit_file: false,
-      )
+      allow_any_instance_of(Repository).to receive(:commit_file).
+        and_return(false)
 
       post api("/projects/#{project.id}/repository/files", user), valid_params
       expect(response.status).to eq(400)
@@ -112,9 +111,7 @@ describe API::API, api: true  do
     end
 
     it "should return a 400 if satellite fails to create file" do
-      Repository.any_instance.stub(
-        remove_file: false,
-      )
+      allow_any_instance_of(Repository).to receive(:remove_file).and_return(false)
 
       delete api("/projects/#{project.id}/repository/files", user), valid_params
       expect(response.status).to eq(400)
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb
index 62b42d63fc2..56aa97adcc3 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/spec/requests/api/groups_spec.rb
@@ -167,7 +167,8 @@ describe API::API, api: true  do
   describe "POST /groups/:id/projects/:project_id" do
     let(:project) { create(:project) }
     before(:each) do
-      Projects::TransferService.any_instance.stub(execute: true)
+      allow_any_instance_of(Projects::TransferService).
+        to receive(:execute).and_return(true)
       allow(Project).to receive(:find).and_return(project)
     end
 
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb
index 38c67bc9971..70dd8049b12 100644
--- a/spec/requests/api/merge_requests_spec.rb
+++ b/spec/requests/api/merge_requests_spec.rb
@@ -301,14 +301,20 @@ describe API::API, api: true  do
 
   describe "PUT /projects/:id/merge_request/:merge_request_id/merge" do
     it "should return merge_request in case of success" do
-      MergeRequest.any_instance.stub(can_be_merged?: true, automerge!: true)
+      allow_any_instance_of(MergeRequest).
+        to receive_messages(can_be_merged?: true, automerge!: true)
+
       put api("/projects/#{project.id}/merge_request/#{merge_request.id}/merge", user)
+
       expect(response.status).to eq(200)
     end
 
     it "should return 405 if branch can't be merged" do
-      MergeRequest.any_instance.stub(can_be_merged?: false)
+      allow_any_instance_of(MergeRequest).
+        to receive(:can_be_merged?).and_return(false)
+
       put api("/projects/#{project.id}/merge_request/#{merge_request.id}/merge", user)
+
       expect(response.status).to eq(405)
       expect(json_response['message']).to eq('Branch cannot be merged')
     end
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 8fb1509c8b2..401b176486d 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -121,15 +121,13 @@ describe API::API, api: true  do
         get api('/projects/all', admin)
         expect(response.status).to eq(200)
         expect(json_response).to be_an Array
-        project_name = project.name
 
-        expect(json_response.detect {
-          |project| project['name'] == project_name
-        }['name']).to eq(project_name)
-
-        expect(json_response.detect {
-          |project| project['owner']['username'] == user.username
-        }['owner']['username']).to eq(user.username)
+        expect(json_response).to satisfy do |response|
+          response.one? do |entry|
+            entry['name'] == project.name &&
+            entry['owner']['username'] == user.username
+          end
+        end
       end
     end
   end
@@ -138,9 +136,8 @@ describe API::API, api: true  do
     context 'maximum number of projects reached' do
       it 'should not create new project and respond with 403' do
         allow_any_instance_of(User).to receive(:projects_limit_left).and_return(0)
-        expect {
-          post api('/projects', user2), name: 'foo'
-        }.to change {Project.count}.by(0)
+        expect { post api('/projects', user2), name: 'foo' }.
+          to change {Project.count}.by(0)
         expect(response.status).to eq(403)
       end
     end
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index d0941fa2e07..648b2afd7fb 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -124,7 +124,8 @@ describe GitPushService do
       end
 
       it "when pushing a branch for the first time with default branch protection disabled" do
-        ApplicationSetting.any_instance.stub(default_branch_protection: 0)
+        allow_any_instance_of(ApplicationSetting).
+          to receive(:default_branch_protection).and_return(0)
 
         expect(project).to receive(:execute_hooks)
         expect(project.default_branch).to eq("master")
@@ -133,7 +134,8 @@ describe GitPushService do
       end
 
       it "when pushing a branch for the first time with default branch protection set to 'developers can push'" do
-        ApplicationSetting.any_instance.stub(default_branch_protection: 1)
+        allow_any_instance_of(ApplicationSetting).
+          to receive(:default_branch_protection).and_return(1)
 
         expect(project).to receive(:execute_hooks)
         expect(project.default_branch).to eq("master")
@@ -154,13 +156,13 @@ describe GitPushService do
     let(:commit) { project.commit }
 
     before do
-      commit.stub({
+      allow(commit).to receive_messages(
         safe_message: "this commit \n mentions ##{issue.id}",
         references: [issue],
         author_name: commit_author.name,
         author_email: commit_author.email
-      })
-      project.repository.stub(commits_between: [commit])
+      )
+      allow(project.repository).to receive(:commits_between).and_return([commit])
     end
 
     it "creates a note if a pushed commit mentions an issue" do
@@ -178,7 +180,10 @@ describe GitPushService do
     end
 
     it "defaults to the pushing user if the commit's author is not known" do
-      commit.stub(author_name: 'unknown name', author_email: 'unknown@email.com')
+      allow(commit).to receive_messages(
+        author_name: 'unknown name',
+        author_email: 'unknown@email.com'
+      )
       expect(Note).to receive(:create_cross_reference_note).with(issue, commit, user)
 
       service.execute(project, user, @oldrev, @newrev, @ref)
@@ -201,14 +206,15 @@ describe GitPushService do
     let(:closing_commit) { project.commit }
 
     before do
-      closing_commit.stub({
+      allow(closing_commit).to receive_messages(
         issue_closing_regex: /^([Cc]loses|[Ff]ixes) #\d+/,
         safe_message: "this is some work.\n\ncloses ##{issue.iid}",
         author_name: commit_author.name,
         author_email: commit_author.email
-      })
+      )
 
-      project.repository.stub(commits_between: [closing_commit])
+      allow(project.repository).to receive(:commits_between).
+        and_return([closing_commit])
     end
 
     it "closes issues with commit messages" do
@@ -224,7 +230,7 @@ describe GitPushService do
     end
 
     it "doesn't close issues when pushed to non-default branches" do
-      project.stub(default_branch: 'durf')
+      allow(project).to receive(:default_branch).and_return('durf')
 
       # The push still shouldn't create cross-reference notes.
       expect {
diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb
index 6d4a8067910..8bdd6b43cdd 100644
--- a/spec/support/test_env.rb
+++ b/spec/support/test_env.rb
@@ -41,11 +41,13 @@ module TestEnv
   end
 
   def disable_mailer
-    NotificationService.any_instance.stub(mailer: double.as_null_object)
+    allow_any_instance_of(NotificationService).to receive(:mailer).
+      and_return(double.as_null_object)
   end
 
   def enable_mailer
-    allow_any_instance_of(NotificationService).to receive(:mailer).and_call_original
+    allow_any_instance_of(NotificationService).to receive(:mailer).
+      and_call_original
   end
 
   # Clean /tmp/tests
diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb
index a59f74c2121..4ee3841559c 100644
--- a/spec/tasks/gitlab/backup_rake_spec.rb
+++ b/spec/tasks/gitlab/backup_rake_spec.rb
@@ -23,30 +23,33 @@ describe 'gitlab:app namespace rake task' do
 
     context 'gitlab version' do
       before do
-        Dir.stub glob: []
-        allow(Dir).to receive :chdir
-        File.stub exists?: true
-        Kernel.stub system: true
-        FileUtils.stub cp_r: true
-        FileUtils.stub mv: true
-        Rake::Task["gitlab:shell:setup"].stub invoke: true
+        allow(Dir).to receive(:glob).and_return([])
+        allow(Dir).to receive(:chdir)
+        allow(File).to receive(:exists?).and_return(true)
+        allow(Kernel).to receive(:system).and_return(true)
+        allow(FileUtils).to receive(:cp_r).and_return(true)
+        allow(FileUtils).to receive(:mv).and_return(true)
+        allow(Rake::Task["gitlab:shell:setup"]).
+          to receive(:invoke).and_return(true)
       end
 
       let(:gitlab_version) { Gitlab::VERSION }
 
       it 'should fail on mismatch' do
-        YAML.stub load_file: {gitlab_version: "not #{gitlab_version}" }
-        expect { run_rake_task('gitlab:backup:restore') }.to(
-          raise_error SystemExit
-        )
+        allow(YAML).to receive(:load_file).
+          and_return({gitlab_version: "not #{gitlab_version}" })
+
+        expect { run_rake_task('gitlab:backup:restore') }.
+          to raise_error(SystemExit)
       end
 
       it 'should invoke restoration on mach' do
-        YAML.stub load_file: {gitlab_version: gitlab_version}
-        expect(Rake::Task["gitlab:backup:db:restore"]).to receive :invoke
-        expect(Rake::Task["gitlab:backup:repo:restore"]).to receive :invoke
-        expect(Rake::Task["gitlab:shell:setup"]).to receive :invoke
-        expect { run_rake_task('gitlab:backup:restore') }.to_not raise_error
+        allow(YAML).to receive(:load_file).
+          and_return({gitlab_version: gitlab_version})
+        expect(Rake::Task["gitlab:backup:db:restore"]).to receive(:invoke)
+        expect(Rake::Task["gitlab:backup:repo:restore"]).to receive(:invoke)
+        expect(Rake::Task["gitlab:shell:setup"]).to receive(:invoke)
+        expect { run_rake_task('gitlab:backup:restore') }.not_to raise_error
       end
     end
 
@@ -140,7 +143,8 @@ describe 'gitlab:app namespace rake task' do
     end
 
     it 'does not invoke repositories restore' do
-      Rake::Task["gitlab:shell:setup"].stub invoke: true
+      allow(Rake::Task["gitlab:shell:setup"]).
+        to receive(:invoke).and_return(true)
       allow($stdout).to receive :write
 
       expect(Rake::Task["gitlab:backup:db:restore"]).to receive :invoke
diff --git a/spec/workers/post_receive_spec.rb b/spec/workers/post_receive_spec.rb
index df1a2b84a53..46eae9ab081 100644
--- a/spec/workers/post_receive_spec.rb
+++ b/spec/workers/post_receive_spec.rb
@@ -30,7 +30,7 @@ describe PostReceive do
     end
 
     it "asks the project to trigger all hooks" do
-      Project.stub(find_with_namespace: project)
+      allow(Project).to receive(:find_with_namespace).and_return(project)
       expect(project).to receive(:execute_hooks).twice
       expect(project).to receive(:execute_services).twice
       expect(project).to receive(:update_merge_requests)
-- 
GitLab