diff --git a/app/models/attachment.rb b/app/models/attachment.rb index fd4931eaf..ac9561c26 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -216,7 +216,7 @@ class Attachment < ActiveRecord::Base size = Setting.thumbnails_size.to_i end size = 100 unless size > 0 - target = File.join(self.class.thumbnails_storage_path, "#{digest}_#{filesize}_#{size}.thumb") + target = thumbnail_path(size) begin Redmine::Thumbnail.generate(self.diskfile, target, size) @@ -463,6 +463,14 @@ class Attachment < ActiveRecord::Base if disk_filename.present? && File.exist?(diskfile) File.delete(diskfile) end + Dir[thumbnail_path("*")].each do |thumb| + File.delete(thumb) + end + end + + def thumbnail_path(size) + File.join(self.class.thumbnails_storage_path, + "#{digest}_#{filesize}_#{size}.thumb") end def sanitize_filename(value) diff --git a/test/unit/attachment_test.rb b/test/unit/attachment_test.rb index 15936c39e..c9e94b31c 100644 --- a/test/unit/attachment_test.rb +++ b/test/unit/attachment_test.rb @@ -457,6 +457,21 @@ class AttachmentTest < ActiveSupport::TestCase assert_equal a_thumb, b_thumb end + def test_destroy_should_destroy_thumbnails + a = Attachment.create!( + :container => Issue.find(1), + :file => uploaded_test_file("2010/11/101123161450_testfile_1.png", "image/png"), + :author => User.find(1) + ) + diskfile = a.diskfile + thumbnail = a.thumbnail + assert File.exist?(diskfile) + assert File.exist?(thumbnail) + assert a.destroy + refute File.exist?(diskfile) + refute File.exist?(thumbnail) + end + def test_thumbnail_should_return_nil_if_generation_fails Redmine::Thumbnail.expects(:generate).raises(SystemCallError, 'Something went wrong') set_fixtures_attachments_directory