diff --git a/app/jobs/scheduled/clean_up_uploads.rb b/app/jobs/scheduled/clean_up_uploads.rb index ef05762bd2b..523a017c466 100644 --- a/app/jobs/scheduled/clean_up_uploads.rb +++ b/app/jobs/scheduled/clean_up_uploads.rb @@ -10,13 +10,13 @@ module Jobs Upload.where("created_at < ?", grace_period.hour.ago) .where("retain_hours IS NULL OR created_at < current_timestamp - interval '1 hour' * retain_hours") - .where("id NOT IN (SELECT upload_id FROM post_uploads)") - .where("id NOT IN (SELECT uploaded_avatar_id FROM users)") - .where("id NOT IN (SELECT gravatar_upload_id FROM user_avatars)") - .where("url NOT IN (SELECT profile_background FROM user_profiles)") - .where("url NOT IN (SELECT card_background FROM user_profiles)") - .where("url NOT IN (SELECT logo_url FROM categories)") - .where("url NOT IN (SELECT background_url FROM categories)") + .where("id NOT IN (SELECT upload_id FROM post_uploads WHERE upload_id IS NOT NULL)") + .where("id NOT IN (SELECT uploaded_avatar_id FROM users WHERE uploaded_avatar_id IS NOT NULL)") + .where("id NOT IN (SELECT gravatar_upload_id FROM user_avatars WHERE gravatar_upload_id IS NOT NULL)") + .where("url NOT IN (SELECT profile_background FROM user_profiles WHERE LENGTH(COALESCE(profile_background, '')) > 0)") + .where("url NOT IN (SELECT card_background FROM user_profiles WHERE LENGTH(COALESCE(card_background, '')) > 0)") + .where("url NOT IN (SELECT logo_url FROM categories WHERE LENGTH(COALESCE(logo_url, '')) > 0)") + .where("url NOT IN (SELECT background_url FROM categories WHERE LENGTH(COALESCE(background_url, '')) > 0)") .destroy_all end diff --git a/spec/jobs/clean_up_uploads_spec.rb b/spec/jobs/clean_up_uploads_spec.rb index 9c307b7fccb..6035f17fc22 100644 --- a/spec/jobs/clean_up_uploads_spec.rb +++ b/spec/jobs/clean_up_uploads_spec.rb @@ -3,8 +3,21 @@ require 'rails_helper' require_dependency 'jobs/scheduled/clean_up_uploads' describe Jobs::CleanUpUploads do - it "runs correctly without crashing" do + + before do + Upload.destroy_all SiteSetting.clean_up_uploads = true - Jobs::CleanUpUploads.new.execute(nil) + SiteSetting.clean_orphan_uploads_grace_period_hours = 1 end + + it "deletes orphan uploads" do + Fabricate(:upload, created_at: 2.hours.ago) + + expect(Upload.count).to be(1) + + Jobs::CleanUpUploads.new.execute(nil) + + expect(Upload.count).to be(0) + end + end