comparison tests/test_appconfig.py @ 805:fd694f1297c7

config: Cleanup config loading code. Add support for a `local.yml` config.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 10 Oct 2016 21:41:59 -0700
parents ab5c6a8ae90a
children 72f17534d58e
comparison
equal deleted inserted replaced
804:08e6484a2600 805:fd694f1297c7
4 4
5 5
6 def test_config_default(): 6 def test_config_default():
7 values = {} 7 values = {}
8 config = PieCrustConfiguration(values=values) 8 config = PieCrustConfiguration(values=values)
9 assert config.get('site/root') == '/'
10 assert len(config.get('site/sources')) == 3 # pages, posts, theme_pages
11
12
13 def test_config_default2():
14 config = PieCrustConfiguration()
15 assert config.get('site/root') == '/' 9 assert config.get('site/root') == '/'
16 assert len(config.get('site/sources')) == 3 # pages, posts, theme_pages 10 assert len(config.get('site/sources')) == 3 # pages, posts, theme_pages
17 11
18 12
19 def test_config_site_override_title(): 13 def test_config_site_override_title():
31 fs = mock_fs().withConfig(config) 25 fs = mock_fs().withConfig(config)
32 with mock_fs_scope(fs): 26 with mock_fs_scope(fs):
33 app = fs.getApp() 27 app = fs.getApp()
34 assert app.config.get('site/default_page_layout') == 'foo' 28 assert app.config.get('site/default_page_layout') == 'foo'
35 assert app.config.get('site/default_post_layout') == 'bar' 29 assert app.config.get('site/default_post_layout') == 'bar'
36 assert app.config.get('site/sources')['pages']['default_layout'] == 'foo' 30 assert app.config.get('site/sources/pages/default_layout') == 'foo'
37 assert app.config.get('site/sources')['pages']['items_per_page'] == 5 31 assert app.config.get('site/sources/pages/items_per_page') == 5
38 assert app.config.get('site/sources')['theme_pages']['default_layout'] == 'default' 32 assert app.config.get(
39 assert app.config.get('site/sources')['theme_pages']['items_per_page'] == 5 33 'site/sources/theme_pages/default_layout') == 'default'
40 assert app.config.get('site/sources')['posts']['default_layout'] == 'bar' 34 assert app.config.get('site/sources/theme_pages/items_per_page') == 5
41 assert app.config.get('site/sources')['posts']['items_per_page'] == 2 35 assert app.config.get('site/sources/posts/default_layout') == 'bar'
36 assert app.config.get('site/sources/posts/items_per_page') == 2
37
42 38
43 def test_config_site_add_source(): 39 def test_config_site_add_source():
44 config = {'site': { 40 config = {'site': {
45 'sources': {'notes': {}}, 41 'sources': {'notes': {}},
46 'routes': [{'url': '/notes/%path:slug%', 'source': 'notes'}] 42 'routes': [{'url': '/notes/%path:slug%', 'source': 'notes'}]
47 }} 43 }}
48 fs = mock_fs().withConfig(config) 44 fs = mock_fs().withConfig(config)
49 with mock_fs_scope(fs): 45 with mock_fs_scope(fs):
50 app = fs.getApp() 46 app = fs.getApp()
51 # The order of routes is important. Sources, not so much. 47 # The order of routes is important. Sources, not so much.
52 assert (list( 48 assert (list(
53 map( 49 map(
54 lambda v: v.get('generator') or v['source'], 50 lambda v: v.get('generator') or v['source'],
55 app.config.get('site/routes'))) == 51 app.config.get('site/routes'))) ==
56 ['notes', 'posts', 'posts_archives', 'posts_tags', 'posts_categories', 'pages', 'theme_pages']) 52 [
57 assert list(app.config.get('site/sources').keys()) == [ 53 'notes', 'posts', 'posts_archives', 'posts_tags',
58 'theme_pages', 'pages', 'posts', 'notes'] 54 'posts_categories', 'pages', 'theme_pages'])
55 assert set(app.config.get('site/sources').keys()) == set([
56 'theme_pages', 'pages', 'posts', 'notes'])
59 57
60 58
61 def test_config_site_add_source_in_both_site_and_theme(): 59 def test_config_site_add_source_in_both_site_and_theme():
62 theme_config = {'site': { 60 theme_config = {'site': {
63 'sources': {'theme_notes': {}}, 61 'sources': {'theme_notes': {}},
64 'routes': [{'url': '/theme_notes/%path:slug%', 'source': 'theme_notes'}] 62 'routes': [{'url': '/theme_notes/%path:slug%', 'source': 'theme_notes'}]
65 }} 63 }}
66 config = {'site': { 64 config = {'site': {
67 'sources': {'notes': {}}, 65 'sources': {'notes': {}},
68 'routes': [{'url': '/notes/%path:slug%', 'source': 'notes'}] 66 'routes': [{'url': '/notes/%path:slug%', 'source': 'notes'}]
69 }} 67 }}
70 fs = (mock_fs() 68 fs = (mock_fs()
71 .withConfig(config) 69 .withConfig(config)
72 .withFile('kitchen/theme/theme_config.yml', yaml.dump(theme_config))) 70 .withFile('kitchen/theme/theme_config.yml', yaml.dump(theme_config)))
73 with mock_fs_scope(fs): 71 with mock_fs_scope(fs):
74 app = fs.getApp() 72 app = fs.getApp()
75 # The order of routes is important. Sources, not so much. 73 # The order of routes is important. Sources, not so much.
76 # `posts` shows up 3 times in routes (posts, tags, categories) 74 # `posts` shows up 3 times in routes (posts, tags, categories)
77 assert (list( 75 assert (list(
78 map( 76 map(
79 lambda v: v.get('generator') or v['source'], 77 lambda v: v.get('generator') or v['source'],
80 app.config.get('site/routes'))) == 78 app.config.get('site/routes'))) ==
81 ['notes', 'posts', 'posts_archives', 'posts_tags', 'posts_categories', 'pages', 'theme_notes', 'theme_pages']) 79 [
82 assert list(app.config.get('site/sources').keys()) == [ 80 'notes', 'posts', 'posts_archives', 'posts_tags',
83 'theme_pages', 'theme_notes', 'pages', 'posts', 'notes'] 81 'posts_categories', 'pages', 'theme_notes',
82 'theme_pages'])
83 assert set(app.config.get('site/sources').keys()) == set([
84 'theme_pages', 'theme_notes', 'pages', 'posts', 'notes'])
84 85
86
87 def test_multiple_blogs():
88 config = {'site': {'blogs': ['aaa', 'bbb']}}
89 fs = mock_fs().withConfig(config)
90 with mock_fs_scope(fs):
91 app = fs.getApp()
92 assert app.config.get('site/blogs') == ['aaa', 'bbb']
93 assert (list(
94 map(
95 lambda v: v.get('generator') or v['source'],
96 app.config.get('site/routes'))) ==
97 [
98 'aaa', 'aaa_archives', 'aaa_tags', 'aaa_categories',
99 'bbb', 'bbb_archives', 'bbb_tags', 'bbb_categories',
100 'pages', 'theme_pages'])
101 assert set(app.config.get('site/sources').keys()) == set([
102 'aaa', 'bbb', 'pages', 'theme_pages'])
103
104
105 def test_custom_list_setting():
106 config = {'blah': ['foo', 'bar']}
107 fs = mock_fs().withConfig(config)
108 with mock_fs_scope(fs):
109 app = fs.getApp()
110 assert app.config.get('blah') == ['foo', 'bar']
111
112
113 def test_custom_list_setting_in_site_section():
114 config = {'site': {'blah': ['foo', 'bar']}}
115 fs = mock_fs().withConfig(config)
116 with mock_fs_scope(fs):
117 app = fs.getApp()
118 assert app.config.get('site/blah') == ['foo', 'bar']