Commit b5ffea8f155baa1f898a45485c0770cbc000e1c7
Committed by
Antonio Terceiro
1 parent
d5ddc762
Exists in
master
and in
29 other branches
Upload of files done in background
* Added 'thumbnails_processed' to articles and images * Added images to be displayed when the uploaded were not processed yet (ActionItem1661)
Showing
19 changed files
with
284 additions
and
9 deletions
Show diff stats
app/models/image.rb
@@ -16,4 +16,7 @@ class Image < ActiveRecord::Base | @@ -16,4 +16,7 @@ class Image < ActiveRecord::Base | ||
16 | :max_size => 500.kilobytes # remember to update validate message below | 16 | :max_size => 500.kilobytes # remember to update validate message below |
17 | 17 | ||
18 | validates_attachment :size => N_("%{fn} of uploaded file was larger than the maximum size of 500.0 KB") | 18 | validates_attachment :size => N_("%{fn} of uploaded file was larger than the maximum size of 500.0 KB") |
19 | + | ||
20 | + delay_attachment_fu_thumbnails | ||
21 | + | ||
19 | end | 22 | end |
app/models/uploaded_file.rb
@@ -34,6 +34,8 @@ class UploadedFile < Article | @@ -34,6 +34,8 @@ class UploadedFile < Article | ||
34 | 34 | ||
35 | validates_attachment :size => N_("%{fn} of uploaded file was larger than the maximum size of 5.0 MB") | 35 | validates_attachment :size => N_("%{fn} of uploaded file was larger than the maximum size of 5.0 MB") |
36 | 36 | ||
37 | + delay_attachment_fu_thumbnails | ||
38 | + | ||
37 | def icon_name | 39 | def icon_name |
38 | self.image? ? public_filename(:icon) : self.content_type.gsub('/', '-') | 40 | self.image? ? public_filename(:icon) : self.content_type.gsub('/', '-') |
39 | end | 41 | end |
@@ -60,7 +62,6 @@ class UploadedFile < Article | @@ -60,7 +62,6 @@ class UploadedFile < Article | ||
60 | File.read(self.full_filename) | 62 | File.read(self.full_filename) |
61 | end | 63 | end |
62 | 64 | ||
63 | - | ||
64 | def to_html(options = {}) | 65 | def to_html(options = {}) |
65 | article = self | 66 | article = self |
66 | if image? | 67 | if image? |
db/migrate/20100831193450_add_thumbnails_processed_to_articles.rb
0 → 100644
@@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
1 | +class AddThumbnailsProcessedToArticles < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + add_column :articles, :thumbnails_processed, :boolean, :default => false | ||
4 | + add_column :article_versions, :thumbnails_processed, :boolean, :default => false | ||
5 | + end | ||
6 | + | ||
7 | + def self.down | ||
8 | + remove_column :articles, :thumbnails_processed | ||
9 | + remove_column :article_versions, :thumbnails_processed | ||
10 | + end | ||
11 | +end |
db/migrate/20100901203836_add_thumbnails_processed_to_image.rb
0 → 100644
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +class AddThumbnailsProcessedToImage < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + add_column :images, :thumbnails_processed, :boolean, :default => false | ||
4 | + end | ||
5 | + | ||
6 | + def self.down | ||
7 | + remove_column :images, :thumbnails_processed, :boolean, :default => false | ||
8 | + end | ||
9 | +end |
db/schema.rb
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | # | 9 | # |
10 | # It's strongly recommended to check this file into your version control system. | 10 | # It's strongly recommended to check this file into your version control system. |
11 | 11 | ||
12 | -ActiveRecord::Schema.define(:version => 20100823190348) do | 12 | +ActiveRecord::Schema.define(:version => 20100901203836) do |
13 | 13 | ||
14 | create_table "article_versions", :force => true do |t| | 14 | create_table "article_versions", :force => true do |t| |
15 | t.integer "article_id" | 15 | t.integer "article_id" |
@@ -46,6 +46,7 @@ ActiveRecord::Schema.define(:version => 20100823190348) do | @@ -46,6 +46,7 @@ ActiveRecord::Schema.define(:version => 20100823190348) do | ||
46 | t.string "source" | 46 | t.string "source" |
47 | t.boolean "highlighted", :default => false | 47 | t.boolean "highlighted", :default => false |
48 | t.string "external_link" | 48 | t.string "external_link" |
49 | + t.boolean "thumbnails_processed", :default => false | ||
49 | end | 50 | end |
50 | 51 | ||
51 | create_table "articles", :force => true do |t| | 52 | create_table "articles", :force => true do |t| |
@@ -81,6 +82,7 @@ ActiveRecord::Schema.define(:version => 20100823190348) do | @@ -81,6 +82,7 @@ ActiveRecord::Schema.define(:version => 20100823190348) do | ||
81 | t.string "source" | 82 | t.string "source" |
82 | t.boolean "highlighted", :default => false | 83 | t.boolean "highlighted", :default => false |
83 | t.string "external_link" | 84 | t.string "external_link" |
85 | + t.boolean "thumbnails_processed", :default => false | ||
84 | end | 86 | end |
85 | 87 | ||
86 | create_table "articles_categories", :id => false, :force => true do |t| | 88 | create_table "articles_categories", :id => false, :force => true do |t| |
@@ -243,6 +245,7 @@ ActiveRecord::Schema.define(:version => 20100823190348) do | @@ -243,6 +245,7 @@ ActiveRecord::Schema.define(:version => 20100823190348) do | ||
243 | t.integer "size" | 245 | t.integer "size" |
244 | t.integer "width" | 246 | t.integer "width" |
245 | t.integer "height" | 247 | t.integer "height" |
248 | + t.boolean "thumbnails_processed", :default => false | ||
246 | end | 249 | end |
247 | 250 | ||
248 | create_table "inputs", :force => true do |t| | 251 | create_table "inputs", :force => true do |t| |
10.7 KB
42.2 KB
960 Bytes
3 KB
4.03 KB
18.4 KB
6.9 KB
test/functional/cms_controller_test.rb
@@ -923,8 +923,10 @@ class CmsControllerTest < Test::Unit::TestCase | @@ -923,8 +923,10 @@ class CmsControllerTest < Test::Unit::TestCase | ||
923 | :parent_id => f.id, | 923 | :parent_id => f.id, |
924 | :article => {:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')} | 924 | :article => {:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')} |
925 | 925 | ||
926 | - assert File.exists?(assigns(:article).icon_name) | ||
927 | - assigns(:article).destroy | 926 | + process_delayed_job_queue |
927 | + file = profile.articles.find_by_name('rails.png') | ||
928 | + assert File.exists?(file.icon_name) | ||
929 | + file.destroy | ||
928 | end | 930 | end |
929 | 931 | ||
930 | should 'create icon upload file' do | 932 | should 'create icon upload file' do |
@@ -932,8 +934,10 @@ class CmsControllerTest < Test::Unit::TestCase | @@ -932,8 +934,10 @@ class CmsControllerTest < Test::Unit::TestCase | ||
932 | :type => UploadedFile.name, | 934 | :type => UploadedFile.name, |
933 | :article => {:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')} | 935 | :article => {:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')} |
934 | 936 | ||
935 | - assert File.exists?(assigns(:article).icon_name) | ||
936 | - assigns(:article).destroy | 937 | + process_delayed_job_queue |
938 | + file = profile.articles.find_by_name('rails.png') | ||
939 | + assert File.exists?(file.icon_name) | ||
940 | + file.destroy | ||
937 | end | 941 | end |
938 | 942 | ||
939 | should 'record when coming from public view on upload files' do | 943 | should 'record when coming from public view on upload files' do |
@@ -1052,10 +1056,20 @@ class CmsControllerTest < Test::Unit::TestCase | @@ -1052,10 +1056,20 @@ class CmsControllerTest < Test::Unit::TestCase | ||
1052 | 1056 | ||
1053 | should 'display list of images' do | 1057 | should 'display list of images' do |
1054 | file = UploadedFile.create!(:profile => profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | 1058 | file = UploadedFile.create!(:profile => profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) |
1059 | + process_delayed_job_queue | ||
1060 | + get :media_listing, :profile => profile.identifier | ||
1061 | + | ||
1062 | + assert_tag :tag => 'div', :attributes => { :id => 'media-listing-images' }, :descendant => { :tag => 'img', :attributes => {:src => /rails.png/}} | ||
1063 | + end | ||
1064 | + | ||
1065 | + should 'display loading image if not processed yet' do | ||
1066 | + file = UploadedFile.create!(:profile => profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | ||
1055 | get :media_listing, :profile => profile.identifier | 1067 | get :media_listing, :profile => profile.identifier |
1056 | - assert_tag :tag => 'div', :attributes => { :id => 'media-listing-images' }, :descendant => { :tag => 'img', :attributes => {:src => /#{file.name}/}} | 1068 | + |
1069 | + assert_tag :tag => 'div', :attributes => { :id => 'media-listing-images' }, :descendant => { :tag => 'img', :attributes => {:src => /image-loading-thumb.png/}} | ||
1057 | end | 1070 | end |
1058 | 1071 | ||
1072 | + | ||
1059 | should 'display list of documents' do | 1073 | should 'display list of documents' do |
1060 | file = UploadedFile.create!(:profile => profile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain')) | 1074 | file = UploadedFile.create!(:profile => profile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain')) |
1061 | get :media_listing, :profile => profile.identifier | 1075 | get :media_listing, :profile => profile.identifier |
@@ -1265,4 +1279,19 @@ class CmsControllerTest < Test::Unit::TestCase | @@ -1265,4 +1279,19 @@ class CmsControllerTest < Test::Unit::TestCase | ||
1265 | assert_template 'edit' | 1279 | assert_template 'edit' |
1266 | end | 1280 | end |
1267 | 1281 | ||
1282 | + should 'create thumbnails for images with delayed_job' do | ||
1283 | + post :upload_files, :profile => profile.identifier, :uploaded_files => [fixture_file_upload('/files/rails.png', 'image/png'), fixture_file_upload('/files/test.txt', 'text/plain')] | ||
1284 | + file_1 = profile.articles.find_by_path('rails.png') | ||
1285 | + file_2 = profile.articles.find_by_path('test.txt') | ||
1286 | + | ||
1287 | + process_delayed_job_queue | ||
1288 | + | ||
1289 | + UploadedFile.attachment_options[:thumbnails].each do |suffix, size| | ||
1290 | + assert File.exists?(UploadedFile.find(file_1.id).public_filename(suffix)) | ||
1291 | + assert !File.exists?(UploadedFile.find(file_2.id).public_filename(suffix)) | ||
1292 | + end | ||
1293 | + file_1.destroy | ||
1294 | + file_2.destroy | ||
1295 | + end | ||
1296 | + | ||
1268 | end | 1297 | end |
test/functional/content_viewer_controller_test.rb
@@ -791,6 +791,52 @@ class ContentViewerControllerTest < Test::Unit::TestCase | @@ -791,6 +791,52 @@ class ContentViewerControllerTest < Test::Unit::TestCase | ||
791 | assert_equal 2, assigns(:images).size | 791 | assert_equal 2, assigns(:images).size |
792 | end | 792 | end |
793 | 793 | ||
794 | + should 'display default image in the slideshow if thumbnails were not processed' do | ||
795 | + @controller.stubs(:per_page).returns(1) | ||
796 | + folder = Folder.create!(:name => 'gallery', :profile => profile, :view_as => 'image_gallery') | ||
797 | + | ||
798 | + image1 = UploadedFile.create!(:profile => profile, :parent => folder, :uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg')) | ||
799 | + | ||
800 | + get :view_page, :profile => profile.identifier, :page => folder.explode_path, :slideshow => true | ||
801 | + | ||
802 | + assert_tag :tag => 'img', :attributes => {:src => /\/images\/icons-app\/image-loading-display.png/} | ||
803 | + end | ||
804 | + | ||
805 | + should 'display thumbnail image in the slideshow if thumbnails were processed' do | ||
806 | + @controller.stubs(:per_page).returns(1) | ||
807 | + folder = Folder.create!(:name => 'gallery', :profile => profile, :view_as => 'image_gallery') | ||
808 | + | ||
809 | + image1 = UploadedFile.create!(:profile => profile, :parent => folder, :uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg')) | ||
810 | + | ||
811 | + process_delayed_job_queue | ||
812 | + get :view_page, :profile => profile.identifier, :page => folder.explode_path, :slideshow => true | ||
813 | + | ||
814 | + assert_tag :tag => 'img', :attributes => {:src => /other-pic_display.jpg/} | ||
815 | + end | ||
816 | + | ||
817 | + should 'display default image in gallery if thumbnails were not processed' do | ||
818 | + @controller.stubs(:per_page).returns(1) | ||
819 | + folder = Folder.create!(:name => 'gallery', :profile => profile, :view_as => 'image_gallery') | ||
820 | + | ||
821 | + image1 = UploadedFile.create!(:profile => profile, :parent => folder, :uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg')) | ||
822 | + | ||
823 | + get :view_page, :profile => profile.identifier, :page => folder.explode_path | ||
824 | + | ||
825 | + assert_tag :tag => 'img', :attributes => {:src => /\/images\/icons-app\/image-loading-thumb.png/} | ||
826 | + end | ||
827 | + | ||
828 | + should 'display thumbnail image in gallery if thumbnails were processed' do | ||
829 | + @controller.stubs(:per_page).returns(1) | ||
830 | + folder = Folder.create!(:name => 'gallery', :profile => profile, :view_as => 'image_gallery') | ||
831 | + | ||
832 | + image1 = UploadedFile.create!(:profile => profile, :parent => folder, :uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg')) | ||
833 | + | ||
834 | + process_delayed_job_queue | ||
835 | + get :view_page, :profile => profile.identifier, :page => folder.explode_path | ||
836 | + | ||
837 | + assert_tag :tag => 'img', :attributes => {:src => /other-pic_thumb.jpg/} | ||
838 | + end | ||
839 | + | ||
794 | should 'display source from article' do | 840 | should 'display source from article' do |
795 | profile.articles << TextileArticle.new(:name => "Article one", :profile => profile, :source => 'http://www.original-source.invalid') | 841 | profile.articles << TextileArticle.new(:name => "Article one", :profile => profile, :source => 'http://www.original-source.invalid') |
796 | get :view_page, :profile => profile.identifier, :page => ['article-one'] | 842 | get :view_page, :profile => profile.identifier, :page => ['article-one'] |
test/functional/search_controller_test.rb
@@ -562,6 +562,8 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -562,6 +562,8 @@ class SearchControllerTest < Test::Unit::TestCase | ||
562 | cat = Category.create!(:name => 'category2', :environment => Environment.default, :parent => parent, | 562 | cat = Category.create!(:name => 'category2', :environment => Environment.default, :parent => parent, |
563 | :image_builder => {:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')} | 563 | :image_builder => {:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')} |
564 | ) | 564 | ) |
565 | + | ||
566 | + process_delayed_job_queue | ||
565 | get :category_index, :category_path => [ 'category1', 'category2' ], :query => 'teste' | 567 | get :category_index, :category_path => [ 'category1', 'category2' ], :query => 'teste' |
566 | assert_tag :tag => 'img', :attributes => { :src => /rails_thumb\.png/ } | 568 | assert_tag :tag => 'img', :attributes => { :src => /rails_thumb\.png/ } |
567 | end | 569 | end |
test/unit/image_test.rb
@@ -3,6 +3,11 @@ require File.dirname(__FILE__) + '/../test_helper' | @@ -3,6 +3,11 @@ require File.dirname(__FILE__) + '/../test_helper' | ||
3 | class ImageTest < Test::Unit::TestCase | 3 | class ImageTest < Test::Unit::TestCase |
4 | fixtures :images | 4 | fixtures :images |
5 | 5 | ||
6 | + def setup | ||
7 | + @profile = create_user('testinguser').person | ||
8 | + end | ||
9 | + attr_reader :profile | ||
10 | + | ||
6 | should 'have thumbnails options' do | 11 | should 'have thumbnails options' do |
7 | [:big, :thumb, :portrait, :minor, :icon].each do |option| | 12 | [:big, :thumb, :portrait, :minor, :icon].each do |option| |
8 | assert Image.attachment_options[:thumbnails].include?(option), "should have #{option}" | 13 | assert Image.attachment_options[:thumbnails].include?(option), "should have #{option}" |
@@ -16,4 +21,67 @@ class ImageTest < Test::Unit::TestCase | @@ -16,4 +21,67 @@ class ImageTest < Test::Unit::TestCase | ||
16 | assert_match /#{Image.max_size.to_humanreadable}/, image.errors[:size] | 21 | assert_match /#{Image.max_size.to_humanreadable}/, image.errors[:size] |
17 | end | 22 | end |
18 | 23 | ||
24 | + should 'create thumbnails after processing jobs' do | ||
25 | + file = Image.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :owner => profile) | ||
26 | + | ||
27 | + process_delayed_job_queue | ||
28 | + Image.attachment_options[:thumbnails].each do |suffix, size| | ||
29 | + assert File.exists?(Image.find(file.id).public_filename(suffix)) | ||
30 | + end | ||
31 | + file.destroy | ||
32 | + end | ||
33 | + | ||
34 | + should 'set thumbnails_processed to true after creating thumbnails' do | ||
35 | + file = Image.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :owner => profile) | ||
36 | + | ||
37 | + process_delayed_job_queue | ||
38 | + | ||
39 | + assert Image.find(file.id).thumbnails_processed | ||
40 | + file.destroy | ||
41 | + end | ||
42 | + | ||
43 | + should 'have thumbnails_processed attribute' do | ||
44 | + assert Image.new.respond_to?(:thumbnails_processed) | ||
45 | + end | ||
46 | + | ||
47 | + should 'return false by default in thumbnails_processed' do | ||
48 | + assert !Image.new.thumbnails_processed | ||
49 | + end | ||
50 | + | ||
51 | + should 'set thumbnails_processed to true' do | ||
52 | + file = Image.new | ||
53 | + file.thumbnails_processed = true | ||
54 | + | ||
55 | + assert file.thumbnails_processed | ||
56 | + end | ||
57 | + | ||
58 | + should 'have a default image if thumbnails were not processed' do | ||
59 | + file = Image.new | ||
60 | + assert_equal '/images/icons-app/image-loading-thumb.png', file.public_filename(:thumb) | ||
61 | + end | ||
62 | + | ||
63 | + should 'return image thumbnail if thumbnails were processed' do | ||
64 | + file = Image.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :owner => profile) | ||
65 | + process_delayed_job_queue | ||
66 | + | ||
67 | + assert_match(/rails_thumb.png/, Image.find(file.id).public_filename(:thumb)) | ||
68 | + | ||
69 | + file.destroy | ||
70 | + end | ||
71 | + | ||
72 | + should 'store width and height after processing' do | ||
73 | + file = Image.create!(:owner => profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | ||
74 | + file.create_thumbnails | ||
75 | + | ||
76 | + file = Image.find(file.id) | ||
77 | + assert_equal [50, 64], [file.width, file.height] | ||
78 | + end | ||
79 | + | ||
80 | + should 'have a loading image to each size of thumbnails' do | ||
81 | + Image.attachment_options[:thumbnails].each do |suffix, size| | ||
82 | + image = RAILS_ROOT + '/public/images/icons-app/image-loading-%s.png' % suffix | ||
83 | + assert File.exists?(image) | ||
84 | + end | ||
85 | + end | ||
86 | + | ||
19 | end | 87 | end |
test/unit/products_block_test.rb
@@ -136,4 +136,27 @@ class ProductsBlockTest < ActiveSupport::TestCase | @@ -136,4 +136,27 @@ class ProductsBlockTest < ActiveSupport::TestCase | ||
136 | 136 | ||
137 | assert_tag_in_string footer, :tag => 'a', :attributes => { :href => /\/catalog\/testenterprise$/ }, :content => 'View all products' | 137 | assert_tag_in_string footer, :tag => 'a', :attributes => { :href => /\/catalog\/testenterprise$/ }, :content => 'View all products' |
138 | end | 138 | end |
139 | + | ||
140 | + should 'display the default minor image if thumbnails were not processed' do | ||
141 | + enterprise = Enterprise.create!(:name => 'testenterprise', :identifier => 'testenterprise') | ||
142 | + enterprise.products.create!(:name => 'product', :product_category => @product_category, :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')}) | ||
143 | + | ||
144 | + block.expects(:products).returns(enterprise.products) | ||
145 | + | ||
146 | + content = block.content | ||
147 | + | ||
148 | + assert_tag_in_string content, :tag => 'a', :attributes => { :style => /image-loading-minor.png/ } | ||
149 | + end | ||
150 | + | ||
151 | + should 'display the thumbnail image if thumbnails were processed' do | ||
152 | + enterprise = Enterprise.create!(:name => 'testenterprise', :identifier => 'testenterprise') | ||
153 | + enterprise.products.create!(:name => 'product', :product_category => @product_category, :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')}) | ||
154 | + | ||
155 | + process_delayed_job_queue | ||
156 | + block.expects(:products).returns(enterprise.products.reload) | ||
157 | + | ||
158 | + content = block.content | ||
159 | + assert_tag_in_string content, :tag => 'a', :attributes => { :style => /rails_minor.png/ } | ||
160 | + end | ||
161 | + | ||
139 | end | 162 | end |
test/unit/slideshow_block_test.rb
@@ -82,6 +82,14 @@ class SlideshowBlockTest < ActiveSupport::TestCase | @@ -82,6 +82,14 @@ class SlideshowBlockTest < ActiveSupport::TestCase | ||
82 | assert_equal '/bli/slideshow.png', SlideshowBlock.new(:image_size => 'slideshow').public_filename_for(image) | 82 | assert_equal '/bli/slideshow.png', SlideshowBlock.new(:image_size => 'slideshow').public_filename_for(image) |
83 | end | 83 | end |
84 | 84 | ||
85 | + should 'display the default slideshow image if thumbnails were not processed' do | ||
86 | + image = mock | ||
87 | + image.expects(:public_filename).with('slideshow').returns('/images/icons-app/image-loading-slideshow.png') | ||
88 | + File.expects(:exists?).with("#{Rails.root}/public/images/icons-app/image-loading-slideshow.png").returns(true) | ||
89 | + | ||
90 | + assert_equal '/images/icons-app/image-loading-slideshow.png', SlideshowBlock.new(:image_size => 'slideshow').public_filename_for(image) | ||
91 | + end | ||
92 | + | ||
85 | should 'fallback to existing size in case the requested size does not exist' do | 93 | should 'fallback to existing size in case the requested size does not exist' do |
86 | block = SlideshowBlock.new(:image_size => 'slideshow') | 94 | block = SlideshowBlock.new(:image_size => 'slideshow') |
87 | 95 |
test/unit/uploaded_file_test.rb
@@ -90,7 +90,8 @@ class UploadedFileTest < Test::Unit::TestCase | @@ -90,7 +90,8 @@ class UploadedFileTest < Test::Unit::TestCase | ||
90 | f = fast_create(Folder, :name => 'test_folder', :profile_id => p.id) | 90 | f = fast_create(Folder, :name => 'test_folder', :profile_id => p.id) |
91 | file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent_id => f.id, :profile => p) | 91 | file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent_id => f.id, :profile => p) |
92 | 92 | ||
93 | - assert File.exists?(file.public_filename(:icon)) | 93 | + process_delayed_job_queue |
94 | + assert File.exists?(UploadedFile.find(file.id).public_filename(:icon)) | ||
94 | file.destroy | 95 | file.destroy |
95 | end | 96 | end |
96 | 97 | ||
@@ -98,7 +99,8 @@ class UploadedFileTest < Test::Unit::TestCase | @@ -98,7 +99,8 @@ class UploadedFileTest < Test::Unit::TestCase | ||
98 | p = create_user('test_user').person | 99 | p = create_user('test_user').person |
99 | file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => p) | 100 | file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => p) |
100 | 101 | ||
101 | - assert File.exists?(file.public_filename(:icon)) | 102 | + process_delayed_job_queue |
103 | + assert File.exists?(UploadedFile.find(file.id).public_filename(:icon)) | ||
102 | file.destroy | 104 | file.destroy |
103 | end | 105 | end |
104 | 106 | ||
@@ -156,4 +158,74 @@ class UploadedFileTest < Test::Unit::TestCase | @@ -156,4 +158,74 @@ class UploadedFileTest < Test::Unit::TestCase | ||
156 | assert_nil upload.errors[:title] | 158 | assert_nil upload.errors[:title] |
157 | end | 159 | end |
158 | 160 | ||
161 | + should 'create thumbnails after processing jobs' do | ||
162 | + file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | ||
163 | + | ||
164 | + process_delayed_job_queue | ||
165 | + | ||
166 | + UploadedFile.attachment_options[:thumbnails].each do |suffix, size| | ||
167 | + assert File.exists?(UploadedFile.find(file.id).public_filename(suffix)) | ||
168 | + end | ||
169 | + file.destroy | ||
170 | + end | ||
171 | + | ||
172 | + should 'set thumbnails_processed to true after creating thumbnails' do | ||
173 | + file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | ||
174 | + | ||
175 | + process_delayed_job_queue | ||
176 | + | ||
177 | + assert UploadedFile.find(file.id).thumbnails_processed | ||
178 | + file.destroy | ||
179 | + end | ||
180 | + | ||
181 | + should 'have thumbnails_processed attribute' do | ||
182 | + assert UploadedFile.new.respond_to?(:thumbnails_processed) | ||
183 | + end | ||
184 | + | ||
185 | + should 'return false by default in thumbnails_processed' do | ||
186 | + assert !UploadedFile.new.thumbnails_processed | ||
187 | + end | ||
188 | + | ||
189 | + should 'set thumbnails_processed to true' do | ||
190 | + file = UploadedFile.new | ||
191 | + file.thumbnails_processed = true | ||
192 | + | ||
193 | + assert file.thumbnails_processed | ||
194 | + end | ||
195 | + | ||
196 | + should 'have a default image if thumbnails were not processed' do | ||
197 | + file = UploadedFile.new | ||
198 | + assert_equal '/images/icons-app/image-loading-thumb.png', file.public_filename | ||
199 | + end | ||
200 | + | ||
201 | + should 'return image thumbnail if thumbnails were processed' do | ||
202 | + file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) | ||
203 | + process_delayed_job_queue | ||
204 | + | ||
205 | + assert_match(/rails_thumb.png/, UploadedFile.find(file.id).public_filename(:thumb)) | ||
206 | + | ||
207 | + file.destroy | ||
208 | + end | ||
209 | + | ||
210 | + should 'return the default thumbnail image as icon for images ' do | ||
211 | + f = UploadedFile.new | ||
212 | + f.expects(:image?).returns(true) | ||
213 | + f.expects(:public_filename).with(:icon).returns('/path/to/file.xyz') | ||
214 | + assert_equal '/path/to/file.xyz', f.icon_name | ||
215 | + end | ||
216 | + | ||
217 | + should 'store width and height after processing' do | ||
218 | + file = UploadedFile.create!(:profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | ||
219 | + file.create_thumbnails | ||
220 | + | ||
221 | + file = UploadedFile.find(file.id) | ||
222 | + assert_equal [50, 64], [file.width, file.height] | ||
223 | + end | ||
224 | + | ||
225 | + should 'have a loading image to each size of thumbnails' do | ||
226 | + UploadedFile.attachment_options[:thumbnails].each do |suffix, size| | ||
227 | + image = RAILS_ROOT + '/public/images/icons-app/image-loading-%s.png' % suffix | ||
228 | + assert File.exists?(image) | ||
229 | + end | ||
230 | + end | ||
159 | end | 231 | end |