spec/unit/attachment/image_spec.rb in bulldog-0.0.11 vs spec/unit/attachment/image_spec.rb in bulldog-0.0.12
- old
+ new
@@ -1,164 +1,177 @@
require 'spec_helper'
describe Attachment::Image do
- use_model_class(:Thing,
- :photo_file_name => :string,
- :photo_width => :integer,
- :photo_height => :integer,
- :photo_aspect_ratio => :float,
- :photo_dimensions => :string)
-
- before do
- Thing.has_attachment :photo do
- style :double, :size => '80x60'
- style :filled, :size => '60x60', :filled => true
- style :unfilled, :size => '120x120'
- default_style :double
- end
- @thing = Thing.new(:photo => test_image_file)
- end
-
def run(command)
`#{command}`
$?.success? or
raise "command failed: #{command}"
end
- describe "#dimensions" do
- it "should return 1x1 if the style is missing" do
- Thing.attachment_reflections[:photo].configure do
- detect_type_by{:image}
+ describe "when file attributes are not stored" do
+ use_model_class(:Thing, :photo_file_name => :string)
+
+ describe "#dimensions" do
+ it "should return 1x1 if the file is missing" do
+ Thing.has_attachment :photo do
+ type :image
+ style :double, :size => '80x60'
+ style :filled, :size => '60x60', :filled => true
+ style :unfilled, :size => '120x120'
+ default_style :double
+ end
+ @thing = Thing.new(:photo => test_image_file)
+ @thing.save.should be_true
+ File.unlink(@thing.photo.path(:original))
+ @thing = Thing.find(@thing.id)
+ @thing.photo.is_a?(Attachment::Image) # sanity check
+ @thing.photo.stream.missing? # sanity check
+ @thing.photo.dimensions(:original).should == [1, 1]
end
- @thing.save.should be_true
- File.unlink(@thing.photo.path(:original))
- @thing = Thing.find(@thing.id)
- @thing.photo.is_a?(Attachment::Image) # sanity check
- @thing.photo.stream.missing? # sanity check
- @thing.photo.dimensions(:original).should == [1, 1]
end
+ end
- it "should return the width and height of the default style if no style name is given" do
- @thing.photo.dimensions.should == [80, 60]
- end
+ describe "when file attributes are stored" do
+ use_model_class(:Thing,
+ :photo_file_name => :string,
+ :photo_width => :integer,
+ :photo_height => :integer,
+ :photo_aspect_ratio => :float,
+ :photo_dimensions => :string)
- it "should return the width and height of the given style" do
- @thing.photo.dimensions(:original).should == [40, 30]
- @thing.photo.dimensions(:double).should == [80, 60]
+ before do
+ Thing.has_attachment :photo do
+ style :double, :size => '80x60'
+ style :filled, :size => '60x60', :filled => true
+ style :unfilled, :size => '120x120'
+ default_style :double
+ end
+ @thing = Thing.new(:photo => test_image_file)
end
- it "should return the calculated width according to style filledness" do
- @thing.photo.dimensions(:filled).should == [60, 60]
- @thing.photo.dimensions(:unfilled).should == [120, 90]
- end
+ describe "#dimensions" do
+ it "should return the width and height of the default style if no style name is given" do
+ @thing.photo.dimensions.should == [80, 60]
+ end
- it "should honor the exif:Orientation header" do
- path = create_image("#{temporary_directory}/test.jpg", :size => '40x30')
- rotated_path = "#{temporary_directory}/rotated-test.jpg"
- run "exif --create-exif --ifd=EXIF --tag=Orientation --set-value=4 --output=#{rotated_path} #{path}"
- open(rotated_path) do |file|
- @thing.photo = file
- @thing.photo.dimensions(:original).should == [30, 40]
+ it "should return the width and height of the given style" do
+ @thing.photo.dimensions(:original).should == [40, 30]
+ @thing.photo.dimensions(:double).should == [80, 60]
end
- end
- it "should only invoke identify once"
- it "should log the result"
- end
+ it "should return the calculated width according to style filledness" do
+ @thing.photo.dimensions(:filled).should == [60, 60]
+ @thing.photo.dimensions(:unfilled).should == [120, 90]
+ end
- describe "#width" do
- it "should return the width of the default style if no style name is given" do
- @thing.photo.width.should == 80
- end
+ it "should honor the exif:Orientation header" do
+ path = create_image("#{temporary_directory}/test.jpg", :size => '40x30')
+ rotated_path = "#{temporary_directory}/rotated-test.jpg"
+ run "exif --create-exif --ifd=EXIF --tag=Orientation --set-value=4 --output=#{rotated_path} #{path}"
+ open(rotated_path) do |file|
+ @thing.photo = file
+ @thing.photo.dimensions(:original).should == [30, 40]
+ end
+ end
- it "should return the width of the given style" do
- @thing.photo.width(:original).should == 40
- @thing.photo.width(:double).should == 80
+ it "should only invoke identify once"
+ it "should log the result"
end
- end
- describe "#height" do
- it "should return the height of the default style if no style name is given" do
- @thing.photo.height.should == 60
- end
+ describe "#width" do
+ it "should return the width of the default style if no style name is given" do
+ @thing.photo.width.should == 80
+ end
- it "should return the height of the given style" do
- @thing.photo.height(:original).should == 30
- @thing.photo.height(:double).should == 60
+ it "should return the width of the given style" do
+ @thing.photo.width(:original).should == 40
+ @thing.photo.width(:double).should == 80
+ end
end
- end
- describe "#aspect_ratio" do
- it "should return the aspect ratio of the default style if no style name is given" do
- @thing.photo.aspect_ratio.should be_close(4.0/3, 1e-5)
- end
+ describe "#height" do
+ it "should return the height of the default style if no style name is given" do
+ @thing.photo.height.should == 60
+ end
- it "should return the aspect ratio of the given style" do
- @thing.photo.aspect_ratio(:original).should be_close(4.0/3, 1e-5)
- @thing.photo.aspect_ratio(:filled).should be_close(1, 1e-5)
+ it "should return the height of the given style" do
+ @thing.photo.height(:original).should == 30
+ @thing.photo.height(:double).should == 60
+ end
end
- end
- describe "storable attributes" do
- it "should set the stored attributes on assignment" do
- @thing.photo_width.should == 40
- @thing.photo_height.should == 30
- @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
- @thing.photo_dimensions.should == '40x30'
- end
+ describe "#aspect_ratio" do
+ it "should return the aspect ratio of the default style if no style name is given" do
+ @thing.photo.aspect_ratio.should be_close(4.0/3, 1e-5)
+ end
- describe "after roundtripping through the database" do
- before do
- @thing.save
- @thing = Thing.find(@thing.id)
+ it "should return the aspect ratio of the given style" do
+ @thing.photo.aspect_ratio(:original).should be_close(4.0/3, 1e-5)
+ @thing.photo.aspect_ratio(:filled).should be_close(1, 1e-5)
end
+ end
- it "should restore the stored attributes" do
+ describe "storable attributes" do
+ it "should set the stored attributes on assignment" do
@thing.photo_width.should == 40
@thing.photo_height.should == 30
@thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
@thing.photo_dimensions.should == '40x30'
end
- it "should recalculate the dimensions correctly" do
- @thing.photo.dimensions(:filled).should == [60, 60]
- @thing.photo.dimensions(:unfilled).should == [120, 90]
+ describe "after roundtripping through the database" do
+ before do
+ @thing.save
+ @thing = Thing.find(@thing.id)
+ end
+
+ it "should restore the stored attributes" do
+ @thing.photo_width.should == 40
+ @thing.photo_height.should == 30
+ @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
+ @thing.photo_dimensions.should == '40x30'
+ end
+
+ it "should recalculate the dimensions correctly" do
+ @thing.photo.dimensions(:filled).should == [60, 60]
+ @thing.photo.dimensions(:unfilled).should == [120, 90]
+ end
end
end
- end
- describe "#reload" do
- before do
- thing = Thing.create(:photo => test_image_file('test.jpg'))
- @thing = Thing.find(thing.id)
- end
+ describe "#reload" do
+ before do
+ thing = Thing.create(:photo => test_image_file('test.jpg'))
+ @thing = Thing.find(thing.id)
+ end
- it "should update the stored attributes from the file" do
- # Prime the cached values.
- @thing.photo_width.should == 40
- @thing.photo_height.should == 30
- @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
- @thing.photo_dimensions.should == '40x30'
+ it "should update the stored attributes from the file" do
+ # Prime the cached values.
+ @thing.photo_width.should == 40
+ @thing.photo_height.should == 30
+ @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
+ @thing.photo_dimensions.should == '40x30'
- FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
- @thing.photo.reload
- @thing.photo_width.should == 2
- @thing.photo_height.should == 2
- @thing.photo_aspect_ratio.should == 1
- @thing.photo_dimensions.should == '2x2'
- end
+ FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
+ @thing.photo.reload
+ @thing.photo_width.should == 2
+ @thing.photo_height.should == 2
+ @thing.photo_aspect_ratio.should == 1
+ @thing.photo_dimensions.should == '2x2'
+ end
- it "should update the original dimensions from the file" do
- @thing.photo.dimensions(:original).should == [40, 30]
- FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
- @thing.photo.reload
- @thing.photo.dimensions(:original).should == [2, 2]
- end
+ it "should update the original dimensions from the file" do
+ @thing.photo.dimensions(:original).should == [40, 30]
+ FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
+ @thing.photo.reload
+ @thing.photo.dimensions(:original).should == [2, 2]
+ end
- it "should update the dimensions for each style from the file" do
- @thing.photo.dimensions(:double).should == [80, 60]
- FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
- @thing.photo.reload
- @thing.photo.dimensions(:double).should == [60, 60]
+ it "should update the dimensions for each style from the file" do
+ @thing.photo.dimensions(:double).should == [80, 60]
+ FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
+ @thing.photo.reload
+ @thing.photo.dimensions(:double).should == [60, 60]
+ end
end
end
end