Ruby Forum RSpec > restful controllers with different content types

Posted by Adam Wiggins (Guest)
on 26.04.2008 05:35
(Received via mailing list)
Simplified example of a controller which takes a POST with a non-xml
and non-form-urlencoded content type:

class PhotosController < ApplicationController
  def create
    Photo.create :binary_data => request.body.read, :content_type => 
'image/jpg'
    head :ok
  end
end

How can I spec this?  The way that I'd like to do it would be something 
like:

  it "creates a new photo from a posted image file" do
    Photo.should_receive(:create).with(:binary_data => 'the data',
:content_type => 'image/jpg')
    post :create, :body => 'the data'
  end


Adam
Posted by David Chelimsky (Guest)
on 26.04.2008 10:34
(Received via mailing list)
On Apr 25, 2008, at 11:34 PM, "Adam Wiggins" <adam@heroku.com> wrote:

>
> How can I spec this?  The way that I'd like to do it would be  
> something like:
>
>  it "creates a new photo from a posted image file" do
>    Photo.should_receive(:create).with(:binary_data => 'the data',
> :content_type => 'image/jpg')
>    post :create, :body => 'the data'
>  end

What happens when you try this?
Posted by Adam Wiggins (Guest)
on 27.04.2008 00:38
(Received via mailing list)
On Sat, Apr 26, 2008 at 1:33 AM, David Chelimsky <dchelimsky@gmail.com> 
wrote:
>  On Apr 25, 2008, at 11:34 PM, "Adam Wiggins" <adam@heroku.com> wrote:
> >  it "creates a new photo from a posted image file" do
> >   Photo.should_receive(:create).with(:binary_data => 'the data',
> > :content_type => 'image/jpg')
> >   post :create, :body => 'the data'
> >  end
>
>  What happens when you try this?

It treats :body as a regular urlencoded parameter.  i.e., the body of
the POST sent through to the controller is "body=the+data", when I
want it to be "the data".

There's the matter of content-type too; I left that out in hopes if
simplifying the question.  The more complete version might be:

post :create, :content_type => 'image/jpg', :body => 'the data'

But :content_type and :body are not treated as special parameters, so
I was wondering if there is some other mechanism for doing this.

Adam