File: test_page.py

package info (click to toggle)
staticsite 2.5-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 14,648 kB
  • sloc: javascript: 33,722; python: 9,851; makefile: 46; sh: 4
file content (120 lines) | stat: -rw-r--r-- 4,529 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from __future__ import annotations

from unittest import TestCase

from . import utils as test_utils


class TestPage(test_utils.MockSiteTestMixin, TestCase):
    def test_resolve_path(self):
        files = {
            "toplevel.md": {},
            "lev1/page1.md": {},
            "lev1/page2.md": {},
            "lev1/lev2/page1.md": {},
        }
        with self.site(files) as mocksite:
            index, toplevel, lev1page1, lev1page2, lev2page1 = mocksite.page(
                "", "toplevel", "lev1/page1", "lev1/page2", "lev1/lev2/page1"
            )

            self.assertEqual(lev1page1.resolve_path("/lev1/page2.md"), lev1page2)
            self.assertEqual(lev1page1.resolve_path("/lev1/page2"), lev1page2)
            self.assertEqual(lev1page1.resolve_path("page2.md"), lev1page2)
            self.assertEqual(lev1page1.resolve_path("page2"), lev1page2)

            self.assertEqual(lev1page1.resolve_path("../toplevel.md"), toplevel)
            self.assertEqual(lev1page1.resolve_path("../toplevel"), toplevel)
            self.assertEqual(lev1page1.resolve_path("/toplevel.md"), toplevel)
            self.assertEqual(lev1page1.resolve_path("/toplevel"), toplevel)

            self.assertEqual(lev1page1.resolve_path("/lev1/lev2/page1.md"), lev2page1)
            self.assertEqual(lev1page1.resolve_path("/lev1/lev2/page1"), lev2page1)
            self.assertEqual(lev1page1.resolve_path("lev2/page1.md"), lev2page1)
            self.assertEqual(lev1page1.resolve_path("lev2/page1"), lev2page1)

            self.assertEqual(lev1page1.resolve_path("/"), index)

    def test_meta(self):
        files = {
            "index.md": {"title": "test"},
        }
        with self.site(files) as mocksite:
            index = mocksite.page("")
            # Direct field access
            self.assertEqual(index.title, "test")
            self.assertEqual(index.front_matter, {"title": "test"})

            # Dict-like field access via page.meta
            self.assertIn("title", index.meta)
            self.assertNotIn("test", index.meta)
            # Internal fields are hidden
            self.assertNotIn("front_matter", index.meta)

            self.assertEqual(index.meta["title"], "test")
            self.assertEqual(index.meta.get("title"), "test")

            with self.assertRaises(KeyError):
                index.meta["test"]
            self.assertIsNone(index.meta.get("test"))

            with self.assertRaises(KeyError):
                index.meta["front_matter"]
            self.assertIsNone(index.meta.get("front_matter"))

    def test_iter_pages(self):
        files = {
            "index.md": {},
            "index.txt": "",
            "tags.taxonomy": {},
            "lev1/page1.md": {"tags": ["a"]},
        }
        with self.site(files) as mocksite:
            (
                index,
                asset,
                tags,
                tag_a,
                lev1,
                lev1page1,
            ) = mocksite.page("", "index.txt", "tags", "tags/a", "lev1", "lev1/page1")
            rss, atom, archive = mocksite.page(
                "tags/a/index.rss", "tags/a/index.atom", "tags/a/archive"
            )

            # Full iteration
            assets = []
            pages = []
            for page in mocksite.site.iter_pages():
                if page.TYPE == "asset":
                    assets.append(page)
                else:
                    pages.append(page)
            self.assertGreaterEqual(len(assets), 10)
            self.assertCountEqual(
                pages, [index, tags, tag_a, lev1, lev1page1, rss, atom, archive]
            )

            # Skip static
            assets = []
            pages = []
            for page in mocksite.site.iter_pages(static=False):
                if page.TYPE == "asset":
                    assets.append(page)
                else:
                    pages.append(page)
            self.assertCountEqual(assets, [asset])
            self.assertCountEqual(
                pages, [index, tags, tag_a, lev1, lev1page1, rss, atom, archive]
            )

            # Only source pages
            assets = []
            pages = []
            for page in mocksite.site.iter_pages(static=False, source_only=True):
                if page.TYPE == "asset":
                    assets.append(page)
                else:
                    pages.append(page)
            self.assertCountEqual(assets, [asset])
            self.assertCountEqual(pages, [index, tags, lev1page1])