aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/controller/content_type_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test/controller/content_type_test.rb')
-rw-r--r--actionpack/test/controller/content_type_test.rb169
1 files changed, 169 insertions, 0 deletions
diff --git a/actionpack/test/controller/content_type_test.rb b/actionpack/test/controller/content_type_test.rb
new file mode 100644
index 0000000000..636b025f2c
--- /dev/null
+++ b/actionpack/test/controller/content_type_test.rb
@@ -0,0 +1,169 @@
+# frozen_string_literal: true
+
+require "abstract_unit"
+
+class OldContentTypeController < ActionController::Base
+ # :ported:
+ def render_content_type_from_body
+ response.content_type = Mime[:rss]
+ render body: "hello world!"
+ end
+
+ # :ported:
+ def render_defaults
+ render body: "hello world!"
+ end
+
+ # :ported:
+ def render_content_type_from_render
+ render body: "hello world!", content_type: Mime[:rss]
+ end
+
+ # :ported:
+ def render_charset_from_body
+ response.charset = "utf-16"
+ render body: "hello world!"
+ end
+
+ # :ported:
+ def render_nil_charset_from_body
+ response.charset = nil
+ render body: "hello world!"
+ end
+
+ def render_default_for_erb
+ end
+
+ def render_default_for_builder
+ end
+
+ def render_change_for_builder
+ response.content_type = Mime[:html]
+ render action: "render_default_for_builder"
+ end
+
+ def render_default_content_types_for_respond_to
+ respond_to do |format|
+ format.html { render body: "hello world!" }
+ format.xml { render action: "render_default_content_types_for_respond_to" }
+ format.js { render body: "hello world!" }
+ format.rss { render body: "hello world!", content_type: Mime[:xml] }
+ end
+ end
+end
+
+class ContentTypeTest < ActionController::TestCase
+ tests OldContentTypeController
+
+ def setup
+ super
+ # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
+ # a more accurate simulation of what happens in "real life".
+ @controller.logger = ActiveSupport::Logger.new(nil)
+ end
+
+ # :ported:
+ def test_render_defaults
+ get :render_defaults
+ assert_equal "utf-8", @response.charset
+ assert_equal Mime[:text], @response.content_type
+ end
+
+ def test_render_changed_charset_default
+ with_default_charset "utf-16" do
+ get :render_defaults
+ assert_equal "utf-16", @response.charset
+ assert_equal Mime[:text], @response.content_type
+ end
+ end
+
+ # :ported:
+ def test_content_type_from_body
+ get :render_content_type_from_body
+ assert_equal Mime[:rss], @response.content_type
+ assert_equal "utf-8", @response.charset
+ end
+
+ # :ported:
+ def test_content_type_from_render
+ get :render_content_type_from_render
+ assert_equal Mime[:rss], @response.content_type
+ assert_equal "utf-8", @response.charset
+ end
+
+ # :ported:
+ def test_charset_from_body
+ get :render_charset_from_body
+ assert_equal Mime[:text], @response.content_type
+ assert_equal "utf-16", @response.charset
+ end
+
+ # :ported:
+ def test_nil_charset_from_body
+ get :render_nil_charset_from_body
+ assert_equal Mime[:text], @response.content_type
+ assert_equal "utf-8", @response.charset, @response.headers.inspect
+ end
+
+ def test_nil_default_for_erb
+ with_default_charset nil do
+ get :render_default_for_erb
+ assert_equal Mime[:html], @response.content_type
+ assert_nil @response.charset, @response.headers.inspect
+ end
+ end
+
+ def test_default_for_erb
+ get :render_default_for_erb
+ assert_equal Mime[:html], @response.content_type
+ assert_equal "utf-8", @response.charset
+ end
+
+ def test_default_for_builder
+ get :render_default_for_builder
+ assert_equal Mime[:xml], @response.content_type
+ assert_equal "utf-8", @response.charset
+ end
+
+ def test_change_for_builder
+ get :render_change_for_builder
+ assert_equal Mime[:html], @response.content_type
+ assert_equal "utf-8", @response.charset
+ end
+
+ private
+
+ def with_default_charset(charset)
+ old_default_charset = ActionDispatch::Response.default_charset
+ ActionDispatch::Response.default_charset = charset
+ yield
+ ensure
+ ActionDispatch::Response.default_charset = old_default_charset
+ end
+end
+
+class AcceptBasedContentTypeTest < ActionController::TestCase
+ tests OldContentTypeController
+
+ def test_render_default_content_types_for_respond_to
+ @request.accept = Mime[:html].to_s
+ get :render_default_content_types_for_respond_to
+ assert_equal Mime[:html], @response.content_type
+
+ @request.accept = Mime[:js].to_s
+ get :render_default_content_types_for_respond_to
+ assert_equal Mime[:js], @response.content_type
+ end
+
+ def test_render_default_content_types_for_respond_to_with_template
+ @request.accept = Mime[:xml].to_s
+ get :render_default_content_types_for_respond_to
+ assert_equal Mime[:xml], @response.content_type
+ end
+
+ def test_render_default_content_types_for_respond_to_with_overwrite
+ @request.accept = Mime[:rss].to_s
+ get :render_default_content_types_for_respond_to
+ assert_equal Mime[:xml], @response.content_type
+ end
+end