annotate tests/test_appconfig.py @ 681:894d286b348f

internal: Refactor config loading some more. * Remove fixup code in the app to make the app config class more standalone. * Remove support for old-style variants... maybe bring it back later. * Try and fix various bugs introduced by subtle config value overriding order changes.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 08 Mar 2016 01:07:34 -0800
parents 3df808b133f8
children ec384174b8b2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 from piecrust.appconfig import PieCrustConfiguration
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
2 from .mockutil import mock_fs, mock_fs_scope
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3
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 def test_config_default():
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 values = {}
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 config = PieCrustConfiguration(values=values)
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 assert config.get('site/root') == '/'
675
3df808b133f8 internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 585
diff changeset
9 assert len(config.get('site/sources')) == 2 # pages, posts
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
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 def test_config_default2():
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 config = PieCrustConfiguration()
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 assert config.get('site/root') == '/'
675
3df808b133f8 internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 585
diff changeset
15 assert len(config.get('site/sources')) == 2 # pages, posts
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 def test_config_site_override_title():
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 values = {'site': {'title': "Whatever"}}
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 config = PieCrustConfiguration(values=values)
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 assert config.get('site/root') == '/'
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 assert config.get('site/title') == 'Whatever'
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 def test_config_site_add_source():
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 values = {'site': {
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 'sources': {'notes': {}},
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 'routes': [{'url': '/notes/%path:slug%', 'source': 'notes'}]
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 }}
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 config = PieCrustConfiguration(values=values)
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 # The order of routes is important. Sources, not so much.
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
32 # `posts` shows up 3 times in routes (posts, tags, categories)
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 assert list(map(lambda v: v['source'], config.get('site/routes'))) == [
675
3df808b133f8 internal: Improve how theme configuration is validated and merged.
Ludovic Chabant <ludovic@chabant.com>
parents: 585
diff changeset
34 'notes', 'posts', 'posts', 'posts', 'pages']
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
35 assert sorted(config.get('site/sources').keys()) == sorted([
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
36 'pages', 'posts', 'notes'])
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
37
584
9ccc933ac2c7 internal: Refactor the app configuration class.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38
681
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
39 def test_config_site_add_source_with_theme():
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'}]
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
43 }}
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 # `posts` shows up 3 times in routes (posts, tags, categories)
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
49 assert (list(
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
50 map(
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
51 lambda v: v['source'],
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
52 app.config.get('site/routes'))) ==
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
53 ['notes', 'posts', 'posts', 'posts', 'pages', 'theme_pages'])
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
54 assert sorted(app.config.get('site/sources').keys()) == sorted([
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
55 'pages', 'posts', 'notes', 'theme_pages'])
894d286b348f internal: Refactor config loading some more.
Ludovic Chabant <ludovic@chabant.com>
parents: 675
diff changeset
56