Commit 336f3209ae1c9b975aada4ab3dd676287709f4b8
1 parent
5a1eee95
Exists in
caching-rails4
Testing environment caching timestamp
Showing
2 changed files
with
228 additions
and
1 deletions
Show diff stats
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) | ... | ... |
| ... | ... | @@ -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 | ... | ... |