# File lib/action_controller/test_case.rb, line 608 def build_request TestRequest.new end
# File lib/action_controller/test_case.rb, line 612 def build_response TestResponse.new end
Simulate a DELETE request with the given parameters and set/volley the
response. See get for more details.
# File lib/action_controller/test_case.rb, line 495 def delete(action, *args) process(action, "DELETE", *args) end
Simulate a GET request with the given parameters.
action: The controller action to call.
parameters: The HTTP parameters that you want to pass. This
may be nil, a hash, or a string that is appropriately encoded
(application/x-www-form-urlencoded or
multipart/form-data).
session: A hash of parameters to store in the session. This
may be nil.
flash: A hash of parameters to store in the flash. This may be
nil.
You can also simulate POST, PATCH, PUT, DELETE, HEAD, and OPTIONS requests
with post, patch, put,
delete, head, and options.
Note that the request method is not verified. The different methods are available to make the tests more expressive.
# File lib/action_controller/test_case.rb, line 471 def get(action, *args) process(action, "GET", *args) end
Simulate a HEAD request with the given parameters and set/volley the
response. See get for more details.
# File lib/action_controller/test_case.rb, line 501 def head(action, *args) process(action, "HEAD", *args) end
# File lib/action_controller/test_case.rb, line 515 def paramify_values(hash_or_array_or_value) case hash_or_array_or_value when Hash Hash[hash_or_array_or_value.map{|key, value| [key, paramify_values(value)] }] when Array hash_or_array_or_value.map {|i| paramify_values(i)} when Rack::Test::UploadedFile, ActionDispatch::Http::UploadedFile hash_or_array_or_value else hash_or_array_or_value.to_param end end
Simulate a PATCH request with the given parameters and set/volley the
response. See get for more details.
# File lib/action_controller/test_case.rb, line 483 def patch(action, *args) process(action, "PATCH", *args) end
Simulate a POST request with the given parameters and set/volley the
response. See get for more details.
# File lib/action_controller/test_case.rb, line 477 def post(action, *args) process(action, "POST", *args) end
# File lib/action_controller/test_case.rb, line 528 def process(action, http_method = 'GET', *args) check_required_ivars http_method, args = handle_old_process_api(http_method, args, caller) if args.first.is_a?(String) && http_method != 'HEAD' @request.env['RAW_POST_DATA'] = args.shift end parameters, session, flash = args # Ensure that numbers and symbols passed as params are converted to # proper params, as is the case when engaging rack. parameters = paramify_values(parameters) if html_format?(parameters) @html_document = nil unless @controller.respond_to?(:recycle!) @controller.extend(Testing::Functional) @controller.class.class_eval { include Testing } end @request.recycle! @response.recycle! @controller.recycle! @request.env['REQUEST_METHOD'] = http_method parameters ||= {} controller_class_name = @controller.class.anonymous? ? "anonymous" : @controller.class.controller_path @request.assign_parameters(@routes, controller_class_name, action.to_s, parameters) @request.session.update(session) if session @request.flash.update(flash || {}) @controller.request = @request @controller.response = @response build_request_uri(action, parameters) name = @request.parameters[:action] @controller.process(name) if cookies = @request.env['action_dispatch.cookies'] cookies.write(@response) end @response.prepare! @assigns = @controller.respond_to?(:view_assigns) ? @controller.view_assigns : {} @request.session['flash'] = @request.flash.to_session_value @request.session.delete('flash') if @request.session['flash'].blank? @response end
Simulate a PUT request with the given parameters and set/volley the
response. See get for more details.
# File lib/action_controller/test_case.rb, line 489 def put(action, *args) process(action, "PUT", *args) end
# File lib/action_controller/test_case.rb, line 585 def setup_controller_request_and_response @request = build_request @response = build_response @response.request = @request @controller = nil unless defined? @controller if klass = self.class.controller_class unless @controller begin @controller = klass.new rescue warn "could not construct controller #{klass}" if $VERBOSE end end end if @controller @controller.request = @request @controller.params = {} end end
# File lib/action_controller/test_case.rb, line 505 def xml_http_request(request_method, action, parameters = nil, session = nil, flash = nil) @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest' @request.env['HTTP_ACCEPT'] ||= [Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ') __send__(request_method, action, parameters, session, flash).tap do @request.env.delete 'HTTP_X_REQUESTED_WITH' @request.env.delete 'HTTP_ACCEPT' end end
# File lib/action_controller/test_case.rb, line 645 def build_request_uri(action, parameters) unless @request.env["PATH_INFO"] options = @controller.respond_to?(:url_options) ? @controller.__send__(:url_options).merge(parameters) : parameters options.update( :only_path => true, :action => action, :relative_url_root => nil, :_recall => @request.symbolized_path_parameters) url, query_string = @routes.url_for(options).split("?", 2) @request.env["SCRIPT_NAME"] = @controller.config.relative_url_root @request.env["PATH_INFO"] = url @request.env["QUERY_STRING"] = query_string || "" end end
# File lib/action_controller/test_case.rb, line 624 def check_required_ivars # Sanity check for required instance variables so we can give an # understandable error message. [:@routes, :@controller, :@request, :@response].each do |iv_name| if !instance_variable_defined?(iv_name) || instance_variable_get(iv_name).nil? raise "#{iv_name} is nil: make sure you set it in your test's setup method." end end end
# File lib/action_controller/test_case.rb, line 634 def handle_old_process_api(http_method, args, callstack) # 4.0: Remove this method. if http_method.is_a?(Hash) ActiveSupport::Deprecation.warn("TestCase#process now expects the HTTP method as second argument: process(action, http_method, params, session, flash)", callstack) args.unshift(http_method) http_method = args.last.is_a?(String) ? args.last : "GET" end [http_method, args] end
# File lib/action_controller/test_case.rb, line 662 def html_format?(parameters) return true unless parameters.is_a?(Hash) Mime.fetch(parameters[:format]) { Mime['html'] }.html? end