From d4e5d13a8fb9185be1a678fdc2e185573a7b6ee9 Mon Sep 17 00:00:00 2001 From: Janakas Date: Thu, 28 Dec 2017 22:38:03 +0100 Subject: [PATCH] Remove old export archives after 2 weeks Fixes #5727 --- app/workers/cleanup_old_exports.rb | 21 ++++++++++ config/schedule.yml | 4 ++ spec/workers/cleanup_old_exports_spec.rb | 53 ++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 app/workers/cleanup_old_exports.rb create mode 100644 spec/workers/cleanup_old_exports_spec.rb diff --git a/app/workers/cleanup_old_exports.rb b/app/workers/cleanup_old_exports.rb new file mode 100644 index 000000000..95b93d30f --- /dev/null +++ b/app/workers/cleanup_old_exports.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Workers + class CleanupOldExports < Base + sidekiq_options queue: :low + + def perform + User.where("exported_at < ?", 14.days.ago).each do |user| + user.remove_export = true + user.exported_at = nil + user.save + end + + User.where("exported_photos_at < ?", 14.days.ago).each do |user| + user.remove_exported_photos_file = true + user.exported_photos_at = nil + user.save + end + end + end +end diff --git a/config/schedule.yml b/config/schedule.yml index 88292df2a..8e6f2361f 100644 --- a/config/schedule.yml +++ b/config/schedule.yml @@ -17,3 +17,7 @@ recheck_scheduled_pods: check_birthday: cron: "0 0 * * *" class: "Workers::CheckBirthday" + +cleanup_old_exports: + cron: "0 0 * * *" + class: "Workers::CleanupOldExports" diff --git a/spec/workers/cleanup_old_exports_spec.rb b/spec/workers/cleanup_old_exports_spec.rb new file mode 100644 index 000000000..9c5df7ea0 --- /dev/null +++ b/spec/workers/cleanup_old_exports_spec.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +describe Workers::CleanupOldExports do + let(:user) { FactoryGirl.create(:user) } + + context "with profile data" do + before do + user.perform_export! + end + + it "removes old archives" do + Timecop.travel(Time.zone.today + 15.days) do + Workers::CleanupOldExports.new.perform + user.reload + expect(user.export).not_to be_present + expect(user.exported_at).to be_nil + end + end + + it "does not remove new archives" do + Timecop.travel(Time.zone.today + 1.day) do + Workers::CleanupOldExports.new.perform + user.reload + expect(user.export).to be_present + expect(user.exported_at).to be_present + end + end + end + + context "with photos" do + before do + user.perform_export_photos! + end + + it "removes old archives" do + Timecop.travel(Time.zone.today + 15.days) do + Workers::CleanupOldExports.new.perform + user.reload + expect(user.exported_photos_file).not_to be_present + expect(user.exported_photos_at).to be_nil + end + end + + it "does not remove new archives" do + Timecop.travel(Time.zone.today + 1.day) do + Workers::CleanupOldExports.new.perform + user.reload + expect(user.exported_photos_file).to be_present + expect(user.exported_photos_at).to be_present + end + end + end +end