[rspec-users] How to spec an attachment_fu model

Matt Lins mlins at webinforem.com
Wed Aug 22 12:46:02 EDT 2007


Sorry, attachment_fu is a plugin for handling binary data. It handles 
storing the file in the file system and storing some helpful data in the 
database about the file.

The previous code is from the attachment_fu  plugin(no, I didn't modify 
it). This property needs to be satisfied in order for the model to 
validate. So I need to get my model to validate in the spec so I can 
actually test other parts of my model. Here is my model:

class Picture < ActiveRecord::Base
 
  has_and_belongs_to_many :products
 
  has_attachment :content_type => 'image/jpeg',
                 :storage => :file_system,
                 :max_size => 3.megabytes,
                 :resize_to => '400x400>',
                 :thumbnails => {:medium => '200x200>', :small => 
'100x100>'},
                 :path_prefix => 'images/products'
 
  validates_as_attachment
 
  validates_uniqueness_of :filename
  validates_presence_of :filename
 
  def before_update
    self.thumbnails.each do |t|
      t.filename= thumbnail_name_for(t.thumbnail)
      t.save
    end
  end
 
  def full_filename(thumbnail = nil)
    file_system_path = (thumbnail ? thumbnail_class : 
self).attachment_options[:path_prefix].to_s
    File.join(RAILS_ROOT, 'public/external', file_system_path, 
thumbnail_name_for(thumbnail) + '.jpg')
  end
 
  def public_image
    self.public_filename
  end
 
end

aslak hellesoy wrote:
> On 8/22/07, Matt Lins <mlins at webinforem.com> wrote:
>   
>>  First off, I'm not trying to spec attachment_fu, I know it's been tested.
>>
>>  But, I added some code to that model that I do need to test. Basically, I
>> need to somehow fulfill the "uploaded_data" property so I can actually run
>> my tests(otherwise they fail because of validations). The "uploaded_data"
>> field is what would grab the multipart data from form.  Here it is:
>>
>>        # This method handles the uploaded file object.  If you set the field
>> name to uploaded_data, you don't need
>>        # any special code in your controller.
>>        #
>>        #   <% form_for :attachment, :html => { :multipart => true } do |f|
>> -%>
>>        #     <p><%= f.file_field :uploaded_data %></p>
>>        #     <p><%= submit_tag :Save %>
>>        #   <% end -%>
>>        #
>>        #   @attachment = Attachment.create! params[:attachment]
>>        #
>>        # TODO: Allow it to work with Merb tempfiles too.
>>        def uploaded_data=(file_data)
>>          return nil if file_data.nil? || file_data.size == 0
>>          self.content_type = file_data.content_type
>>          self.filename     = file_data.original_filename if
>> respond_to?(:filename)
>>          if file_data.is_a?(StringIO)
>>            file_data.rewind
>>            self.temp_data = file_data.read
>>          else
>>            self.temp_path = file_data.path
>>          end
>>        end
>>
>>     
>
> I'm not familiar with attachment_fu - is this code from attachment_fu
> that you have modified? Or is it your code entirely? Attachment_fu's
> entirely? Where does this code come from?
>
> Aslak
>
>   
>>  While I was digging I found out that "file_data" is a ruby Tempfile object.
>> So, I tried to create a dummy file and pass it, but it failed. I found out
>> in the CGI library, it actually extends the Tempfile object and adds some
>> methods/properties. It started to get messy, so I thought I'd ask for
>> advice.
>>
>>  How can I create a valid attachment_fu model spec(so I can start tweaking
>> it to test my other validations)?
>>
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>>     
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070822/0a557459/attachment-0001.html 


More information about the rspec-users mailing list