Commit a9898a1cf84da1323101e3f8479c972d00eced67

Authored by Rodrigo Souto
1 parent 2638f65f

rails3: fix uploaded_file tests

PS1: the monkey_patch is not being loaded.
PS2: there are still some tests failing due to ActionTracker bug.
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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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  
... ...
vendor/plugins/monkey_patches/attachment_fu/init.rb 0 → 100644
... ... @@ -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 +
... ...