plugins/attachment_fu/test/base_attachment_tests.rb
module BaseAttachmentTests
  def test_should_create_file_from_uploaded_file
    assert_created do
      attachment = upload_file :filename => '/files/foo.txt'
      assert_valid attachment
      assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
      assert  attachment.image?
      assert !attachment.size.zero?
      #assert_equal 3, attachment.size
      assert_nil      attachment.width
      assert_nil      attachment.height
    end
  end
  
  def test_should_create_file_from_merb_temp_file
    assert_created do
      attachment = upload_merb_file :filename => '/files/foo.txt'
      assert_valid attachment
      assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
      assert  attachment.image?
      assert !attachment.size.zero?
      #assert_equal 3, attachment.size
      assert_nil      attachment.width
      assert_nil      attachment.height
    end
  end
  
  def test_reassign_attribute_data
    assert_created 1 do
      attachment = upload_file :filename => '/files/rails.png'
      assert_valid attachment
      assert attachment.size > 0, "no data was set"
      
      attachment.temp_data = 'wtf'
      assert attachment.save_attachment?
      attachment.save!
      
      assert_equal 'wtf', attachment_model.find(attachment.id).send(:current_data)
    end
  end
  
  def test_no_reassign_attribute_data_on_nil
    assert_created 1 do
      attachment = upload_file :filename => '/files/rails.png'
      assert_valid attachment
      assert attachment.size > 0, "no data was set"
      
      attachment.temp_data = nil
      assert !attachment.save_attachment?
    end
  end
  
  def test_should_overwrite_old_contents_when_updating
    attachment   = upload_file :filename => '/files/rails.png'
    assert_not_created do # no new db_file records
      use_temp_file 'files/rails.png' do |file|
        attachment.filename = 'rails2.png'
        attachment.temp_path = File.join(fixture_path, file)
        attachment.save!
      end
    end
  end
  
  def test_should_save_without_updating_file
    attachment = upload_file :filename => '/files/foo.txt'
    assert_valid attachment
    assert !attachment.save_attachment?
    assert_nothing_raised { attachment.save! }
  end
  
  def test_should_handle_nil_file_upload
    attachment = attachment_model.create :uploaded_data => ''
    assert_raise ActiveRecord::RecordInvalid do
      attachment.save!
    end
  end
end