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  |