# -*- coding: utf-8 -*- """ Use nose `$ pip install nose` `$ nosetests` """ from hyde.model import Config, Expando from fswrap import File, Folder def test_expando_one_level(): d = {"a": 123, "b": "abc"} x = Expando(d) assert x.a == d['a'] assert x.b == d['b'] def test_expando_two_levels(): d = {"a": 123, "b": {"c": 456}} x = Expando(d) assert x.a == d['a'] assert x.b.c == d['b']['c'] def test_expando_three_levels(): d = {"a": 123, "b": {"c": 456, "d": {"e": "abc"}}} x = Expando(d) assert x.a == d['a'] assert x.b.c == d['b']['c'] assert x.b.d.e == d['b']['d']['e'] def test_expando_update(): d1 = {"a": 123, "b": "abc"} x = Expando(d1) assert x.a == d1['a'] assert x.b == d1['b'] d = {"b": {"c": 456, "d": {"e": "abc"}}, "f": "lmn"} x.update(d) assert x.a == d1['a'] assert x.b.c == d['b']['c'] assert x.b.d.e == d['b']['d']['e'] assert x.f == d["f"] d2 = {"a": 789, "f": "opq"} y = Expando(d2) x.update(y) assert x.a == 789 assert x.f == "opq" def test_expando_to_dict(): d = {"a": 123, "b": {"c": 456, "d": {"e": "abc"}}} x = Expando(d) assert d == x.to_dict() def test_expando_to_dict_with_update(): d1 = {"a": 123, "b": "abc"} x = Expando(d1) d = {"b": {"c": 456, "d": {"e": "abc"}}, "f": "lmn"} x.update(d) expected = {} expected.update(d1) expected.update(d) assert expected == x.to_dict() d2 = {"a": 789, "f": "opq"} y = Expando(d2) x.update(y) expected.update(d2) assert expected == x.to_dict() TEST_SITE = File(__file__).parent.child_folder('_test') import yaml # NOQA class TestConfig(object): @classmethod def setup_class(cls): cls.conf1 = """ mode: development content_root: stuff # Relative path from site root media_root: media # Relative path from site root media_url: /media widgets: plugins: aggregators: """ cls.conf2 = """ mode: development deploy_root: ~/deploy_site content_root: site/stuff # Relative path from site root media_root: mmm # Relative path from site root media_url: /media widgets: plugins: aggregators: """ 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_default_configuration(self): c = Config(sitepath=TEST_SITE, config_dict={}) for root in ['content', 'layout']: name = root + '_root' path = name + '_path' assert hasattr(c, name) assert getattr(c, name) == root assert hasattr(c, path) assert getattr(c, path) == TEST_SITE.child_folder(root) assert c.media_root_path == c.content_root_path.child_folder('media') assert hasattr(c, 'plugins') assert len(c.plugins) == 0 assert hasattr(c, 'ignore') assert c.ignore == ["*~", "*.bak", ".hg", ".git", ".svn"] assert c.deploy_root_path == TEST_SITE.child_folder('deploy') assert c.not_found == '404.html' assert c.meta.nodemeta == 'meta.yaml' def test_conf1(self): c = Config(sitepath=TEST_SITE, config_dict=yaml.load(self.conf1)) assert c.content_root_path == TEST_SITE.child_folder('stuff') def test_conf2(self): c = Config(sitepath=TEST_SITE, config_dict=yaml.load(self.conf2)) assert c.content_root_path == TEST_SITE.child_folder('site/stuff') assert c.media_root_path == c.content_root_path.child_folder('mmm') assert c.media_url == TEST_SITE.child_folder('/media') assert c.deploy_root_path == Folder('~/deploy_site') def test_read_from_file_by_default(self): File(TEST_SITE.child('site.yaml')).write(self.conf2) c = Config(sitepath=TEST_SITE) assert c.content_root_path == TEST_SITE.child_folder('site/stuff') assert c.media_root_path == c.content_root_path.child_folder('mmm') assert c.media_url == TEST_SITE.child_folder('/media') assert c.deploy_root_path == Folder('~/deploy_site') def test_read_from_specified_file(self): File(TEST_SITE.child('another.yaml')).write(self.conf2) c = Config(sitepath=TEST_SITE, config_file='another.yaml') assert c.content_root_path == TEST_SITE.child_folder('site/stuff') assert c.media_root_path == c.content_root_path.child_folder('mmm') assert c.media_url == TEST_SITE.child_folder('/media') assert c.deploy_root_path == Folder('~/deploy_site') def test_extends(self): another = """ extends: site.yaml mode: production media_root: xxx """ File(TEST_SITE.child('site.yaml')).write(self.conf2) File(TEST_SITE.child('another.yaml')).write(another) c = Config(sitepath=TEST_SITE, config_file='another.yaml') assert c.mode == 'production' assert c.content_root_path == TEST_SITE.child_folder('site/stuff') assert c.media_root_path == c.content_root_path.child_folder('xxx') assert c.media_url == TEST_SITE.child_folder('/media') assert c.deploy_root_path == Folder('~/deploy_site')