test/save_test.rb in identity_cache-0.2.2 vs test/save_test.rb in identity_cache-0.2.3
- old
+ new
@@ -14,53 +14,69 @@
def test_create
@record = Item.new
@record.title = 'bob'
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('2/bob')}")
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}blob:Item:#{cache_hash("created_at:datetime,id:integer,item_id:integer,title:string,updated_at:datetime")}:2").once
+ expect_cache_delete("#{NAMESPACE}index:Item:id/title:#{cache_hash('2/bob')}")
+ expect_cache_delete("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
+ expect_cache_delete("#{NAMESPACE}blob:Item:#{cache_hash("created_at:datetime,id:integer,item_id:integer,title:string,updated_at:datetime")}:2").once
@record.save
end
def test_update
# Regular flow, write index id, write index id/tile, delete data blob since Record has changed
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/fred')}")
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('fred')}")
- IdentityCache.cache.expects(:delete).with(@blob_key)
+ expect_cache_delete("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/fred')}")
+ expect_cache_delete("#{NAMESPACE}index:Item:title:#{cache_hash('fred')}")
+ expect_cache_delete(@blob_key)
# Delete index id, delete index id/title
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
+ expect_cache_delete("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
+ expect_cache_delete("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
@record.title = 'fred'
@record.save
end
def test_destroy
# Regular flow: delete data blob, delete index id, delete index id/tile
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
- IdentityCache.cache.expects(:delete).with(@blob_key)
+ expect_cache_delete("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
+ expect_cache_delete("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
+ expect_cache_delete(@blob_key)
@record.destroy
end
def test_destroy_with_changed_attributes
# Make sure to delete the old cache index key, since the new title never ended up in an index
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
- IdentityCache.cache.expects(:delete).with(@blob_key)
+ expect_cache_delete("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
+ expect_cache_delete("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
+ expect_cache_delete(@blob_key)
@record.title = 'fred'
@record.destroy
end
def test_touch_will_expire_the_caches
# Regular flow: delete data blob, delete index id, delete index id/tile
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
- IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
- IdentityCache.cache.expects(:delete).with(@blob_key)
+ expect_cache_delete("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
+ expect_cache_delete("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
+ expect_cache_delete(@blob_key)
@record.touch
+ end
+
+ def test_expire_cache_works_in_a_transaction
+ expect_cache_delete("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
+ expect_cache_delete("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
+ expect_cache_delete(@blob_key)
+
+ ActiveRecord::Base.transaction do
+ @record.send(:expire_cache)
+ end
+ end
+
+ private
+
+ def expect_cache_delete(key)
+ @backend.expects(:write).with(key, IdentityCache::DELETED, anything)
end
end