How do I test this?

I have this code in my controller which streams a file to the client.
How on earth do I test this?

  #Stream the file to the client over HTTP
  def preview
      device_id=params[:device_id]

      path = @campaign.get_preview_url(device_id)

      #THE CONTENT TYPE IS REQUIRED!
      ext=File.extname(file_name)

      if ext == ".3gp"
          m_type="video/3gpp"
      elsif ext == ".3g2"
          m_type="video/3gpp2"
      elsif ext ==".mp4"
          m_type="video/mp4"
      end

      send_file path, :disposition => 'inline', :type => m_type
  end

[mailto:rubyonrails-talk@googlegroups.com] On Behalf Of eggie5

I have this code in my controller which streams a file to the client.

How on earth do I test this?

  #Stream the file to the client over HTTP
  def preview
      device_id=params[:device_id]

      path = @campaign.get_preview_url(device_id)

      #THE CONTENT TYPE IS REQUIRED!
      ext=File.extname(file_name)

      if ext == ".3gp"
          m_type="video/3gpp"
      elsif ext == ".3g2"
          m_type="video/3gpp2"
      elsif ext ==".mp4"
          m_type="video/mp4"
      end

      send_file path, :disposition => 'inline', :type => m_type
  end
<

I'm too new to Ruby on Rails to be more specific, but the general way to
handle things like this is to "mock out" the call to send_file. Then,
send_file can be made to simply record how it was called, instead of
actually sending a file across the wire. You then test that it was called
correctly - without caring about what it actually does. The reason you don't
care is that it's not your code. All you care about is that you called it
with the right arguments at the right time.

///ark

Hye Eggie,
what's that @campaign object contain?, if it's your server, then you
have to just write one mock server,

and i am assuming this code is in some controller.,

  def test_preview_for_3gp
      get :preview, :device_id => test_device # send what ever you
want.
      assert_response :success
      assert_not_nil @response.headers["Content-Type"].index('video/
3gpp') # write different set of Functional TestCases for your if/else
ladder.

      expected_file_name = "/tmp/test.3gpp"
      assert_equal expected_file_name, assigns(:path) # i just
assumed the path variable can be made instance variable.

      assert_not_nil @response
      assert_kind_of String, @response.body # i don't know what put
in place of String here, if you do some google you may get some idea.
Sorry, here
  end

and one more thing is you can add some more assertions provided if you
know what's the 3gp format, so if you want your FT's(Functional-Test-
Cases) to
cover even the content delivered, then you have to parse the 3gp
file(or find any equivalent Ruby class, [i don't know any such class])
and write assertions
for response.body to contain like header, tags etc. of 3gp format.

I guess it helps you, sorry if not.

Good Luck,