require File.dirname(__FILE__) + '/../../test_helper' 
  class CacheManagerTestCase < Test::Unit::TestCase 
    def setup 
      @p = Physical::Movie.create!(
         :name => 'Kiedy Harry pozna Sally', 
         :length_minutes => 120, 
         :rating => Physical::Rating::PG13) 
      # Memcache zachowuje zawarto przy restarcie aplikacji 
      l = Logical::Movie.clear(@p.id) 
    end 

    def test_logical_caching 
      # po pierwszym odczytaniu obiekt powinien by identyczny ze swym obrazem 
      l = Logical::Movie.get(@p.id) 
      assert l.name == @p.name 

      # po zmodyfikowaniu modelu fizycznego obiekt przestaje by 
      # identyczny ze swym obrazem
      @p.update_attribute(:name, 'Nowy tytu') 
      assert l.name != @p.name 

      # po odwieeniu cache obiekt powinien by na powrt 
      # identyczny ze swym obrazem
      Logical::CacheManager.instance.rebuild 
      l = Logical::Movie.get(@p.id) 
      assert l.name == @p.name 
    end 

    def test_dependent_obj_invalidation 
    # pocztkowo opisy powinny by zgodne 
    l = Logical::Movie.get(@p.id) 
    assert l.rating_description == Physical::Rating::PG13.description 
    
    # po zmodyfikowaniu modelu fizycznego opisy przestaj by zgodne 
    Physical::Rating::PG13.update_attribute(:description, 'Nowy opis') 
    assert l.rating_description != Physical::Rating::PG13.description 

    # uniewanienie jest uskuteczniane natychmiast, wic zmiany modelu fizycznego
    # powinny by natychmiast widoczne na poziomie modelu logicznego
    l = Logical::Movie.get(@p.id) 
    assert l.rating_description == Physical::Rating::PG13.description 
  end 
end 

