From de123aba96869395eb4878d00947fcb35f27306a Mon Sep 17 00:00:00 2001
From: Siddharth Asthana <siddharthasthana31@gmail.com>
Date: Fri, 3 Dec 2021 22:35:30 +0530
Subject: [PATCH] Fix Rails/SaveBang offenses

Changelog: other
EE: true
---
 .rubocop_todo/rails/save_bang.yml             |  9 --------
 ee/spec/lib/gitlab/auth/ldap/access_spec.rb   |  8 +++----
 ee/spec/lib/gitlab/auth/o_auth/user_spec.rb   |  2 +-
 ee/spec/lib/gitlab/auth/saml/user_spec.rb     | 22 +++++++++----------
 .../lib/gitlab/elastic/search_results_spec.rb |  4 ++--
 ee/spec/lib/gitlab/geo_spec.rb                |  2 +-
 ee/spec/lib/gitlab/git_access_spec.rb         |  6 ++---
 .../group/relation_factory_spec.rb            |  2 +-
 ee/spec/lib/gitlab/mirror_spec.rb             |  2 +-
 9 files changed, 24 insertions(+), 33 deletions(-)

diff --git a/.rubocop_todo/rails/save_bang.yml b/.rubocop_todo/rails/save_bang.yml
index f83bb1fddef01..e3d97a45afdba 100644
--- a/.rubocop_todo/rails/save_bang.yml
+++ b/.rubocop_todo/rails/save_bang.yml
@@ -2,15 +2,6 @@
 Rails/SaveBang:
   Exclude:
   - ee/spec/lib/analytics/merge_request_metrics_calculator_spec.rb
-  - ee/spec/lib/gitlab/auth/ldap/access_spec.rb
-  - ee/spec/lib/gitlab/auth/o_auth/user_spec.rb
-  - ee/spec/lib/gitlab/auth/saml/user_spec.rb
-  - ee/spec/lib/gitlab/elastic/search_results_spec.rb
-  - ee/spec/lib/gitlab/email/handler/ee/service_desk_handler_spec.rb
-  - ee/spec/lib/gitlab/geo_spec.rb
-  - ee/spec/lib/gitlab/git_access_spec.rb
-  - ee/spec/lib/gitlab/import_export/group/relation_factory_spec.rb
-  - ee/spec/lib/gitlab/mirror_spec.rb
   - ee/spec/models/application_setting_spec.rb
   - ee/spec/models/approval_merge_request_rule_spec.rb
   - ee/spec/models/approval_project_rule_spec.rb
diff --git a/ee/spec/lib/gitlab/auth/ldap/access_spec.rb b/ee/spec/lib/gitlab/auth/ldap/access_spec.rb
index 6520e00aef934..feabdcf5ef1fc 100644
--- a/ee/spec/lib/gitlab/auth/ldap/access_spec.rb
+++ b/ee/spec/lib/gitlab/auth/ldap/access_spec.rb
@@ -262,7 +262,7 @@
         it 'does not performs the membership update for existing users' do
           user.created_at = Time.now - 10.minutes
           user.last_credential_check_at = Time.now
-          user.save
+          user.save!
 
           expect(LdapGroupLink).not_to receive(:where)
           expect(LdapGroupSyncWorker).not_to receive(:perform_async)
@@ -321,7 +321,7 @@
 
       context 'user has at least one LDAPKey' do
         before do
-          user.keys.ldap.create key: ssh_key, title: 'to be removed'
+          user.keys.ldap.create! key: ssh_key, title: 'to be removed'
         end
 
         it 'removes a SSH key if it is no longer in LDAP' do
@@ -356,7 +356,7 @@
 
       it 'updates existing Kerberos identity in GitLab if Active Directory has a different one' do
         allow_any_instance_of(EE::Gitlab::Auth::Ldap::Person).to receive_messages(kerberos_principal: 'otherlogin@BAR.COM')
-        user.identities.build(provider: 'kerberos', extern_uid: 'mylogin@FOO.COM').save
+        user.identities.build(provider: 'kerberos', extern_uid: 'mylogin@FOO.COM').save!
 
         expect { access.update_user }.not_to change(user.identities.where(provider: 'kerberos'), :count)
         expect(user.identities.where(provider: 'kerberos').last.extern_uid).to eq('otherlogin@BAR.COM')
@@ -364,7 +364,7 @@
 
       it 'does not remove Kerberos identities from GitLab if they are none in the LDAP provider' do
         allow_any_instance_of(EE::Gitlab::Auth::Ldap::Person).to receive_messages(kerberos_principal: nil)
-        user.identities.build(provider: 'kerberos', extern_uid: 'otherlogin@BAR.COM').save
+        user.identities.build(provider: 'kerberos', extern_uid: 'otherlogin@BAR.COM').save!
 
         expect { access.update_user }.not_to change(user.identities.where(provider: 'kerberos'), :count)
         expect(user.identities.where(provider: 'kerberos').last.extern_uid).to eq('otherlogin@BAR.COM')
diff --git a/ee/spec/lib/gitlab/auth/o_auth/user_spec.rb b/ee/spec/lib/gitlab/auth/o_auth/user_spec.rb
index 9934436f9162a..608eaeea9b4bb 100644
--- a/ee/spec/lib/gitlab/auth/o_auth/user_spec.rb
+++ b/ee/spec/lib/gitlab/auth/o_auth/user_spec.rb
@@ -27,7 +27,7 @@
 
       stub_ldap_person_find_by_uid(uid, ldap_entry)
 
-      oauth_user.save
+      oauth_user.save # rubocop:disable Rails/SaveBang
     end
 
     it 'links the LDAP person to the GitLab user' do
diff --git a/ee/spec/lib/gitlab/auth/saml/user_spec.rb b/ee/spec/lib/gitlab/auth/saml/user_spec.rb
index f46798ea4f3ed..4fac2fc01beab 100644
--- a/ee/spec/lib/gitlab/auth/saml/user_spec.rb
+++ b/ee/spec/lib/gitlab/auth/saml/user_spec.rb
@@ -50,7 +50,7 @@ def stub_saml_group_config(type, groups)
         %w(admin auditor).each do |group_type|
           it "marks the user as #{group_type} when the user is in the configured group" do
             stub_saml_group_config(group_type, %w(Developers))
-            saml_user.save
+            saml_user.save # rubocop:disable Rails/SaveBang
 
             expect(gl_user).to be_valid
             expect(gl_user.public_send(group_type)).to be_truthy
@@ -58,7 +58,7 @@ def stub_saml_group_config(type, groups)
 
           it "does not mark the user as #{group_type} when the user is not in the configured group" do
             stub_saml_group_config(group_type, %w(Admin))
-            saml_user.save
+            saml_user.save # rubocop:disable Rails/SaveBang
 
             expect(gl_user).to be_valid
             expect(gl_user.public_send(group_type)).to be_falsey
@@ -67,7 +67,7 @@ def stub_saml_group_config(type, groups)
           it "demotes from #{group_type} if not in the configured group" do
             create(:user, email: 'john@mail.com', username: 'john').update_attribute(group_type, true)
             stub_saml_group_config(group_type, %w(Admin))
-            saml_user.save
+            saml_user.save # rubocop:disable Rails/SaveBang
 
             expect(gl_user).to be_valid
             expect(gl_user.public_send(group_type)).to be_falsey
@@ -76,14 +76,14 @@ def stub_saml_group_config(type, groups)
           it "does not demote from #{group_type} if not configured" do
             create(:user, email: 'john@mail.com', username: 'john').update_attribute(group_type, true)
             stub_saml_group_config(group_type, [])
-            saml_user.save
+            saml_user.save # rubocop:disable Rails/SaveBang
 
             expect(gl_user).to be_valid
             expect(gl_user.public_send(group_type)).to be_truthy
           end
 
           it "skips #{group_type} if not configured" do
-            saml_user.save
+            saml_user.save # rubocop:disable Rails/SaveBang
 
             expect(gl_user).to be_valid
             expect(gl_user.public_send(group_type)).to be_falsey
@@ -96,7 +96,7 @@ def stub_saml_group_config(type, groups)
       context 'required groups' do
         context 'not defined' do
           it 'lets anyone in' do
-            saml_user.save
+            saml_user.save # rubocop:disable Rails/SaveBang
 
             expect(gl_user).to be_valid
           end
@@ -109,21 +109,21 @@ def stub_saml_group_config(type, groups)
 
           it 'lets members in' do
             stub_saml_required_group_config(%w(Developers))
-            saml_user.save
+            saml_user.save # rubocop:disable Rails/SaveBang
 
             expect(gl_user).to be_valid
           end
 
           it 'unblocks already blocked members' do
             stub_saml_required_group_config(%w(Developers))
-            saml_user.save.ldap_block
+            saml_user.save.ldap_block # rubocop:disable Rails/SaveBang
 
             expect(saml_user.find_user).to be_active
           end
 
           it 'does not unblock manually blocked members' do
             stub_saml_required_group_config(%w(Developers))
-            saml_user.save.block!
+            saml_user.save.block! # rubocop:disable Rails/SaveBang
 
             expect(saml_user.find_user).not_to be_active
           end
@@ -131,14 +131,14 @@ def stub_saml_group_config(type, groups)
           it 'does not allow non-members' do
             stub_saml_required_group_config(%w(ArchitectureAstronauts))
 
-            expect { saml_user.save }.to raise_error Gitlab::Auth::OAuth::User::SignupDisabledError
+            expect { saml_user.save }.to raise_error Gitlab::Auth::OAuth::User::SignupDisabledError # rubocop:disable Rails/SaveBang
           end
 
           it 'blocks non-members' do
             orig_groups = auth_hash.extra.raw_info["groups"]
             auth_hash.extra.raw_info.add("groups", "ArchitectureAstronauts")
             stub_saml_required_group_config(%w(ArchitectureAstronauts))
-            saml_user.save
+            saml_user.save # rubocop:disable Rails/SaveBang
             auth_hash.extra.raw_info.set("groups", orig_groups)
 
             expect(saml_user.find_user).to be_ldap_blocked
diff --git a/ee/spec/lib/gitlab/elastic/search_results_spec.rb b/ee/spec/lib/gitlab/elastic/search_results_spec.rb
index 24da153184854..f5813c8b78ec7 100644
--- a/ee/spec/lib/gitlab/elastic/search_results_spec.rb
+++ b/ee/spec/lib/gitlab/elastic/search_results_spec.rb
@@ -1126,7 +1126,7 @@ def self.ruby_method_123(ruby_another_method_arg)
     let(:limit_project_ids) { [private_project2.id] }
 
     before do
-      private_project2.project_members.create(user: user, access_level: ProjectMember::DEVELOPER)
+      private_project2.project_members.create!(user: user, access_level: ProjectMember::DEVELOPER)
     end
 
     context 'issues' do
@@ -1190,7 +1190,7 @@ def self.ruby_method_123(ruby_another_method_arg)
           context 'when user is admin' do
             context 'when admin mode enabled', :enable_admin_mode do
               it 'returns right set of milestones' do
-                user.update(admin: true)
+                user.update!(admin: true)
                 public_project.project_feature.update!(merge_requests_access_level: ProjectFeature::PRIVATE)
                 public_project.project_feature.update!(issues_access_level: ProjectFeature::PRIVATE)
                 internal_project.project_feature.update!(issues_access_level: ProjectFeature::DISABLED)
diff --git a/ee/spec/lib/gitlab/geo_spec.rb b/ee/spec/lib/gitlab/geo_spec.rb
index 82c0094e946a6..90a82aef93878 100644
--- a/ee/spec/lib/gitlab/geo_spec.rb
+++ b/ee/spec/lib/gitlab/geo_spec.rb
@@ -73,7 +73,7 @@
       end
 
       it 'returns false when primary does not exist' do
-        primary_node.destroy
+        primary_node.destroy!
 
         expect(described_class.primary_node_configured?).to be_falsey
       end
diff --git a/ee/spec/lib/gitlab/git_access_spec.rb b/ee/spec/lib/gitlab/git_access_spec.rb
index 3b905c09a5742..00a0ff1fea88d 100644
--- a/ee/spec/lib/gitlab/git_access_spec.rb
+++ b/ee/spec/lib/gitlab/git_access_spec.rb
@@ -480,7 +480,7 @@ def self.run_permission_checks(permissions_matrix)
             project.add_role(user, role)
           end
 
-          protected_branch.save
+          protected_branch.save!
 
           aggregate_failures do
             matrix.each do |action, allowed|
@@ -506,7 +506,7 @@ def self.run_group_permission_checks(permissions_matrix)
           create(:project_group_link, role, group: group,
                                             project: project)
 
-          protected_branch.save
+          protected_branch.save!
 
           aggregate_failures do
             matrix.each do |action, allowed|
@@ -880,7 +880,7 @@ def stub_redis
         let(:actor) { deploy_key }
 
         before do
-          deploy_key.deploy_keys_projects.create(project: project, can_push: true)
+          deploy_key.deploy_keys_projects.create!(project: project, can_push: true)
         end
 
         it 'allows push and pull access' do
diff --git a/ee/spec/lib/gitlab/import_export/group/relation_factory_spec.rb b/ee/spec/lib/gitlab/import_export/group/relation_factory_spec.rb
index 0f7a31f33ce47..5dc4a56957ccd 100644
--- a/ee/spec/lib/gitlab/import_export/group/relation_factory_spec.rb
+++ b/ee/spec/lib/gitlab/import_export/group/relation_factory_spec.rb
@@ -9,7 +9,7 @@
   let(:importer_user) { admin }
   let(:excluded_keys) { [] }
   let(:created_object) do
-    described_class.create(
+    described_class.create( # rubocop:disable Rails/SaveBang
       relation_sym: relation_sym,
       relation_hash: relation_hash,
       relation_index: 1,
diff --git a/ee/spec/lib/gitlab/mirror_spec.rb b/ee/spec/lib/gitlab/mirror_spec.rb
index 810358dc4f0fd..a9f807add3996 100644
--- a/ee/spec/lib/gitlab/mirror_spec.rb
+++ b/ee/spec/lib/gitlab/mirror_spec.rb
@@ -28,7 +28,7 @@
 
     describe 'without jobs already running' do
       before do
-        Sidekiq::Cron::Job.find("update_all_mirrors_worker")&.destroy
+        Sidekiq::Cron::Job.find("update_all_mirrors_worker")&.destroy # rubocop:disable Rails/SaveBang
       end
 
       it 'creates update_all_mirrors_worker' do
-- 
GitLab