Mercurial > p > roundup > code
view test/test_metakit.py @ 2089:93f03c6714d8
A few big changes in this commit:
1. The current indexer has been moved to backends/indexer_dbm in
anticipation of my writing an indexer_rdbms,
2. Changed indexer invocation during create / set to follow the pattern
set by the metakit backend, which was much cleaner, and
3. The "content" property of FileClass is now mutable in all but the
metakit backend.
Metakit needs to be changed to support the editing of "content". Hey, and
I learnt today that the metakit backend implements its own indexer. How
about that... :)
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Fri, 19 Mar 2004 04:47:59 +0000 |
| parents | c091cacdc505 |
| children | 8c6c0d40f9c8 |
line wrap: on
line source
# # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) # This module is free software, and you may redistribute it and/or modify # under the same terms as Python, so long as this copyright message and # disclaimer are retained in their original form. # # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # # $Id: test_metakit.py,v 1.4 2004-03-18 01:58:46 richard Exp $ import unittest, os, shutil, time, weakref from db_test_base import DBTest, ROTest, SchemaTest, ClassicInitTest, config, password from roundup import backends class metakitOpener: if hasattr(backends, 'metakit'): from roundup.backends import metakit as module module._instances = weakref.WeakValueDictionary() def nuke_database(self): shutil.rmtree(config.DATABASE) class metakitDBTest(metakitOpener, DBTest): def testTransactions(self): # remember the number of items we started num_issues = len(self.db.issue.list()) self.db.issue.create(title="don't commit me!", status='1') self.assertNotEqual(num_issues, len(self.db.issue.list())) self.db.rollback() self.assertEqual(num_issues, len(self.db.issue.list())) self.db.issue.create(title="please commit me!", status='1') self.assertNotEqual(num_issues, len(self.db.issue.list())) self.db.commit() self.assertNotEqual(num_issues, len(self.db.issue.list())) self.db.rollback() self.assertNotEqual(num_issues, len(self.db.issue.list())) self.db.file.create(name="test", type="text/plain", content="hi") self.db.rollback() num_files = len(self.db.file.list()) for i in range(10): self.db.file.create(name="test", type="text/plain", content="hi %d"%(i)) self.db.commit() # TODO: would be good to be able to ensure the file is not on disk after # a rollback... num_files2 = len(self.db.file.list()) self.assertNotEqual(num_files, num_files2) self.db.file.create(name="test", type="text/plain", content="hi") num_rfiles = len(os.listdir(self.db.config.DATABASE + '/files/file/0')) self.db.rollback() num_rfiles2 = len(os.listdir(self.db.config.DATABASE + '/files/file/0')) self.assertEqual(num_files2, len(self.db.file.list())) self.assertEqual(num_rfiles2, num_rfiles-1) def testBooleanUnset(self): # XXX: metakit can't unset Booleans :( nid = self.db.user.create(username='foo', assignable=1) self.db.user.set(nid, assignable=None) self.assertEqual(self.db.user.get(nid, "assignable"), 0) def testNumberUnset(self): # XXX: metakit can't unset Numbers :( nid = self.db.user.create(username='foo', age=1) self.db.user.set(nid, age=None) self.assertEqual(self.db.user.get(nid, "age"), 0) def testPasswordUnset(self): # XXX: metakit can't unset Numbers (id's) :( x = password.Password('x') nid = self.db.user.create(username='foo', password=x) self.db.user.set(nid, assignable=None) self.assertEqual(self.db.user.get(nid, "assignable"), 0) class metakitROTest(metakitOpener, ROTest): pass class metakitSchemaTest(metakitOpener, SchemaTest): pass class metakitClassicInitTest(ClassicInitTest): backend = 'metakit' from session_common import DBMTest class metakitSessionTest(metakitOpener, DBMTest): pass def test_suite(): suite = unittest.TestSuite() if not hasattr(backends, 'metakit'): print 'Skipping metakit tests' return suite print 'Including metakit tests' suite.addTest(unittest.makeSuite(metakitDBTest)) suite.addTest(unittest.makeSuite(metakitROTest)) suite.addTest(unittest.makeSuite(metakitSchemaTest)) suite.addTest(unittest.makeSuite(metakitClassicInitTest)) suite.addTest(unittest.makeSuite(metakitSessionTest)) return suite if __name__ == '__main__': runner = unittest.TextTestRunner() unittest.main(testRunner=runner)
