aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/test
diff options
context:
space:
mode:
Diffstat (limited to 'actionview/test')
-rw-r--r--actionview/test/activerecord/relation_cache_test.rb6
-rw-r--r--actionview/test/fixtures/test/_cached_nested_cached_customer.erb3
-rw-r--r--actionview/test/fixtures/test/_nested_cached_customer.erb1
-rw-r--r--actionview/test/template/form_helper/form_with_test.rb54
-rw-r--r--actionview/test/template/log_subscriber_test.rb53
5 files changed, 76 insertions, 41 deletions
diff --git a/actionview/test/activerecord/relation_cache_test.rb b/actionview/test/activerecord/relation_cache_test.rb
index fbab512c41..d12c426586 100644
--- a/actionview/test/activerecord/relation_cache_test.rb
+++ b/actionview/test/activerecord/relation_cache_test.rb
@@ -4,7 +4,11 @@ class RelationCacheTest < ActionView::TestCase
tests ActionView::Helpers::CacheHelper
def setup
- @virtual_path = "path"
+ view_paths = ActionController::Base.view_paths
+ lookup_context = ActionView::LookupContext.new(view_paths, {}, ["test"])
+ @view_renderer = ActionView::Renderer.new(lookup_context)
+ @virtual_path = "path"
+
controller.cache_store = ActiveSupport::Cache::MemoryStore.new
end
diff --git a/actionview/test/fixtures/test/_cached_nested_cached_customer.erb b/actionview/test/fixtures/test/_cached_nested_cached_customer.erb
new file mode 100644
index 0000000000..01bf025cd3
--- /dev/null
+++ b/actionview/test/fixtures/test/_cached_nested_cached_customer.erb
@@ -0,0 +1,3 @@
+<% cache cached_customer do %>
+ <%= render partial: "test/cached_customer", locals: { cached_customer: cached_customer } %>
+<% end %>
diff --git a/actionview/test/fixtures/test/_nested_cached_customer.erb b/actionview/test/fixtures/test/_nested_cached_customer.erb
new file mode 100644
index 0000000000..f43adc94c9
--- /dev/null
+++ b/actionview/test/fixtures/test/_nested_cached_customer.erb
@@ -0,0 +1 @@
+<%= render partial: "test/cached_customer", locals: { cached_customer: cached_customer } %>
diff --git a/actionview/test/template/form_helper/form_with_test.rb b/actionview/test/template/form_helper/form_with_test.rb
index bff0643fb0..ecdd5ce672 100644
--- a/actionview/test/template/form_helper/form_with_test.rb
+++ b/actionview/test/template/form_helper/form_with_test.rb
@@ -403,9 +403,9 @@ class FormWithActsLikeFormForTest < FormWithTest
expected = whole_form("/posts") do
"<input type='hidden' name='post[active]' value='' />" \
- "<input name='post[active]' type='radio' value='true' />" \
+ "<input name='post[active]' type='radio' value='true' id='post_active_true' />" \
"<label for='post_active_true'>true</label>" \
- "<input checked='checked' name='post[active]' type='radio' value='false' />" \
+ "<input checked='checked' name='post[active]' type='radio' value='false' id='post_active_false' />" \
"<label for='post_active_false'>false</label>"
end
@@ -426,10 +426,10 @@ class FormWithActsLikeFormForTest < FormWithTest
expected = whole_form("/posts") do
"<input type='hidden' name='post[active]' value='' />" \
"<label for='post_active_true'>" \
- "<input name='post[active]' type='radio' value='true' />" \
+ "<input name='post[active]' type='radio' value='true' id='post_active_true' />" \
"true</label>" \
"<label for='post_active_false'>" \
- "<input checked='checked' name='post[active]' type='radio' value='false' />" \
+ "<input checked='checked' name='post[active]' type='radio' value='false' id='post_active_false' />" \
"false</label>"
end
@@ -452,10 +452,10 @@ class FormWithActsLikeFormForTest < FormWithTest
expected = whole_form("/posts") do
"<input type='hidden' name='post[active]' value='' />" \
"<label for='post_active_true'>" \
- "<input name='post[active]' type='radio' value='true' />" \
+ "<input name='post[active]' type='radio' value='true' id='post_active_true' />" \
"true</label>" \
"<label for='post_active_false'>" \
- "<input checked='checked' name='post[active]' type='radio' value='false' />" \
+ "<input checked='checked' name='post[active]' type='radio' value='false' id='post_active_false' />" \
"false</label>" \
"<input name='post[id]' type='hidden' value='1' />"
end
@@ -473,9 +473,9 @@ class FormWithActsLikeFormForTest < FormWithTest
expected = whole_form("/posts") do
"<input type='hidden' name='post[1][active]' value='' />" \
- "<input name='post[1][active]' type='radio' value='true' />" \
+ "<input name='post[1][active]' type='radio' value='true' id='post_1_active_true' />" \
"<label for='post_1_active_true'>true</label>" \
- "<input checked='checked' name='post[1][active]' type='radio' value='false' />" \
+ "<input checked='checked' name='post[1][active]' type='radio' value='false' id='post_1_active_false' />" \
"<label for='post_1_active_false'>false</label>"
end
@@ -492,11 +492,11 @@ class FormWithActsLikeFormForTest < FormWithTest
expected = whole_form("/posts") do
"<input name='post[tag_ids][]' type='hidden' value='' />" \
- "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='1' />" \
+ "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='1' id='post_tag_ids_1' />" \
"<label for='post_tag_ids_1'>Tag 1</label>" \
- "<input name='post[tag_ids][]' type='checkbox' value='2' />" \
+ "<input name='post[tag_ids][]' type='checkbox' value='2' id='post_tag_ids_2' />" \
"<label for='post_tag_ids_2'>Tag 2</label>" \
- "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='3' />" \
+ "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='3' id='post_tag_ids_3' />" \
"<label for='post_tag_ids_3'>Tag 3</label>"
end
@@ -517,13 +517,13 @@ class FormWithActsLikeFormForTest < FormWithTest
expected = whole_form("/posts") do
"<input name='post[tag_ids][]' type='hidden' value='' />" \
"<label for='post_tag_ids_1'>" \
- "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='1' />" \
+ "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='1' id='post_tag_ids_1' />" \
"Tag 1</label>" \
"<label for='post_tag_ids_2'>" \
- "<input name='post[tag_ids][]' type='checkbox' value='2' />" \
+ "<input name='post[tag_ids][]' type='checkbox' value='2' id='post_tag_ids_2' />" \
"Tag 2</label>" \
"<label for='post_tag_ids_3'>" \
- "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='3' />" \
+ "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='3' id='post_tag_ids_3' />" \
"Tag 3</label>"
end
@@ -547,13 +547,13 @@ class FormWithActsLikeFormForTest < FormWithTest
expected = whole_form("/posts") do
"<input name='post[tag_ids][]' type='hidden' value='' />" \
"<label for='post_tag_ids_1'>" \
- "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='1' />" \
+ "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='1' id='post_tag_ids_1' />" \
"Tag 1</label>" \
"<label for='post_tag_ids_2'>" \
- "<input name='post[tag_ids][]' type='checkbox' value='2' />" \
+ "<input name='post[tag_ids][]' type='checkbox' value='2' id='post_tag_ids_2' />" \
"Tag 2</label>" \
"<label for='post_tag_ids_3'>" \
- "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='3' />" \
+ "<input checked='checked' name='post[tag_ids][]' type='checkbox' value='3' id='post_tag_ids_3' />" \
"Tag 3</label>" \
"<input name='post[id]' type='hidden' value='1' />"
end
@@ -572,7 +572,7 @@ class FormWithActsLikeFormForTest < FormWithTest
expected = whole_form("/posts") do
"<input name='post[1][tag_ids][]' type='hidden' value='' />" \
- "<input checked='checked' name='post[1][tag_ids][]' type='checkbox' value='1' />" \
+ "<input checked='checked' name='post[1][tag_ids][]' type='checkbox' value='1' id='post_1_tag_ids_1' />" \
"<label for='post_1_tag_ids_1'>Tag 1</label>"
end
@@ -878,24 +878,6 @@ class FormWithActsLikeFormForTest < FormWithTest
assert_dom_equal expected, output_buffer
end
- def test_form_with_with_namespace
- skip "Do namespaces still make sense?"
- form_for(@post, namespace: "namespace") do |f|
- concat f.text_field(:title)
- concat f.text_area(:body)
- concat f.check_box(:secret)
- end
-
- expected = whole_form("/posts/123", "namespace_edit_post_123", "edit_post", method: "patch") do
- "<input name='post[title]' type='text' value='Hello World' />" \
- "<textarea name='post[body]'>\nBack to the hill and over it again!</textarea>" \
- "<input name='post[secret]' type='hidden' value='0' />" \
- "<input name='post[secret]' checked='checked' type='checkbox' value='1' />"
- end
-
- assert_dom_equal expected, output_buffer
- end
-
def test_submit_with_object_as_new_record_and_locale_strings
with_locale :submit do
@post.persisted = false
diff --git a/actionview/test/template/log_subscriber_test.rb b/actionview/test/template/log_subscriber_test.rb
index 584666d54b..4c9f84f277 100644
--- a/actionview/test/template/log_subscriber_test.rb
+++ b/actionview/test/template/log_subscriber_test.rb
@@ -8,11 +8,14 @@ class AVLogSubscriberTest < ActiveSupport::TestCase
def setup
super
- view_paths = ActionController::Base.view_paths
+
+ view_paths = ActionController::Base.view_paths
lookup_context = ActionView::LookupContext.new(view_paths, {}, ["test"])
- renderer = ActionView::Renderer.new(lookup_context)
- @view = ActionView::Base.new(renderer, {})
+ renderer = ActionView::Renderer.new(lookup_context)
+ @view = ActionView::Base.new(renderer, {})
+
ActionView::LogSubscriber.attach_to :action_view
+
unless Rails.respond_to?(:root)
@defined_root = true
def Rails.root; :defined_root; end # Minitest `stub` expects the method to be defined.
@@ -21,7 +24,9 @@ class AVLogSubscriberTest < ActiveSupport::TestCase
def teardown
super
+
ActiveSupport::LogSubscriber.log_subscribers.clear
+
# We need to undef `root`, RenderTestCases don't want this to be defined
Rails.instance_eval { undef :root } if @defined_root
end
@@ -103,9 +108,9 @@ class AVLogSubscriberTest < ActiveSupport::TestCase
set_view_cache_dependencies
set_cache_controller
- @view.render(partial: "test/cached_customer", locals: { cached_customer: Customer.new("david") })
# Second render should hit cache.
@view.render(partial: "test/cached_customer", locals: { cached_customer: Customer.new("david") })
+ @view.render(partial: "test/cached_customer", locals: { cached_customer: Customer.new("david") })
wait
assert_equal 2, @logger.logged(:info).size
@@ -113,6 +118,46 @@ class AVLogSubscriberTest < ActiveSupport::TestCase
end
end
+ def test_render_uncached_outer_partial_with_inner_cached_partial_wont_mix_cache_hits_or_misses
+ Rails.stub(:root, File.expand_path(FIXTURE_LOAD_PATH)) do
+ set_view_cache_dependencies
+ set_cache_controller
+
+ @view.render(partial: "test/nested_cached_customer", locals: { cached_customer: Customer.new("Stan") })
+ wait
+ *, cached_inner, uncached_outer = @logger.logged(:info)
+ assert_match(/Rendered test\/_cached_customer\.erb (.*) \[cache miss\]/, cached_inner)
+ assert_match(/Rendered test\/_nested_cached_customer\.erb \(.*?ms\)$/, uncached_outer)
+
+ # Second render hits the cache for the _cached_customer partial. Outer template's log shouldn't be affected.
+ @view.render(partial: "test/nested_cached_customer", locals: { cached_customer: Customer.new("Stan") })
+ wait
+ *, cached_inner, uncached_outer = @logger.logged(:info)
+ assert_match(/Rendered test\/_cached_customer\.erb (.*) \[cache hit\]/, cached_inner)
+ assert_match(/Rendered test\/_nested_cached_customer\.erb \(.*?ms\)$/, uncached_outer)
+ end
+ end
+
+ def test_render_cached_outer_partial_with_cached_inner_partial
+ Rails.stub(:root, File.expand_path(FIXTURE_LOAD_PATH)) do
+ set_view_cache_dependencies
+ set_cache_controller
+
+ @view.render(partial: "test/cached_nested_cached_customer", locals: { cached_customer: Customer.new("Stan") })
+ wait
+ *, cached_inner, cached_outer = @logger.logged(:info)
+ assert_match(/Rendered test\/_cached_customer\.erb (.*) \[cache miss\]/, cached_inner)
+ assert_match(/Rendered test\/_cached_nested_cached_customer\.erb (.*) \[cache miss\]/, cached_outer)
+
+ # One render: inner partial skipped, because the outer has been cached.
+ assert_difference -> { @logger.logged(:info).size }, +1 do
+ @view.render(partial: "test/cached_nested_cached_customer", locals: { cached_customer: Customer.new("Stan") })
+ wait
+ end
+ assert_match(/Rendered test\/_cached_nested_cached_customer\.erb (.*) \[cache hit\]/, @logger.logged(:info).last)
+ end
+ end
+
def test_render_partial_with_cache_hitted_and_missed
Rails.stub(:root, File.expand_path(FIXTURE_LOAD_PATH)) do
set_view_cache_dependencies