Mercurial > piecrust2
comparison tests/test_sources_autoconfig.py @ 979:45ad976712ec
tests: Big push to get the tests to pass again.
- Lots of fixes everywhere in the code.
- Try to handle debug logging in the multiprocessing worker pool when running in pytest. Not perfect, but usable for now.
- Replace all `.md` test files with `.html` since now a auto-format extension always sets the format.
- Replace `out` with `outfiles` in most places since now blog archives are added to the bake output and I don't want to add expected outputs for blog archives everywhere.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 29 Oct 2017 22:51:57 -0700 |
parents | 72f17534d58e |
children | 8adc27285d93 |
comparison
equal
deleted
inserted
replaced
978:7e51d14097cb | 979:45ad976712ec |
---|---|
3 from .mockutil import mock_fs, mock_fs_scope | 3 from .mockutil import mock_fs, mock_fs_scope |
4 from .pathutil import slashfix | 4 from .pathutil import slashfix |
5 | 5 |
6 | 6 |
7 @pytest.mark.parametrize( | 7 @pytest.mark.parametrize( |
8 'fs_fac, src_config, expected_paths, expected_metadata', | 8 'fs_fac, src_config, expected_path, expected_slug, expected_foos', |
9 [ | 9 [ |
10 (lambda: mock_fs(), {}, [], []), | 10 (lambda: mock_fs(), |
11 {}, | |
12 None, '', []), | |
11 (lambda: mock_fs().withPage('test/_index.md'), | 13 (lambda: mock_fs().withPage('test/_index.md'), |
12 {}, | 14 {}, |
13 ['_index.md'], | 15 '_index.md', '', []), |
14 [{'slug': '', 'config': {'foo': []}}]), | |
15 (lambda: mock_fs().withPage('test/something.md'), | 16 (lambda: mock_fs().withPage('test/something.md'), |
16 {}, | 17 {}, |
17 ['something.md'], | 18 'something.md', 'something', []), |
18 [{'slug': 'something', 'config': {'foo': []}}]), | |
19 (lambda: mock_fs().withPage('test/bar/something.md'), | 19 (lambda: mock_fs().withPage('test/bar/something.md'), |
20 {}, | 20 {}, |
21 ['bar/something.md'], | 21 'bar/something.md', 'something', ['bar']), |
22 [{'slug': 'something', 'config': {'foo': ['bar']}}]), | |
23 (lambda: mock_fs().withPage('test/bar1/bar2/something.md'), | 22 (lambda: mock_fs().withPage('test/bar1/bar2/something.md'), |
24 {}, | 23 {}, |
25 ['bar1/bar2/something.md'], | 24 'bar1/bar2/something.md', 'something', ['bar1', 'bar2']), |
26 [{'slug': 'something', 'config': {'foo': ['bar1', 'bar2']}}]), | |
27 | 25 |
28 (lambda: mock_fs().withPage('test/something.md'), | 26 (lambda: mock_fs().withPage('test/something.md'), |
29 {'collapse_single_values': True}, | 27 {'collapse_single_values': True}, |
30 ['something.md'], | 28 'something.md', 'something', None), |
31 [{'slug': 'something', 'config': {'foo': None}}]), | |
32 (lambda: mock_fs().withPage('test/bar/something.md'), | 29 (lambda: mock_fs().withPage('test/bar/something.md'), |
33 {'collapse_single_values': True}, | 30 {'collapse_single_values': True}, |
34 ['bar/something.md'], | 31 'bar/something.md', 'something', 'bar'), |
35 [{'slug': 'something', 'config': {'foo': 'bar'}}]), | |
36 (lambda: mock_fs().withPage('test/bar1/bar2/something.md'), | 32 (lambda: mock_fs().withPage('test/bar1/bar2/something.md'), |
37 {'collapse_single_values': True}, | 33 {'collapse_single_values': True}, |
38 ['bar1/bar2/something.md'], | 34 'bar1/bar2/something.md', 'something', ['bar1', 'bar2']), |
39 [{'slug': 'something', 'config': {'foo': ['bar1', 'bar2']}}]), | |
40 | 35 |
41 (lambda: mock_fs().withPage('test/something.md'), | 36 (lambda: mock_fs().withPage('test/something.md'), |
42 {'only_single_values': True}, | 37 {'only_single_values': True}, |
43 ['something.md'], | 38 'something.md', 'something', None), |
44 [{'slug': 'something', 'config': {'foo': None}}]), | |
45 (lambda: mock_fs().withPage('test/bar/something.md'), | 39 (lambda: mock_fs().withPage('test/bar/something.md'), |
46 {'only_single_values': True}, | 40 {'only_single_values': True}, |
47 ['bar/something.md'], | 41 'bar/something.md', 'something', 'bar') |
48 [{'slug': 'something', 'config': {'foo': 'bar'}}]), | |
49 ]) | 42 ]) |
50 def test_autoconfig_source_factories(fs_fac, src_config, expected_paths, | 43 def test_autoconfig_source_items( |
51 expected_metadata): | 44 fs_fac, src_config, expected_path, expected_slug, expected_foos): |
52 site_config = { | 45 site_config = { |
53 'sources': { | 46 'sources': { |
54 'test': {'type': 'autoconfig', | 47 'test': {'type': 'autoconfig', |
55 'setting_name': 'foo'} | 48 'setting_name': 'foo'} |
56 }, | 49 }, |
63 fs.withDir('kitchen/test') | 56 fs.withDir('kitchen/test') |
64 with mock_fs_scope(fs): | 57 with mock_fs_scope(fs): |
65 app = fs.getApp() | 58 app = fs.getApp() |
66 s = app.getSource('test') | 59 s = app.getSource('test') |
67 items = list(s.getAllContents()) | 60 items = list(s.getAllContents()) |
68 paths = [os.path.relpath(i.spec, s.fs_endpoint_path) for i in items] | 61 |
69 assert paths == slashfix(expected_paths) | 62 if expected_path is None: |
70 metadata = [i.metadata['route_params'] for i in items] | 63 assert len(items) == 0 |
71 assert metadata == expected_metadata | 64 else: |
65 assert len(items) == 1 | |
66 path = os.path.relpath(items[0].spec, s.fs_endpoint_path) | |
67 assert path == slashfix(expected_path) | |
68 slug = items[0].metadata['route_params']['slug'] | |
69 assert slug == expected_slug | |
70 foos = items[0].metadata['config']['foo'] | |
71 assert foos == expected_foos | |
72 | 72 |
73 | 73 |
74 def test_autoconfig_fails_if_multiple_folders(): | 74 def test_autoconfig_fails_if_multiple_folders(): |
75 site_config = { | 75 site_config = { |
76 'sources': { | 76 'sources': { |
87 with pytest.raises(Exception): | 87 with pytest.raises(Exception): |
88 list(s.getAllContents()) | 88 list(s.getAllContents()) |
89 | 89 |
90 | 90 |
91 @pytest.mark.parametrize( | 91 @pytest.mark.parametrize( |
92 'fs_fac, expected_paths, expected_metadata', | 92 'fs_fac, expected_paths, expected_route_params, expected_configs', |
93 [ | 93 [ |
94 (lambda: mock_fs(), [], []), | 94 (lambda: mock_fs(), [], [], []), |
95 (lambda: mock_fs().withPage('test/_index.md'), | 95 (lambda: mock_fs().withPage('test/_index.md'), |
96 ['_index.md'], | 96 ['_index.md'], |
97 [{'slug': '', | 97 [{'slug': ''}], |
98 'config': {'foo': 0, 'foo_trail': [0]}}]), | 98 [{'foo': 0, 'foo_trail': [0]}]), |
99 (lambda: mock_fs().withPage('test/something.md'), | 99 (lambda: mock_fs().withPage('test/something.md'), |
100 ['something.md'], | 100 ['something.md'], |
101 [{'slug': 'something', | 101 [{'slug': 'something'}], |
102 'config': {'foo': 0, 'foo_trail': [0]}}]), | 102 [{'foo': 0, 'foo_trail': [0]}]), |
103 (lambda: mock_fs().withPage('test/08_something.md'), | 103 (lambda: mock_fs().withPage('test/08_something.md'), |
104 ['08_something.md'], | 104 ['08_something.md'], |
105 [{'slug': 'something', | 105 [{'slug': 'something'}], |
106 'config': {'foo': 8, 'foo_trail': [8]}}]), | 106 [{'foo': 8, 'foo_trail': [8]}]), |
107 (lambda: mock_fs().withPage('test/02_there/08_something.md'), | 107 (lambda: mock_fs().withPage('test/02_there/08_something.md'), |
108 ['02_there/08_something.md'], | 108 ['02_there/08_something.md'], |
109 [{'slug': 'there/something', | 109 [{'slug': 'there/something'}], |
110 'config': {'foo': 8, 'foo_trail': [2, 8]}}]), | 110 [{'foo': 8, 'foo_trail': [2, 8]}]), |
111 ]) | 111 ]) |
112 def test_ordered_source_factories(fs_fac, expected_paths, expected_metadata): | 112 def test_ordered_source_items(fs_fac, expected_paths, expected_route_params, |
113 expected_configs): | |
113 site_config = { | 114 site_config = { |
114 'sources': { | 115 'sources': { |
115 'test': {'type': 'ordered', | 116 'test': {'type': 'ordered', |
116 'setting_name': 'foo'} | 117 'setting_name': 'foo'} |
117 }, | 118 }, |
122 fs.withConfig({'site': site_config}) | 123 fs.withConfig({'site': site_config}) |
123 fs.withDir('kitchen/test') | 124 fs.withDir('kitchen/test') |
124 with mock_fs_scope(fs): | 125 with mock_fs_scope(fs): |
125 app = fs.getApp() | 126 app = fs.getApp() |
126 s = app.getSource('test') | 127 s = app.getSource('test') |
127 facs = list(s.buildPageFactories()) | 128 items = list(s.getAllContents()) |
128 paths = [f.rel_path for f in facs] | 129 |
130 paths = [os.path.relpath(f.spec, s.fs_endpoint_path) for f in items] | |
129 assert paths == slashfix(expected_paths) | 131 assert paths == slashfix(expected_paths) |
130 metadata = [f.metadata for f in facs] | 132 metadata = [f.metadata['route_params'] for f in items] |
131 assert metadata == expected_metadata | 133 assert metadata == expected_route_params |
134 configs = [f.metadata['config'] for f in items] | |
135 for c in configs: | |
136 c.pop('format') | |
137 assert configs == expected_configs | |
132 | 138 |
133 | 139 |
134 @pytest.mark.parametrize( | 140 @pytest.mark.parametrize( |
135 'fs_fac, route_path, expected_path, expected_metadata', | 141 'fs_fac, route_path, expected_path, expected_metadata', |
136 [ | 142 [ |
174 fs.withDir('kitchen/test') | 180 fs.withDir('kitchen/test') |
175 with mock_fs_scope(fs): | 181 with mock_fs_scope(fs): |
176 app = fs.getApp() | 182 app = fs.getApp() |
177 s = app.getSource('test') | 183 s = app.getSource('test') |
178 route_metadata = {'slug': route_path} | 184 route_metadata = {'slug': route_path} |
179 factory = s.findContent(route_metadata) | 185 item = s.findContent(route_metadata) |
180 if factory is None: | 186 if item is None: |
181 assert expected_path is None and expected_metadata is None | 187 assert expected_path is None and expected_metadata is None |
182 return | 188 else: |
183 assert factory.rel_path == slashfix(expected_path) | 189 assert os.path.relpath(item.spec, s.fs_endpoint_path) == \ |
184 assert factory.metadata == expected_metadata | 190 slashfix(expected_path) |
191 assert item.metadata == expected_metadata | |
185 | 192 |