annotate tests/test_appconfig.py @ 955:a4f1eafd1964

admin: Show more info from the publishing process.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 05 Oct 2017 21:31:11 -0700
parents fd694f1297c7
children 72f17534d58e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
1 import yaml
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 from piecrust.appconfig import PieCrustConfiguration
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
3 from .mockutil import mock_fs, mock_fs_scope
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 def test_config_default():
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 values = {}
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 config = PieCrustConfiguration(values=values)
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 assert config.get('site/root') == '/'
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
10 assert len(config.get('site/sources')) == 3 # pages, posts, theme_pages
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 def test_config_site_override_title():
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 values = {'site': {'title': "Whatever"}}
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 config = PieCrustConfiguration(values=values)
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 assert config.get('site/root') == '/'
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 assert config.get('site/title') == 'Whatever'
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
684
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
20 def test_config_override_default_model_settings():
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
21 config = {'site': {
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
22 'default_page_layout': 'foo',
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
23 'default_post_layout': 'bar',
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
24 'posts_per_page': 2}}
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
25 fs = mock_fs().withConfig(config)
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
26 with mock_fs_scope(fs):
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
27 app = fs.getApp()
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
28 assert app.config.get('site/default_page_layout') == 'foo'
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
29 assert app.config.get('site/default_post_layout') == 'bar'
805
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
30 assert app.config.get('site/sources/pages/default_layout') == 'foo'
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
31 assert app.config.get('site/sources/pages/items_per_page') == 5
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
32 assert app.config.get(
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
33 'site/sources/theme_pages/default_layout') == 'default'
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
34 assert app.config.get('site/sources/theme_pages/items_per_page') == 5
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
35 assert app.config.get('site/sources/posts/default_layout') == 'bar'
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
36 assert app.config.get('site/sources/posts/items_per_page') == 2
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
37
684
15b5181b2e42 tests: Add another app config test.
Ludovic Chabant <ludovic@chabant.com>
parents: 683
diff changeset
38
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 def test_config_site_add_source():
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
40 config = {'site': {
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
41 'sources': {'notes': {}},
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
42 'routes': [{'url': '/notes/%path:slug%', 'source': 'notes'}]
805
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
43 }}
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
44 fs = mock_fs().withConfig(config)
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
45 with mock_fs_scope(fs):
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
46 app = fs.getApp()
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
47 # The order of routes is important. Sources, not so much.
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
48 assert (list(
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
49 map(
711
ab5c6a8ae90a bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents: 684
diff changeset
50 lambda v: v.get('generator') or v['source'],
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
51 app.config.get('site/routes'))) ==
805
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
52 [
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
53 'notes', 'posts', 'posts_archives', 'posts_tags',
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
54 'posts_categories', 'pages', 'theme_pages'])
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
55 assert set(app.config.get('site/sources').keys()) == set([
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
56 'theme_pages', 'pages', 'posts', 'notes'])
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
57
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
58
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
59 def test_config_site_add_source_in_both_site_and_theme():
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
60 theme_config = {'site': {
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
61 'sources': {'theme_notes': {}},
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
62 'routes': [{'url': '/theme_notes/%path:slug%', 'source': 'theme_notes'}]
805
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
63 }}
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
64 config = {'site': {
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
65 'sources': {'notes': {}},
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
66 'routes': [{'url': '/notes/%path:slug%', 'source': 'notes'}]
805
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
67 }}
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
68 fs = (mock_fs()
805
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
69 .withConfig(config)
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
70 .withFile('kitchen/theme/theme_config.yml', yaml.dump(theme_config)))
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
71 with mock_fs_scope(fs):
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
72 app = fs.getApp()
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
73 # The order of routes is important. Sources, not so much.
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
74 # `posts` shows up 3 times in routes (posts, tags, categories)
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
75 assert (list(
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
76 map(
711
ab5c6a8ae90a bake: Replace hard-coded taxonomy support with "generator" system.
Ludovic Chabant <ludovic@chabant.com>
parents: 684
diff changeset
77 lambda v: v.get('generator') or v['source'],
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
78 app.config.get('site/routes'))) ==
805
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
79 [
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
80 'notes', 'posts', 'posts_archives', 'posts_tags',
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
81 'posts_categories', 'pages', 'theme_notes',
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
82 'theme_pages'])
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
83 assert set(app.config.get('site/sources').keys()) == set([
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
84 'theme_pages', 'theme_notes', 'pages', 'posts', 'notes'])
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
85
683
ec384174b8b2 internal: More work/fixes on how default/theme/user configs are merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 681
diff changeset
86
805
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
87 def test_multiple_blogs():
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
88 config = {'site': {'blogs': ['aaa', 'bbb']}}
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
89 fs = mock_fs().withConfig(config)
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
90 with mock_fs_scope(fs):
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
91 app = fs.getApp()
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
92 assert app.config.get('site/blogs') == ['aaa', 'bbb']
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
93 assert (list(
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
94 map(
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
95 lambda v: v.get('generator') or v['source'],
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
96 app.config.get('site/routes'))) ==
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
97 [
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
98 'aaa', 'aaa_archives', 'aaa_tags', 'aaa_categories',
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
99 'bbb', 'bbb_archives', 'bbb_tags', 'bbb_categories',
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
100 'pages', 'theme_pages'])
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
101 assert set(app.config.get('site/sources').keys()) == set([
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
102 'aaa', 'bbb', 'pages', 'theme_pages'])
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
103
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
104
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
105 def test_custom_list_setting():
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
106 config = {'blah': ['foo', 'bar']}
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
107 fs = mock_fs().withConfig(config)
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
108 with mock_fs_scope(fs):
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
109 app = fs.getApp()
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
110 assert app.config.get('blah') == ['foo', 'bar']
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
111
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
112
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
113 def test_custom_list_setting_in_site_section():
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
114 config = {'site': {'blah': ['foo', 'bar']}}
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
115 fs = mock_fs().withConfig(config)
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
116 with mock_fs_scope(fs):
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
117 app = fs.getApp()
fd694f1297c7 config: Cleanup config loading code. Add support for a `local.yml` config.
Ludovic Chabant <ludovic@chabant.com>
parents: 711
diff changeset
118 assert app.config.get('site/blah') == ['foo', 'bar']