class RespondToControllerTest

Constants

NO_CONTENT_WARNING

Public Instance Methods

render(*args) click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 598
def render(*args)
  @action = args.first[:action] unless args.empty?
  @action ||= action_name

  response.body = "#{@action} - #{formats}"
end
setup() click to toggle source
Calls superclass method
# File actionpack/test/controller/mime/respond_to_test.rb, line 292
def setup
  super
  @request.host = "www.example.com"
  Mime::Type.register_alias("text/html", :iphone)
  Mime::Type.register("text/x-mobile", :mobile)
end
teardown() click to toggle source
Calls superclass method
# File actionpack/test/controller/mime/respond_to_test.rb, line 299
def teardown
  super
  Mime::Type.unregister(:iphone)
  Mime::Type.unregister(:mobile)
end
test_all() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 318
def test_all
  @request.accept = "*/*"
  get :js_or_html
  assert_equal "HTML", @response.body # js is not part of all

  get :html_or_xml
  assert_equal "HTML", @response.body

  get :just_xml
  assert_equal "XML", @response.body
end
test_browser_check_with_any_any() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 529
def test_browser_check_with_any_any
  @request.accept = "application/json, application/xml"
  get :json_xml_or_html
  assert_equal "JSON", @response.body

  @request.accept = "application/json, application/xml, */*"
  get :json_xml_or_html
  assert_equal "HTML", @response.body
end
test_custom_constant() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 557
def test_custom_constant
  get :custom_constant_handling, format: "mobile"
  assert_equal "text/x-mobile", @response.content_type
  assert_equal "Mobile", @response.body
end
test_custom_constant_handling_without_block() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 563
def test_custom_constant_handling_without_block
  get :custom_constant_handling_without_block, format: "mobile"
  assert_equal "text/x-mobile", @response.content_type
  assert_equal "Mobile", @response.body
end
test_custom_types() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 457
def test_custom_types
  @request.accept = "application/crazy-xml"
  get :custom_type_handling
  assert_equal "application/crazy-xml", @response.content_type
  assert_equal "Crazy XML", @response.body

  @request.accept = "text/html"
  get :custom_type_handling
  assert_equal "text/html", @response.content_type
  assert_equal "HTML", @response.body
end
test_extension_synonyms() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 591
def test_extension_synonyms
  get :html_xml_or_rss, format: "xhtml"
  assert_equal "HTML", @response.body
end
test_firefox_simulation() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 475
def test_firefox_simulation
  @request.accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
  get :html_or_xml
  assert_equal "HTML", @response.body
end
test_forced_format() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 569
def test_forced_format
  get :html_xml_or_rss
  assert_equal "HTML", @response.body

  get :html_xml_or_rss, format: "html"
  assert_equal "HTML", @response.body

  get :html_xml_or_rss, format: "xml"
  assert_equal "XML", @response.body

  get :html_xml_or_rss, format: "rss"
  assert_equal "RSS", @response.body
end
test_format_any_variant_any() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 820
def test_format_any_variant_any
  get :format_any_variant_any, format: :js, params: { v: :tablet }
  assert_equal "text/javascript", @response.content_type
  assert_equal "tablet", @response.body
end
test_format_with_custom_response_type() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 613
def test_format_with_custom_response_type
  get :iphone_with_html_response_type
  assert_equal '<html><div id="html">Hello future from Firefox!</div></html>', @response.body

  get :iphone_with_html_response_type, format: "iphone"
  assert_equal "text/html", @response.content_type
  assert_equal '<html><div id="iphone">Hello iPhone future from iPhone!</div></html>', @response.body
end
test_format_with_custom_response_type_and_request_headers() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 622
def test_format_with_custom_response_type_and_request_headers
  @request.accept = "text/iphone"
  get :iphone_with_html_response_type
  assert_equal '<html><div id="iphone">Hello iPhone future from iPhone!</div></html>', @response.body
  assert_equal "text/html", @response.content_type
end
test_handle_any() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 481
def test_handle_any
  @request.accept = "*/*"
  get :handle_any
  assert_equal "HTML", @response.body

  @request.accept = "text/javascript"
  get :handle_any
  assert_equal "Either JS or XML", @response.body

  @request.accept = "text/xml"
  get :handle_any
  assert_equal "Either JS or XML", @response.body
end
test_handle_any_any() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 495
def test_handle_any_any
  @request.accept = "*/*"
  get :handle_any_any
  assert_equal "HTML", @response.body
end
test_handle_any_any_explicit_html() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 506
def test_handle_any_any_explicit_html
  @request.accept = "text/html"
  get :handle_any_any
  assert_equal "HTML", @response.body
end
test_handle_any_any_javascript() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 512
def test_handle_any_any_javascript
  @request.accept = "text/javascript"
  get :handle_any_any
  assert_equal "Whatever you ask for, I got it", @response.body
end
test_handle_any_any_parameter_format() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 501
def test_handle_any_any_parameter_format
  get :handle_any_any, format: "html"
  assert_equal "HTML", @response.body
end
test_handle_any_any_unknown_format() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 524
def test_handle_any_any_unknown_format
  get :handle_any_any, format: "php"
  assert_equal "Whatever you ask for, I got it", @response.body
end
test_handle_any_any_xml() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 518
def test_handle_any_any_xml
  @request.accept = "text/xml"
  get :handle_any_any
  assert_equal "Whatever you ask for, I got it", @response.body
end
test_html() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 305
def test_html
  @request.accept = "text/html"
  get :js_or_html
  assert_equal "HTML", @response.body

  get :html_or_xml
  assert_equal "HTML", @response.body

  assert_raises(ActionController::UnknownFormat) do
    get :just_xml
  end
end
test_html_type_with_layout() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 539
def test_html_type_with_layout
  @request.accept = "text/html"
  get :all_types_with_layout
  assert_equal '<html><div id="html">HTML for all_types_with_layout</div></html>', @response.body
end
test_internally_forced_format() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 583
def test_internally_forced_format
  get :forced_xml
  assert_equal "XML", @response.body

  get :forced_xml, format: "html"
  assert_equal "XML", @response.body
end
test_invalid_format() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 629
def test_invalid_format
  assert_raises(ActionController::UnknownFormat) do
    get :using_defaults, format: "invalidformat"
  end
end
test_invalid_variant() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 642
def test_invalid_variant
  assert_raises(ActionController::UnknownFormat) do
    get :variant_with_implicit_template_rendering, params: { v: :invalid }
  end
end
test_js_or_anything() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 383
def test_js_or_anything
  @request.accept = "text/javascript, */*"
  get :js_or_html, xhr: true
  assert_equal "JS", @response.body

  get :html_or_xml, xhr: true
  assert_equal "HTML", @response.body

  get :just_xml, xhr: true
  assert_equal "XML", @response.body
end
test_js_or_html() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 336
def test_js_or_html
  @request.accept = "text/javascript, text/html"
  get :js_or_html, xhr: true
  assert_equal "JS", @response.body

  @request.accept = "text/javascript, text/html"
  get :html_or_xml, xhr: true
  assert_equal "HTML", @response.body

  @request.accept = "text/javascript, text/html"

  assert_raises(ActionController::UnknownFormat) do
    get :just_xml, xhr: true
  end
end
test_json_or_yaml() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 362
def test_json_or_yaml
  get :json_or_yaml, xhr: true
  assert_equal "JSON", @response.body

  get :json_or_yaml, format: "json"
  assert_equal "JSON", @response.body

  get :json_or_yaml, format: "yaml"
  assert_equal "YAML", @response.body

  { "YAML" => %w(text/yaml),
    "JSON" => %w(application/json text/x-json)
  }.each do |body, content_types|
    content_types.each do |content_type|
      @request.accept = content_type
      get :json_or_yaml
      assert_equal body, @response.body
    end
  end
end
test_json_or_yaml_with_leading_star_star() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 352
def test_json_or_yaml_with_leading_star_star
  @request.accept = "*/*, application/json"
  get :json_xml_or_html
  assert_equal "HTML", @response.body

  @request.accept = "*/* , application/json"
  get :json_xml_or_html
  assert_equal "HTML", @response.body
end
test_json_with_callback_sets_javascript_content_type() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 545
def test_json_with_callback_sets_javascript_content_type
  @request.accept = "application/json"
  get :json_with_callback
  assert_equal "/**/alert(JS)", @response.body
  assert_equal "text/javascript", @response.content_type
end
test_missing_templates() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 635
def test_missing_templates
  get :missing_templates, format: :json
  assert_response :no_content
  get :missing_templates, format: :xml
  assert_response :no_content
end
test_multiple_variants_for_format() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 714
def test_multiple_variants_for_format
  get :multiple_variants_for_format, params: { v: :tablet }
  assert_equal "text/html", @response.content_type
  assert_equal "tablet", @response.body
end
test_no_variant_in_variant_setup() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 720
def test_no_variant_in_variant_setup
  get :variant_plus_none_for_format
  assert_equal "text/html", @response.content_type
  assert_equal "none", @response.body
end
test_render_action_for_html() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 596
def test_render_action_for_html
  @controller.instance_eval do
    def render(*args)
      @action = args.first[:action] unless args.empty?
      @action ||= action_name

      response.body = "#{@action} - #{formats}"
    end
  end

  get :using_defaults
  assert_equal "using_defaults - #{[:html]}", @response.body

  get :using_defaults, format: "xml"
  assert_equal "using_defaults - #{[:xml]}", @response.body
end
test_synonyms() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 447
def test_synonyms
  @request.accept = "application/javascript"
  get :js_or_html
  assert_equal "JS", @response.body

  @request.accept = "application/x-xml"
  get :html_xml_or_rss
  assert_equal "XML", @response.body
end
test_using_defaults() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 395
def test_using_defaults
  @request.accept = "*/*"
  get :using_defaults
  assert_equal "text/html", @response.content_type
  assert_equal "Hello world!", @response.body

  @request.accept = "application/xml"
  get :using_defaults
  assert_equal "application/xml", @response.content_type
  assert_equal "<p>Hello world!</p>\n", @response.body
end
test_using_defaults_with_all() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 407
def test_using_defaults_with_all
  @request.accept = "*/*"
  get :using_defaults_with_all
  assert_equal "HTML!", @response.body.strip

  @request.accept = "text/html"
  get :using_defaults_with_all
  assert_equal "HTML!", @response.body.strip

  @request.accept = "application/json"
  get :using_defaults_with_all
  assert_equal "ALL", @response.body
end
test_using_defaults_with_type_list() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 421
def test_using_defaults_with_type_list
  @request.accept = "*/*"
  get :using_defaults_with_type_list
  assert_equal "text/html", @response.content_type
  assert_equal "Hello world!", @response.body

  @request.accept = "application/xml"
  get :using_defaults_with_type_list
  assert_equal "application/xml", @response.content_type
  assert_equal "<p>Hello world!</p>\n", @response.body
end
test_variant_any() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 748
def test_variant_any
  get :variant_any, params: { v: :phone }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body

  get :variant_any, params: { v: :tablet }
  assert_equal "text/html", @response.content_type
  assert_equal "any", @response.body

  get :variant_any, params: { v: :phablet }
  assert_equal "text/html", @response.content_type
  assert_equal "any", @response.body
end
test_variant_any_any() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 762
def test_variant_any_any
  get :variant_any_any
  assert_equal "text/html", @response.content_type
  assert_equal "any", @response.body

  get :variant_any_any, params: { v: :phone }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body

  get :variant_any_any, params: { v: :yolo }
  assert_equal "text/html", @response.content_type
  assert_equal "any", @response.body
end
test_variant_any_implicit_render() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 800
def test_variant_any_implicit_render
  get :variant_any_implicit_render, params: { v: :tablet }
  assert_equal "text/html", @response.content_type
  assert_equal "tablet", @response.body

  get :variant_any_implicit_render, params: { v: :phablet }
  assert_equal "text/html", @response.content_type
  assert_equal "phablet", @response.body
end
test_variant_any_with_none() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 810
def test_variant_any_with_none
  get :variant_any_with_none
  assert_equal "text/html", @response.content_type
  assert_equal "none or phone", @response.body

  get :variant_any_with_none, params: { v: :phone }
  assert_equal "text/html", @response.content_type
  assert_equal "none or phone", @response.body
end
test_variant_inline_any() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 776
def test_variant_inline_any
  get :variant_any, params: { v: :phone }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body

  get :variant_inline_any, params: { v: :tablet }
  assert_equal "text/html", @response.content_type
  assert_equal "any", @response.body

  get :variant_inline_any, params: { v: :phablet }
  assert_equal "text/html", @response.content_type
  assert_equal "any", @response.body
end
test_variant_inline_any_any() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 790
def test_variant_inline_any_any
  get :variant_inline_any_any, params: { v: :phone }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body

  get :variant_inline_any_any, params: { v: :yolo }
  assert_equal "text/html", @response.content_type
  assert_equal "any", @response.body
end
test_variant_inline_syntax() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 726
def test_variant_inline_syntax
  get :variant_inline_syntax
  assert_equal "text/html", @response.content_type
  assert_equal "none", @response.body

  get :variant_inline_syntax, params: { v: :phone }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body
end
test_variant_inline_syntax_with_format() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 736
def test_variant_inline_syntax_with_format
  get :variant_inline_syntax, format: :js
  assert_equal "text/javascript", @response.content_type
  assert_equal "js", @response.body
end
test_variant_inline_syntax_without_block() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 742
def test_variant_inline_syntax_without_block
  get :variant_inline_syntax_without_block, params: { v: :phone }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body
end
test_variant_negotiation_block_syntax() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 832
def test_variant_negotiation_block_syntax
  get :variant_plus_none_for_format, params: { v: [:tablet, :phone] }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body
end
test_variant_negotiation_inline_syntax() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 826
def test_variant_negotiation_inline_syntax
  get :variant_inline_syntax_without_block, params: { v: [:tablet, :phone] }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body
end
test_variant_negotiation_without_block() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 838
def test_variant_negotiation_without_block
  get :variant_inline_syntax_without_block, params: { v: [:tablet, :phone] }
  assert_equal "text/html", @response.content_type
  assert_equal "phone", @response.body
end
test_variant_not_set_regular_unknown_format() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 648
def test_variant_not_set_regular_unknown_format
  assert_raises(ActionController::UnknownFormat) do
    get :variant_with_implicit_template_rendering
  end
end
test_variant_variant_not_set_and_without_implicit_rendering_from_browser() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 666
def test_variant_variant_not_set_and_without_implicit_rendering_from_browser
  assert_raises(ActionController::UnknownFormat) do
    get :variant_without_implicit_template_rendering
  end
end
test_variant_variant_not_set_and_without_implicit_rendering_from_xhr() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 696
def test_variant_variant_not_set_and_without_implicit_rendering_from_xhr
  logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
  old_logger, ActionController::Base.logger = ActionController::Base.logger, logger

  get :variant_without_implicit_template_rendering, xhr: true
  assert_response :no_content

  assert_equal 1, logger.logged(:info).select { |s| s == NO_CONTENT_WARNING }.size, "Implicit head :no_content not logged"
ensure
  ActionController::Base.logger = old_logger
end
test_variant_with_format_and_custom_render() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 708
def test_variant_with_format_and_custom_render
  get :variant_with_format_and_custom_render, params: { v: :phone }
  assert_equal "text/html", @response.content_type
  assert_equal "mobile", @response.body
end
test_variant_with_implicit_template_rendering() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 654
def test_variant_with_implicit_template_rendering
  get :variant_with_implicit_template_rendering, params: { v: :mobile }
  assert_equal "text/html", @response.content_type
  assert_equal "mobile", @response.body
end
test_variant_without_implicit_rendering_from_api() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 684
def test_variant_without_implicit_rendering_from_api
  logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
  old_logger, ActionController::Base.logger = ActionController::Base.logger, logger

  get :variant_without_implicit_template_rendering, format: "json", params: { v: :does_not_matter }
  assert_response :no_content

  assert_equal 1, logger.logged(:info).select { |s| s == NO_CONTENT_WARNING }.size, "Implicit head :no_content not logged"
ensure
  ActionController::Base.logger = old_logger
end
test_variant_without_implicit_rendering_from_browser() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 660
def test_variant_without_implicit_rendering_from_browser
  assert_raises(ActionController::UnknownFormat) do
    get :variant_without_implicit_template_rendering, params: { v: :does_not_matter }
  end
end
test_variant_without_implicit_rendering_from_xhr() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 672
def test_variant_without_implicit_rendering_from_xhr
  logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new
  old_logger, ActionController::Base.logger = ActionController::Base.logger, logger

  get :variant_without_implicit_template_rendering, xhr: true, params: { v: :does_not_matter }
  assert_response :no_content

  assert_equal 1, logger.logged(:info).select { |s| s == NO_CONTENT_WARNING }.size, "Implicit head :no_content not logged"
ensure
  ActionController::Base.logger = old_logger
end
test_with_atom_content_type() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 433
def test_with_atom_content_type
  @request.accept = ""
  @request.env["CONTENT_TYPE"] = "application/atom+xml"
  get :made_for_content_type, xhr: true
  assert_equal "ATOM", @response.body
end
test_with_rss_content_type() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 440
def test_with_rss_content_type
  @request.accept = ""
  @request.env["CONTENT_TYPE"] = "application/rss+xml"
  get :made_for_content_type, xhr: true
  assert_equal "RSS", @response.body
end
test_xhr() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 552
def test_xhr
  get :js_or_html, xhr: true
  assert_equal "JS", @response.body
end
test_xhtml_alias() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 469
def test_xhtml_alias
  @request.accept = "application/xhtml+xml,application/xml"
  get :html_or_xml
  assert_equal "HTML", @response.body
end
test_xml() click to toggle source
# File actionpack/test/controller/mime/respond_to_test.rb, line 330
def test_xml
  @request.accept = "application/xml"
  get :html_xml_or_rss
  assert_equal "XML", @response.body
end