Defect #33769 » 0001-fix-creation-of-multiple-identical-attachments-in-ou.patch
app/models/attachment.rb | ||
---|---|---|
470 | 470 |
.where(digest: self.digest, filesize: self.filesize) |
471 | 471 |
.where('id <> ? and disk_filename <> ?', |
472 | 472 |
self.id, self.disk_filename) |
473 |
.first |
|
473 |
.order(:id) |
|
474 |
.last |
|
474 | 475 |
existing.with_lock do |
475 | 476 |
original_diskfile = self.diskfile |
476 | 477 |
existing_diskfile = existing.diskfile |
test/unit/attachment_test.rb | ||
---|---|---|
235 | 235 |
assert_not_equal a1.diskfile, a2.diskfile |
236 | 236 |
end |
237 | 237 | |
238 |
def test_identical_attachments_created_in_same_transaction_should_not_end_up_unreadable |
|
239 |
attachments = [] |
|
240 |
Project.transaction do |
|
241 |
3.times do |
|
242 |
a = Attachment.create!( |
|
243 |
:container => Issue.find(1), :author => User.find(1), |
|
244 |
:file => mock_file(:filename => 'foo', :content => 'abcde') |
|
245 |
) |
|
246 |
attachments << a |
|
247 |
end |
|
248 |
end |
|
249 |
attachments.each do |a| |
|
250 |
assert a.readable? |
|
251 |
end |
|
252 |
assert_equal 1, attachments.map(&:diskfile).uniq.size |
|
253 |
end |
|
254 | ||
238 | 255 |
def test_filename_should_be_basenamed |
239 | 256 |
a = Attachment.new(:file => mock_file(:original_filename => "path/to/the/file")) |
240 | 257 |
assert_equal 'file', a.filename |