aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/controller/renderer_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test/controller/renderer_test.rb')
-rw-r--r--actionpack/test/controller/renderer_test.rb136
1 files changed, 136 insertions, 0 deletions
diff --git a/actionpack/test/controller/renderer_test.rb b/actionpack/test/controller/renderer_test.rb
new file mode 100644
index 0000000000..ae8330e029
--- /dev/null
+++ b/actionpack/test/controller/renderer_test.rb
@@ -0,0 +1,136 @@
+# frozen_string_literal: true
+
+require "abstract_unit"
+
+class RendererTest < ActiveSupport::TestCase
+ test "action controller base has a renderer" do
+ assert ActionController::Base.renderer
+ end
+
+ test "creating with a controller" do
+ controller = CommentsController
+ renderer = ActionController::Renderer.for controller
+
+ assert_equal controller, renderer.controller
+ end
+
+ test "creating from a controller" do
+ controller = AccountsController
+ renderer = controller.renderer
+
+ assert_equal controller, renderer.controller
+ end
+
+ test "creating with new defaults" do
+ renderer = ApplicationController.renderer
+
+ new_defaults = { https: true }
+ new_renderer = renderer.with_defaults(new_defaults).new
+ content = new_renderer.render(inline: "<%= request.ssl? %>")
+
+ assert_equal "true", content
+ end
+
+ test "rendering with a class renderer" do
+ renderer = ApplicationController.renderer
+ content = renderer.render template: "ruby_template"
+
+ assert_equal "Hello from Ruby code", content
+ end
+
+ test "rendering with an instance renderer" do
+ renderer = ApplicationController.renderer.new
+ content = renderer.render file: "test/hello_world"
+
+ assert_equal "Hello world!", content
+ end
+
+ test "rendering with a controller class" do
+ assert_equal "Hello world!", ApplicationController.render("test/hello_world")
+ end
+
+ test "rendering with locals" do
+ renderer = ApplicationController.renderer
+ content = renderer.render template: "test/render_file_with_locals",
+ locals: { secret: "bar" }
+
+ assert_equal "The secret is bar\n", content
+ end
+
+ test "rendering with assigns" do
+ renderer = ApplicationController.renderer
+ content = renderer.render template: "test/render_file_with_ivar",
+ assigns: { secret: "foo" }
+
+ assert_equal "The secret is foo\n", content
+ end
+
+ test "rendering with custom env" do
+ renderer = ApplicationController.renderer.new method: "post"
+ content = renderer.render inline: "<%= request.post? %>"
+
+ assert_equal "true", content
+ end
+
+ test "rendering with custom env using a key that is not in RACK_KEY_TRANSLATION" do
+ value = "warden is here"
+ renderer = ApplicationController.renderer.new warden: value
+ content = renderer.render inline: "<%= request.env['warden'] %>"
+
+ assert_equal value, content
+ end
+
+ test "rendering with defaults" do
+ renderer = ApplicationController.renderer.new https: true
+ content = renderer.render inline: "<%= request.ssl? %>"
+
+ assert_equal "true", content
+ end
+
+ test "same defaults from the same controller" do
+ renderer_defaults = ->(controller) { controller.renderer.defaults }
+
+ assert_equal renderer_defaults[AccountsController], renderer_defaults[AccountsController]
+ assert_equal renderer_defaults[AccountsController], renderer_defaults[CommentsController]
+ end
+
+ test "rendering with different formats" do
+ html = "Hello world!"
+ xml = "<p>Hello world!</p>\n"
+
+ assert_equal html, render["respond_to/using_defaults"]
+ assert_equal xml, render["respond_to/using_defaults.xml.builder"]
+ assert_equal xml, render["respond_to/using_defaults", formats: :xml]
+ end
+
+ test "rendering with helpers" do
+ assert_equal "<p>1\n<br />2</p>", render[inline: '<%= simple_format "1\n2" %>']
+ end
+
+ test "rendering with user specified defaults" do
+ ApplicationController.renderer.defaults.merge!(hello: "hello", https: true)
+ renderer = ApplicationController.renderer.new
+ content = renderer.render inline: "<%= request.ssl? %>"
+
+ assert_equal "true", content
+ end
+
+ test "return valid asset url with defaults" do
+ renderer = ApplicationController.renderer
+ content = renderer.render inline: "<%= asset_url 'asset.jpg' %>"
+
+ assert_equal "http://example.org/asset.jpg", content
+ end
+
+ test "return valid asset url when https is true" do
+ renderer = ApplicationController.renderer.new https: true
+ content = renderer.render inline: "<%= asset_url 'asset.jpg' %>"
+
+ assert_equal "https://example.org/asset.jpg", content
+ end
+
+ private
+ def render
+ @render ||= ApplicationController.renderer.method(:render)
+ end
+end