From be5efc9410983cd0156a235016a9f497484f7562 Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Tue, 20 Oct 2020 19:11:43 +0300 Subject: [PATCH] FIX: Ensure old uploads can have animated field updated (#10963) If admins decreased the maximum filesize limit the ActiveRecord validations would fail. --- app/jobs/scheduled/update_animated_uploads.rb | 3 ++- spec/jobs/update_animated_uploads_spec.rb | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/jobs/scheduled/update_animated_uploads.rb b/app/jobs/scheduled/update_animated_uploads.rb index 2938911b75a..500e21d7b16 100644 --- a/app/jobs/scheduled/update_animated_uploads.rb +++ b/app/jobs/scheduled/update_animated_uploads.rb @@ -13,7 +13,8 @@ module Jobs .limit(MAX_PROCESSED_GIF_IMAGES) .each do |upload| uri = Discourse.store.path_for(upload) || upload.url - upload.update!(animated: FastImage.animated?(uri)) + upload.animated = FastImage.animated?(uri) + upload.save(validate: false) upload.optimized_images.destroy_all if upload.animated end diff --git a/spec/jobs/update_animated_uploads_spec.rb b/spec/jobs/update_animated_uploads_spec.rb index 65e2e8e39e7..42da96f9a54 100644 --- a/spec/jobs/update_animated_uploads_spec.rb +++ b/spec/jobs/update_animated_uploads_spec.rb @@ -6,13 +6,23 @@ describe Jobs::UpdateAnimatedUploads do let!(:upload) { Fabricate(:upload) } let!(:gif_upload) { Fabricate(:upload, extension: "gif") } - it "affects only GIF uploads" do + before do url = Discourse.store.path_for(gif_upload) || gif_upload.url FastImage.expects(:animated?).with(url).returns(true).once + end + it "affects only GIF uploads" do described_class.new.execute({}) expect(upload.reload.animated).to eq(nil) expect(gif_upload.reload.animated).to eq(true) end + + it "works with uploads larger than current limits" do + SiteSetting.max_image_size_kb = 1 + + described_class.new.execute({}) + + expect(gif_upload.reload.animated).to eq(true) + end end