2013-02-05 14:16:51 -05:00
require 'spec_helper'
2013-06-15 11:52:40 +02:00
require 'digest/sha1'
2013-02-05 14:16:51 -05:00
describe Upload do
it { should belong_to :user }
2013-04-07 17:52:46 +02:00
2013-06-13 23:44:24 +02:00
it { should have_many :post_uploads }
it { should have_many :posts }
2013-06-13 01:43:50 +02:00
2013-06-16 10:39:48 +02:00
it { should have_many :optimized_images }
2013-07-13 23:42:19 +02:00
let ( :upload ) { build ( :upload ) }
let ( :thumbnail ) { build ( :optimized_image , upload : upload ) }
2013-04-07 17:52:46 +02:00
2013-07-13 23:42:19 +02:00
let ( :user_id ) { 1 }
let ( :url ) { " http://domain.com " }
2013-04-07 17:52:46 +02:00
2014-04-14 22:55:57 +02:00
let ( :image_path ) { " #{ Rails . root } /spec/fixtures/images/logo.png " }
let ( :image ) { File . new ( image_path ) }
let ( :image_filename ) { File . basename ( image_path ) }
let ( :image_filesize ) { File . size ( image_path ) }
let ( :image_sha1 ) { Digest :: SHA1 . file ( image ) . hexdigest }
2013-07-13 23:42:19 +02:00
2014-04-14 22:55:57 +02:00
let ( :attachment_path ) { __FILE__ }
let ( :attachment ) { File . new ( attachment_path ) }
let ( :attachment_filename ) { File . basename ( attachment_path ) }
let ( :attachment_filesize ) { File . size ( attachment_path ) }
2013-07-24 00:54:18 +02:00
2013-07-13 23:42:19 +02:00
context " .create_thumbnail! " do
it " does not create a thumbnail when disabled " do
SiteSetting . stubs ( :create_thumbnails? ) . returns ( false )
2013-07-31 23:26:34 +02:00
OptimizedImage . expects ( :create_for ) . never
2013-09-27 10:55:50 +02:00
upload . create_thumbnail! ( 100 , 100 )
2013-07-13 23:42:19 +02:00
end
it " creates a thumbnail " do
upload = Fabricate ( :upload )
thumbnail = Fabricate ( :optimized_image , upload : upload )
SiteSetting . expects ( :create_thumbnails? ) . returns ( true )
OptimizedImage . expects ( :create_for ) . returns ( thumbnail )
2013-09-27 10:55:50 +02:00
upload . create_thumbnail! ( 100 , 100 )
2013-07-13 23:42:19 +02:00
upload . reload
upload . optimized_images . count . should == 1
end
end
2013-11-05 19:04:47 +01:00
context " # create_for " do
2013-07-13 23:42:19 +02:00
it " does not create another upload if it already exists " do
2014-05-06 14:41:59 +01:00
Upload . expects ( :find_by ) . with ( sha1 : image_sha1 ) . returns ( upload )
2014-04-14 22:55:57 +02:00
Upload . expects ( :save ) . never
Upload . create_for ( user_id , image , image_filename , image_filesize ) . should == upload
2013-04-07 17:52:46 +02:00
end
2013-07-13 23:42:19 +02:00
it " computes width & height for images " do
FastImage . any_instance . expects ( :size ) . returns ( [ 100 , 200 ] )
ImageSizer . expects ( :resize )
2014-04-14 22:55:57 +02:00
image . expects ( :rewind ) . twice
Upload . create_for ( user_id , image , image_filename , image_filesize )
2013-07-13 23:42:19 +02:00
end
2013-04-07 17:52:46 +02:00
2013-07-13 23:42:19 +02:00
it " does not create an upload when there is an error with FastImage " do
2014-04-14 22:55:57 +02:00
FileHelper . expects ( :is_image? ) . returns ( true )
Upload . expects ( :save ) . never
upload = Upload . create_for ( user_id , attachment , attachment_filename , attachment_filesize )
upload . errors . size . should > 0
2013-07-13 23:42:19 +02:00
end
2013-04-07 17:52:46 +02:00
2013-07-13 23:42:19 +02:00
it " does not compute width & height for non-image " do
FastImage . any_instance . expects ( :size ) . never
2014-04-14 22:55:57 +02:00
upload = Upload . create_for ( user_id , attachment , attachment_filename , attachment_filesize )
upload . errors . size . should > 0
2013-05-31 03:13:37 +02:00
end
2013-07-13 23:42:19 +02:00
it " saves proper information " do
2013-07-31 23:26:34 +02:00
store = { }
Discourse . expects ( :store ) . returns ( store )
store . expects ( :store_upload ) . returns ( url )
2014-04-14 22:55:57 +02:00
upload = Upload . create_for ( user_id , image , image_filename , image_filesize )
2013-07-13 23:42:19 +02:00
upload . user_id . should == user_id
2014-04-14 22:55:57 +02:00
upload . original_filename . should == image_filename
upload . filesize . should == image_filesize
upload . sha1 . should == image_sha1
2013-07-13 23:42:19 +02:00
upload . width . should == 244
upload . height . should == 66
upload . url . should == url
end
end
2013-05-31 03:13:37 +02:00
2013-07-13 23:42:19 +02:00
context " .get_from_url " do
2013-07-22 00:37:23 +02:00
it " works when the file has been uploaded " do
2014-05-06 14:41:59 +01:00
Upload . expects ( :find_by ) . returns ( nil ) . once
2013-07-22 00:37:23 +02:00
Upload . get_from_url ( " /uploads/default/1/10387531.jpg " )
end
it " works when using a cdn " do
Rails . configuration . action_controller . stubs ( :asset_host ) . returns ( " http://my.cdn.com " )
2014-05-06 14:41:59 +01:00
Upload . expects ( :find_by ) . with ( url : " /uploads/default/1/02395732905.jpg " ) . returns ( nil ) . once
2013-07-22 00:37:23 +02:00
Upload . get_from_url ( " http://my.cdn.com/uploads/default/1/02395732905.jpg " )
end
2013-07-13 23:42:19 +02:00
it " works only when the file has been uploaded " do
2014-05-06 14:41:59 +01:00
Upload . expects ( :find_by ) . never
2013-07-22 00:37:23 +02:00
Upload . get_from_url ( " http://domain.com/my/file.txt " )
2013-07-13 23:42:19 +02:00
end
end
2013-02-05 14:16:51 -05:00
end