Module: ActionController::TestCase::Behavior

Extended by:
ActiveSupport::Concern
Includes:
ActionDispatch::TestProcess
Included in:
ActionController::TestCase
Defined in:
lib/action_controller/test_case.rb

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ActionDispatch::TestProcess

#assigns, #cookies, #fixture_file_upload, #flash, #redirect_to_url, #session

Instance Attribute Details

#requestObject (readonly)

Returns the value of attribute request.



334
335
336
# File 'lib/action_controller/test_case.rb', line 334

def request
  @request
end

#responseObject (readonly)

Returns the value of attribute response.



334
335
336
# File 'lib/action_controller/test_case.rb', line 334

def response
  @response
end

Instance Method Details

#delete(action, parameters = nil, session = nil, flash = nil) ⇒ Object

Executes a request simulating DELETE HTTP method and set/volley the response



385
386
387
# File 'lib/action_controller/test_case.rb', line 385

def delete(action, parameters = nil, session = nil, flash = nil)
  process(action, parameters, session, flash, "DELETE")
end

#get(action, parameters = nil, session = nil, flash = nil) ⇒ Object

Executes a request simulating GET HTTP method and set/volley the response



370
371
372
# File 'lib/action_controller/test_case.rb', line 370

def get(action, parameters = nil, session = nil, flash = nil)
  process(action, parameters, session, flash, "GET")
end

#head(action, parameters = nil, session = nil, flash = nil) ⇒ Object

Executes a request simulating HEAD HTTP method and set/volley the response



390
391
392
# File 'lib/action_controller/test_case.rb', line 390

def head(action, parameters = nil, session = nil, flash = nil)
  process(action, parameters, session, flash, "HEAD")
end

#paramify_values(hash_or_array_or_value) ⇒ Object



404
405
406
407
408
409
410
411
412
413
414
415
# File 'lib/action_controller/test_case.rb', line 404

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
    hash_or_array_or_value
  else
    hash_or_array_or_value.to_param
  end
end

#post(action, parameters = nil, session = nil, flash = nil) ⇒ Object

Executes a request simulating POST HTTP method and set/volley the response



375
376
377
# File 'lib/action_controller/test_case.rb', line 375

def post(action, parameters = nil, session = nil, flash = nil)
  process(action, parameters, session, flash, "POST")
end

#process(action, parameters = nil, session = nil, flash = nil, http_method = 'GET') ⇒ Object



417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
# File 'lib/action_controller/test_case.rb', line 417

def process(action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
  # 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)

  # Sanity check for required instance variables so we can give an
  # understandable error message.
  %w(@routes @controller @request @response).each do |iv_name|
    if !(instance_variable_names.include?(iv_name) || instance_variable_names.include?(iv_name.to_sym)) || instance_variable_get(iv_name).nil?
      raise "#{iv_name} is nil: make sure you set it in your test's setup method."
    end
  end

  @request.recycle!
  @response.recycle!
  @controller.response_body = nil
  @controller.formats = nil
  @controller.params = nil

  @html_document = nil
  @request.env['REQUEST_METHOD'] = http_method

  parameters ||= {}
  controller_class_name = @controller.class.anonymous? ?
    "anonymous_controller" :
    @controller.class.name.underscore.sub(/_controller$/, '')

  @request.assign_parameters(@routes, controller_class_name, action.to_s, parameters)

  @request.session = ActionController::TestSession.new(session) if session
  @request.session["flash"] = @request.flash.update(flash || {})

  @controller.request = @request
  build_request_uri(action, parameters)
  @controller.class.class_eval { include Testing }
  @controller.recycle!
  @controller.process_with_new_base_test(@request, @response)
  @assigns = @controller.respond_to?(:view_assigns) ? @controller.view_assigns : {}
  @request.session.delete('flash') if @request.session['flash'].blank?
  @request.cookies.merge!(@response.cookies)
  @response
end

#put(action, parameters = nil, session = nil, flash = nil) ⇒ Object

Executes a request simulating PUT HTTP method and set/volley the response



380
381
382
# File 'lib/action_controller/test_case.rb', line 380

def put(action, parameters = nil, session = nil, flash = nil)
  process(action, parameters, session, flash, "PUT")
end

#rescue_action_in_public!Object

Cause the action to be rescued according to the regular rules for rescue_action when the visitor is not local



477
478
479
# File 'lib/action_controller/test_case.rb', line 477

def rescue_action_in_public!
  @request.remote_addr = '208.77.188.166' # example.com
end

#setup_controller_request_and_responseObject



460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
# File 'lib/action_controller/test_case.rb', line 460

def setup_controller_request_and_response
  @request = TestRequest.new
  @response = TestResponse.new

  if klass = self.class.controller_class
    @controller ||= klass.new rescue nil
  end

  @request.env.delete('PATH_INFO')

  if defined?(@controller) && @controller
    @controller.request = @request
    @controller.params = {}
  end
end

#xml_http_request(request_method, action, parameters = nil, session = nil, flash = nil) ⇒ Object Also known as: xhr



394
395
396
397
398
399
400
401
# File 'lib/action_controller/test_case.rb', line 394

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