view tests/test_db.py @ 49:fb6ae96756c1

Added unit tests. Refactored core APIs to make them more testable. Removed unused stuff like caching the configuration in the SQL database. Fixed the web bootstrap. Some cosmetic changes to be PEP8 compliant.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 28 Jan 2013 23:13:04 -0800
parents
children 2733871775cd
line wrap: on
line source

import os.path
from tests import WikkedTest
from mock import MockFileSystem
from wikked.fs import FileSystem
from wikked.db import SQLiteDatabase


class DatabaseTest(WikkedTest):
    def tearDown(self):
        if hasattr(self, 'wiki') and self.wiki:
            self.wiki.db.close()
        WikkedTest.tearDown(self)

    def testEmpty(self):
        self.wiki = self._getWikiFromStructure({})
        self.assertEqual([], list(self.wiki.getPageUrls()))

    def testOnePage(self):
        self.wiki = self._getWikiFromStructure({
            'foo.txt': 'A test page.'
            })
        self.assertEqual(['foo'], list(self.wiki.getPageUrls()))
        page = self.wiki.getPage('foo')
        self.assertEqual('foo', page.url)
        self.assertEqual(os.path.join(self.root, 'foo.txt'), page.path)
        self.assertEqual('A test page.', page.raw_text)

    def _getWikiFromStructure(self, structure):
        MockFileSystem.save_structure(self.root, structure)
        wiki = self.getWiki(
            db_factory=self._dbFactory,
            fs_factory=self._fsFactory
            )
        wiki.db.open()
        wiki.start()
        return wiki

    def _fsFactory(self, config):
        return FileSystem(self.root)

    def _dbFactory(self, config):
        return SQLiteDatabase(':memory:')