FEATURE: Add scheduled job to purge expired ignored users (#7211)

FEATURE: Add scheduled job to purge expired ignored users (#7211)

diff --git a/app/jobs/scheduled/purge_expired_ignored_users.rb b/app/jobs/scheduled/purge_expired_ignored_users.rb
new file mode 100644
index 0000000..e898e32
--- /dev/null
+++ b/app/jobs/scheduled/purge_expired_ignored_users.rb
@@ -0,0 +1,9 @@
+module Jobs
+  class PurgeExpiredIgnoredUsers < Jobs::Scheduled
+    every 1.day
+
+    def execute(args)
+      IgnoredUser.where("created_at <= ?", 4.months.ago).delete_all
+    end
+  end
+end
diff --git a/spec/jobs/purge_expired_ignored_users_spec.rb b/spec/jobs/purge_expired_ignored_users_spec.rb
new file mode 100644
index 0000000..1816c95
--- /dev/null
+++ b/spec/jobs/purge_expired_ignored_users_spec.rb
@@ -0,0 +1,43 @@
+require 'rails_helper'
+
+require_dependency 'jobs/scheduled/purge_expired_ignored_users'
+
+describe Jobs::PurgeExpiredIgnoredUsers do
+  subject { Jobs::PurgeExpiredIgnoredUsers.new.execute({}) }
+
+  context "with no ignored users" do
+    it "does nothing" do
+      expect { subject }.to_not change { IgnoredUser.count }
+    end
+  end
+
+  context "when some ignored users exist" do
+    let(:tarek) { Fabricate(:user, username: "tarek") }
+    let(:matt) { Fabricate(:user, username: "matt") }
+    let(:john) { Fabricate(:user, username: "john") }
+
+    before do
+      Fabricate(:ignored_user, user: tarek, ignored_user: matt)
+      Fabricate(:ignored_user, user: tarek, ignored_user: john)
+    end
+
+    context "when no expired ignored users" do
+      it "does nothing" do
+        expect { subject }.to_not change { IgnoredUser.count }
+      end
+    end
+
+    context "when there are expired ignored users" do
+      let(:fred) { Fabricate(:user, username: "fred") }
+
+      it "purges expired ignored users" do
+        freeze_time(5.months.ago) do
+          Fabricate(:ignored_user, user: tarek, ignored_user: fred)
+        end
+
+        subject
+        expect(IgnoredUser.find_by(ignored_user: fred)).to be_nil
+      end
+    end
+  end
+end

GitHub sha: fed2dd91

1 Like

I would like us to at least store the fact they were ignored in the past, maybe instead of nuking just add a deleted_at column and make this model include Trashable

This becomes very interesting information over the years and helps us settle the question of if we need longer times and so on.

1 Like

@SamSaffron just saw this. Sure, we can soft delete I guess.

2 Likes