forked from github/pelican
114 lines
4.1 KiB
Python
114 lines
4.1 KiB
Python
import locale
|
|
|
|
from jinja2.utils import generate_lorem_ipsum
|
|
|
|
from pelican.contents import Article, Author
|
|
from pelican.paginator import Paginator
|
|
from pelican.settings import DEFAULT_CONFIG
|
|
from pelican.tests.support import get_settings, unittest
|
|
|
|
# generate one paragraph, enclosed with <p>
|
|
TEST_CONTENT = str(generate_lorem_ipsum(n=1))
|
|
TEST_SUMMARY = generate_lorem_ipsum(n=1, html=False)
|
|
|
|
|
|
class TestPage(unittest.TestCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.old_locale = locale.setlocale(locale.LC_ALL)
|
|
locale.setlocale(locale.LC_ALL, "C")
|
|
self.page_kwargs = {
|
|
"content": TEST_CONTENT,
|
|
"context": {
|
|
"localsiteurl": "",
|
|
},
|
|
"metadata": {
|
|
"summary": TEST_SUMMARY,
|
|
"title": "foo bar",
|
|
},
|
|
"source_path": "/path/to/file/foo.ext",
|
|
}
|
|
|
|
def tearDown(self):
|
|
locale.setlocale(locale.LC_ALL, self.old_locale)
|
|
|
|
def test_save_as_preservation(self):
|
|
settings = get_settings()
|
|
# fix up pagination rules
|
|
from pelican.paginator import PaginationRule
|
|
|
|
pagination_rules = [
|
|
PaginationRule(*r)
|
|
for r in settings.get(
|
|
"PAGINATION_PATTERNS",
|
|
DEFAULT_CONFIG["PAGINATION_PATTERNS"],
|
|
)
|
|
]
|
|
settings["PAGINATION_PATTERNS"] = sorted(
|
|
pagination_rules,
|
|
key=lambda r: r[0],
|
|
)
|
|
|
|
self.page_kwargs["metadata"]["author"] = Author("Blogger", settings)
|
|
object_list = [Article(**self.page_kwargs), Article(**self.page_kwargs)]
|
|
paginator = Paginator("foobar.foo", "foobar/foo", object_list, settings)
|
|
page = paginator.page(1)
|
|
self.assertEqual(page.save_as, "foobar.foo")
|
|
|
|
def test_custom_pagination_pattern(self):
|
|
from pelican.paginator import PaginationRule
|
|
|
|
settings = get_settings()
|
|
settings["PAGINATION_PATTERNS"] = [
|
|
PaginationRule(*r)
|
|
for r in [
|
|
(1, "/{url}", "{base_name}/index.html"),
|
|
(2, "/{url}{number}/", "{base_name}/{number}/index.html"),
|
|
]
|
|
]
|
|
|
|
self.page_kwargs["metadata"]["author"] = Author("Blogger", settings)
|
|
object_list = [Article(**self.page_kwargs), Article(**self.page_kwargs)]
|
|
paginator = Paginator(
|
|
"blog/index.html", "//blog.my.site/", object_list, settings, 1
|
|
)
|
|
# The URL *has to* stay absolute (with // in the front), so verify that
|
|
page1 = paginator.page(1)
|
|
self.assertEqual(page1.save_as, "blog/index.html")
|
|
self.assertEqual(page1.url, "//blog.my.site/")
|
|
page2 = paginator.page(2)
|
|
self.assertEqual(page2.save_as, "blog/2/index.html")
|
|
self.assertEqual(page2.url, "//blog.my.site/2/")
|
|
|
|
def test_custom_pagination_pattern_last_page(self):
|
|
from pelican.paginator import PaginationRule
|
|
|
|
settings = get_settings()
|
|
settings["PAGINATION_PATTERNS"] = [
|
|
PaginationRule(*r)
|
|
for r in [
|
|
(1, "/{url}1/", "{base_name}/1/index.html"),
|
|
(2, "/{url}{number}/", "{base_name}/{number}/index.html"),
|
|
(-1, "/{url}", "{base_name}/index.html"),
|
|
]
|
|
]
|
|
|
|
self.page_kwargs["metadata"]["author"] = Author("Blogger", settings)
|
|
object_list = [
|
|
Article(**self.page_kwargs),
|
|
Article(**self.page_kwargs),
|
|
Article(**self.page_kwargs),
|
|
]
|
|
paginator = Paginator(
|
|
"blog/index.html", "//blog.my.site/", object_list, settings, 1
|
|
)
|
|
# The URL *has to* stay absolute (with // in the front), so verify that
|
|
page1 = paginator.page(1)
|
|
self.assertEqual(page1.save_as, "blog/1/index.html")
|
|
self.assertEqual(page1.url, "//blog.my.site/1/")
|
|
page2 = paginator.page(2)
|
|
self.assertEqual(page2.save_as, "blog/2/index.html")
|
|
self.assertEqual(page2.url, "//blog.my.site/2/")
|
|
page3 = paginator.page(3)
|
|
self.assertEqual(page3.save_as, "blog/index.html")
|
|
self.assertEqual(page3.url, "//blog.my.site/")
|