view tests/test_baking_baker.py @ 1144:9f3e702a8a69

bake: Give unique source specs to each taxonomy or blog archive page. This prevents caching issues in some situations, leading to one tag page reusing the data from a previous tag page.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 05 Jun 2018 22:05:46 -0700
parents 298b07a899b5
children
line wrap: on
line source

import time
from .mockutil import get_mock_app, mock_fs, mock_fs_scope


def test_bake_and_add_post():
    fs = (mock_fs()
          .withConfig()
          .withPage('pages/_index.html', {'layout': 'none', 'format': 'none'},
                    "{% for p in pagination.posts -%}\n"
                    "{{p.title}}\n"
                    "{% endfor %}")
          .withPage('posts/2017-01-01_first.html', {'title': "First"},
                    "something"))
    with mock_fs_scope(fs):
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'First\n'

        time.sleep(1)
        fs.withPage('posts/2017-01-02_second.html', {'title': "Second"},
                    "something else")
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second\nFirst\n'


def test_bake_four_times():
    fs = (mock_fs()
          .withConfig({'site': {
              'default_format': 'none',
              'default_page_layout': 'none',
              'default_post_layout': 'none',
          }})
          .withPage('pages/_index.html', {'layout': 'none', 'format': 'none'},
                    "{% for p in pagination.posts -%}\n"
                    "{{p.title}}\n"
                    "{% endfor %}")
          .withPage('posts/2017-01-01_first.html', {'title': "First"},
                    "something 1")
          .withPage('posts/2017-01-02_second.html', {'title': "Second"},
                    "something 2"))
    with mock_fs_scope(fs):
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second\nFirst\n'
        assert structure['2017']['01']['01']['first.html'] == 'something 1'
        assert structure['2017']['01']['02']['second.html'] == 'something 2'

        print("\n\n\n")
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second\nFirst\n'
        assert structure['2017']['01']['01']['first.html'] == 'something 1'
        assert structure['2017']['01']['02']['second.html'] == 'something 2'

        print("\n\n\n")
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second\nFirst\n'
        assert structure['2017']['01']['01']['first.html'] == 'something 1'
        assert structure['2017']['01']['02']['second.html'] == 'something 2'

        print("\n\n\n")
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second\nFirst\n'
        assert structure['2017']['01']['01']['first.html'] == 'something 1'
        assert structure['2017']['01']['02']['second.html'] == 'something 2'


def test_bake_four_times_again():
    fs = (mock_fs()
          .withConfig({'site': {
              'default_format': 'none',
              'default_page_layout': 'none',
              'default_post_layout': 'none',
          }})
          .withPage('pages/_index.html', {'layout': 'none', 'format': 'none'},
                    "{% for p in pagination.posts -%}\n"
                    "{{p.title}} : {{p.content}}\n"
                    "{% endfor %}")
          .withPage('posts/2017-01-01_first.html', {'title': "First"},
                    "something 1")
          .withPage('posts/2017-01-02_second.html', {'title': "Second"},
                    "something 2"))
    with mock_fs_scope(fs):
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second : something 2\nFirst : something 1\n'
        assert structure['2017']['01']['01']['first.html'] == 'something 1'
        assert structure['2017']['01']['02']['second.html'] == 'something 2'

        print("\n\n\n")
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second : something 2\nFirst : something 1\n'
        assert structure['2017']['01']['01']['first.html'] == 'something 1'
        assert structure['2017']['01']['02']['second.html'] == 'something 2'

        print("\n\n\n")
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second : something 2\nFirst : something 1\n'
        assert structure['2017']['01']['01']['first.html'] == 'something 1'
        assert structure['2017']['01']['02']['second.html'] == 'something 2'

        print("\n\n\n")
        fs.runChef('bake')
        structure = fs.getStructure('kitchen/_counter')
        assert structure['index.html'] == 'Second : something 2\nFirst : something 1\n'
        assert structure['2017']['01']['01']['first.html'] == 'something 1'
        assert structure['2017']['01']['02']['second.html'] == 'something 2'