# -*- coding: utf-8 -*- """ Use nose `$ pip install nose` `$ nosetests` """ from hyde.generator import Generator from hyde.site import Site from fswrap import File, Folder from pyquery import PyQuery import yaml TEST_SITE = File(__file__).parent.parent.child_folder('_test') class TestMeta(object): def setUp(self): TEST_SITE.make() TEST_SITE.parent.child_folder( 'sites/test_jinja').copy_contents_to(TEST_SITE) def tearDown(self): TEST_SITE.delete() def test_can_set_standard_attributes(self): text = """ --- is_processable: False --- {% extends "base.html" %} """ about2 = File(TEST_SITE.child('content/about2.html')) about2.write(text) s = Site(TEST_SITE) s.load() res = s.content.resource_from_path(about2.path) assert res.is_processable s.config.plugins = ['hyde.ext.plugins.meta.MetaPlugin'] gen = Generator(s) gen.generate_all() assert not res.meta.is_processable assert not res.is_processable def test_ignores_pattern_in_content(self): text = """ {% markdown %} Heading 1 === Heading 2 === {% endmarkdown %} """ about2 = File(TEST_SITE.child('content/about2.html')) about2.write(text) s = Site(TEST_SITE) s.load() res = s.content.resource_from_path(about2.path) assert res.is_processable s.config.plugins = ['hyde.ext.plugins.meta.MetaPlugin'] gen = Generator(s) gen.generate_all() target = File(Folder(s.config.deploy_root_path).child('about2.html')) text = target.read_all() q = PyQuery(text) assert q("h1").length == 2 assert q("h1:nth-child(1)").text().strip() == "Heading 1" assert q("h1:nth-child(2)").text().strip() == "Heading 2" def test_can_load_front_matter(self): d = {'title': 'A nice title', 'author': 'Lakshmi Vyas', 'twitter': 'lakshmivyas'} text = """ --- title: %(title)s author: %(author)s twitter: %(twitter)s --- {%% extends "base.html" %%} {%% block main %%} Hi! I am a test template to make sure jinja2 generation works well with hyde. {{resource.meta.title}} {{resource.meta.author}} {{resource.meta.twitter}} {%% endblock %%} """ about2 = File(TEST_SITE.child('content/about2.html')) about2.write(text % d) s = Site(TEST_SITE) s.config.plugins = ['hyde.ext.plugins.meta.MetaPlugin'] gen = Generator(s) gen.generate_all() res = s.content.resource_from_path(about2.path) assert hasattr(res, 'meta') assert hasattr(res.meta, 'title') assert hasattr(res.meta, 'author') assert hasattr(res.meta, 'twitter') assert res.meta.title == "A nice title" assert res.meta.author == "Lakshmi Vyas" assert res.meta.twitter == "lakshmivyas" target = File(Folder(s.config.deploy_root_path).child('about2.html')) text = target.read_all() q = PyQuery(text) for k, v in d.items(): assert v in q("span." + k).text() def test_can_load_from_node_meta(self): d = {'title': 'A nice title', 'author': 'Lakshmi Vyas', 'twitter': 'lakshmivyas'} text = """ === title: Even nicer title === {%% extends "base.html" %%} {%% block main %%} Hi! I am a test template to make sure jinja2 generation works well with hyde. {{resource.meta.title}} {{resource.meta.author}} {{resource.meta.twitter}} {%% endblock %%} """ about2 = File(TEST_SITE.child('content/about2.html')) about2.write(text % d) meta = File(TEST_SITE.child('content/meta.yaml')) meta.write(yaml.dump(d)) s = Site(TEST_SITE) s.config.plugins = ['hyde.ext.plugins.meta.MetaPlugin'] gen = Generator(s) gen.generate_all() res = s.content.resource_from_path(about2.path) assert hasattr(res, 'meta') assert hasattr(res.meta, 'title') assert hasattr(res.meta, 'author') assert hasattr(res.meta, 'twitter') assert res.meta.title == "Even nicer title" assert res.meta.author == "Lakshmi Vyas" assert res.meta.twitter == "lakshmivyas" target = File(Folder(s.config.deploy_root_path).child('about2.html')) text = target.read_all() q = PyQuery(text) for k, v in d.items(): if not k == 'title': assert v in q("span." + k).text() assert q("span.title").text() == "Even nicer title" def test_can_load_from_site_meta(self): d = {'title': 'A nice title', 'author': 'Lakshmi Vyas'} text = """ --- title: Even nicer title --- {%% extends "base.html" %%} {%% block main %%} Hi! I am a test template to make sure jinja2 generation works well with hyde. {{resource.meta.title}} {{resource.meta.author}} {{resource.meta.twitter}} {%% endblock %%} """ about2 = File(TEST_SITE.child('content/about2.html')) about2.write(text % d) meta = File(TEST_SITE.child('content/nodemeta.yaml')) meta.write(yaml.dump(d)) s = Site(TEST_SITE) s.config.plugins = ['hyde.ext.plugins.meta.MetaPlugin'] s.config.meta = { 'author': 'Lakshmi', 'twitter': 'lakshmivyas' } gen = Generator(s) gen.generate_all() res = s.content.resource_from_path(about2.path) assert hasattr(res, 'meta') assert hasattr(res.meta, 'title') assert hasattr(res.meta, 'author') assert hasattr(res.meta, 'twitter') assert res.meta.title == "Even nicer title" assert res.meta.author == "Lakshmi Vyas" assert res.meta.twitter == "lakshmivyas" target = File(Folder(s.config.deploy_root_path).child('about2.html')) text = target.read_all() q = PyQuery(text) for k, v in d.items(): if not k == 'title': assert v in q("span." + k).text() assert q("span.title").text() == "Even nicer title" def test_multiple_levels(self): page_d = {'title': 'An even nicer title'} blog_d = {'author': 'Laks'} content_d = {'title': 'A nice title', 'author': 'Lakshmi Vyas'} site_d = {'author': 'Lakshmi', 'twitter': 'lakshmivyas', 'nodemeta': 'meta.yaml'} text = """ --- title: %(title)s --- {%% extends "base.html" %%} {%% block main %%} Hi! I am a test template to make sure jinja2 generation works well with hyde. {{resource.meta.title}} {{resource.meta.author}} {{resource.meta.twitter}} {%% endblock %%} """ about2 = File(TEST_SITE.child('content/blog/about2.html')) about2.write(text % page_d) content_meta = File(TEST_SITE.child('content/nodemeta.yaml')) content_meta.write(yaml.dump(content_d)) content_meta = File(TEST_SITE.child('content/blog/meta.yaml')) content_meta.write(yaml.dump(blog_d)) s = Site(TEST_SITE) s.config.plugins = ['hyde.ext.plugins.meta.MetaPlugin'] s.config.meta = site_d gen = Generator(s) gen.generate_all() expected = {} expected.update(site_d) expected.update(content_d) expected.update(blog_d) expected.update(page_d) res = s.content.resource_from_path(about2.path) assert hasattr(res, 'meta') for k, v in expected.items(): assert hasattr(res.meta, k) assert getattr(res.meta, k) == v target = File( Folder(s.config.deploy_root_path).child('blog/about2.html')) text = target.read_all() q = PyQuery(text) for k, v in expected.items(): if k != 'nodemeta': assert v in q("span." + k).text()