diff --git a/lib/webrat/core/field.rb b/lib/webrat/core/field.rb index f3e9307e..cd732e40 100644 --- a/lib/webrat/core/field.rb +++ b/lib/webrat/core/field.rb @@ -240,11 +240,19 @@ def default_value class FileField < Field + attr_accessor :content_type + + def set(value, content_type = nil) + super(value) + @content_type = content_type + end + def to_param if @value.nil? super else - replace_param_value(super, @value, ActionController::TestUploadedFile.new(@value)) + file = content_type ? ActionController::TestUploadedFile.new(@value, content_type) : ActionController::TestUploadedFile.new(@value) + replace_param_value(super, @value, file) end end diff --git a/lib/webrat/core/page.rb b/lib/webrat/core/page.rb index ce964b13..c562cd09 100644 --- a/lib/webrat/core/page.rb +++ b/lib/webrat/core/page.rb @@ -91,13 +91,14 @@ def selects(option_text, options = {}) # Verifies that an input file field exists on the current page and sets # its value to the given +file+, so that the file will be uploaded - # along with the form. + # along with the form. An optional content_type may be given. # # Example: - # attaches_file "Photo", "/path/to/the/photo.jpg" - def attaches_file(id_or_name_or_label, path) + # attaches_file "Resume", "/path/to/the/resume.txt" + # attaches_file "Photo", "/path/to/the/image.png", "image/png" + def attaches_file(id_or_name_or_label, path, content_type = nil) field = find_field(id_or_name_or_label, FileField) - field.set(path) + field.set(path, content_type) end # Saves the page out to RAILS_ROOT/tmp/ and opens it in the default diff --git a/spec/api/attaches_file_spec.rb b/spec/api/attaches_file_spec.rb index f807f6ef..a6792c31 100644 --- a/spec/api/attaches_file_spec.rb +++ b/spec/api/attaches_file_spec.rb @@ -56,4 +56,17 @@ @session.attaches_file "Spreadsheet", @filename @session.clicks_button end + + it "should allow the content type to be specified" do + @session.response_body = <<-EOS +
+ + + +
+ EOS + ActionController::TestUploadedFile.expects(:new).with(@filename, "image/png").returns(@uploaded_file) + @session.attaches_file "Picture", @filename, "image/png" + @session.clicks_button + end end