changeset 189:a333cdadf5b0

tests: Add tests for Jinja template engine.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 04 Jan 2015 21:55:36 -0800
parents 31eaffd0afd7
children 430ee5b80962
files tests/test_templating_jinjaengine.py
diffstat 1 files changed, 64 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_templating_jinjaengine.py	Sun Jan 04 21:55:36 2015 -0800
@@ -0,0 +1,64 @@
+import pytest
+from .mockutil import (
+        mock_fs, mock_fs_scope, get_simple_page, render_simple_page)
+
+
+app_config = {
+        'site': {
+            'default_format': 'none',
+            'default_template_engine': 'jinja'},
+        'foo': 'bar'}
+page_config = {'layout': 'none'}
+
+open_patches = ['jinja2.environment', 'jinja2.utils']
+
+
+@pytest.mark.parametrize(
+        'contents, expected',
+        [
+            ("Raw text", "Raw text"),
+            ("This is {{foo}}", "This is bar"),
+            ("Info:\nMy URL: {{page.url}}\n",
+                "Info:\nMy URL: /foo")
+            ])
+def test_simple(contents, expected):
+    fs = (mock_fs()
+            .withConfig(app_config)
+            .withPage('pages/foo', config=page_config, contents=contents))
+    with mock_fs_scope(fs, open_patches=open_patches):
+        app = fs.getApp()
+        page = get_simple_page(app, 'foo.md')
+        output = render_simple_page(page, '/foo')
+        assert output == expected
+
+
+def test_layout():
+    contents = "Blah\n"
+    layout = "{{content}}\nFor site: {{foo}}\n"
+    expected = "Blah\nFor site: bar"
+    fs = (mock_fs()
+            .withConfig(app_config)
+            .withAsset('templates/blah.jinja', layout)
+            .withPage('pages/foo', config={'layout': 'blah'},
+                      contents=contents))
+    with mock_fs_scope(fs, open_patches=open_patches):
+        app = fs.getApp()
+        page = get_simple_page(app, 'foo.md')
+        output = render_simple_page(page, '/foo')
+        assert output == expected
+
+
+def test_partial():
+    contents = "Info:\n{% include 'page_info.jinja' %}\n"
+    partial = "- URL: {{page.url}}\n- SLUG: {{page.slug}}\n"
+    expected = "Info:\n- URL: /foo\n- SLUG: foo"
+    fs = (mock_fs()
+            .withConfig(app_config)
+            .withAsset('templates/page_info.jinja', partial)
+            .withPage('pages/foo', config=page_config, contents=contents))
+    with mock_fs_scope(fs, open_patches=open_patches):
+        app = fs.getApp()
+        page = get_simple_page(app, 'foo.md')
+        output = render_simple_page(page, '/foo')
+        assert output == expected
+