2013-06-16 10:39:48 +02:00
require 'spec_helper'
describe OptimizedImage do
2013-11-05 19:04:47 +01:00
let ( :upload ) { build ( :upload ) }
before { upload . id = 42 }
2013-06-17 02:46:42 +02:00
describe " .create_for " do
2013-11-05 19:04:47 +01:00
context " when using an internal store " do
let ( :store ) { FakeInternalStore . new }
before { Discourse . stubs ( :store ) . returns ( store ) }
2014-05-26 19:46:43 +10:00
context " when an error happened while generating the thumbnail " do
2013-11-05 19:04:47 +01:00
it " returns nil " do
2014-05-26 19:46:43 +10:00
OptimizedImage . expects ( :resize ) . returns ( false )
2015-01-05 13:04:23 -03:00
expect ( OptimizedImage . create_for ( upload , 100 , 200 ) ) . to eq ( nil )
2013-11-05 19:04:47 +01:00
end
end
context " when the thumbnail is properly generated " do
2014-05-26 19:46:43 +10:00
before do
OptimizedImage . expects ( :resize ) . returns ( true )
end
2013-11-05 19:04:47 +01:00
it " does not download a copy of the original image " do
store . expects ( :download ) . never
OptimizedImage . create_for ( upload , 100 , 200 )
end
2013-07-31 23:26:34 +02:00
2013-11-05 19:04:47 +01:00
it " closes and removes the tempfile " do
Tempfile . any_instance . expects ( :close! )
OptimizedImage . create_for ( upload , 100 , 200 )
end
it " works " do
oi = OptimizedImage . create_for ( upload , 100 , 200 )
2015-01-05 13:04:23 -03:00
expect ( oi . sha1 ) . to eq ( " da39a3ee5e6b4b0d3255bfef95601890afd80709 " )
expect ( oi . extension ) . to eq ( " .png " )
expect ( oi . width ) . to eq ( 100 )
expect ( oi . height ) . to eq ( 200 )
expect ( oi . url ) . to eq ( " /internally/stored/optimized/image.png " )
2013-11-05 19:04:47 +01:00
end
2013-07-31 23:26:34 +02:00
end
2013-06-17 02:46:42 +02:00
end
2013-07-31 23:26:34 +02:00
describe " external store " do
2013-11-05 19:04:47 +01:00
let ( :store ) { FakeExternalStore . new }
before { Discourse . stubs ( :store ) . returns ( store ) }
context " when an error happened while generatign the thumbnail " do
it " returns nil " do
2014-05-26 19:46:43 +10:00
OptimizedImage . expects ( :resize ) . returns ( false )
2015-01-05 13:04:23 -03:00
expect ( OptimizedImage . create_for ( upload , 100 , 200 ) ) . to eq ( nil )
2013-11-05 19:04:47 +01:00
end
2013-07-31 23:26:34 +02:00
end
2013-11-05 19:04:47 +01:00
context " when the thumbnail is properly generated " do
2014-05-26 19:46:43 +10:00
before do
OptimizedImage . expects ( :resize ) . returns ( true )
end
2013-11-05 19:04:47 +01:00
it " downloads a copy of the original image " do
Tempfile . any_instance . expects ( :close! ) . twice
2014-04-14 22:55:57 +02:00
store . expects ( :download ) . with ( upload ) . returns ( Tempfile . new ( [ " discourse-external " , " .png " ] ) )
2013-11-05 19:04:47 +01:00
OptimizedImage . create_for ( upload , 100 , 200 )
end
it " works " do
oi = OptimizedImage . create_for ( upload , 100 , 200 )
2015-01-05 13:04:23 -03:00
expect ( oi . sha1 ) . to eq ( " da39a3ee5e6b4b0d3255bfef95601890afd80709 " )
expect ( oi . extension ) . to eq ( " .png " )
expect ( oi . width ) . to eq ( 100 )
expect ( oi . height ) . to eq ( 200 )
expect ( oi . url ) . to eq ( " /externally/stored/optimized/image.png " )
2013-11-05 19:04:47 +01:00
end
2013-07-31 23:26:34 +02:00
end
2013-06-17 02:46:42 +02:00
end
end
2013-06-16 10:39:48 +02:00
end
2013-11-05 19:04:47 +01:00
class FakeInternalStore
def internal?
true
end
def external?
! internal?
end
def path_for ( upload )
upload . url
end
def store_optimized_image ( file , optimized_image )
" /internally/stored/optimized/image #{ optimized_image . extension } "
end
end
class FakeExternalStore
def external?
true
end
def internal?
! external?
end
def store_optimized_image ( file , optimized_image )
" /externally/stored/optimized/image #{ optimized_image . extension } "
end
def download ( upload )
extension = File . extname ( upload . original_filename )
Tempfile . new ( [ " discourse-s3 " , extension ] )
end
end