import unittest import os import shutil import makesite from test import path class PagesTest(unittest.TestCase): def setUp(self): self.blog_path = path.temppath('blog') self.site_path = path.temppath('site') os.makedirs(self.blog_path) with open(os.path.join(self.blog_path, 'foo.txt'), 'w') as f: f.write('Foo') with open(os.path.join(self.blog_path, 'bar.txt'), 'w') as f: f.write('Bar') with open(os.path.join(self.blog_path, '2018-01-01-foo.txt'), 'w') as f: f.write('Foo') with open(os.path.join(self.blog_path, '2018-01-02-bar.txt'), 'w') as f: f.write('Bar') with open(os.path.join(self.blog_path, 'header-foo.txt'), 'w') as f: f.write('Foo') with open(os.path.join(self.blog_path, 'header-bar.txt'), 'w') as f: f.write('Bar') with open(os.path.join(self.blog_path, 'placeholder-foo.txt'), 'w') as f: f.write('{{ title }}:{{ author }}:Foo') with open(os.path.join(self.blog_path, 'placeholder-bar.txt'), 'w') as f: f.write('{{ title }}:{{ author }}:Bar') def tearDown(self): shutil.rmtree(self.blog_path) shutil.rmtree(self.site_path) def test_pages_undated(self): src = os.path.join(self.blog_path, '[fb]*.txt') dst = os.path.join(self.site_path, '{{ slug }}.txt') tpl = '
{{ content }}
' makesite.make_pages(src, dst, tpl) with open(os.path.join(self.site_path, 'foo.txt')) as f: self.assertEqual(f.read(), '
Foo
') with open(os.path.join(self.site_path, 'bar.txt')) as f: self.assertEqual(f.read(), '
Bar
') def test_pages_dated(self): src = os.path.join(self.blog_path, '2*.txt') dst = os.path.join(self.site_path, '{{ slug }}.txt') tpl = '
{{ content }}
' makesite.make_pages(src, dst, tpl) with open(os.path.join(self.site_path, 'foo.txt')) as f: self.assertEqual(f.read(), '
Foo
') with open(os.path.join(self.site_path, 'bar.txt')) as f: self.assertEqual(f.read(), '
Bar
') def test_pages_layout_params(self): src = os.path.join(self.blog_path, '2*.txt') dst = os.path.join(self.site_path, '{{ slug }}.txt') tpl = '
{{ slug }}:{{ title }}:{{ date }}:{{ content }}
' makesite.make_pages(src, dst, tpl, title='Lorem') with open(os.path.join(self.site_path, 'foo.txt')) as f: self.assertEqual(f.read(), '
foo:Lorem:2018-01-01:Foo
') with open(os.path.join(self.site_path, 'bar.txt')) as f: self.assertEqual(f.read(), '
bar:Lorem:2018-01-02:Bar
') def test_pages_return_value(self): src = os.path.join(self.blog_path, '2*.txt') dst = os.path.join(self.site_path, '{{ slug }}.txt') tpl = '
{{ content }}
' posts = makesite.make_pages(src, dst, tpl) self.assertEqual(len(posts), 2) self.assertEqual(posts[0]['date'], '2018-01-02') self.assertEqual(posts[1]['date'], '2018-01-01') def test_content_header_params(self): # Test that header params from one post is not used in another # post. src = os.path.join(self.blog_path, 'header*.txt') dst = os.path.join(self.site_path, '{{ slug }}.txt') tpl = '{{ title }}:{{ tag }}:{{ content }}' makesite.make_pages(src, dst, tpl) with open(os.path.join(self.site_path, 'header-foo.txt')) as f: self.assertEqual(f.read(), '{{ title }}:foo:Foo') with open(os.path.join(self.site_path, 'header-bar.txt')) as f: self.assertEqual(f.read(), 'bar:{{ tag }}:Bar') def test_content_no_rendering(self): # Test that placeholders are not populated in content rendering # by default. src = os.path.join(self.blog_path, 'placeholder-foo.txt') dst = os.path.join(self.site_path, '{{ slug }}.txt') tpl = '
{{ content }}
' makesite.make_pages(src, dst, tpl, author='Admin') with open(os.path.join(self.site_path, 'placeholder-foo.txt')) as f: self.assertEqual(f.read(), '
{{ title }}:{{ author }}:Foo
') def test_content_rendering_via_kwargs(self): # Test that placeholders are populated in content rendering when # requested in make_pages. src = os.path.join(self.blog_path, 'placeholder-foo.txt') dst = os.path.join(self.site_path, '{{ slug }}.txt') tpl = '
{{ content }}
' makesite.make_pages(src, dst, tpl, author='Admin', render='yes') with open(os.path.join(self.site_path, 'placeholder-foo.txt')) as f: self.assertEqual(f.read(), '
foo:Admin:Foo
') def test_content_rendering_via_header(self): # Test that placeholders are populated in content rendering when # requested in content header. src = os.path.join(self.blog_path, 'placeholder-bar.txt') dst = os.path.join(self.site_path, '{{ slug }}.txt') tpl = '
{{ content }}
' makesite.make_pages(src, dst, tpl, author='Admin') with open(os.path.join(self.site_path, 'placeholder-bar.txt')) as f: self.assertEqual(f.read(), '
bar:Admin:Bar
') def test_rendered_content_in_summary(self): # Test that placeholders are populated in summary if and only if # content rendering is enabled. src = os.path.join(self.blog_path, 'placeholder*.txt') post_dst = os.path.join(self.site_path, '{{ slug }}.txt') list_dst = os.path.join(self.site_path, 'list.txt') post_layout = '' list_layout = '
{{ content }}
' item_layout = '

{{ summary }}

' posts = makesite.make_pages(src, post_dst, post_layout, author='Admin') makesite.make_list(posts, list_dst, list_layout, item_layout) with open(os.path.join(self.site_path, 'list.txt')) as f: self.assertEqual(f.read(), '

{{ title }}:{{ author }}:Foo

bar:Admin:Bar

')