Mercurial > wikked
annotate tests/test_page.py @ 82:9afe4a1dbd1e
Refactoring of core wiki classes:
- Use proper classes instead of dictionaries more often.
- Simplified `Page`'s public API.
- Page meta property values are now always stored in an array, even if there's
only one occurence for the given key.
- Updated unit-tests.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 19 Mar 2013 19:54:11 -0700 |
parents | 0b4f4c23770a |
children | 65f83a9b42f1 |
rev | line source |
---|---|
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) | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
19 self.assertEqual('A test page.', page._getFormattedText()) |
51 | 20 self.assertEqual('foo', page.title) |
21 self.assertEqual('A test page.', page.text) | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
22 self.assertEqual({}, page._getLocalMeta()) |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
23 self.assertEqual([], page._getLocalLinks()) |
51 | 24 |
25 def testPageMeta(self): | |
26 self.wiki = self._getWikiFromStructure({ | |
27 'foo.txt': "A page with simple meta.\n{{bar: baz}}\n{{is_test: }}" | |
28 }) | |
29 page = Page(self.wiki, 'foo') | |
30 self.assertEqual('foo', page.url) | |
31 self.assertEqual("A page with simple meta.\n{{bar: baz}}\n{{is_test: }}", page.raw_text) | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
32 self.assertEqual('A page with simple meta.\n\n', page._getFormattedText()) |
51 | 33 self.assertEqual('foo', page.title) |
34 self.assertEqual('A page with simple meta.\n\n', page.text) | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
35 self.assertEqual({'bar': ['baz'], 'is_test': True}, page._getLocalMeta()) |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
36 self.assertEqual([], page._getLocalLinks()) |
51 | 37 |
38 def testPageTitleMeta(self): | |
39 self.wiki = self._getWikiFromStructure({ | |
40 'test_title.txt': "A page with a custom title.\n{{title: TEST-TITLE}}" | |
41 }) | |
42 page = Page(self.wiki, 'test_title') | |
43 self.assertEqual('test_title', page.url) | |
44 self.assertEqual("A page with a custom title.\n{{title: TEST-TITLE}}", page.raw_text) | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
45 self.assertEqual('A page with a custom title.\n', page._getFormattedText()) |
51 | 46 self.assertEqual('TEST-TITLE', page.title) |
47 self.assertEqual('A page with a custom title.\n', page.text) | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
48 self.assertEqual({'title': ['TEST-TITLE']}, page._getLocalMeta()) |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
49 self.assertEqual([], page._getLocalLinks()) |
51 | 50 |
51 def testPageOutLinks(self): | |
52 self.wiki = self._getWikiFromStructure({ | |
53 'test_links.txt': "Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", | |
54 'sandbox.txt': "This is just a placeholder." | |
55 }) | |
56 self.assertTrue(self.wiki.pageExists('sandbox', from_db=False)) | |
57 page = Page(self.wiki, 'test_links') | |
58 self.assertEqual('test_links', page.url) | |
59 self.assertEqual("Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", page.raw_text) | |
54 | 60 self.assertEqual( |
61 "Follow a link to the %s. Or to %s." % ( | |
62 format_link('Sandbox', 'sandbox'), | |
63 format_link('this page', 'other-sandbox', True)), | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
64 page.text) |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
65 self.assertEqual(set(['sandbox', 'other-sandbox']), set(page._getLocalLinks())) |
51 | 66 |
67 def testPageRelativeOutLinks(self): | |
68 self.wiki = self._getWikiFromStructure({ | |
69 'first.txt': "Go to [[First Sibling]].", | |
70 'first-sibling.txt': "Go back to [[First]], or to [[sub_dir/Second]].", | |
71 'sub_dir': { | |
72 'second.txt': "Go back to [[../First]], or to [[Second Sibling]].", | |
73 'second-sibling.txt': "Go back to [[Second]]." | |
74 } | |
75 }) | |
76 first = Page(self.wiki, 'first') | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
77 self.assertEqual(['first-sibling'], first._getLocalLinks()) |
51 | 78 first2 = Page(self.wiki, 'first-sibling') |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
79 self.assertEqual(['first', 'sub_dir/second'], first2._getLocalLinks()) |
51 | 80 second = Page(self.wiki, 'sub_dir/second') |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
81 self.assertEqual(['first', 'sub_dir/second-sibling'], second._getLocalLinks()) |
51 | 82 second2 = Page(self.wiki, 'sub_dir/second-sibling') |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
83 self.assertEqual(['sub_dir/second'], second2._getLocalLinks()) |
51 | 84 |
55 | 85 def testGenericUrl(self): |
86 self.wiki = self._getWikiFromStructure({ | |
87 'foo.txt': "URL: [[url:/blah/boo/image.png]]" | |
88 }) | |
89 foo = Page(self.wiki, 'foo') | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
90 self.assertEqual("URL: /files/blah/boo/image.png", foo._getFormattedText()) |
55 | 91 |
53 | 92 def testPageInclude(self): |
93 self.wiki = self._getWikiFromStructure({ | |
94 'Foo.txt': "A test page.\n{{include: trans-desc}}\n", | |
95 'Trans Desc.txt': "BLAH\n" | |
96 }) | |
97 foo = Page(self.wiki, 'foo') | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
98 self.assertEqual({'include': ['trans-desc']}, foo._getLocalMeta()) |
54 | 99 self.assertEqual( |
100 "A test page.\n%s" % format_include('trans-desc'), | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
101 foo._getFormattedText()) |
53 | 102 self.assertEqual("A test page.\nBLAH\n\n", foo.text) |
103 | |
104 def testPageIncludeWithMeta(self): | |
105 self.wiki = self._getWikiFromStructure({ | |
106 'Foo.txt': "A test page.\n{{include: trans-desc}}\n", | |
107 'Trans Desc.txt': "BLAH: [[Somewhere]]\n{{bar: 42}}\n{{__secret: love}}\n{{+given: hope}}" | |
108 }) | |
109 foo = Page(self.wiki, 'foo') | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
110 self.assertEqual([], foo._getLocalLinks()) |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
111 self.assertEqual({'include': ['trans-desc']}, foo._getLocalMeta()) |
54 | 112 self.assertEqual( |
113 "A test page.\n%s" % format_include('trans-desc'), | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
114 foo._getFormattedText()) |
54 | 115 self.assertEqual( |
116 "A test page.\nBLAH: %s\n\n\n\n" % format_link('Somewhere', 'somewhere', True), | |
117 foo.text) | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
118 self.assertEqual(['somewhere'], foo.links) |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
119 self.assertEqual({'bar': ['42'], 'given': ['hope'], 'include': ['trans-desc']}, foo.meta) |
53 | 120 |
121 def testPageIncludeWithTemplating(self): | |
122 self.wiki = self._getWikiFromStructure({ | |
123 'Foo.txt': "A test page.\n{{include: greeting|name=Dave|what=drink}}\n", | |
124 'Greeting.txt': "Hello {{name}}, would you like a {{what}}?" | |
125 }) | |
126 foo = Page(self.wiki, 'foo') | |
54 | 127 self.assertEqual( |
128 "A test page.\n%s" % format_include('greeting', 'name=Dave|what=drink'), | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
129 foo._getFormattedText()) |
53 | 130 self.assertEqual("A test page.\nHello Dave, would you like a drink?\n", foo.text) |
131 | |
54 | 132 def testGivenOnlyInclude(self): |
133 self.wiki = self._getWikiFromStructure({ | |
134 'Base.txt': "The base page.\n{{include: Template 1}}", | |
135 'Template 1.txt': "TEMPLATE!\n{{+include: Template 2}}", | |
136 'Template 2.txt': "MORE TEMPLATE!" | |
137 }) | |
138 tpl1 = Page(self.wiki, 'template-1') | |
139 self.assertEqual( | |
140 "TEMPLATE!\n%s" % format_include('template-2', mod='+'), | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
141 tpl1._getFormattedText()) |
54 | 142 self.assertEqual("TEMPLATE!\n\n", tpl1.text) |
143 base = Page(self.wiki, 'base') | |
144 self.assertEqual("The base page.\nTEMPLATE!\nMORE TEMPLATE!\n\n", base.text) | |
145 | |
146 def testDoublePageIncludeWithMeta(self): | |
147 return | |
148 self.wiki = self._getWikiFromStructure({ | |
149 'Base.txt': "The base page.\n{{include: Template 1}}", | |
150 'Wrong.txt': "{{include: Template 2}}", | |
151 'Template 1.txt': "{{foo: bar}}\n{{+category: blah}}\n{{+include: Template 2}}\n{{__secret1: ssh}}", | |
152 'Template 2.txt': "{{+category: yolo}}", | |
153 'Query 1.txt': "{{query: category=yolo}}", | |
154 'Query 2.txt': "{{query: category=blah}}" | |
155 }) | |
156 base = Page(self.wiki, 'base') | |
157 self.assertEqual({ | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
158 'foo': ['bar'], |
54 | 159 'category': ['blah', 'yolo'] |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
160 }, base.meta) |
54 | 161 tpl1 = Page(self.wiki, 'template-1') |
162 self.assertEqual({ | |
82
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
163 'foo': ['bar'], |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
164 '+category': ['blah'], |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
165 '+include': ['template-2'], |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
166 '__secret': ['ssh'] |
9afe4a1dbd1e
Refactoring of core wiki classes:
Ludovic Chabant <ludovic@chabant.com>
parents:
64
diff
changeset
|
167 }, tpl1.meta) |
54 | 168 self.assertEqual( |
169 "\n\n%s\n\n" % format_include('template-2'), | |
170 tpl1.text) | |
171 q1 = Page(self.wiki, 'query-1') | |
172 self.assertEqual( | |
173 "<ul>\n<li>%s</li>\n<li>%s</li>\n</ul>" % (format_link('Base', 'base'), format_link('Wrong', 'wrong')), | |
174 q1.text) | |
175 q2 = Page(self.wiki, 'query-2') | |
176 self.assertEqual( | |
177 "<ul>\n<li>%s</li>\n</ul>" % format_link('Base', 'base'), | |
178 q2.text) | |
179 |