view tests/test_templating_pystacheengine.py @ 334:b034f6f15e22

bake: Several bug taxonomy-related fixes for incorrect incremental bakes. * Improve how the baker processes taxonomy terms and figures out what needs to be re-baked or not. * Create bake entries for clean taxnomy terms so they're not deleted by an incremental bake. * Add more information to bake records. * Slugify taxonomy terms is now done by the route in one place. * Fix a bug where the cache key for invalidating rendered segments was not computed the same way as when the caching was done. * Fix how term combinations are passed around, rendered, printed, parsed, etc. (TODO: more word needed in the routing functions) * Expose to the template whether a taxonomy term is a combination or not. * Display term combinations better in the built-in theme. * Rename `route.taxonomy` to `route.taxonomy_name` to prevent confusion. * Add options to show bake records for previous bakes.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 03 Apr 2015 10:59:50 -0700
parents 139179dc7abd
children 4b1019bb2533
line wrap: on
line source

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': 'mustache'},
        'foo': 'bar'}
page_config = {'layout': 'none'}

open_patches = ['pystache.common']


@pytest.mark.parametrize(
        'contents, expected',
        [
            ("Raw text", "Raw text"),
            ("This is {{foo}}", "This is bar"),
            ("Info:\n{{#page}}\nMy URL: {{url}}\n{{/page}}\n",
                "Info:\nMy URL: /foo\n")
            ])
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\n\nFor site: bar\n"
    fs = (mock_fs()
            .withConfig(app_config)
            .withAsset('templates/blah.mustache', 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{{#page}}\n{{> page_info}}\n{{/page}}\n"
    partial = "- URL: {{url}}\n- SLUG: {{slug}}\n"
    expected = "Info:\n- URL: /foo\n- SLUG: foo\n"
    fs = (mock_fs()
            .withConfig(app_config)
            .withAsset('templates/page_info.mustache', 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