Module: Merb::Test::MultipartRequestHelper

Included in:
ControllerHelper
Defined in:
lib/merb-core/test/helpers/multipart_request_helper.rb

Defined Under Namespace

Classes: FileParam, Param, Post

Instance Method Summary collapse

Instance Method Details

#dispatch_multipart_to(controller_klass, action, params = {}, env = {}, &blk) ⇒ Object

Similar to dispatch_to but allows for sending files inside params.

Paramters

controller_klass

The controller class object that the action should be dispatched to.

action

The action name, as a symbol.

params

An optional hash that will end up as params in the controller instance.

env

An optional hash that is passed to the fake request. Any request options should go here (see fake_request).

&blk

The block is executed in the context of the controller.

Example

dispatch_multipart_to(MyController, :create, :my_file => @a_file ) do |controller| controller.stub!(:current_user).and_return(@user) end

Notes

Set your option to contain a file object to simulate file uploads.

Does not use routes.



110
111
112
113
# File 'lib/merb-core/test/helpers/multipart_request_helper.rb', line 110

def dispatch_multipart_to(controller_klass, action, params = {}, env = {}, &blk)
  request = multipart_fake_request(env, params)
  dispatch_request(request, controller_klass, action, &blk)
end

#multipart_fake_request(env = {}, params = {}) ⇒ Object

Parameters

env

An optional hash that is passed to the fake request. Any request options should go here (see fake_request).

params

An optional hash that will end up as params in the controller instance.

Returns

FakeRequest

A multipart Request object that is built based on the parameters.



165
166
167
168
169
170
171
172
173
174
# File 'lib/merb-core/test/helpers/multipart_request_helper.rb', line 165

def multipart_fake_request(env = {}, params = {})
  if params.empty?
    fake_request(env)
  else
    m = Post.new(params)
    body, head = m.to_multipart
    fake_request(env.merge( :content_type => head, 
                            :content_length => body.length), :post_body => body)
  end
end

#multipart_post(path, params = {}, env = {}, &block) ⇒ Object

An HTTP POST request that operates through the router and uses multipart parameters.

Parameters

path

The path that should go to the router as the request uri.

params

An optional hash that will end up as params in the controller instance.

env

An optional hash that is passed to the fake request. Any request options should go here (see fake_request).

block

The block is executed in the context of the controller.

Notes

To include an uploaded file, put a file object as a value in params.



129
130
131
132
133
# File 'lib/merb-core/test/helpers/multipart_request_helper.rb', line 129

def multipart_post(path, params = {}, env = {}, &block)
  env[:request_method] = "POST"
  env[:test_with_multipart] = true
  request(path, params, env, &block)
end

#multipart_put(path, params = {}, env = {}, &block) ⇒ Object

An HTTP PUT request that operates through the router and uses multipart parameters.

Parameters

path

The path that should go to the router as the request uri.

params

An optional hash that will end up as params in the controller instance.

env

An optional hash that is passed to the fake request. Any request options should go here (see fake_request).

block

The block is executed in the context of the controller.

Notes

To include an uplaoded file, put a file object as a value in params.



149
150
151
152
153
# File 'lib/merb-core/test/helpers/multipart_request_helper.rb', line 149

def multipart_put(path, params = {}, env = {}, &block)
  env[:request_method] = "PUT"
  env[:test_with_multipart] = true
  request(path, params, env, &block)
end