Commit a9898a1cf84da1323101e3f8479c972d00eced67
1 parent
2638f65f
Exists in
master
and in
29 other branches
rails3: fix uploaded_file tests
PS1: the monkey_patch is not being loaded. PS2: there are still some tests failing due to ActionTracker bug.
Showing
3 changed files
with
63 additions
and
33 deletions
Show diff stats
app/models/uploaded_file.rb
| ... | ... | @@ -6,6 +6,8 @@ require 'short_filename' |
| 6 | 6 | # of the file itself is kept. (FIXME?) |
| 7 | 7 | class UploadedFile < Article |
| 8 | 8 | |
| 9 | + attr_accessible :uploaded_data | |
| 10 | + | |
| 9 | 11 | def self.type_name |
| 10 | 12 | _('File') |
| 11 | 13 | end |
| ... | ... | @@ -31,7 +33,7 @@ class UploadedFile < Article |
| 31 | 33 | end |
| 32 | 34 | |
| 33 | 35 | def thumbnail_path |
| 34 | - self.image? ? self.full_filename(:display).gsub(Rails.root.join('public'), '') : nil | |
| 36 | + self.image? ? self.full_filename(:display).to_s.gsub(Rails.root.join('public'), '') : nil | |
| 35 | 37 | end |
| 36 | 38 | |
| 37 | 39 | def display_title | ... | ... |
test/unit/uploaded_file_test.rb
| ... | ... | @@ -50,35 +50,35 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 50 | 50 | end |
| 51 | 51 | |
| 52 | 52 | should 'properly save images' do |
| 53 | - file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 53 | + file = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 54 | 54 | file.profile = profile |
| 55 | 55 | assert file.save |
| 56 | 56 | assert file.is_image |
| 57 | 57 | end |
| 58 | 58 | |
| 59 | 59 | should 'has attachment_fu validation options' do |
| 60 | - file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 60 | + file = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 61 | 61 | assert_respond_to file, :attachment_validation_options |
| 62 | 62 | end |
| 63 | 63 | |
| 64 | 64 | should 'has attachment_fu validation option for size' do |
| 65 | - file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 65 | + file = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 66 | 66 | assert_includes file.attachment_validation_options, :size |
| 67 | 67 | end |
| 68 | 68 | |
| 69 | 69 | should 'can display hits' do |
| 70 | - file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 70 | + file = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 71 | 71 | assert_equal false, file.can_display_hits? |
| 72 | 72 | end |
| 73 | 73 | |
| 74 | 74 | should 'not upload files bigger than max_size' do |
| 75 | - f = UploadedFile.new(:profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 75 | + f = build(UploadedFile, :profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 76 | 76 | f.expects(:size).returns(UploadedFile.attachment_options[:max_size] + 1024) |
| 77 | 77 | assert !f.valid? |
| 78 | 78 | end |
| 79 | 79 | |
| 80 | 80 | should 'upload files smaller than max_size' do |
| 81 | - f = UploadedFile.new(:profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 81 | + f = build(UploadedFile, :profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 82 | 82 | f.expects(:size).returns(UploadedFile.attachment_options[:max_size] - 1024) |
| 83 | 83 | assert f.valid? |
| 84 | 84 | end |
| ... | ... | @@ -86,16 +86,18 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 86 | 86 | should 'create icon when created in folder' do |
| 87 | 87 | p = create_user('test_user').person |
| 88 | 88 | f = fast_create(Folder, :name => 'test_folder', :profile_id => p.id) |
| 89 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent_id => f.id, :profile => p) | |
| 89 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent_id => f.id, :profile => p) | |
| 90 | 90 | |
| 91 | 91 | process_delayed_job_queue |
| 92 | - assert File.exists?(UploadedFile.find(file.id).public_filename(:icon)) | |
| 92 | + | |
| 93 | + file.reload | |
| 94 | + assert File.exists?(file.public_filename(:icon)) | |
| 93 | 95 | file.destroy |
| 94 | 96 | end |
| 95 | 97 | |
| 96 | 98 | should 'create icon when not created in folder' do |
| 97 | 99 | p = create_user('test_user').person |
| 98 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => p) | |
| 100 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => p) | |
| 99 | 101 | |
| 100 | 102 | process_delayed_job_queue |
| 101 | 103 | assert File.exists?(UploadedFile.find(file.id).public_filename(:icon)) |
| ... | ... | @@ -103,7 +105,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 103 | 105 | end |
| 104 | 106 | |
| 105 | 107 | should 'match max_size in validates message of size field' do |
| 106 | - up = UploadedFile.new(:filename => 'fake_filename.png') | |
| 108 | + up = build(UploadedFile, :filename => 'fake_filename.png') | |
| 107 | 109 | up.valid? |
| 108 | 110 | |
| 109 | 111 | assert_match /#{UploadedFile.max_size.to_humanreadable}/, up.errors[:size] |
| ... | ... | @@ -111,7 +113,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 111 | 113 | |
| 112 | 114 | should 'display link to download of non-image files' do |
| 113 | 115 | p = create_user('test_user').person |
| 114 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => p) | |
| 116 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => p) | |
| 115 | 117 | |
| 116 | 118 | stubs(:content_tag).returns('link') |
| 117 | 119 | expects(:link_to).with(file.name, file.url, :class => file.css_class_name) |
| ... | ... | @@ -120,7 +122,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 120 | 122 | end |
| 121 | 123 | |
| 122 | 124 | should 'have title' do |
| 123 | - assert_equal 'my title', UploadedFile.new(:title => 'my title').title | |
| 125 | + assert_equal 'my title', build(UploadedFile, :title => 'my title').title | |
| 124 | 126 | end |
| 125 | 127 | |
| 126 | 128 | should 'limit title to 140 characters' do |
| ... | ... | @@ -135,7 +137,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 135 | 137 | end |
| 136 | 138 | |
| 137 | 139 | should 'always provide a display title' do |
| 138 | - upload = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain')) | |
| 140 | + upload = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain')) | |
| 139 | 141 | assert_equal 'test.txt', upload.display_title |
| 140 | 142 | upload.title = 'My text file' |
| 141 | 143 | assert_equal 'My text file', upload.display_title |
| ... | ... | @@ -151,13 +153,13 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 151 | 153 | end |
| 152 | 154 | |
| 153 | 155 | should 'use name as title by default but cut down the title' do |
| 154 | - upload = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/AGENDA_CULTURA_-_FESTA_DE_VAQUEIROS_PONTO_DE_SERRA_PRETA_BAIXA.txt')) | |
| 156 | + upload = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/AGENDA_CULTURA_-_FESTA_DE_VAQUEIROS_PONTO_DE_SERRA_PRETA_BAIXA.txt')) | |
| 155 | 157 | upload.valid? |
| 156 | 158 | assert_nil upload.errors[:title] |
| 157 | 159 | end |
| 158 | 160 | |
| 159 | 161 | should 'create thumbnails after processing jobs' do |
| 160 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | |
| 162 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | |
| 161 | 163 | |
| 162 | 164 | process_delayed_job_queue |
| 163 | 165 | |
| ... | ... | @@ -168,7 +170,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 168 | 170 | end |
| 169 | 171 | |
| 170 | 172 | should 'set thumbnails_processed to true after creating thumbnails' do |
| 171 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | |
| 173 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | |
| 172 | 174 | |
| 173 | 175 | process_delayed_job_queue |
| 174 | 176 | |
| ... | ... | @@ -198,7 +200,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 198 | 200 | end |
| 199 | 201 | |
| 200 | 202 | should 'return image thumbnail if thumbnails were processed' do |
| 201 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | |
| 203 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | |
| 202 | 204 | process_delayed_job_queue |
| 203 | 205 | |
| 204 | 206 | assert_match(/rails_thumb.png/, UploadedFile.find(file.id).public_filename(:thumb)) |
| ... | ... | @@ -214,7 +216,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 214 | 216 | end |
| 215 | 217 | |
| 216 | 218 | should 'store width and height after processing' do |
| 217 | - file = UploadedFile.create!(:profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 219 | + file = create(UploadedFile, :profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 218 | 220 | file.create_thumbnails |
| 219 | 221 | |
| 220 | 222 | file = UploadedFile.find(file.id) |
| ... | ... | @@ -241,7 +243,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 241 | 243 | |
| 242 | 244 | should 'track action when a published image is uploaded in a gallery' do |
| 243 | 245 | p = fast_create(Gallery, :profile_id => @profile.id) |
| 244 | - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile) | |
| 246 | + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile) | |
| 245 | 247 | ta = ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) |
| 246 | 248 | assert_kind_of String, ta.get_thumbnail_path[0] |
| 247 | 249 | assert_equal [f.reload.view_url], ta.get_view_url |
| ... | ... | @@ -252,26 +254,26 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 252 | 254 | should 'not track action when is not image' do |
| 253 | 255 | ActionTracker::Record.delete_all |
| 254 | 256 | p = fast_create(Gallery, :profile_id => @profile.id) |
| 255 | - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :parent => p, :profile => @profile) | |
| 257 | + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :parent => p, :profile => @profile) | |
| 256 | 258 | assert_nil ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) |
| 257 | 259 | end |
| 258 | 260 | |
| 259 | 261 | should 'not track action when has no parent' do |
| 260 | - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => nil, :profile => @profile) | |
| 262 | + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => nil, :profile => @profile) | |
| 261 | 263 | assert_nil ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) |
| 262 | 264 | end |
| 263 | 265 | |
| 264 | 266 | should 'not track action when is not published' do |
| 265 | 267 | ActionTracker::Record.delete_all |
| 266 | 268 | p = fast_create(Gallery, :profile_id => @profile.id) |
| 267 | - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile, :published => false) | |
| 269 | + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile, :published => false) | |
| 268 | 270 | assert_nil ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) |
| 269 | 271 | end |
| 270 | 272 | |
| 271 | 273 | should 'not track action when parent is not gallery' do |
| 272 | 274 | ActionTracker::Record.delete_all |
| 273 | 275 | p = fast_create(Folder, :profile_id => @profile.id) |
| 274 | - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile) | |
| 276 | + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile) | |
| 275 | 277 | assert_nil ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) |
| 276 | 278 | end |
| 277 | 279 | |
| ... | ... | @@ -295,11 +297,11 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 295 | 297 | |
| 296 | 298 | should 'upload to a folder with same name as the schema if database is postgresql' do |
| 297 | 299 | uses_postgresql 'image_schema_one' |
| 298 | - file1 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) | |
| 300 | + file1 = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) | |
| 299 | 301 | process_delayed_job_queue |
| 300 | 302 | assert_match(/image_schema_one\/\d{4}\/\d{4}\/rails.png/, UploadedFile.find(file1.id).public_filename) |
| 301 | 303 | uses_postgresql 'image_schema_two' |
| 302 | - file2 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => @profile) | |
| 304 | + file2 = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => @profile) | |
| 303 | 305 | assert_match(/image_schema_two\/\d{4}\/\d{4}\/test.txt/, UploadedFile.find(file2.id).public_filename) |
| 304 | 306 | file1.destroy |
| 305 | 307 | file2.destroy |
| ... | ... | @@ -307,13 +309,13 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 307 | 309 | end |
| 308 | 310 | |
| 309 | 311 | should 'return extension' do |
| 310 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) | |
| 312 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) | |
| 311 | 313 | assert_equal 'png', file.extension |
| 312 | 314 | end |
| 313 | 315 | |
| 314 | 316 | should 'upload to path prefix folder if database is not postgresql' do |
| 315 | 317 | uses_sqlite |
| 316 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => @profile) | |
| 318 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => @profile) | |
| 317 | 319 | assert_match(/\/\d{4}\/\d{4}\/test.txt/, UploadedFile.find(file.id).public_filename) |
| 318 | 320 | assert_no_match(/test_schema\/\d{4}\/\d{4}\/test.txt/, UploadedFile.find(file.id).public_filename) |
| 319 | 321 | file.destroy |
| ... | ... | @@ -321,7 +323,7 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 321 | 323 | |
| 322 | 324 | should 'upload thumbnails to a folder with same name as the schema if database is postgresql' do |
| 323 | 325 | uses_postgresql |
| 324 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) | |
| 326 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) | |
| 325 | 327 | process_delayed_job_queue |
| 326 | 328 | UploadedFile.attachment_options[:thumbnails].each do |suffix, size| |
| 327 | 329 | assert_match(/test_schema\/\d{4}\/\d{4}\/rails_#{suffix}.png/, UploadedFile.find(file.id).public_filename(suffix)) |
| ... | ... | @@ -331,13 +333,13 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 331 | 333 | end |
| 332 | 334 | |
| 333 | 335 | should 'not allow script files to be uploaded without append .txt in the end' do |
| 334 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('files/hello_world.php', 'application/x-php'), :profile => @profile) | |
| 336 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('files/hello_world.php', 'application/x-php'), :profile => @profile) | |
| 335 | 337 | assert_equal 'hello_world.php.txt', file.filename |
| 336 | 338 | end |
| 337 | 339 | |
| 338 | 340 | should 'use gallery as target for action tracker' do |
| 339 | 341 | gallery = fast_create(Gallery, :profile_id => profile.id) |
| 340 | - image = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) | |
| 342 | + image = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) | |
| 341 | 343 | activity = ActionTracker::Record.find_last_by_verb 'upload_image' |
| 342 | 344 | assert_equal gallery, activity.target |
| 343 | 345 | end |
| ... | ... | @@ -345,10 +347,10 @@ class UploadedFileTest < ActiveSupport::TestCase |
| 345 | 347 | should 'group trackers activity of image\'s upload' do |
| 346 | 348 | gallery = fast_create(Gallery, :profile_id => profile.id) |
| 347 | 349 | |
| 348 | - image1 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) | |
| 350 | + image1 = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) | |
| 349 | 351 | assert_equal 1, ActionTracker::Record.find_all_by_verb('upload_image').count |
| 350 | 352 | |
| 351 | - image2 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg'), :parent => gallery, :profile => profile) | |
| 353 | + image2 = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg'), :parent => gallery, :profile => profile) | |
| 352 | 354 | assert_equal 1, ActionTracker::Record.find_all_by_verb('upload_image').count |
| 353 | 355 | end |
| 354 | 356 | ... | ... |
| ... | ... | @@ -0,0 +1,26 @@ |
| 1 | +# Monkey patch to rewrite attachment_fu's logic where no image with parent can | |
| 2 | +# be thumbnailable. | |
| 3 | + | |
| 4 | +Technoweenie::AttachmentFu.module_eval do | |
| 5 | + def thumbnailable? | |
| 6 | + image? && !is_thumbnail? | |
| 7 | + end | |
| 8 | + | |
| 9 | + def is_thumbnail? | |
| 10 | + (thumbnail_class == self.class) && !(respond_to?(:parent_id) && parent_id.nil?) | |
| 11 | + end | |
| 12 | +end | |
| 13 | + | |
| 14 | +# Monkey patch to rewrite attachment_fu's logic where no image with parent can | |
| 15 | +# be thumbnailable and supposition that full_filename will return a String | |
| 16 | +# while it might return Pathname. | |
| 17 | +Technoweenie::AttachmentFu::Backends::FileSystemBackend.module_eval do | |
| 18 | + def attachment_path_id | |
| 19 | + (is_thumbnail? && respond_to?(:parent_id)) ? parent_id : id | |
| 20 | + end | |
| 21 | + | |
| 22 | + def public_filename(thumbnail = nil) | |
| 23 | + full_filename(thumbnail).to_s.gsub %r(^#{Regexp.escape(base_path)}), '' | |
| 24 | + end | |
| 25 | +end | |
| 26 | + | ... | ... |