vendor/plugins/paperclip/test/attachment_test.rb in spree-0.8.5 vs vendor/plugins/paperclip/test/attachment_test.rb in spree-0.9.0
- old
+ new
@@ -3,10 +3,18 @@
class Dummy
# This is a dummy class
end
class AttachmentTest < Test::Unit::TestCase
+ should "return the path based on the url by default" do
+ @attachment = attachment :url => "/:class/:id/:basename"
+ @model = @attachment.instance
+ @model.id = 1234
+ @model.avatar_file_name = "fake.jpg"
+ assert_equal "#{RAILS_ROOT}/public/fake_models/1234/fake", @attachment.path
+ end
+
context "Attachment default_options" do
setup do
rebuild_model
@old_default_options = Paperclip::Attachment.default_options.dup
@new_default_options = @old_default_options.merge({
@@ -75,14 +83,16 @@
rebuild_model :path => ":id.omg/:id-bbq/:idwhat/:id_partition.wtf"
@dummy = Dummy.new
@dummy.stubs(:id).returns(1024)
@file = File.new(File.join(File.dirname(__FILE__),
"fixtures",
- "5k.png"))
+ "5k.png"), 'rb')
@dummy.avatar = @file
end
+ teardown { @file.close }
+
should "make sure that they are interpolated correctly" do
assert_equal "1024.omg/1024-bbq/1024what/000/001/024.wtf", @dummy.avatar.path
end
end
@@ -91,23 +101,35 @@
@rails_env = "blah"
@id = 1024
rebuild_model :path => ":rails_env/:id.png"
@dummy = Dummy.new
@dummy.stubs(:id).returns(@id)
- @file = File.new(File.join(File.dirname(__FILE__),
- "fixtures",
- "5k.png"))
+ @file = StringIO.new(".")
@dummy.avatar = @file
end
should "return the proper path" do
temporary_rails_env(@rails_env) {
assert_equal "#{@rails_env}/#{@id}.png", @dummy.avatar.path
}
end
end
+ context "An attachment with a default style and an extension interpolation" do
+ setup do
+ @attachment = attachment :path => ":basename.:extension",
+ :styles => { :default => ["100x100", :png] },
+ :default_style => :default
+ @file = StringIO.new("...")
+ @file.expects(:original_filename).returns("file.jpg")
+ end
+ should "return the right extension for the path" do
+ @attachment.assign(@file)
+ assert_equal "file.png", @attachment.path
+ end
+ end
+
context "An attachment with :convert_options" do
setup do
rebuild_model :styles => {
:thumb => "100x100",
:large => "400x400"
@@ -115,86 +137,337 @@
:convert_options => {
:all => "-do_stuff",
:thumb => "-thumbnailize"
}
@dummy = Dummy.new
+ @dummy.avatar
end
should "report the correct options when sent #extra_options_for(:thumb)" do
assert_equal "-thumbnailize -do_stuff", @dummy.avatar.send(:extra_options_for, :thumb), @dummy.avatar.convert_options.inspect
end
should "report the correct options when sent #extra_options_for(:large)" do
assert_equal "-do_stuff", @dummy.avatar.send(:extra_options_for, :large)
end
- context "when given a file" do
+ before_should "call extra_options_for(:thumb/:large)" do
+ Paperclip::Attachment.any_instance.expects(:extra_options_for).with(:thumb)
+ Paperclip::Attachment.any_instance.expects(:extra_options_for).with(:large)
+ end
+ end
+
+ context "An attachment with :convert_options that is a proc" do
+ setup do
+ rebuild_model :styles => {
+ :thumb => "100x100",
+ :large => "400x400"
+ },
+ :convert_options => {
+ :all => lambda{|i| i.all },
+ :thumb => lambda{|i| i.thumb }
+ }
+ Dummy.class_eval do
+ def all; "-all"; end
+ def thumb; "-thumb"; end
+ end
+ @dummy = Dummy.new
+ @dummy.avatar
+ end
+
+ should "report the correct options when sent #extra_options_for(:thumb)" do
+ assert_equal "-thumb -all", @dummy.avatar.send(:extra_options_for, :thumb), @dummy.avatar.convert_options.inspect
+ end
+
+ should "report the correct options when sent #extra_options_for(:large)" do
+ assert_equal "-all", @dummy.avatar.send(:extra_options_for, :large)
+ end
+
+ before_should "call extra_options_for(:thumb/:large)" do
+ Paperclip::Attachment.any_instance.expects(:extra_options_for).with(:thumb)
+ Paperclip::Attachment.any_instance.expects(:extra_options_for).with(:large)
+ end
+ end
+
+ context "An attachment with :path that is a proc" do
+ setup do
+ rebuild_model :path => lambda{ |attachment| "path/#{attachment.instance.other}.:extension" }
+
+ @file = File.new(File.join(File.dirname(__FILE__),
+ "fixtures",
+ "5k.png"), 'rb')
+ @dummyA = Dummy.new(:other => 'a')
+ @dummyA.avatar = @file
+ @dummyB = Dummy.new(:other => 'b')
+ @dummyB.avatar = @file
+ end
+
+ teardown { @file.close }
+
+ should "return correct path" do
+ assert_equal "path/a.png", @dummyA.avatar.path
+ assert_equal "path/b.png", @dummyB.avatar.path
+ end
+ end
+
+ context "An attachment with :styles that is a proc" do
+ setup do
+ rebuild_model :styles => lambda{ |attachment| {:thumb => "50x50#", :large => "400x400"} }
+
+ @attachment = Dummy.new.avatar
+ end
+
+ should "have the correct geometry" do
+ assert_equal "50x50#", @attachment.styles[:thumb][:geometry]
+ end
+ end
+
+ context "An attachment with :url that is a proc" do
+ setup do
+ rebuild_model :url => lambda{ |attachment| "path/#{attachment.instance.other}.:extension" }
+
+ @file = File.new(File.join(File.dirname(__FILE__),
+ "fixtures",
+ "5k.png"), 'rb')
+ @dummyA = Dummy.new(:other => 'a')
+ @dummyA.avatar = @file
+ @dummyB = Dummy.new(:other => 'b')
+ @dummyB.avatar = @file
+ end
+
+ teardown { @file.close }
+
+ should "return correct url" do
+ assert_equal "path/a.png", @dummyA.avatar.url(:original, false)
+ assert_equal "path/b.png", @dummyB.avatar.url(:original, false)
+ end
+ end
+
+ geometry_specs = [
+ [ lambda{|z| "50x50#" }, :png ],
+ lambda{|z| "50x50#" },
+ { :geometry => lambda{|z| "50x50#" } }
+ ]
+ geometry_specs.each do |geometry_spec|
+ context "An attachment geometry like #{geometry_spec}" do
setup do
- @file = File.new(File.join(File.dirname(__FILE__),
- "fixtures",
- "5k.png"))
- Paperclip::Thumbnail.stubs(:make)
- [:thumb, :large].each do |style|
- @dummy.avatar.stubs(:extra_options_for).with(style)
- end
+ rebuild_model :styles => { :normal => geometry_spec }
+ @attachment = Dummy.new.avatar
end
- [:thumb, :large].each do |style|
- should "call extra_options_for(#{style})" do
- @dummy.avatar.expects(:extra_options_for).with(style)
- @dummy.avatar = @file
+ should "not run the procs immediately" do
+ assert_kind_of Proc, @attachment.styles[:normal][:geometry]
+ end
+
+ context "when assigned" do
+ setup do
+ @file = StringIO.new(".")
+ @attachment.assign(@file)
end
+
+ should "have the correct geometry" do
+ assert_equal "50x50#", @attachment.styles[:normal][:geometry]
+ end
end
end
end
- context "Assigning an attachment" do
+ context "An attachment with both 'normal' and hash-style styles" do
setup do
- rebuild_model
+ rebuild_model :styles => {
+ :normal => ["50x50#", :png],
+ :hash => { :geometry => "50x50#", :format => :png }
+ }
+ @dummy = Dummy.new
+ @attachment = @dummy.avatar
+ end
+
+ [:processors, :whiny, :convert_options, :geometry, :format].each do |field|
+ should "have the same #{field} field" do
+ assert_equal @attachment.styles[:normal][field], @attachment.styles[:hash][field]
+ end
+ end
+ end
+
+ context "An attachment with :processors that is a proc" do
+ setup do
+ rebuild_model :styles => { :normal => '' }, :processors => lambda { |a| [ :test ] }
+ @attachment = Dummy.new.avatar
+ end
+
+ should "not run the proc immediately" do
+ assert_kind_of Proc, @attachment.styles[:normal][:processors]
+ end
+
+ context "when assigned" do
+ setup do
+ @attachment.assign(StringIO.new("."))
+ end
+
+ should "have the correct processors" do
+ assert_equal [ :test ], @attachment.styles[:normal][:processors]
+ end
+ end
+ end
+
+ context "An attachment with erroring processor" do
+ setup do
+ rebuild_model :processor => [:thumbnail], :styles => { :small => '' }, :whiny_thumbnails => true
+ @dummy = Dummy.new
+ Paperclip::Thumbnail.expects(:make).raises(Paperclip::PaperclipError, "cannot be processed.")
+ @file = StringIO.new("...")
+ @file.stubs(:to_tempfile).returns(@file)
+ @dummy.avatar = @file
+ end
+
+ should "correctly forward processing error message to the instance" do
+ @dummy.valid?
+ assert_contains @dummy.errors.full_messages, "Avatar cannot be processed."
+ end
+ end
+
+ context "An attachment with multiple processors" do
+ setup do
+ class Paperclip::Test < Paperclip::Processor; end
+ @style_params = { :once => {:one => 1, :two => 2} }
+ rebuild_model :processors => [:thumbnail, :test], :styles => @style_params
+ @dummy = Dummy.new
+ @file = StringIO.new("...")
+ @file.stubs(:to_tempfile).returns(@file)
+ Paperclip::Test.stubs(:make).returns(@file)
+ Paperclip::Thumbnail.stubs(:make).returns(@file)
+ end
+
+ context "when assigned" do
+ setup { @dummy.avatar = @file }
+
+ before_should "call #make on all specified processors" do
+ expected_params = @style_params[:once].merge({:processors => [:thumbnail, :test], :whiny => true, :convert_options => ""})
+ Paperclip::Thumbnail.expects(:make).with(@file, expected_params, @dummy.avatar).returns(@file)
+ Paperclip::Test.expects(:make).with(@file, expected_params, @dummy.avatar).returns(@file)
+ end
- @not_file = mock
- @not_file.stubs(:nil?).returns(false)
- @not_file.expects(:to_tempfile).returns(self)
- @not_file.expects(:original_filename).returns("filename.png\r\n")
- @not_file.expects(:content_type).returns("image/png\r\n")
- @not_file.expects(:size).returns(10).times(2)
-
+ before_should "call #make with attachment passed as third argument" do
+ expected_params = @style_params[:once].merge({:processors => [:thumbnail, :test], :whiny => true, :convert_options => ""})
+ Paperclip::Test.expects(:make).with(@file, expected_params, @dummy.avatar).returns(@file)
+ end
+ end
+ end
+
+ context "An attachment with no processors defined" do
+ setup do
+ rebuild_model :processors => [], :styles => {:something => 1}
@dummy = Dummy.new
+ @file = StringIO.new("...")
+ end
+ should "raise when assigned to" do
+ assert_raises(RuntimeError){ @dummy.avatar = @file }
+ end
+ end
+
+ context "Assigning an attachment with post_process hooks" do
+ setup do
+ rebuild_model :styles => { :something => "100x100#" }
+ Dummy.class_eval do
+ before_avatar_post_process :do_before_avatar
+ after_avatar_post_process :do_after_avatar
+ before_post_process :do_before_all
+ after_post_process :do_after_all
+ def do_before_avatar; end
+ def do_after_avatar; end
+ def do_before_all; end
+ def do_after_all; end
+ end
+ @file = StringIO.new(".")
+ @file.stubs(:to_tempfile).returns(@file)
+ @dummy = Dummy.new
+ Paperclip::Thumbnail.stubs(:make).returns(@file)
@attachment = @dummy.avatar
- @attachment.expects(:valid_assignment?).with(@not_file).returns(true)
- @attachment.expects(:queue_existing_for_delete)
- @attachment.expects(:post_process)
- @attachment.expects(:validate)
- @dummy.avatar = @not_file
end
+ should "call the defined callbacks when assigned" do
+ @dummy.expects(:do_before_avatar).with()
+ @dummy.expects(:do_after_avatar).with()
+ @dummy.expects(:do_before_all).with()
+ @dummy.expects(:do_after_all).with()
+ Paperclip::Thumbnail.expects(:make).returns(@file)
+ @dummy.avatar = @file
+ end
+
+ should "not cancel the processing if a before_post_process returns nil" do
+ @dummy.expects(:do_before_avatar).with().returns(nil)
+ @dummy.expects(:do_after_avatar).with()
+ @dummy.expects(:do_before_all).with().returns(nil)
+ @dummy.expects(:do_after_all).with()
+ Paperclip::Thumbnail.expects(:make).returns(@file)
+ @dummy.avatar = @file
+ end
+
+ should "cancel the processing if a before_post_process returns false" do
+ @dummy.expects(:do_before_avatar).never
+ @dummy.expects(:do_after_avatar).never
+ @dummy.expects(:do_before_all).with().returns(false)
+ @dummy.expects(:do_after_all).never
+ Paperclip::Thumbnail.expects(:make).never
+ @dummy.avatar = @file
+ end
+
+ should "cancel the processing if a before_avatar_post_process returns false" do
+ @dummy.expects(:do_before_avatar).with().returns(false)
+ @dummy.expects(:do_after_avatar).never
+ @dummy.expects(:do_before_all).with().returns(true)
+ @dummy.expects(:do_after_all).never
+ Paperclip::Thumbnail.expects(:make).never
+ @dummy.avatar = @file
+ end
+ end
+
+ context "Assigning an attachment" do
+ setup do
+ rebuild_model :styles => { :something => "100x100#" }
+ @file = StringIO.new(".")
+ @file.expects(:original_filename).returns("5k.png\n\n")
+ @file.expects(:content_type).returns("image/png\n\n")
+ @file.stubs(:to_tempfile).returns(@file)
+ @dummy = Dummy.new
+ Paperclip::Thumbnail.expects(:make).returns(@file)
+ @dummy.expects(:run_callbacks).with(:before_avatar_post_process, {:original => @file})
+ @dummy.expects(:run_callbacks).with(:before_post_process, {:original => @file})
+ @dummy.expects(:run_callbacks).with(:after_avatar_post_process, {:original => @file, :something => @file})
+ @dummy.expects(:run_callbacks).with(:after_post_process, {:original => @file, :something => @file})
+ @attachment = @dummy.avatar
+ @dummy.avatar = @file
+ end
+
should "strip whitespace from original_filename field" do
- assert_equal "filename.png", @dummy.avatar.original_filename
+ assert_equal "5k.png", @dummy.avatar.original_filename
end
should "strip whitespace from content_type field" do
assert_equal "image/png", @dummy.avatar.instance.avatar_content_type
end
-
end
context "Attachment with strange letters" do
setup do
rebuild_model
@not_file = mock
+ @tempfile = mock
@not_file.stubs(:nil?).returns(false)
- @not_file.expects(:to_tempfile).returns(self)
+ @not_file.expects(:size).returns(10)
+ @tempfile.expects(:size).returns(10)
+ @not_file.expects(:to_tempfile).returns(@tempfile)
@not_file.expects(:original_filename).returns("sheep_say_bæ.png\r\n")
@not_file.expects(:content_type).returns("image/png\r\n")
- @not_file.expects(:size).returns(10).times(2)
@dummy = Dummy.new
@attachment = @dummy.avatar
@attachment.expects(:valid_assignment?).with(@not_file).returns(true)
@attachment.expects(:queue_existing_for_delete)
@attachment.expects(:post_process)
+ @attachment.expects(:valid?).returns(true)
@attachment.expects(:validate)
@dummy.avatar = @not_file
end
should "remove strange letters and replace with underscore (_)" do
@@ -203,22 +476,28 @@
end
context "An attachment" do
setup do
+ @old_defaults = Paperclip::Attachment.default_options.dup
Paperclip::Attachment.default_options.merge!({
:path => ":rails_root/tmp/:attachment/:class/:style/:id/:basename.:extension"
})
FileUtils.rm_rf("tmp")
rebuild_model
@instance = Dummy.new
@attachment = Paperclip::Attachment.new(:avatar, @instance)
@file = File.new(File.join(File.dirname(__FILE__),
"fixtures",
- "5k.png"))
+ "5k.png"), 'rb')
end
+ teardown do
+ @file.close
+ Paperclip::Attachment.default_options.merge!(@old_defaults)
+ end
+
should "raise if there are not the correct columns when you try to assign" do
@other_attachment = Paperclip::Attachment.new(:not_here, @instance)
assert_raises(Paperclip::PaperclipError) do
@other_attachment.assign(@file)
end
@@ -228,32 +507,42 @@
assert @attachment.to_file.nil?
assert_equal "/avatars/original/missing.png", @attachment.url
assert_equal "/avatars/blah/missing.png", @attachment.url(:blah)
end
+ should "return nil as path when no file assigned" do
+ assert @attachment.to_file.nil?
+ assert_equal nil, @attachment.path
+ assert_equal nil, @attachment.path(:blah)
+ end
+
context "with a file assigned in the database" do
setup do
- @instance.stubs(:[]).with(:avatar_file_name).returns("5k.png")
- @instance.stubs(:[]).with(:avatar_content_type).returns("image/png")
- @instance.stubs(:[]).with(:avatar_file_size).returns(12345)
+ @attachment.stubs(:instance_read).with(:file_name).returns("5k.png")
+ @attachment.stubs(:instance_read).with(:content_type).returns("image/png")
+ @attachment.stubs(:instance_read).with(:file_size).returns(12345)
now = Time.now
Time.stubs(:now).returns(now)
- @instance.stubs(:[]).with(:avatar_updated_at).returns(Time.now)
+ @attachment.stubs(:instance_read).with(:updated_at).returns(Time.now)
end
should "return a correct url even if the file does not exist" do
assert_nil @attachment.to_file
- assert_match %r{^/avatars/#{@instance.id}/blah/5k\.png}, @attachment.url(:blah)
+ assert_match %r{^/system/avatars/#{@instance.id}/blah/5k\.png}, @attachment.url(:blah)
end
should "make sure the updated_at mtime is in the url if it is defined" do
assert_match %r{#{Time.now.to_i}$}, @attachment.url(:blah)
end
+
+ should "make sure the updated_at mtime is NOT in the url if false is passed to the url method" do
+ assert_no_match %r{#{Time.now.to_i}$}, @attachment.url(:blah, false)
+ end
context "with the updated_at field removed" do
setup do
- @instance.stubs(:[]).with(:avatar_updated_at).returns(nil)
+ @attachment.stubs(:instance_read).with(:updated_at).returns(nil)
end
should "only return the url without the updated_at when sent #url" do
assert_match "/avatars/#{@instance.id}/blah/5k.png", @attachment.url(:blah)
end
@@ -262,11 +551,11 @@
should "return the proper path when filename has a single .'s" do
assert_equal "./test/../tmp/avatars/dummies/original/#{@instance.id}/5k.png", @attachment.path
end
should "return the proper path when filename has multiple .'s" do
- @instance.stubs(:[]).with(:avatar_file_name).returns("5k.old.png")
+ @attachment.stubs(:instance_read).with(:file_name).returns("5k.old.png")
assert_equal "./test/../tmp/avatars/dummies/original/#{@instance.id}/5k.old.png", @attachment.path
end
context "when expecting three styles" do
setup do
@@ -293,57 +582,79 @@
setup do
@attachment.save
end
should "return the real url" do
- assert @attachment.to_file
- assert_match %r{^/avatars/#{@instance.id}/original/5k\.png}, @attachment.url
- assert_match %r{^/avatars/#{@instance.id}/small/5k\.jpg}, @attachment.url(:small)
+ file = @attachment.to_file
+ assert file
+ assert_match %r{^/system/avatars/#{@instance.id}/original/5k\.png}, @attachment.url
+ assert_match %r{^/system/avatars/#{@instance.id}/small/5k\.jpg}, @attachment.url(:small)
+ file.close
end
should "commit the files to disk" do
[:large, :medium, :small].each do |style|
io = @attachment.to_io(style)
assert File.exists?(io)
assert ! io.is_a?(::Tempfile)
+ io.close
end
end
should "save the files as the right formats and sizes" do
[[:large, 400, 61, "PNG"],
[:medium, 100, 15, "GIF"],
[:small, 32, 32, "JPEG"]].each do |style|
- cmd = "identify -format '%w %h %b %m' " +
- "#{@attachment.to_io(style.first).path}"
+ cmd = %Q[identify -format "%w %h %b %m" "#{@attachment.path(style.first)}"]
out = `#{cmd}`
width, height, size, format = out.split(" ")
assert_equal style[1].to_s, width.to_s
assert_equal style[2].to_s, height.to_s
assert_equal style[3].to_s, format.to_s
end
end
should "still have its #file attribute not be nil" do
- assert ! @attachment.to_file.nil?
+ assert ! (file = @attachment.to_file).nil?
+ file.close
end
- context "and deleted" do
+ context "and trying to delete" do
setup do
@existing_names = @attachment.styles.keys.collect do |style|
@attachment.path(style)
end
- @instance.expects(:[]=).with(:avatar_file_name, nil)
- @instance.expects(:[]=).with(:avatar_content_type, nil)
- @instance.expects(:[]=).with(:avatar_file_size, nil)
- @instance.expects(:[]=).with(:avatar_updated_at, nil)
+ end
+
+ should "delete the files after assigning nil" do
+ @attachment.expects(:instance_write).with(:file_name, nil)
+ @attachment.expects(:instance_write).with(:content_type, nil)
+ @attachment.expects(:instance_write).with(:file_size, nil)
+ @attachment.expects(:instance_write).with(:updated_at, nil)
@attachment.assign nil
@attachment.save
+ @existing_names.each{|f| assert ! File.exists?(f) }
end
- should "delete the files" do
+ should "delete the files when you call #clear and #save" do
+ @attachment.expects(:instance_write).with(:file_name, nil)
+ @attachment.expects(:instance_write).with(:content_type, nil)
+ @attachment.expects(:instance_write).with(:file_size, nil)
+ @attachment.expects(:instance_write).with(:updated_at, nil)
+ @attachment.clear
+ @attachment.save
@existing_names.each{|f| assert ! File.exists?(f) }
end
+
+ should "delete the files when you call #delete" do
+ @attachment.expects(:instance_write).with(:file_name, nil)
+ @attachment.expects(:instance_write).with(:content_type, nil)
+ @attachment.expects(:instance_write).with(:file_size, nil)
+ @attachment.expects(:instance_write).with(:updated_at, nil)
+ @attachment.destroy
+ @existing_names.each{|f| assert ! File.exists?(f) }
+ end
end
end
end
end
@@ -354,9 +665,104 @@
rebuild_model :storage => :not_here
end
should "not be able to find the module" do
assert_raise(NameError){ Dummy.new.avatar }
+ end
+ end
+ end
+
+ context "An attachment with only a avatar_file_name column" do
+ setup do
+ ActiveRecord::Base.connection.create_table :dummies, :force => true do |table|
+ table.column :avatar_file_name, :string
+ end
+ rebuild_class
+ @dummy = Dummy.new
+ @file = File.new(File.join(File.dirname(__FILE__), "fixtures", "5k.png"), 'rb')
+ end
+
+ teardown { @file.close }
+
+ should "not error when assigned an attachment" do
+ assert_nothing_raised { @dummy.avatar = @file }
+ end
+
+ should "return the time when sent #avatar_updated_at" do
+ now = Time.now
+ Time.stubs(:now).returns(now)
+ @dummy.avatar = @file
+ assert now, @dummy.avatar.updated_at
+ end
+
+ should "return nil when reloaded and sent #avatar_updated_at" do
+ @dummy.save
+ @dummy.reload
+ assert_nil @dummy.avatar.updated_at
+ end
+
+ should "return the right value when sent #avatar_file_size" do
+ @dummy.avatar = @file
+ assert_equal @file.size, @dummy.avatar.size
+ end
+
+ context "and avatar_updated_at column" do
+ setup do
+ ActiveRecord::Base.connection.add_column :dummies, :avatar_updated_at, :timestamp
+ rebuild_class
+ @dummy = Dummy.new
+ end
+
+ should "not error when assigned an attachment" do
+ assert_nothing_raised { @dummy.avatar = @file }
+ end
+
+ should "return the right value when sent #avatar_updated_at" do
+ now = Time.now
+ Time.stubs(:now).returns(now)
+ @dummy.avatar = @file
+ assert_equal now.to_i, @dummy.avatar.updated_at
+ end
+ end
+
+ context "and avatar_content_type column" do
+ setup do
+ ActiveRecord::Base.connection.add_column :dummies, :avatar_content_type, :string
+ rebuild_class
+ @dummy = Dummy.new
+ end
+
+ should "not error when assigned an attachment" do
+ assert_nothing_raised { @dummy.avatar = @file }
+ end
+
+ should "return the right value when sent #avatar_content_type" do
+ @dummy.avatar = @file
+ assert_equal "image/png", @dummy.avatar.content_type
+ end
+ end
+
+ context "and avatar_file_size column" do
+ setup do
+ ActiveRecord::Base.connection.add_column :dummies, :avatar_file_size, :integer
+ rebuild_class
+ @dummy = Dummy.new
+ end
+
+ should "not error when assigned an attachment" do
+ assert_nothing_raised { @dummy.avatar = @file }
+ end
+
+ should "return the right value when sent #avatar_file_size" do
+ @dummy.avatar = @file
+ assert_equal @file.size, @dummy.avatar.size
+ end
+
+ should "return the right value when saved, reloaded, and sent #avatar_file_size" do
+ @dummy.avatar = @file
+ @dummy.save
+ @dummy = Dummy.find(@dummy.id)
+ assert_equal @file.size, @dummy.avatar.size
end
end
end
end