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 | + | ... | ... |