# frozen_string_literal: true RSpec.describe Jobs::InvalidateInactiveAdmins do subject(:job) { Jobs::InvalidateInactiveAdmins.new.execute({}) } fab!(:active_admin) { Fabricate(:admin, last_seen_at: 1.hour.ago) } before { active_admin.email_tokens.update_all(confirmed: true) } it "does nothing when all admins have been seen recently" do SiteSetting.invalidate_inactive_admin_email_after_days = 365 job expect(active_admin.reload.active).to eq(true) expect(active_admin.email_tokens.where(confirmed: true).exists?).to eq(true) end context "with an admin who hasn't been seen recently" do fab!(:not_seen_admin) { Fabricate(:admin, last_seen_at: 370.days.ago) } before { not_seen_admin.email_tokens.update_all(confirmed: true) } context "when invalidate_inactive_admin_email_after_days = 365" do before { SiteSetting.invalidate_inactive_admin_email_after_days = 365 } it "marks email tokens as unconfirmed" do job expect(not_seen_admin.reload.email_tokens.where(confirmed: true).exists?).to eq(false) end it "makes the user as not active and logs the action" do job expect(not_seen_admin.reload.active).to eq(false) log = UserHistory.last expect(log.target_user_id).to eq(not_seen_admin.id) expect(log.action).to eq(UserHistory.actions[:deactivate_user]) end it "adds a staff log" do job expect(not_seen_admin.reload.active).to eq(false) end context "with social logins" do before do UserAssociatedAccount.create!( provider_name: "google_oauth2", user_id: not_seen_admin.id, provider_uid: 100, info: { email: "bob@google.account.com", }, ) end it "removes the social logins" do job expect(UserAssociatedAccount.where(user_id: not_seen_admin.id).exists?).to eq(false) end end it "doesn't deactivate admins with recent posts" do Fabricate(:post, user: not_seen_admin) job expect(not_seen_admin.reload.active).to eq(true) end it "doesn't deactivate admins with recently used api keys" do Fabricate(:api_key, user: not_seen_admin, last_used_at: 1.day.ago) job expect(not_seen_admin.reload.active).to eq(true) end end context "when invalidate_inactive_admin_email_after_days = 0 to disable this feature" do before { SiteSetting.invalidate_inactive_admin_email_after_days = 0 } it "does nothing" do job expect(active_admin.reload.active).to eq(true) expect(active_admin.email_tokens.where(confirmed: true).exists?).to eq(true) expect(not_seen_admin.reload.active).to eq(true) expect(not_seen_admin.email_tokens.where(confirmed: true).exists?).to eq(true) end end end end