# -*- coding: utf-8 -*- """ Use nose `$ pip install nose` `$ nosetests` """ import yaml from hyde._compat import quote from hyde.model import Config from hyde.site import Node, RootNode, Site from fswrap import File, Folder TEST_SITE_ROOT = File(__file__).parent.child_folder('sites/test_jinja') def test_node_site(): s = Site(TEST_SITE_ROOT) r = RootNode(TEST_SITE_ROOT.child_folder('content'), s) assert r.site == s n = Node(r.source_folder.child_folder('blog'), r) assert n.site == s def test_node_root(): s = Site(TEST_SITE_ROOT) r = RootNode(TEST_SITE_ROOT.child_folder('content'), s) assert r.root == r n = Node(r.source_folder.child_folder('blog'), r) assert n.root == r def test_node_parent(): s = Site(TEST_SITE_ROOT) r = RootNode(TEST_SITE_ROOT.child_folder('content'), s) c = r.add_node(TEST_SITE_ROOT.child_folder('content/blog/2010/december')) assert c.parent == r.node_from_relative_path('blog/2010') def test_node_module(): s = Site(TEST_SITE_ROOT) r = RootNode(TEST_SITE_ROOT.child_folder('content'), s) assert not r.module n = r.add_node(TEST_SITE_ROOT.child_folder('content/blog')) assert n.module == n c = r.add_node(TEST_SITE_ROOT.child_folder('content/blog/2010/december')) assert c.module == n def test_node_url(): s = Site(TEST_SITE_ROOT) r = RootNode(TEST_SITE_ROOT.child_folder('content'), s) assert not r.module n = r.add_node(TEST_SITE_ROOT.child_folder('content/blog')) assert n.url == '/' + n.relative_path assert n.url == '/blog' c = r.add_node(TEST_SITE_ROOT.child_folder('content/blog/2010/december')) assert c.url == '/' + c.relative_path assert c.url == '/blog/2010/december' def test_node_full_url(): s = Site(TEST_SITE_ROOT) s.config.base_url = 'http://localhost' r = RootNode(TEST_SITE_ROOT.child_folder('content'), s) assert not r.module n = r.add_node(TEST_SITE_ROOT.child_folder('content/blog')) assert n.full_url == 'http://localhost/blog' c = r.add_node(TEST_SITE_ROOT.child_folder('content/blog/2010/december')) assert c.full_url == 'http://localhost/blog/2010/december' def test_node_full_url_quoted(): s = Site(TEST_SITE_ROOT) s.config.base_url = 'http://localhost' r = RootNode(TEST_SITE_ROOT.child_folder('content'), s) assert not r.module n = r.add_node(TEST_SITE_ROOT.child_folder('content/blo~g')) assert n.full_url == 'http://localhost/' + quote('blo~g') c = r.add_node(TEST_SITE_ROOT.child_folder('content/blo~g/2010/december')) assert c.full_url == 'http://localhost/' + quote('blo~g/2010/december') def test_node_relative_path(): s = Site(TEST_SITE_ROOT) r = RootNode(TEST_SITE_ROOT.child_folder('content'), s) assert not r.module n = r.add_node(TEST_SITE_ROOT.child_folder('content/blog')) assert n.relative_path == 'blog' c = r.add_node(TEST_SITE_ROOT.child_folder('content/blog/2010/december')) assert c.relative_path == 'blog/2010/december' def test_load(): s = Site(TEST_SITE_ROOT) s.load() path = 'blog/2010/december' node = s.content.node_from_relative_path(path) assert node assert Folder(node.relative_path) == Folder(path) path += '/merry-christmas.html' resource = s.content.resource_from_relative_path(path) assert resource assert resource.relative_path == path assert not s.content.resource_from_relative_path('/happy-festivus.html') def test_walk_resources(): s = Site(TEST_SITE_ROOT) s.load() pages = [page.name for page in s.content.walk_resources()] expected = ["404.html", "about.html", "apple-touch-icon.png", "merry-christmas.html", "crossdomain.xml", "favicon.ico", "robots.txt", "site.css" ] pages.sort() expected.sort() assert pages == expected def test_contains_resource(): s = Site(TEST_SITE_ROOT) s.load() path = 'blog/2010/december' node = s.content.node_from_relative_path(path) assert node.contains_resource('merry-christmas.html') def test_get_resource(): s = Site(TEST_SITE_ROOT) s.load() path = 'blog/2010/december' node = s.content.node_from_relative_path(path) resource = node.get_resource('merry-christmas.html') assert resource == s.content.resource_from_relative_path( Folder(path).child('merry-christmas.html')) def test_resource_slug(): s = Site(TEST_SITE_ROOT) s.load() path = 'blog/2010/december' node = s.content.node_from_relative_path(path) resource = node.get_resource('merry-christmas.html') assert resource.slug == 'merry-christmas' def test_get_resource_from_relative_deploy_path(): s = Site(TEST_SITE_ROOT) s.load() path = 'blog/2010/december' node = s.content.node_from_relative_path(path) resource = node.get_resource('merry-christmas.html') assert resource == s.content.resource_from_relative_deploy_path( Folder(path).child('merry-christmas.html')) resource.relative_deploy_path = Folder(path).child('merry-christmas.php') assert resource == s.content.resource_from_relative_deploy_path( Folder(path).child('merry-christmas.php')) def test_is_processable_default_true(): s = Site(TEST_SITE_ROOT) s.load() for page in s.content.walk_resources(): assert page.is_processable def test_relative_deploy_path(): s = Site(TEST_SITE_ROOT) s.load() for page in s.content.walk_resources(): assert page.relative_deploy_path == Folder(page.relative_path) assert page.url == '/' + page.relative_deploy_path def test_relative_deploy_path_override(): s = Site(TEST_SITE_ROOT) s.load() res = s.content.resource_from_relative_path( 'blog/2010/december/merry-christmas.html') res.relative_deploy_path = 'blog/2010/december/happy-holidays.html' for page in s.content.walk_resources(): if res.source_file == page.source_file: assert (page.relative_deploy_path == 'blog/2010/december/happy-holidays.html') else: assert page.relative_deploy_path == Folder(page.relative_path) class TestSiteWithConfig(object): @classmethod def setup_class(cls): cls.SITE_PATH = File(__file__).parent.child_folder( 'sites/test_jinja_with_config') cls.SITE_PATH.make() TEST_SITE_ROOT.copy_contents_to(cls.SITE_PATH) cls.config_file = File(cls.SITE_PATH.child('alternate.yaml')) with open(cls.config_file.path) as config: cls.config = Config( sitepath=cls.SITE_PATH, config_dict=yaml.load(config)) cls.SITE_PATH.child_folder('content').rename_to( cls.config.content_root) @classmethod def teardown_class(cls): cls.SITE_PATH.delete() def test_load_with_config(self): s = Site(self.SITE_PATH, config=self.config) s.load() path = 'blog/2010/december' node = s.content.node_from_relative_path(path) assert node assert Folder(node.relative_path) == Folder(path) path += '/merry-christmas.html' resource = s.content.resource_from_relative_path(path) assert resource assert resource.relative_path == path assert not s.content.resource_from_relative_path( '/happy-festivus.html') def test_content_url(self): s = Site(self.SITE_PATH, config=self.config) s.load() path = 'blog/2010/december' assert s.content_url(path) == "/" + path def test_content_url_encoding(self): s = Site(self.SITE_PATH, config=self.config) s.load() path = '".jpg' assert s.content_url(path) == "/" + quote(path) def test_content_url_encoding_safe(self): s = Site(self.SITE_PATH, config=self.config) s.load() path = '".jpg/abc' print(s.content_url(path, "")) print("/" + quote(path, "")) assert s.content_url(path, "") == "/" + quote(path, "") def test_media_url(self): s = Site(self.SITE_PATH, config=self.config) s.load() path = 'css/site.css' assert s.media_url(path) == "/media/" + path def test_is_media(self): s = Site(self.SITE_PATH, config=self.config) s.load() assert s.is_media('media/css/site.css') s.config.media_root = 'monkey' assert not s.is_media('media/css/site.css') assert s.is_media('monkey/css/site.css') def test_full_url_for_content(self): s = Site(self.SITE_PATH, config=self.config) s.load() path = 'blog/2010/december' assert s.full_url(path) == "/" + path def test_full_url_for_media(self): s = Site(self.SITE_PATH, config=self.config) s.load() path = 'media/css/site.css' assert s.is_media(path) full_url = s.full_url(path) assert full_url == "/" + path def test_media_url_from_resource(self): s = Site(self.SITE_PATH, config=self.config) s.load() path = 'css/site.css' resource = s.content.resource_from_relative_path( Folder("media").child(path)) assert resource assert resource.full_url == "/media/" + path def test_config_ignore(self): c = Config(self.SITE_PATH, config_dict=self.config.to_dict()) s = Site(self.SITE_PATH, config=c) s.load() path = 'apple-touch-icon.png' resource = s.content.resource_from_relative_path(path) assert resource assert resource.full_url == "/" + path s = Site(self.SITE_PATH, config=c) s.config.ignore.append('*.png') resource = s.content.resource_from_relative_path(path) assert not resource def test_config_ignore_nodes(self): c = Config(self.SITE_PATH, config_dict=self.config.to_dict()) git = self.SITE_PATH.child_folder('.git') git.make() s = Site(self.SITE_PATH, config=c) s.load() git_node = s.content.node_from_relative_path('.git') assert not git_node blog_node = s.content.node_from_relative_path('blog') assert blog_node assert blog_node.full_url == "/blog" s = Site(self.SITE_PATH, config=c) s.config.ignore.append('blog') blog_node = s.content.node_from_relative_path('blog') assert not blog_node git_node = s.content.node_from_relative_path('.git') assert not git_node