view tests/test_sources_posts.py @ 281:0641fe5c3ef9

serve: Don't crash when a post URL doesn't match our expectations. It can happen that a posts source's URL pattern matches that of something else, like a taxonomy page. In this case, don't crash when what we think will be integers turn out to be something else. Instead, just return that no page has been found.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 01 Mar 2015 21:41:05 -0800
parents cb6eadea0845
children e7b865f8f335
line wrap: on
line source

import os
import pytest
from .mockutil import mock_fs, mock_fs_scope


@pytest.mark.parametrize('fs, src_type, expected_paths, expected_metadata', [
        (mock_fs(), 'flat', [], []),
        (mock_fs().withPage('test/2014-01-01_foo.md'),
            'flat',
            ['2014-01-01_foo.md'],
            [(2014, 1, 1, 'foo')]),
        (mock_fs(), 'shallow', [], []),
        (mock_fs().withPage('test/2014/01-01_foo.md'),
            'shallow',
            ['2014/01-01_foo.md'],
            [(2014, 1, 1, 'foo')]),
        (mock_fs(), 'hierarchy', [], []),
        (mock_fs().withPage('test/2014/01/01_foo.md'),
            'hierarchy',
            ['2014/01/01_foo.md'],
            [(2014, 1, 1, 'foo')]),
        ])
def test_post_source_factories(fs, src_type, expected_paths, expected_metadata):
        fs.withConfig({
            'site': {
                'sources': {
                    'test': {'type': 'posts/%s' % src_type}},
                'routes': [
                    {'url': '/%slug%', 'source': 'test'}]
                }
            })
        fs.withDir('kitchen/test')
        with mock_fs_scope(fs):
            app = fs.getApp(cache=False)
            s = app.getSource('test')
            facs = list(s.buildPageFactories())
            paths = [f.rel_path for f in facs]
            assert paths == expected_paths
            metadata = [
                    (f.metadata['year'], f.metadata['month'],
                        f.metadata['day'], f.metadata['slug'])
                    for f in facs]
            assert metadata == expected_metadata