Browse files

Merge pull request #9464 from jcoyne/assert_template_file

Allow use of assert_template with the :file option.
  • Loading branch information...
2 parents c683927 + 73deb3a commit de4a60c9f468bb5bf4bd38220377cc5ac8385102 @rafaelfranca rafaelfranca committed Mar 7, 2013
View
6 actionpack/CHANGELOG.md
@@ -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.
View
17 actionpack/lib/action_controller/test_case.rb
@@ -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)
View
2 actionpack/lib/action_view/template.rb
@@ -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
View
1 actionpack/lib/action_view/test_case.rb
@@ -219,6 +219,7 @@ def view
:@_routes,
:@controller,
:@_layouts,
+ :@_files,
:@_rendered_views,
:@method_name,
:@output_buffer,
View
35 actionpack/test/controller/action_pack_assertions_test.rb
@@ -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

0 comments on commit de4a60c

Please sign in to comment.