diff options
Diffstat (limited to 'actionmailer/test/caching_test.rb')
-rw-r--r-- | actionmailer/test/caching_test.rb | 160 |
1 files changed, 101 insertions, 59 deletions
diff --git a/actionmailer/test/caching_test.rb b/actionmailer/test/caching_test.rb index b4344eb167..ae4e7bf57e 100644 --- a/actionmailer/test/caching_test.rb +++ b/actionmailer/test/caching_test.rb @@ -1,11 +1,13 @@ -require 'fileutils' -require 'abstract_unit' -require 'mailers/base_mailer' -require 'mailers/caching_mailer' +# frozen_string_literal: true -CACHE_DIR = 'test_cache' +require "fileutils" +require "abstract_unit" +require "mailers/base_mailer" +require "mailers/caching_mailer" + +CACHE_DIR = "test_cache" # Don't change '/../temp/' cavalierly or you might hose something you don't want hosed -FILE_STORE_PATH = File.join(File.dirname(__FILE__), '/../temp/', CACHE_DIR) +FILE_STORE_PATH = File.join(__dir__, "/../temp/", CACHE_DIR) class FragmentCachingMailer < ActionMailer::Base abstract! @@ -21,91 +23,87 @@ class BaseCachingTest < ActiveSupport::TestCase @mailer.perform_caching = true @mailer.cache_store = @store end - - def test_fragment_cache_key - assert_equal 'views/what a key', @mailer.fragment_cache_key('what a key') - end end class FragmentCachingTest < BaseCachingTest def test_read_fragment_with_caching_enabled - @store.write('views/name', 'value') - assert_equal 'value', @mailer.read_fragment('name') + @store.write("views/name", "value") + assert_equal "value", @mailer.read_fragment("name") end def test_read_fragment_with_caching_disabled @mailer.perform_caching = false - @store.write('views/name', 'value') - assert_nil @mailer.read_fragment('name') + @store.write("views/name", "value") + assert_nil @mailer.read_fragment("name") end def test_fragment_exist_with_caching_enabled - @store.write('views/name', 'value') - assert @mailer.fragment_exist?('name') - assert !@mailer.fragment_exist?('other_name') + @store.write("views/name", "value") + assert @mailer.fragment_exist?("name") + assert !@mailer.fragment_exist?("other_name") end def test_fragment_exist_with_caching_disabled @mailer.perform_caching = false - @store.write('views/name', 'value') - assert !@mailer.fragment_exist?('name') - assert !@mailer.fragment_exist?('other_name') + @store.write("views/name", "value") + assert !@mailer.fragment_exist?("name") + assert !@mailer.fragment_exist?("other_name") end def test_write_fragment_with_caching_enabled - assert_nil @store.read('views/name') - assert_equal 'value', @mailer.write_fragment('name', 'value') - assert_equal 'value', @store.read('views/name') + assert_nil @store.read("views/name") + assert_equal "value", @mailer.write_fragment("name", "value") + assert_equal "value", @store.read("views/name") end def test_write_fragment_with_caching_disabled - assert_nil @store.read('views/name') + assert_nil @store.read("views/name") @mailer.perform_caching = false - assert_equal 'value', @mailer.write_fragment('name', 'value') - assert_nil @store.read('views/name') + assert_equal "value", @mailer.write_fragment("name", "value") + assert_nil @store.read("views/name") end def test_expire_fragment_with_simple_key - @store.write('views/name', 'value') - @mailer.expire_fragment 'name' - assert_nil @store.read('views/name') + @store.write("views/name", "value") + @mailer.expire_fragment "name" + assert_nil @store.read("views/name") end def test_expire_fragment_with_regexp - @store.write('views/name', 'value') - @store.write('views/another_name', 'another_value') - @store.write('views/primalgrasp', 'will not expire ;-)') + @store.write("views/name", "value") + @store.write("views/another_name", "another_value") + @store.write("views/primalgrasp", "will not expire ;-)") @mailer.expire_fragment(/name/) - assert_nil @store.read('views/name') - assert_nil @store.read('views/another_name') - assert_equal 'will not expire ;-)', @store.read('views/primalgrasp') + assert_nil @store.read("views/name") + assert_nil @store.read("views/another_name") + assert_equal "will not expire ;-)", @store.read("views/primalgrasp") end def test_fragment_for - @store.write('views/expensive', 'fragment content') + @store.write("views/expensive", "fragment content") fragment_computed = false view_context = @mailer.view_context - buffer = 'generated till now -> '.html_safe - buffer << view_context.send(:fragment_for, 'expensive') { fragment_computed = true } + buffer = "generated till now -> ".html_safe + buffer << view_context.send(:fragment_for, "expensive") { fragment_computed = true } assert !fragment_computed - assert_equal 'generated till now -> fragment content', buffer + assert_equal "generated till now -> fragment content", buffer end def test_html_safety - assert_nil @store.read('views/name') - content = 'value'.html_safe - assert_equal content, @mailer.write_fragment('name', content) + assert_nil @store.read("views/name") + content = "value".html_safe + assert_equal content, @mailer.write_fragment("name", content) - cached = @store.read('views/name') + cached = @store.read("views/name") assert_equal content, cached assert_equal String, cached.class - html_safe = @mailer.read_fragment('name') + html_safe = @mailer.read_fragment("name") assert_equal content, html_safe assert html_safe.html_safe? end @@ -125,16 +123,17 @@ class FunctionalFragmentCachingTest < BaseCachingTest expected_body = "\"Welcome\"" assert_match expected_body, email.body.encoded - assert_match "\"Welcome\"", - @store.read("views/caching/#{template_digest("caching_mailer/fragment_cache")}") + assert_match expected_body, + @store.read("views/caching_mailer/fragment_cache:#{template_digest("caching_mailer/fragment_cache")}/caching") end def test_fragment_caching_in_partials email = @mailer.fragment_cache_in_partials - assert_match(/Old fragment caching in a partial/, email.body.encoded) + expected_body = "Old fragment caching in a partial" + assert_match(expected_body, email.body.encoded) - assert_match("Old fragment caching in a partial", - @store.read("views/caching/#{template_digest("caching_mailer/_partial")}")) + assert_match(expected_body, + @store.read("views/caching_mailer/_partial:#{template_digest("caching_mailer/_partial")}/caching")) end def test_skip_fragment_cache_digesting @@ -145,6 +144,50 @@ class FunctionalFragmentCachingTest < BaseCachingTest assert_match expected_body, @store.read("views/no_digest") end + def test_fragment_caching_options + time = Time.now + email = @mailer.fragment_caching_options + expected_body = "No Digest" + + assert_match expected_body, email.body.encoded + Time.stub(:now, time + 11) do + assert_nil @store.read("views/no_digest") + end + end + + def test_multipart_fragment_caching + email = @mailer.multipart_cache + + expected_text_body = "\"Welcome text\"" + expected_html_body = "\"Welcome html\"" + encoded_body = email.body.encoded + assert_match expected_text_body, encoded_body + assert_match expected_html_body, encoded_body + assert_match expected_text_body, + @store.read("views/text_caching") + assert_match expected_html_body, + @store.read("views/html_caching") + end + + def test_fragment_cache_instrumentation + @mailer.enable_fragment_cache_logging = true + payload = nil + + subscriber = proc do |*args| + event = ActiveSupport::Notifications::Event.new(*args) + payload = event.payload + end + + ActiveSupport::Notifications.subscribed(subscriber, "read_fragment.action_mailer") do + @mailer.fragment_cache + end + + assert_equal "caching_mailer", payload[:mailer] + assert_equal [ :views, "caching_mailer/fragment_cache:#{template_digest("caching_mailer/fragment_cache")}", :caching ], payload[:key] + ensure + @mailer.enable_fragment_cache_logging = true + end + private def template_digest(name) @@ -153,10 +196,9 @@ class FunctionalFragmentCachingTest < BaseCachingTest end class CacheHelperOutputBufferTest < BaseCachingTest - class MockController def read_fragment(name, options) - return false + false end def write_fragment(name, fragment, options) @@ -172,9 +214,9 @@ class CacheHelperOutputBufferTest < BaseCachingTest output_buffer = ActionView::OutputBuffer.new controller = MockController.new cache_helper = Class.new do - def self.controller; end; - def self.output_buffer; end; - def self.output_buffer=; end; + def self.controller; end + def self.output_buffer; end + def self.output_buffer=; end end cache_helper.extend(ActionView::Helpers::CacheHelper) @@ -182,7 +224,7 @@ class CacheHelperOutputBufferTest < BaseCachingTest cache_helper.stub :output_buffer, output_buffer do assert_called_with cache_helper, :output_buffer=, [output_buffer.class.new(output_buffer)] do assert_nothing_raised do - cache_helper.send :fragment_for, 'Test fragment name', 'Test fragment', &Proc.new{ nil } + cache_helper.send :fragment_for, "Test fragment name", "Test fragment", &Proc.new { nil } end end end @@ -193,9 +235,9 @@ class CacheHelperOutputBufferTest < BaseCachingTest output_buffer = ActiveSupport::SafeBuffer.new controller = MockController.new cache_helper = Class.new do - def self.controller; end; - def self.output_buffer; end; - def self.output_buffer=; end; + def self.controller; end + def self.output_buffer; end + def self.output_buffer=; end end cache_helper.extend(ActionView::Helpers::CacheHelper) @@ -203,7 +245,7 @@ class CacheHelperOutputBufferTest < BaseCachingTest cache_helper.stub :output_buffer, output_buffer do assert_called_with cache_helper, :output_buffer=, [output_buffer.class.new(output_buffer)] do assert_nothing_raised do - cache_helper.send :fragment_for, 'Test fragment name', 'Test fragment', &Proc.new{ nil } + cache_helper.send :fragment_for, "Test fragment name", "Test fragment", &Proc.new { nil } end end end |