From 0db4f4bcd7236febc79a19bc098ff17be9d936af Mon Sep 17 00:00:00 2001
From: Cody West <cwest@gitlab.com>
Date: Fri, 24 Nov 2023 00:20:16 +0000
Subject: [PATCH] Add admin mode user deactivation tests

And fix rubocop issues
---
 .../deactivate_dormant_users_worker_spec.rb   | 44 +++++++++++++++----
 1 file changed, 35 insertions(+), 9 deletions(-)

diff --git a/spec/workers/users/deactivate_dormant_users_worker_spec.rb b/spec/workers/users/deactivate_dormant_users_worker_spec.rb
index c28be165fd713..be32322df8ff9 100644
--- a/spec/workers/users/deactivate_dormant_users_worker_spec.rb
+++ b/spec/workers/users/deactivate_dormant_users_worker_spec.rb
@@ -27,17 +27,15 @@
       expect(deactivation_service).not_to have_received(:execute)
     end
 
-    context 'when automatic deactivation of dormant users is enabled' do
-      before do
-        stub_application_setting(deactivate_dormant_users: true)
-      end
-
-      it 'deactivates dormant users' do
+    shared_examples 'deactivates dormant users' do
+      it do
         worker.perform
 
         expect(deactivation_service).to have_received(:execute).twice
       end
+    end
 
+    shared_examples 'deactivates certain user types' do
       where(:user_type, :expected_state) do
         :human | 'deactivated'
         :support_bot | 'active'
@@ -52,7 +50,7 @@
       end
 
       with_them do
-        it 'deactivates certain user types' do
+        it do
           user = create(:user, user_type: user_type, state: :active, last_activity_on: Gitlab::CurrentSettings.deactivate_dormant_users_period.days.ago.to_date)
 
           worker.perform
@@ -64,8 +62,10 @@
           end
         end
       end
+    end
 
-      it 'does not deactivate non-active users' do
+    shared_examples 'does not deactivate non-active users' do
+      it do
         human_user = create(:user, user_type: :human, state: :blocked, last_activity_on: Gitlab::CurrentSettings.deactivate_dormant_users_period.days.ago.to_date)
         service_user = create(:user, user_type: :service_user, state: :blocked, last_activity_on: Gitlab::CurrentSettings.deactivate_dormant_users_period.days.ago.to_date)
 
@@ -74,14 +74,40 @@
         expect(deactivation_service).not_to have_received(:execute).with(human_user)
         expect(deactivation_service).not_to have_received(:execute).with(service_user)
       end
+    end
 
-      it 'does not deactivate recently created users' do
+    shared_examples 'does not deactivate recently created users' do
+      it do
         worker.perform
 
         expect(deactivation_service).not_to have_received(:execute).with(inactive_recently_created)
       end
     end
 
+    context 'when automatic deactivation of dormant users is enabled' do
+      before do
+        stub_application_setting(deactivate_dormant_users: true)
+      end
+
+      context 'when admin mode is not enabled', :do_not_mock_admin_mode_setting do
+        include_examples 'deactivates dormant users'
+        include_examples 'deactivates certain user types'
+        include_examples 'does not deactivate non-active users'
+        include_examples 'does not deactivate recently created users'
+      end
+
+      context 'when admin mode is enabled', :request_store do
+        before do
+          stub_application_setting(admin_mode: true)
+        end
+
+        include_examples 'deactivates dormant users'
+        include_examples 'deactivates certain user types'
+        include_examples 'does not deactivate non-active users'
+        include_examples 'does not deactivate recently created users'
+      end
+    end
+
     context 'when automatic deactivation of dormant users is disabled' do
       before do
         stub_application_setting(deactivate_dormant_users: false)
-- 
GitLab