From fed2dd914802e8c7ff2bd2e33c0da5af896afee2 Mon Sep 17 00:00:00 2001 From: Tarek Khalil <45508821+khalilovcmded@users.noreply.github.com> Date: Wed, 20 Mar 2019 10:01:43 +0000 Subject: [PATCH] FEATURE: Add scheduled job to purge expired ignored users (#7211) --- .../scheduled/purge_expired_ignored_users.rb | 9 ++++ spec/jobs/purge_expired_ignored_users_spec.rb | 43 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 app/jobs/scheduled/purge_expired_ignored_users.rb create mode 100644 spec/jobs/purge_expired_ignored_users_spec.rb 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 00000000000..e898e3296a3 --- /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 00000000000..1816c9590a9 --- /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