Allow use of assert_template with the :file option.

This worked in Rails 3.2, but was a regression in 4.0.0.beta1
This commit is contained in:
Justin Coyne 2013-02-27 09:44:25 -06:00
parent b49a2a779b
commit 73deb3af23
5 changed files with 59 additions and 2 deletions

@ -16,6 +16,12 @@
*Yves Senn*
* Fixed regression when using `assert_template` to verify files sent using
`render file: 'README.md'`.
Fixes #9464.
*Justin Coyne*
* Skip valid encoding checks for non-String parameters that come
from the matched route's defaults.
Fixes #9435.

@ -16,6 +16,7 @@ def setup_subscriptions
@_partials = Hash.new(0)
@_templates = Hash.new(0)
@_layouts = Hash.new(0)
@_files = Hash.new(0)
ActiveSupport::Notifications.subscribe("render_template.action_view") do |name, start, finish, id, payload|
path = payload[:layout]
@ -39,6 +40,16 @@ def setup_subscriptions
@_templates[path] += 1
end
ActiveSupport::Notifications.subscribe("!render_template.action_view") do |name, start, finish, id, payload|
path = payload[:identifier]
next if payload[:virtual_path] # files don't have virtual path
if path
@_files[path] += 1
@_files[path.split("/").last] += 1
end
end
end
def teardown_subscriptions
@ -106,7 +117,7 @@ def assert_template(options = {}, message = nil)
end
assert matches_template, msg
when Hash
options.assert_valid_keys(:layout, :partial, :locals, :count)
options.assert_valid_keys(:layout, :partial, :locals, :count, :file)
if options.key?(:layout)
expected_layout = options[:layout]
@ -123,6 +134,10 @@ def assert_template(options = {}, message = nil)
end
end
if options[:file]
assert_includes @_files.keys, options[:file]
end
if expected_partial = options[:partial]
if expected_locals = options[:locals]
if defined?(@_rendered_views)

@ -138,7 +138,7 @@ def supports_streaming?
# we use a bang in this instrumentation because you don't want to
# consume this in production. This is only slow if it's being listened to.
def render(view, locals, buffer=nil, &block)
ActiveSupport::Notifications.instrument("!render_template.action_view", :virtual_path => @virtual_path) do
ActiveSupport::Notifications.instrument("!render_template.action_view", :virtual_path => @virtual_path, :identifier=>@identifier) do
compile!(view)
view.send(method_name, locals, buffer, &block)
end

@ -219,6 +219,7 @@ def view
:@_routes,
:@controller,
:@_layouts,
:@_files,
:@_rendered_views,
:@method_name,
:@output_buffer,

@ -96,6 +96,14 @@ def raise_exception_on_post
raise "post" if request.post?
render :text => "request method: #{request.env['REQUEST_METHOD']}"
end
def render_file_absolute_path
render :file => File.expand_path('../../../README.rdoc', __FILE__)
end
def render_file_relative_path
render :file => 'README.rdoc'
end
end
# Used to test that assert_response includes the exception message
@ -142,6 +150,16 @@ def test_assert_tag_and_url_for
assert_tag :content => "/action_pack_assertions/flash_me"
end
def test_render_file_absolute_path
get :render_file_absolute_path
assert_match /\A= Action Pack/, @response.body
end
def test_render_file_relative_path
get :render_file_relative_path
assert_match /\A= Action Pack/, @response.body
end
def test_get_request
assert_raise(RuntimeError) { get :raise_exception_on_get }
get :raise_exception_on_post
@ -441,6 +459,23 @@ def test_with_partial
assert_template :partial => '_partial'
end
def test_file_with_absolute_path_success
get :render_file_absolute_path
assert_template :file => File.expand_path('../../../README.rdoc', __FILE__)
end
def test_file_with_relative_path_success
get :render_file_relative_path
assert_template :file => 'README.rdoc'
end
def test_with_file_failure
get :render_file_absolute_path
assert_raise(ActiveSupport::TestCase::Assertion) do
assert_template :file => 'test/hello_world'
end
end
def test_with_nil_passes_when_no_template_rendered
get :nothing
assert_template nil