Commit 336f3209ae1c9b975aada4ab3dd676287709f4b8

Authored by Carlos Purificação
1 parent 5a1eee95
Exists in caching-rails4

Testing environment caching timestamp

app/helpers/application_helper.rb
... ... @@ -1241,7 +1241,7 @@ module ApplicationHelper
1241 1241 end
1242 1242  
1243 1243 def cache_timeout(key, timeout, &block)
1244   - cache(key, { :expires_in => timeout }, &block)
  1244 + cache(key, { :expires_in => timeout, :skip_digest => true }, &block)
1245 1245 end
1246 1246  
1247 1247 def is_cache_expired?(key)
... ...
test/functional/block_cache_test.rb 0 → 100644
... ... @@ -0,0 +1,227 @@
  1 +require 'test_helper'
  2 +
  3 +# Controllers to be tested
  4 +class BlockCachingTestController < HomeController
  5 +end
  6 +
  7 +class ArticleCachingTestController < ProfileController
  8 +end
  9 +
  10 +# Test case
  11 +class BlockCacheTest < ActionController::TestCase
  12 +
  13 + CACHE_DIR = 'cache_test'
  14 + FILE_STORE_PATH = Rails.root.join('tmp/test', CACHE_DIR)
  15 + UP_DIR = ".."
  16 +
  17 + include NoosferoTestHelper
  18 +
  19 + fixtures :environments
  20 +
  21 + #tests CachingTestController
  22 +
  23 + def setup
  24 + super
  25 + # Enable caching in this test
  26 + enable_cache
  27 + end
  28 +
  29 + def teardown
  30 + #disable_cache
  31 + end
  32 +
  33 + def create_blog_with_articles(community)
  34 + blog = fast_create(Blog, :name => 'Blog', :profile_id => @person.id)
  35 + @article1 = fast_create(TinyMceArticle, :name => "First Post", :profile_id => @person.id, :parent_id => blog.id, :body => '<p> Wasserstoffbombe </p>')
  36 + fast_create(TinyMceArticle, :name => "A Post", :profile_id => @person.id, :parent_id => blog.id, :body => '<p>Lorem ipsum dolor sit amet</p> <p>Second paragraph</p>')
  37 + block = ArticleBlock.new
  38 + block.article = blog
  39 + @person.boxes << Box.new
  40 + @person.boxes.first.blocks << block
  41 + return block
  42 + end
  43 +
  44 + # Event item CSS selector
  45 + ev = '.event-plugin_event-block ul.events li.event[itemscope]' +
  46 + '[itemtype="http://data-vocabulary.org/Event"] '
  47 +
  48 +
  49 + should 'update event block cache' do
  50 + environment = Environment.default
  51 + environment.enable_plugin('EventPlugin')
  52 +
  53 + environment.locales.delete_if {|key, value| key != "en" }
  54 +
  55 + box = Box.create!(:owner => environment)
  56 +
  57 + EventPlugin::EventBlock.create!(:box => box)
  58 +
  59 + person = fast_create(Person, :environment_id => environment.id)
  60 +
  61 +
  62 + @controller = BlockCachingTestController.new
  63 +
  64 + event1 = Event.create!(:name=>'Event 1', :profile =>person)
  65 + event1.slug = 'event1a'
  66 + event1.start_date = DateTime.now
  67 + event1.end_date = DateTime.now + 3.day
  68 + event1.save!
  69 +
  70 + get :index
  71 +
  72 + # Check the cache store and save the entry
  73 + cache_entry = verify_cache_entries
  74 +
  75 + assert_select ev + 'time.duration[itemprop="endDate"]', /4 days/
  76 +
  77 + # Change the event
  78 + event1.reload
  79 + event1.start_date = DateTime.now
  80 + event1.end_date = DateTime.now + 5.day
  81 + event1.save!
  82 +
  83 + get :index
  84 +
  85 + assert_select ev + 'time.duration[itemprop="endDate"]', /6 days/
  86 +
  87 + # Verify if entry have changed
  88 + assert verify_cache_entries != cache_entry
  89 +
  90 + end
  91 +
  92 + should 'timestamp change' do
  93 + puts "Initializing test..."
  94 + @controller = BlockCachingTestController.new
  95 + get :index
  96 + puts "portal_community: #{@controller.environment.portal_community}"
  97 + c = Community.create!(:name => 'community test', :environment => @controller.environment)
  98 + a1 = TextileArticle.create!(:name => "Article 1",
  99 + :profile => c,
  100 + :abstract => "This is the article1 lead.",
  101 + :body => "This is the article1 body.",
  102 + :highlighted => true)
  103 + puts "A1-updated_at: #{a1.updated_at}"
  104 + puts "A1-to_i: #{a1.updated_at.to_i}"
  105 + puts "A1-to_time: #{a1.updated_at.to_time}"
  106 + puts "A1-cache_key: #{a1.cache_key}"
  107 + puts "E1-cache_key: #{@controller.environment.cache_key}"
  108 + puts "PE1-cache_key: #{a1.environment.cache_key}"
  109 + a1.touch
  110 + puts "A2-updated_at: #{a1.updated_at}"
  111 + puts "A2-to_i: #{a1.updated_at.to_i}"
  112 + puts "A2-to_time: #{a1.updated_at.to_time}"
  113 + puts "A2-cache_key: #{a1.cache_key}"
  114 + puts "E2-cache_key: #{@controller.environment.cache_key}"
  115 + puts "PE2-cache_key: #{a1.environment.cache_key}"
  116 + get :index
  117 + puts "A3-updated_at: #{a1.updated_at}"
  118 + puts "A3-to_i: #{a1.updated_at.to_i}"
  119 + puts "A3-to_time: #{a1.updated_at.to_time}"
  120 + puts "A3-cache_key: #{a1.cache_key}"
  121 + puts "E3-cache_key: #{@controller.environment.cache_key}"
  122 + puts "PE3-cache_key: #{a1.environment.cache_key}"
  123 + end
  124 +
  125 + should 'update article block cache' do
  126 + puts "Initializing test..."
  127 + @controller = BlockCachingTestController.new
  128 + Noosfero.stubs(:locales).returns({"en"=>"English"})
  129 + get :index # creates and set the environment on controller
  130 +
  131 + c = Community.create!(:name => 'community test', :environment => @controller.environment)
  132 + @controller.environment.portal_community = c
  133 + @controller.environment.enable('use_portal_community')
  134 + puts "Test.beforeSave Environment..."
  135 + @controller.environment.save!
  136 + puts "Test.environment Saved!"
  137 +
  138 + puts "Test.index 0"
  139 + get :index
  140 + puts "Test.index 1"
  141 + get :index
  142 + puts "Test.index 2"
  143 + get :index
  144 + puts "Test.index 3"
  145 + get :index
  146 +
  147 + puts "Test.creating Article1..."
  148 + a1 = TextileArticle.create!(:name => "Article 1",
  149 + :profile => c,
  150 + :abstract => "This is the article1 lead.",
  151 + :body => "This is the article1 body.",
  152 + :highlighted => true)
  153 +
  154 + assert a1.environment == c.environment
  155 + assert c.environment == @controller.environment
  156 + assert @controller.environment == a1.environment
  157 +
  158 + puts "Article1 created"
  159 +
  160 + puts "Test.creating Article2..."
  161 + a2 = TextileArticle.create!(:name => "Article 2",
  162 + :profile => c,
  163 + :body => "This is the article2 body.",
  164 + :highlighted => true)
  165 + puts "Article2 created"
  166 +
  167 + assert a2.environment == c.environment
  168 + assert c.environment == @controller.environment
  169 + assert @controller.environment == a2.environment
  170 + assert a1.environment == a2.environment
  171 +
  172 + puts "Before INDEX 1"
  173 + get :index
  174 +
  175 + #assert_match(/This is the article1 lead/, @response.body)
  176 +
  177 + # Check the cache store and save the entry
  178 + #assert verify_cache_entries != UP_DIR, "Cache entry should have been created"
  179 +
  180 + a1.abstract = "Changed article1 lead"
  181 + puts "Changed Article1. Before Save!"
  182 + a1.save!
  183 + puts "After Save Article1"
  184 +
  185 + # The cache should have been expired!
  186 + #assert verify_cache_entries == UP_DIR, "Cache should have been expired"
  187 + puts "Before INDEX 2"
  188 + get :index
  189 +
  190 + #assert_match(/Changed article1 lead/, @response.body)
  191 +
  192 + # The cache should have been recreated
  193 + #assert verify_cache_entries != UP_DIR, "Cache entry should have been created"
  194 +
  195 + end
  196 +
  197 + def verify_cache_entries
  198 + entries = Dir.entries(FILE_STORE_PATH)
  199 + # The cache entry created
  200 + entries.sort.last.to_s
  201 + end
  202 +
  203 + def enable_cache
  204 + # Remove and create store
  205 + FileUtils.rm_rf(File.dirname(FILE_STORE_PATH))
  206 + FileUtils.mkdir_p(FILE_STORE_PATH)
  207 +
  208 + ActionController::Base.perform_caching = true
  209 + #Backup
  210 + @page_cache_directory = ActionController::Base.page_cache_directory
  211 + @cache_store = ActionController::Base.cache_store
  212 + #Setup
  213 + ActionController::Base.page_cache_directory = FILE_STORE_PATH
  214 + ActionController::Base.cache_store = :file_store, FILE_STORE_PATH
  215 + end
  216 +
  217 + def disable_cache
  218 + # Remove cache store
  219 + FileUtils.rm_rf(File.dirname(FILE_STORE_PATH))
  220 +
  221 + #Restore
  222 + ActionController::Base.perform_caching = false
  223 + ActionController::Base.page_cache_directory = @page_cache_directory
  224 + ActionController::Base.cache_store = @cache_store
  225 + end
  226 +
  227 +end
0 228 \ No newline at end of file
... ...