Mercurial > piecrust2
comparison tests/conftest.py @ 674:f987b29d6fab
tests: Add ability to run tests with a theme site.
* Remove automatic creating of `config.yml`.
* Add option to specify `theme_config` in YAML tests.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 06 Mar 2016 23:48:01 -0800 |
parents | d6403c21bdea |
children | ba0a6bd5e913 |
comparison
equal
deleted
inserted
replaced
673:d6403c21bdea | 674:f987b29d6fab |
---|---|
74 def __init__(self, name, parent, spec): | 74 def __init__(self, name, parent, spec): |
75 super(YamlTestItemBase, self).__init__(name, parent) | 75 super(YamlTestItemBase, self).__init__(name, parent) |
76 self.spec = spec | 76 self.spec = spec |
77 | 77 |
78 @property | 78 @property |
79 def is_theme_site(self): | |
80 return self.spec.get('theme_config') is not None | |
81 | |
82 @property | |
79 def mock_debug(self): | 83 def mock_debug(self): |
80 return bool(self.config.getoption('--mock-debug')) | 84 return bool(self.config.getoption('--mock-debug')) |
81 | 85 |
82 def _prepareMockFs(self): | 86 def _prepareMockFs(self): |
83 fs = mock_fs() | 87 fs = mock_fs() |
84 | 88 |
85 # Website config. | 89 # Suppress any formatting or layout so we can compare |
90 # much simpler strings. | |
86 config = { | 91 config = { |
87 'site': { | 92 'site': { |
88 'default_format': 'none', | 93 'default_format': 'none', |
89 'default_page_layout': 'none', | 94 'default_page_layout': 'none', |
90 'default_post_layout': 'none'} | 95 'default_post_layout': 'none'} |
91 } | 96 } |
92 test_config = self.spec.get('config') | 97 |
93 if test_config is not None: | 98 # Website or theme config. |
94 merge_dicts(config, test_config) | 99 test_theme_config = self.spec.get('theme_config') |
95 fs.withConfig(config) | 100 if test_theme_config is not None: |
101 merge_dicts(config, test_theme_config) | |
102 fs.withThemeConfig(config) | |
103 else: | |
104 test_config = self.spec.get('config') | |
105 if test_config is not None: | |
106 merge_dicts(config, test_config) | |
107 fs.withConfig(config) | |
96 | 108 |
97 # Input file-system. | 109 # Input file-system. |
98 input_files = self.spec.get('in') | 110 input_files = self.spec.get('in') |
99 if input_files is not None: | 111 if input_files is not None: |
100 _add_mock_files(fs, '/kitchen', input_files) | 112 _add_mock_files(fs, '/kitchen', input_files) |
179 fs = self._prepareMockFs() | 191 fs = self._prepareMockFs() |
180 | 192 |
181 argv = self.spec['args'] | 193 argv = self.spec['args'] |
182 if isinstance(argv, str): | 194 if isinstance(argv, str): |
183 argv = argv.split(' ') | 195 argv = argv.split(' ') |
196 if self.is_theme_site: | |
197 argv.insert(0, '--theme') | |
198 argv = ['--root', fs.path('/kitchen')] + argv | |
184 | 199 |
185 expected_code = self.spec.get('code', 0) | 200 expected_code = self.spec.get('code', 0) |
186 expected_out = self.spec.get('out', None) | 201 expected_out = self.spec.get('out', None) |
187 | 202 |
188 with mock_fs_scope(fs, keep=self.mock_debug): | 203 with mock_fs_scope(fs, keep=self.mock_debug): |
189 memstream = io.StringIO() | 204 memstream = io.StringIO() |
190 hdl = logging.StreamHandler(stream=memstream) | 205 hdl = logging.StreamHandler(stream=memstream) |
191 logging.getLogger().addHandler(hdl) | 206 logging.getLogger().addHandler(hdl) |
192 try: | 207 try: |
193 from piecrust.main import _pre_parse_chef_args, _run_chef | 208 from piecrust.main import _pre_parse_chef_args, _run_chef |
194 pre_args = _pre_parse_chef_args([ | 209 pre_args = _pre_parse_chef_args(argv) |
195 '--root', fs.path('/kitchen')]) | |
196 exit_code = _run_chef(pre_args, argv) | 210 exit_code = _run_chef(pre_args, argv) |
197 finally: | 211 finally: |
198 logging.getLogger().removeHandler(hdl) | 212 logging.getLogger().removeHandler(hdl) |
199 | 213 |
200 assert expected_code == exit_code | 214 assert expected_code == exit_code |
230 fs = self._prepareMockFs() | 244 fs = self._prepareMockFs() |
231 | 245 |
232 from piecrust.baking.baker import Baker | 246 from piecrust.baking.baker import Baker |
233 with mock_fs_scope(fs, keep=self.mock_debug): | 247 with mock_fs_scope(fs, keep=self.mock_debug): |
234 out_dir = fs.path('kitchen/_counter') | 248 out_dir = fs.path('kitchen/_counter') |
235 app = fs.getApp() | 249 app = fs.getApp(theme_site=self.is_theme_site) |
236 | 250 |
237 variant = self.spec.get('config_variant') | 251 variant = self.spec.get('config_variant') |
238 values = self.spec.get('config_values') | 252 values = self.spec.get('config_values') |
239 if values is not None: | 253 if values is not None: |
240 values = list(values.items()) | 254 values = list(values.items()) |
288 fs = self._prepareMockFs() | 302 fs = self._prepareMockFs() |
289 | 303 |
290 from piecrust.processing.pipeline import ProcessorPipeline | 304 from piecrust.processing.pipeline import ProcessorPipeline |
291 with mock_fs_scope(fs, keep=self.mock_debug): | 305 with mock_fs_scope(fs, keep=self.mock_debug): |
292 out_dir = fs.path('kitchen/_counter') | 306 out_dir = fs.path('kitchen/_counter') |
293 app = fs.getApp() | 307 app = fs.getApp(theme_site=self.is_theme_site) |
294 pipeline = ProcessorPipeline(app, out_dir) | 308 pipeline = ProcessorPipeline(app, out_dir) |
295 | 309 |
296 proc_names = self.spec.get('processors') | 310 proc_names = self.spec.get('processors') |
297 if proc_names: | 311 if proc_names: |
298 pipeline.enabled_processors = proc_names | 312 pipeline.enabled_processors = proc_names |
361 from werkzeug.test import Client | 375 from werkzeug.test import Client |
362 from werkzeug.wrappers import BaseResponse | 376 from werkzeug.wrappers import BaseResponse |
363 from piecrust.app import PieCrustFactory | 377 from piecrust.app import PieCrustFactory |
364 from piecrust.serving.server import Server | 378 from piecrust.serving.server import Server |
365 with mock_fs_scope(fs, keep=self.mock_debug): | 379 with mock_fs_scope(fs, keep=self.mock_debug): |
366 appfactory = PieCrustFactory(fs.path('/kitchen')) | 380 appfactory = PieCrustFactory( |
381 fs.path('/kitchen'), | |
382 theme_site=self.is_theme_site) | |
367 server = Server(appfactory) | 383 server = Server(appfactory) |
368 test_app = self._TestApp(server) | 384 test_app = self._TestApp(server) |
369 client = Client(test_app, BaseResponse) | 385 client = Client(test_app, BaseResponse) |
370 resp = client.get(url) | 386 resp = client.get(url) |
371 assert expected_status == resp.status_code | 387 assert expected_status == resp.status_code |