Mercurial > wikked
view 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 |
line wrap: on
line source
from tests import WikkedTest, format_link, format_include from mock import MockFileSystem from wikked.page import Page class PageTest(WikkedTest): def _getWikiFromStructure(self, structure): wiki = self.getWiki(use_db=False, fs_factory=lambda cfg: MockFileSystem(structure)) wiki.start() return wiki def testSimplePage(self): self.wiki = self._getWikiFromStructure({ 'foo.txt': 'A test page.' }) page = Page(self.wiki, 'foo') self.assertEqual('foo', page.url) self.assertEqual('A test page.', page.raw_text) self.assertEqual('A test page.', page._getFormattedText()) self.assertEqual('foo', page.title) self.assertEqual('A test page.', page.text) self.assertEqual({}, page._getLocalMeta()) self.assertEqual([], page._getLocalLinks()) def testPageMeta(self): self.wiki = self._getWikiFromStructure({ 'foo.txt': "A page with simple meta.\n{{bar: baz}}\n{{is_test: }}" }) page = Page(self.wiki, 'foo') self.assertEqual('foo', page.url) self.assertEqual("A page with simple meta.\n{{bar: baz}}\n{{is_test: }}", page.raw_text) self.assertEqual('A page with simple meta.\n\n', page._getFormattedText()) self.assertEqual('foo', page.title) self.assertEqual('A page with simple meta.\n\n', page.text) self.assertEqual({'bar': ['baz'], 'is_test': True}, page._getLocalMeta()) self.assertEqual([], page._getLocalLinks()) def testPageTitleMeta(self): self.wiki = self._getWikiFromStructure({ 'test_title.txt': "A page with a custom title.\n{{title: TEST-TITLE}}" }) page = Page(self.wiki, 'test_title') self.assertEqual('test_title', page.url) self.assertEqual("A page with a custom title.\n{{title: TEST-TITLE}}", page.raw_text) self.assertEqual('A page with a custom title.\n', page._getFormattedText()) self.assertEqual('TEST-TITLE', page.title) self.assertEqual('A page with a custom title.\n', page.text) self.assertEqual({'title': ['TEST-TITLE']}, page._getLocalMeta()) self.assertEqual([], page._getLocalLinks()) def testPageOutLinks(self): self.wiki = self._getWikiFromStructure({ 'test_links.txt': "Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", 'sandbox.txt': "This is just a placeholder." }) self.assertTrue(self.wiki.pageExists('sandbox', from_db=False)) page = Page(self.wiki, 'test_links') self.assertEqual('test_links', page.url) self.assertEqual("Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", page.raw_text) self.assertEqual( "Follow a link to the %s. Or to %s." % ( format_link('Sandbox', 'sandbox'), format_link('this page', 'other-sandbox', True)), page.text) self.assertEqual(set(['sandbox', 'other-sandbox']), set(page._getLocalLinks())) def testPageRelativeOutLinks(self): self.wiki = self._getWikiFromStructure({ 'first.txt': "Go to [[First Sibling]].", 'first-sibling.txt': "Go back to [[First]], or to [[sub_dir/Second]].", 'sub_dir': { 'second.txt': "Go back to [[../First]], or to [[Second Sibling]].", 'second-sibling.txt': "Go back to [[Second]]." } }) first = Page(self.wiki, 'first') self.assertEqual(['first-sibling'], first._getLocalLinks()) first2 = Page(self.wiki, 'first-sibling') self.assertEqual(['first', 'sub_dir/second'], first2._getLocalLinks()) second = Page(self.wiki, 'sub_dir/second') self.assertEqual(['first', 'sub_dir/second-sibling'], second._getLocalLinks()) second2 = Page(self.wiki, 'sub_dir/second-sibling') self.assertEqual(['sub_dir/second'], second2._getLocalLinks()) def testGenericUrl(self): self.wiki = self._getWikiFromStructure({ 'foo.txt': "URL: [[url:/blah/boo/image.png]]" }) foo = Page(self.wiki, 'foo') self.assertEqual("URL: /files/blah/boo/image.png", foo._getFormattedText()) def testPageInclude(self): self.wiki = self._getWikiFromStructure({ 'Foo.txt': "A test page.\n{{include: trans-desc}}\n", 'Trans Desc.txt': "BLAH\n" }) foo = Page(self.wiki, 'foo') self.assertEqual({'include': ['trans-desc']}, foo._getLocalMeta()) self.assertEqual( "A test page.\n%s" % format_include('trans-desc'), foo._getFormattedText()) self.assertEqual("A test page.\nBLAH\n\n", foo.text) def testPageIncludeWithMeta(self): self.wiki = self._getWikiFromStructure({ 'Foo.txt': "A test page.\n{{include: trans-desc}}\n", 'Trans Desc.txt': "BLAH: [[Somewhere]]\n{{bar: 42}}\n{{__secret: love}}\n{{+given: hope}}" }) foo = Page(self.wiki, 'foo') self.assertEqual([], foo._getLocalLinks()) self.assertEqual({'include': ['trans-desc']}, foo._getLocalMeta()) self.assertEqual( "A test page.\n%s" % format_include('trans-desc'), foo._getFormattedText()) self.assertEqual( "A test page.\nBLAH: %s\n\n\n\n" % format_link('Somewhere', 'somewhere', True), foo.text) self.assertEqual(['somewhere'], foo.links) self.assertEqual({'bar': ['42'], 'given': ['hope'], 'include': ['trans-desc']}, foo.meta) def testPageIncludeWithTemplating(self): self.wiki = self._getWikiFromStructure({ 'Foo.txt': "A test page.\n{{include: greeting|name=Dave|what=drink}}\n", 'Greeting.txt': "Hello {{name}}, would you like a {{what}}?" }) foo = Page(self.wiki, 'foo') self.assertEqual( "A test page.\n%s" % format_include('greeting', 'name=Dave|what=drink'), foo._getFormattedText()) self.assertEqual("A test page.\nHello Dave, would you like a drink?\n", foo.text) def testGivenOnlyInclude(self): self.wiki = self._getWikiFromStructure({ 'Base.txt': "The base page.\n{{include: Template 1}}", 'Template 1.txt': "TEMPLATE!\n{{+include: Template 2}}", 'Template 2.txt': "MORE TEMPLATE!" }) tpl1 = Page(self.wiki, 'template-1') self.assertEqual( "TEMPLATE!\n%s" % format_include('template-2', mod='+'), tpl1._getFormattedText()) self.assertEqual("TEMPLATE!\n\n", tpl1.text) base = Page(self.wiki, 'base') self.assertEqual("The base page.\nTEMPLATE!\nMORE TEMPLATE!\n\n", base.text) def testDoublePageIncludeWithMeta(self): return self.wiki = self._getWikiFromStructure({ 'Base.txt': "The base page.\n{{include: Template 1}}", 'Wrong.txt': "{{include: Template 2}}", 'Template 1.txt': "{{foo: bar}}\n{{+category: blah}}\n{{+include: Template 2}}\n{{__secret1: ssh}}", 'Template 2.txt': "{{+category: yolo}}", 'Query 1.txt': "{{query: category=yolo}}", 'Query 2.txt': "{{query: category=blah}}" }) base = Page(self.wiki, 'base') self.assertEqual({ 'foo': ['bar'], 'category': ['blah', 'yolo'] }, base.meta) tpl1 = Page(self.wiki, 'template-1') self.assertEqual({ 'foo': ['bar'], '+category': ['blah'], '+include': ['template-2'], '__secret': ['ssh'] }, tpl1.meta) self.assertEqual( "\n\n%s\n\n" % format_include('template-2'), tpl1.text) q1 = Page(self.wiki, 'query-1') self.assertEqual( "<ul>\n<li>%s</li>\n<li>%s</li>\n</ul>" % (format_link('Base', 'base'), format_link('Wrong', 'wrong')), q1.text) q2 = Page(self.wiki, 'query-2') self.assertEqual( "<ul>\n<li>%s</li>\n</ul>" % format_link('Base', 'base'), q2.text)