changeset 51:2733871775cd

More unit tests.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 31 Jan 2013 12:28:10 -0800
parents 350f7f084028
children 8167b9b6925a
files tests/__init__.py tests/mock.py tests/test_db.py tests/test_page.py
diffstat 4 files changed, 109 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/tests/__init__.py	Thu Jan 31 12:27:35 2013 -0800
+++ b/tests/__init__.py	Thu Jan 31 12:28:10 2013 -0800
@@ -8,6 +8,7 @@
 
 class WikkedTest(unittest.TestCase):
     def setUp(self):
+        # Directory you can use for temporary files.
         self.root = os.path.join(
             os.path.dirname(os.path.dirname(__file__)),
             'test_data')
--- a/tests/mock.py	Thu Jan 31 12:27:35 2013 -0800
+++ b/tests/mock.py	Thu Jan 31 12:28:10 2013 -0800
@@ -19,6 +19,7 @@
 
         self.config_text = ""
         self.special_filenames = []
+        self.use_db = False
 
         self.logger_factory = lambda: logging.getLogger('wikked.tests')
         self.page_factory = lambda wiki, url: MockPage(wiki, url)
@@ -44,6 +45,7 @@
     def __init__(self, content=None, logger=None):
         Database.__init__(self, logger)
         self.content = content
+        self.conn = None
         self._open_count = 0
 
     def initDb(self):
@@ -51,12 +53,15 @@
 
     def open(self):
         self._open_count += 1
+        self.conn = 'MOCK_CONNECTION'
 
     def close(self):
         self._open_count -= 1
         if self._open_count < 0:
             raise Exception(
                 "The database was closed more times than it was open.")
+        elif self._open_count == 0:
+            self.conn = None
 
     def reset(self, pages):
         pass
@@ -93,26 +98,36 @@
 
     def getPageInfos(self, subdir=None):
         node = self._getNode(subdir)
+        if node is None:
+            raise PageNotFoundError()
         for n in self._getChildren(node):
             yield self._getPageInfo(n)
 
     def getPageInfo(self, path):
         node = self._getNode(path)
+        if node is None:
+            raise PageNotFoundError()
         return self._getPageInfo(node)
 
     def getPage(self, url):
         path = self._getPath(url, True)
         node = self._getNode(path)
+        if node is None:
+            raise PageNotFoundError()
         return self._getPageInfo(node, True)
 
     def setPage(self, path, content):
-        pass
+        raise NotImplementedError()
 
     def pageExists(self, url):
-        return False
+        try:
+            self._getPath(url, True)
+            return True
+        except PageNotFoundError:
+            return False
 
     def getPhysicalNamespacePath(self, url):
-        return None
+        raise NotImplementedError()
 
     def _getPageInfo(self, node, with_content=False):
         path_split = os.path.splitext(node['path'])
@@ -129,6 +144,8 @@
         node = self.structure
         if path:
             for n in path.split('/'):
+                if n not in node:
+                    return None
                 node = node[n]
         else:
             path = ''
--- a/tests/test_db.py	Thu Jan 31 12:27:35 2013 -0800
+++ b/tests/test_db.py	Thu Jan 31 12:28:10 2013 -0800
@@ -31,7 +31,12 @@
             db_factory=self._dbFactory,
             fs_factory=self._fsFactory
             )
+
+        # Open the DB before we do anything so that it will be closed
+        # only on `tearDown` (memory DBs are discarded when the
+        # connection is closed.
         wiki.db.open()
+
         wiki.start()
         return wiki
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_page.py	Thu Jan 31 12:28:10 2013 -0800
@@ -0,0 +1,83 @@
+from tests import WikkedTest
+from mock import MockFileSystem
+from wikked.page import Page
+
+
+class PageTest(WikkedTest):
+    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.formatted_text)
+        self.assertEqual('foo', page.title)
+        self.assertEqual('A test page.', page.text)
+        self.assertEqual({}, page.local_meta)
+        self.assertEqual([], page.local_links)
+        self.assertEqual([], page.local_includes)
+
+    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.formatted_text)
+        self.assertEqual('foo', page.title)
+        self.assertEqual('A page with simple meta.\n\n', page.text)
+        self.assertEqual({'bar': 'baz', 'is_test': True}, page.local_meta)
+        self.assertEqual([], page.local_links)
+        self.assertEqual([], page.local_includes)
+
+    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.formatted_text)
+        self.assertEqual('TEST-TITLE', page.title)
+        self.assertEqual('A page with a custom title.\n', page.text)
+        self.assertEqual({'title': 'TEST-TITLE'}, page.local_meta)
+        self.assertEqual([], page.local_links)
+        self.assertEqual([], page.local_includes)
+
+    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 <a class=\"wiki-link\" data-wiki-url=\"sandbox\">Sandbox</a>. Or to <a class=\"wiki-link missing\" data-wiki-url=\"other-sandbox\">this page</a>.", page.formatted_text)
+        self.assertEqual(set(['sandbox', 'other-sandbox']), set(page.local_links))
+
+    def _getWikiFromStructure(self, structure):
+        wiki = self.getWiki(use_db=False, fs_factory=lambda cfg: MockFileSystem(structure))
+        wiki.start()
+        return wiki
+
+    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.local_links)
+        first2 = Page(self.wiki, 'first-sibling')
+        self.assertEqual(['first', 'sub_dir/second'], first2.local_links)
+        second = Page(self.wiki, 'sub_dir/second')
+        self.assertEqual(['first', 'sub_dir/second-sibling'], second.local_links)
+        second2 = Page(self.wiki, 'sub_dir/second-sibling')
+        self.assertEqual(['sub_dir/second'], second2.local_links)
+