Mercurial > p > roundup > code
changeset 2092:332c040b82da maint-0.6
import/export test
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Sat, 20 Mar 2004 22:15:58 +0000 |
| parents | 8e960088b44c |
| children | f4550f7f93cb |
| files | doc/installation.txt roundup/admin.py test/test_db.py |
| diffstat | 3 files changed, 107 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/installation.txt Thu Mar 18 22:47:00 2004 +0000 +++ b/doc/installation.txt Sat Mar 20 22:15:58 2004 +0000 @@ -2,7 +2,7 @@ Installing Roundup ================== -:Version: $Revision: 1.55.2.6 $ +:Version: $Revision: 1.55.2.7 $ .. contents:: @@ -458,7 +458,6 @@ may actually login and play with the roundup setup. -======= Additional Language Codecs --------------------------
--- a/roundup/admin.py Thu Mar 18 22:47:00 2004 +0000 +++ b/roundup/admin.py Sat Mar 20 22:15:58 2004 +0000 @@ -16,7 +16,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: admin.py,v 1.55.2.3 2004-03-05 00:06:20 richard Exp $ +# $Id: admin.py,v 1.55.2.4 2004-03-20 22:15:57 richard Exp $ '''Administration commands for maintaining Roundup trackers. ''' @@ -1092,7 +1092,7 @@ for nodeid in self.db.getclass(classname).getnodeids(): # get the regular props - writer.writerow (cl.export_list(propnames, nodeid)) + writer.writerow(cl.export_list(propnames, nodeid)) # close this file f.close()
--- a/test/test_db.py Thu Mar 18 22:47:00 2004 +0000 +++ b/test/test_db.py Sat Mar 20 22:15:58 2004 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: test_db.py,v 1.90.2.4 2004-03-18 02:40:08 richard Exp $ +# $Id: test_db.py,v 1.90.2.5 2004-03-20 22:15:58 richard Exp $ import unittest, os, shutil, time @@ -51,6 +51,7 @@ self.db.close() if os.path.exists('_test_dir'): shutil.rmtree('_test_dir') + nuke_database = tearDown class config: DATABASE='_test_dir' @@ -78,12 +79,13 @@ class anydbmDBTestCase(MyTestCase): def setUp(self): from roundup.backends import anydbm + self.module = anydbm # remove previous test, ignore errors if os.path.exists(config.DATABASE): shutil.rmtree(config.DATABASE) os.makedirs(config.DATABASE + '/files') - self.db = anydbm.Database(config, 'admin') - setupSchema(self.db, 1, anydbm) + self.db = self.module.Database(config, 'admin') + setupSchema(self.db, 1, self.module) # # schema mutation @@ -740,6 +742,94 @@ # XXX add sorting tests for other types # XXX test auditors and reactors + def filteringSetup(self): + for user in ( + {'username': 'bleep'}, + {'username': 'blop'}, + {'username': 'blorp'}): + self.db.user.create(**user) + iss = self.db.issue + for issue in ( + {'title': 'issue one', 'status': '2', 'assignedto': '1', + 'foo': date.Interval('1:10'), + 'deadline': date.Date('2003-01-01.00:00')}, + {'title': 'issue two', 'status': '1', 'assignedto': '2', + 'foo': date.Interval('1d'), + 'deadline': date.Date('2003-02-16.22:50')}, + {'title': 'issue three', 'status': '1', + 'nosy': ['1','2'], 'deadline': date.Date('2003-02-18')}, + {'title': 'non four', 'status': '3', + 'foo': date.Interval('0:10'), + 'nosy': ['1'], 'deadline': date.Date('2004-03-08')}): + self.db.issue.create(**issue) + self.db.commit() + return self.assertEqual, self.db.issue.filter + + def testImportExport(self): + # use the filtering setup to create a bunch of items + ae, filt = self.filteringSetup() + self.db.user.retire('3') + self.db.issue.retire('2') + + # grab snapshot of the current database + orig = {} + for cn,klass in self.db.classes.items(): + cl = orig[cn] = {} + for id in klass.list(): + it = cl[id] = {} + for name in klass.getprops().keys(): + it[name] = klass.get(id, name) + + # grab the export + export = {} + for cn,klass in self.db.classes.items(): + names = klass.getprops().keys() + cl = export[cn] = [names+['is retired']] + for id in klass.getnodeids(): + cl.append(klass.export_list(names, id)) + + # shut down this db and nuke it + self.db.close() + self.nuke_database() + + # open a new, empty database + os.makedirs(config.DATABASE + '/files') + self.db = self.module.Database(config, 'admin') + setupSchema(self.db, 0, self.module) + + # import + for cn, items in export.items(): + klass = self.db.classes[cn] + names = items[0] + maxid = 1 + for itemprops in items[1:]: + maxid = max(maxid, int(klass.import_list(names, itemprops))) + self.db.setid(cn, str(maxid+1)) + + # compare with snapshot of the database + for cn, items in orig.items(): + klass = self.db.classes[cn] + # ensure retired items are retired :) + l = items.keys(); l.sort() + m = klass.list(); m.sort() + ae(l, m) + for id, props in items.items(): + for name, value in props.items(): + l = klass.get(id, name) + if isinstance(value, type([])): + value.sort() + l.sort() + ae(l, value) + + # make sure the retired items are actually imported + ae(self.db.user.get('4', 'username'), 'blorp') + ae(self.db.issue.get('2', 'title'), 'issue two') + + # make sure id counters are set correctly + maxid = max([int(id) for id in self.db.user.list()]) + newid = self.db.user.create(username='testing') + assert newid > maxid + class anydbmReadOnlyDBTestCase(MyTestCase): def setUp(self): from roundup.backends import anydbm @@ -766,12 +856,8 @@ class bsddbDBTestCase(anydbmDBTestCase): def setUp(self): from roundup.backends import bsddb - # remove previous test, ignore errors - if os.path.exists(config.DATABASE): - shutil.rmtree(config.DATABASE) - os.makedirs(config.DATABASE + '/files') - self.db = bsddb.Database(config, 'admin') - setupSchema(self.db, 1, bsddb) + self.module = bsddb + anydbmDBTestCase.setUp(self) class bsddbReadOnlyDBTestCase(anydbmReadOnlyDBTestCase): def setUp(self): @@ -790,12 +876,8 @@ class bsddb3DBTestCase(anydbmDBTestCase): def setUp(self): from roundup.backends import bsddb3 - # remove previous test, ignore errors - if os.path.exists(config.DATABASE): - shutil.rmtree(config.DATABASE) - os.makedirs(config.DATABASE + '/files') - self.db = bsddb3.Database(config, 'admin') - setupSchema(self.db, 1, bsddb3) + self.module = bsddb3 + anydbmDBTestCase.setUp(self) class bsddb3ReadOnlyDBTestCase(anydbmReadOnlyDBTestCase): def setUp(self): @@ -814,17 +896,15 @@ class mysqlDBTestCase(anydbmDBTestCase): def setUp(self): from roundup.backends import mysql + self.module = mysql mysql.db_nuke(config) - - # open database for testing - os.makedirs(config.DATABASE + '/files') - self.db = mysql.Database(config, 'admin') - setupSchema(self.db, 1, mysql) + anydbmDBTestCase.setUp(self) def tearDown(self): from roundup.backends import mysql self.db.close() mysql.db_nuke(config) + nuke_database = tearDown class mysqlReadOnlyDBTestCase(anydbmReadOnlyDBTestCase): def setUp(self): @@ -844,12 +924,8 @@ class sqliteDBTestCase(anydbmDBTestCase): def setUp(self): from roundup.backends import sqlite - # remove previous test, ignore errors - if os.path.exists(config.DATABASE): - shutil.rmtree(config.DATABASE) - os.makedirs(config.DATABASE + '/files') - self.db = sqlite.Database(config, 'admin') - setupSchema(self.db, 1, sqlite) + self.module = sqlite + anydbmDBTestCase.setUp(self) class sqliteReadOnlyDBTestCase(anydbmReadOnlyDBTestCase): def setUp(self): @@ -870,12 +946,8 @@ from roundup.backends import metakit import weakref metakit._instances = weakref.WeakValueDictionary() - # remove previous test, ignore errors - if os.path.exists(config.DATABASE): - shutil.rmtree(config.DATABASE) - os.makedirs(config.DATABASE + '/files') - self.db = metakit.Database(config, 'admin') - setupSchema(self.db, 1, metakit) + self.module = metakit + anydbmDBTestCase.setUp(self) def testTransactions(self): # remember the number of items we started
