comparison tests/test_templating_pystacheengine.py @ 974:72f17534d58e

tests: First pass on making unit tests work again. - Fix all imports - Add more helper functions to work with mock file-systems - Simplify some code by running chef directly on the mock FS - Fix a couple tests
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 17 Oct 2017 01:07:30 -0700
parents ab5c6a8ae90a
children 45ad976712ec
comparison
equal deleted inserted replaced
973:8419daaa7a0e 974:72f17534d58e
1 import pytest 1 import pytest
2 from .mockutil import ( 2 from .mockutil import mock_fs, mock_fs_scope
3 mock_fs, mock_fs_scope, get_simple_page, render_simple_page) 3 from .rdrutil import render_simple_page
4 4
5 5
6 app_config = { 6 app_config = {
7 'site': { 7 'site': {
8 'default_format': 'none', 8 'default_format': 'none',
9 'default_template_engine': 'mustache'}, 9 'default_template_engine': 'mustache'},
10 'foo': 'bar'} 10 'foo': 'bar'}
11 page_config = {'layout': 'none'} 11 page_config = {'layout': 'none'}
12 12
13 open_patches = ['pystache.common'] 13 open_patches = ['pystache.common']
14 14
15 15
16 @pytest.mark.parametrize( 16 @pytest.mark.parametrize(
17 'contents, expected', 17 'contents, expected',
18 [ 18 [
19 ("Raw text", "Raw text"), 19 ("Raw text", "Raw text"),
20 ("This is {{foo}}", "This is bar"), 20 ("This is {{foo}}", "This is bar"),
21 ("Info:\n{{#page}}\nMy URL: {{url}}\n{{/page}}\n", 21 ("Info:\n{{#page}}\nMy URL: {{url}}\n{{/page}}\n",
22 "Info:\nMy URL: /foo.html\n") 22 "Info:\nMy URL: /foo.html\n")
23 ]) 23 ])
24 def test_simple(contents, expected): 24 def test_simple(contents, expected):
25 fs = (mock_fs() 25 fs = (mock_fs()
26 .withConfig(app_config) 26 .withConfig(app_config)
27 .withPage('pages/foo', config=page_config, contents=contents)) 27 .withPage('pages/foo', config=page_config, contents=contents))
28 with mock_fs_scope(fs, open_patches=open_patches): 28 with mock_fs_scope(fs, open_patches=open_patches):
29 app = fs.getApp() 29 app = fs.getApp()
30 page = get_simple_page(app, 'foo.md') 30 page = fs.getSimplePage('foo.md')
31 route = app.getSourceRoute('pages', None) 31 route = app.getSourceRoute('pages', None)
32 route_metadata = {'slug': 'foo'} 32 route_metadata = {'slug': 'foo'}
33 output = render_simple_page(page, route, route_metadata) 33 output = render_simple_page(page, route, route_metadata)
34 assert output == expected 34 assert output == expected
35 35
37 def test_layout(): 37 def test_layout():
38 contents = "Blah\n" 38 contents = "Blah\n"
39 layout = "{{content}}\nFor site: {{foo}}\n" 39 layout = "{{content}}\nFor site: {{foo}}\n"
40 expected = "Blah\n\nFor site: bar\n" 40 expected = "Blah\n\nFor site: bar\n"
41 fs = (mock_fs() 41 fs = (mock_fs()
42 .withConfig(app_config) 42 .withConfig(app_config)
43 .withAsset('templates/blah.mustache', layout) 43 .withAsset('templates/blah.mustache', layout)
44 .withPage('pages/foo', config={'layout': 'blah'}, 44 .withPage('pages/foo', config={'layout': 'blah'},
45 contents=contents)) 45 contents=contents))
46 with mock_fs_scope(fs, open_patches=open_patches): 46 with mock_fs_scope(fs, open_patches=open_patches):
47 app = fs.getApp() 47 app = fs.getApp()
48 page = get_simple_page(app, 'foo.md') 48 page = fs.getSimplePage('foo.md')
49 route = app.getSourceRoute('pages', None) 49 route = app.getSourceRoute('pages', None)
50 route_metadata = {'slug': 'foo'} 50 route_metadata = {'slug': 'foo'}
51 output = render_simple_page(page, route, route_metadata) 51 output = render_simple_page(page, route, route_metadata)
52 # On Windows, pystache unexplicably adds `\r` to some newlines... wtf. 52 # On Windows, pystache unexplicably adds `\r` to some newlines... wtf.
53 output = output.replace('\r', '') 53 output = output.replace('\r', '')
57 def test_partial(): 57 def test_partial():
58 contents = "Info:\n{{#page}}\n{{> page_info}}\n{{/page}}\n" 58 contents = "Info:\n{{#page}}\n{{> page_info}}\n{{/page}}\n"
59 partial = "- URL: {{url}}\n- SLUG: {{slug}}\n" 59 partial = "- URL: {{url}}\n- SLUG: {{slug}}\n"
60 expected = "Info:\n- URL: /foo.html\n- SLUG: foo\n" 60 expected = "Info:\n- URL: /foo.html\n- SLUG: foo\n"
61 fs = (mock_fs() 61 fs = (mock_fs()
62 .withConfig(app_config) 62 .withConfig(app_config)
63 .withAsset('templates/page_info.mustache', partial) 63 .withAsset('templates/page_info.mustache', partial)
64 .withPage('pages/foo', config=page_config, contents=contents)) 64 .withPage('pages/foo', config=page_config, contents=contents))
65 with mock_fs_scope(fs, open_patches=open_patches): 65 with mock_fs_scope(fs, open_patches=open_patches):
66 app = fs.getApp() 66 app = fs.getApp()
67 page = get_simple_page(app, 'foo.md') 67 page = fs.getSimplePage('foo.md')
68 route = app.getSourceRoute('pages', None) 68 route = app.getSourceRoute('pages', None)
69 route_metadata = {'slug': 'foo'} 69 route_metadata = {'slug': 'foo'}
70 output = render_simple_page(page, route, route_metadata) 70 output = render_simple_page(page, route, route_metadata)
71 # On Windows, pystache unexplicably adds `\r` to some newlines... wtf. 71 # On Windows, pystache unexplicably adds `\r` to some newlines... wtf.
72 output = output.replace('\r', '') 72 output = output.replace('\r', '')