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.



328
329
330
# File 'lib/action_controller/test_case.rb', line 328

def request
  @request
end

#responseObject (readonly)

Returns the value of attribute response.



328
329
330
# File 'lib/action_controller/test_case.rb', line 328

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



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

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



364
365
366
# File 'lib/action_controller/test_case.rb', line 364

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



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

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

#paramify_values(hash_or_array_or_value) ⇒ Object



398
399
400
401
402
403
404
405
406
407
408
409
# File 'lib/action_controller/test_case.rb', line 398

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



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

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



411
412
413
414
415
416
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
# File 'lib/action_controller/test_case.rb', line 411

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)

  # 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 || {})
  @request.session["flash"].sweep

  @controller.request = @request
  @controller.params.merge!(parameters)
  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



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

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



473
474
475
# File 'lib/action_controller/test_case.rb', line 473

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

#setup_controller_request_and_responseObject



456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
# File 'lib/action_controller/test_case.rb', line 456

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



388
389
390
391
392
393
394
395
# File 'lib/action_controller/test_case.rb', line 388

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