def test_cached_content_is_indexed_by_cache_key(self): from cocktail.html.element import Element a = Element("div") a.append("a") a.cached = True a.cache_key = "a" a.render(cache=self.cache) b = Element("div") b.append("b") b.cached = True b.cache_key = "b" b.render(cache=self.cache) x = Element("div") x.append("x") x.cached = True x.cache_key = "x" x.render(cache=self.cache) assert x.render(cache=self.cache) == "<div>x</div>" x.cache_key = "a" assert x.render(cache=self.cache) == "<div>a</div>" x.cache_key = "b" assert x.render(cache=self.cache) == "<div>b</div>"
def test_elements_reuse_cached_content(self): from cocktail.html.element import Element e = Element("div") e.append("Hello, world") e.cached = True e.cache_key = "test" e.render(cache=self.cache) e.append("!!!") assert e.render(cache=self.cache) == "<div>Hello, world</div>" e.cached = False assert e.render(cache=self.cache) == "<div>Hello, world!!!</div>"
def test_cached_content_respects_renderer_class(self): from cocktail.html.element import Element from cocktail.html.renderers import html4_renderer, xhtml_renderer img = Element("img") img.cached = True img.cache_key = "test" img.render(cache=self.cache) html = img.render(renderer=html4_renderer, cache=self.cache) assert html == "<img>" xhtml = img.render(renderer=xhtml_renderer, cache=self.cache) assert xhtml == "<img/>"
def test_elements_can_invalidate_cached_content(self): from cocktail.html.element import Element e = Element() e.cached = True e.cached_key = "foo" e.cache_tags.add("foo") e.render(cache=self.cache) e.append("foo") html = e.render(cache=self.cache) assert "foo" not in html self.cache.clear(scope=["foo"]) html = e.render(cache=self.cache) assert "foo" in html
def test_elements_can_define_cache_expiration(self): from time import sleep from datetime import timedelta from cocktail.html.element import Element e = Element() e.cached = True e.cache_key = "test" e.cache_expiration = timedelta(seconds=1) e.render(cache=self.cache) e.append("foo") assert "foo" not in e.render(cache=self.cache) sleep(1.2) assert "foo" in e.render(cache=self.cache)
def test_cached_content_includes_client_parameters(self): from cocktail.events import when from cocktail.html.element import Element e = Element() e.cached = True e.cache_key = "test" @when(e.ready_stage) def add_resources(event): child = Element() child.set_client_param("foo", "bar") e.append(child) e.render(cache=self.cache) assert "foo" in e.render_page()