54
|
1 from tests import WikkedTest, format_link, format_include
|
51
|
2 from mock import MockFileSystem
|
|
3 from wikked.page import Page
|
|
4
|
|
5
|
|
6 class PageTest(WikkedTest):
|
53
|
7 def _getWikiFromStructure(self, structure):
|
|
8 wiki = self.getWiki(use_db=False, fs_factory=lambda cfg: MockFileSystem(structure))
|
|
9 wiki.start()
|
|
10 return wiki
|
|
11
|
51
|
12 def testSimplePage(self):
|
|
13 self.wiki = self._getWikiFromStructure({
|
|
14 'foo.txt': 'A test page.'
|
|
15 })
|
|
16 page = Page(self.wiki, 'foo')
|
|
17 self.assertEqual('foo', page.url)
|
|
18 self.assertEqual('A test page.', page.raw_text)
|
|
19 self.assertEqual('A test page.', page.formatted_text)
|
|
20 self.assertEqual('foo', page.title)
|
|
21 self.assertEqual('A test page.', page.text)
|
|
22 self.assertEqual({}, page.local_meta)
|
|
23 self.assertEqual([], page.local_links)
|
|
24 self.assertEqual([], page.local_includes)
|
|
25
|
|
26 def testPageMeta(self):
|
|
27 self.wiki = self._getWikiFromStructure({
|
|
28 'foo.txt': "A page with simple meta.\n{{bar: baz}}\n{{is_test: }}"
|
|
29 })
|
|
30 page = Page(self.wiki, 'foo')
|
|
31 self.assertEqual('foo', page.url)
|
|
32 self.assertEqual("A page with simple meta.\n{{bar: baz}}\n{{is_test: }}", page.raw_text)
|
|
33 self.assertEqual('A page with simple meta.\n\n', page.formatted_text)
|
|
34 self.assertEqual('foo', page.title)
|
|
35 self.assertEqual('A page with simple meta.\n\n', page.text)
|
|
36 self.assertEqual({'bar': 'baz', 'is_test': True}, page.local_meta)
|
|
37 self.assertEqual([], page.local_links)
|
|
38 self.assertEqual([], page.local_includes)
|
|
39
|
|
40 def testPageTitleMeta(self):
|
|
41 self.wiki = self._getWikiFromStructure({
|
|
42 'test_title.txt': "A page with a custom title.\n{{title: TEST-TITLE}}"
|
|
43 })
|
|
44 page = Page(self.wiki, 'test_title')
|
|
45 self.assertEqual('test_title', page.url)
|
|
46 self.assertEqual("A page with a custom title.\n{{title: TEST-TITLE}}", page.raw_text)
|
|
47 self.assertEqual('A page with a custom title.\n', page.formatted_text)
|
|
48 self.assertEqual('TEST-TITLE', page.title)
|
|
49 self.assertEqual('A page with a custom title.\n', page.text)
|
|
50 self.assertEqual({'title': 'TEST-TITLE'}, page.local_meta)
|
|
51 self.assertEqual([], page.local_links)
|
|
52 self.assertEqual([], page.local_includes)
|
|
53
|
|
54 def testPageOutLinks(self):
|
|
55 self.wiki = self._getWikiFromStructure({
|
|
56 'test_links.txt': "Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].",
|
|
57 'sandbox.txt': "This is just a placeholder."
|
|
58 })
|
|
59 self.assertTrue(self.wiki.pageExists('sandbox', from_db=False))
|
|
60 page = Page(self.wiki, 'test_links')
|
|
61 self.assertEqual('test_links', page.url)
|
|
62 self.assertEqual("Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", page.raw_text)
|
54
|
63 self.assertEqual(
|
|
64 "Follow a link to the %s. Or to %s." % (
|
|
65 format_link('Sandbox', 'sandbox'),
|
|
66 format_link('this page', 'other-sandbox', True)),
|
|
67 page.formatted_text)
|
51
|
68 self.assertEqual(set(['sandbox', 'other-sandbox']), set(page.local_links))
|
|
69
|
|
70 def testPageRelativeOutLinks(self):
|
|
71 self.wiki = self._getWikiFromStructure({
|
|
72 'first.txt': "Go to [[First Sibling]].",
|
|
73 'first-sibling.txt': "Go back to [[First]], or to [[sub_dir/Second]].",
|
|
74 'sub_dir': {
|
|
75 'second.txt': "Go back to [[../First]], or to [[Second Sibling]].",
|
|
76 'second-sibling.txt': "Go back to [[Second]]."
|
|
77 }
|
|
78 })
|
|
79 first = Page(self.wiki, 'first')
|
|
80 self.assertEqual(['first-sibling'], first.local_links)
|
|
81 first2 = Page(self.wiki, 'first-sibling')
|
|
82 self.assertEqual(['first', 'sub_dir/second'], first2.local_links)
|
|
83 second = Page(self.wiki, 'sub_dir/second')
|
|
84 self.assertEqual(['first', 'sub_dir/second-sibling'], second.local_links)
|
|
85 second2 = Page(self.wiki, 'sub_dir/second-sibling')
|
|
86 self.assertEqual(['sub_dir/second'], second2.local_links)
|
|
87
|
55
|
88 def testGenericUrl(self):
|
|
89 self.wiki = self._getWikiFromStructure({
|
|
90 'foo.txt': "URL: [[url:/blah/boo/image.png]]"
|
|
91 })
|
|
92 foo = Page(self.wiki, 'foo')
|
|
93 self.assertEqual("URL: /files/blah/boo/image.png", foo.formatted_text)
|
|
94
|
53
|
95 def testPageInclude(self):
|
|
96 self.wiki = self._getWikiFromStructure({
|
|
97 'Foo.txt': "A test page.\n{{include: trans-desc}}\n",
|
|
98 'Trans Desc.txt': "BLAH\n"
|
|
99 })
|
|
100 foo = Page(self.wiki, 'foo')
|
|
101 self.assertEqual(['trans-desc'], foo.local_includes)
|
54
|
102 self.assertEqual(
|
|
103 "A test page.\n%s" % format_include('trans-desc'),
|
|
104 foo.formatted_text)
|
53
|
105 self.assertEqual("A test page.\nBLAH\n\n", foo.text)
|
|
106
|
|
107 def testPageIncludeWithMeta(self):
|
|
108 self.wiki = self._getWikiFromStructure({
|
|
109 'Foo.txt': "A test page.\n{{include: trans-desc}}\n",
|
|
110 'Trans Desc.txt': "BLAH: [[Somewhere]]\n{{bar: 42}}\n{{__secret: love}}\n{{+given: hope}}"
|
|
111 })
|
|
112 foo = Page(self.wiki, 'foo')
|
|
113 self.assertEqual(['trans-desc'], foo.local_includes)
|
|
114 self.assertEqual([], foo.local_links)
|
|
115 self.assertEqual({'include': 'trans-desc'}, foo.local_meta)
|
54
|
116 self.assertEqual(
|
|
117 "A test page.\n%s" % format_include('trans-desc'),
|
|
118 foo.formatted_text)
|
|
119 self.assertEqual(
|
|
120 "A test page.\nBLAH: %s\n\n\n\n" % format_link('Somewhere', 'somewhere', True),
|
|
121 foo.text)
|
53
|
122 self.assertEqual(['trans-desc'], foo.all_includes)
|
|
123 self.assertEqual(['somewhere'], foo.all_links)
|
|
124 self.assertEqual({'bar': '42', 'given': 'hope', 'include': 'trans-desc'}, foo.all_meta)
|
|
125
|
|
126 def testPageIncludeWithTemplating(self):
|
|
127 self.wiki = self._getWikiFromStructure({
|
|
128 'Foo.txt': "A test page.\n{{include: greeting|name=Dave|what=drink}}\n",
|
|
129 'Greeting.txt': "Hello {{name}}, would you like a {{what}}?"
|
|
130 })
|
|
131 foo = Page(self.wiki, 'foo')
|
54
|
132 self.assertEqual(
|
|
133 "A test page.\n%s" % format_include('greeting', 'name=Dave|what=drink'),
|
|
134 foo.formatted_text)
|
53
|
135 self.assertEqual("A test page.\nHello Dave, would you like a drink?\n", foo.text)
|
|
136
|
54
|
137 def testGivenOnlyInclude(self):
|
|
138 self.wiki = self._getWikiFromStructure({
|
|
139 'Base.txt': "The base page.\n{{include: Template 1}}",
|
|
140 'Template 1.txt': "TEMPLATE!\n{{+include: Template 2}}",
|
|
141 'Template 2.txt': "MORE TEMPLATE!"
|
|
142 })
|
|
143 tpl1 = Page(self.wiki, 'template-1')
|
|
144 self.assertEqual(
|
|
145 "TEMPLATE!\n%s" % format_include('template-2', mod='+'),
|
|
146 tpl1.formatted_text)
|
|
147 self.assertEqual("TEMPLATE!\n\n", tpl1.text)
|
|
148 base = Page(self.wiki, 'base')
|
|
149 self.assertEqual("The base page.\nTEMPLATE!\nMORE TEMPLATE!\n\n", base.text)
|
|
150
|
|
151 def testDoublePageIncludeWithMeta(self):
|
|
152 return
|
|
153 self.wiki = self._getWikiFromStructure({
|
|
154 'Base.txt': "The base page.\n{{include: Template 1}}",
|
|
155 'Wrong.txt': "{{include: Template 2}}",
|
|
156 'Template 1.txt': "{{foo: bar}}\n{{+category: blah}}\n{{+include: Template 2}}\n{{__secret1: ssh}}",
|
|
157 'Template 2.txt': "{{+category: yolo}}",
|
|
158 'Query 1.txt': "{{query: category=yolo}}",
|
|
159 'Query 2.txt': "{{query: category=blah}}"
|
|
160 })
|
|
161 base = Page(self.wiki, 'base')
|
|
162 self.assertEqual({
|
|
163 'foo': 'bar',
|
|
164 'category': ['blah', 'yolo']
|
|
165 }, base.all_meta)
|
|
166 tpl1 = Page(self.wiki, 'template-1')
|
|
167 self.assertEqual({
|
|
168 'foo': 'bar',
|
|
169 '+category': 'blah',
|
|
170 '+include': 'template-2',
|
|
171 '__secret': 'ssh'
|
|
172 }, tpl1.all_meta)
|
|
173 self.assertEqual(
|
|
174 "\n\n%s\n\n" % format_include('template-2'),
|
|
175 tpl1.text)
|
|
176 q1 = Page(self.wiki, 'query-1')
|
|
177 self.assertEqual(
|
|
178 "<ul>\n<li>%s</li>\n<li>%s</li>\n</ul>" % (format_link('Base', 'base'), format_link('Wrong', 'wrong')),
|
|
179 q1.text)
|
|
180 q2 = Page(self.wiki, 'query-2')
|
|
181 self.assertEqual(
|
|
182 "<ul>\n<li>%s</li>\n</ul>" % format_link('Base', 'base'),
|
|
183 q2.text)
|
|
184
|