diff --git a/test/test_db.py b/test/test_db.py
index fc97d18462a51f0b8901d1bd30dfc1fb63842e9d..a7aa3c0b28d1b31129ae458185c32cdd0fadc812 100644 (file)
--- a/test/test_db.py
+++ b/test/test_db.py
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: test_db.py,v 1.35 2002-07-18 23:07:08 richard Exp $
+# $Id: test_db.py,v 1.39 2002-07-31 23:57:37 richard Exp $
import unittest, os, shutil, time
status = module.Class(db, "status", name=String())
status.setkey("name")
user = module.Class(db, "user", username=String(), password=Password(),
- assignable=Boolean(), age=Number())
+ assignable=Boolean(), age=Number(), roles=String())
+ user.setkey("username")
file = module.FileClass(db, "file", name=String(), type=String(),
comment=String(indexme="yes"))
issue = module.IssueClass(db, "issue", title=String(indexme="yes"),
status=Link("status"), nosy=Multilink("user"), deadline=Date(),
- foo=Interval(), files=Multilink("file"))
+ foo=Interval(), files=Multilink("file"), assignedto=Link('user'))
+ session = module.Class(db, 'session', title=String())
+ session.disableJournalling()
db.post_init()
if create:
status.create(name="unread")
self.assertEqual(self.db.issue.get('2', 'title'), 'ham')
self.db.commit()
self.assertEqual(self.db.issue.get('2', 'title'), 'ham')
+ self.db.issue.set('1', title=None)
+ self.assertEqual(self.db.issue.get('1', "title"), None)
def testLinkChange(self):
self.db.issue.create(title="spam", status='1')
self.assertEqual(self.db.issue.get('1', "status"), '1')
self.db.issue.set('1', status='2')
self.assertEqual(self.db.issue.get('1', "status"), '2')
+ self.db.issue.set('1', status=None)
+ self.assertEqual(self.db.issue.get('1', "status"), None)
def testDateChange(self):
self.db.issue.create(title="spam", status='1')
self.assertNotEqual(a, b)
self.assertNotEqual(b, date.Date('1970-1-1 00:00:00'))
self.db.issue.set('1', deadline=date.Date())
+ self.db.issue.set('1', deadline=None)
+ self.assertEqual(self.db.issue.get('1', "deadline"), None)
def testIntervalChange(self):
self.db.issue.create(title="spam", status='1')
a = self.db.issue.get('1', "foo")
self.db.issue.set('1', foo=date.Interval('-1d'))
self.assertNotEqual(self.db.issue.get('1', "foo"), a)
+ self.db.issue.set('1', foo=None)
+ self.assertEqual(self.db.issue.get('1', "foo"), None)
def testBooleanChange(self):
- self.db.user.create(username='foo', assignable=1)
- self.db.user.create(username='foo', assignable=0)
- a = self.db.user.get('1', 'assignable')
- self.db.user.set('1', assignable=0)
- self.assertNotEqual(self.db.user.get('1', 'assignable'), a)
- self.db.user.set('1', assignable=0)
- self.db.user.set('1', assignable=1)
+ userid = self.db.user.create(username='foo', assignable=1)
+ self.db.user.create(username='foo2', assignable=0)
+ a = self.db.user.get(userid, 'assignable')
+ self.db.user.set(userid, assignable=0)
+ self.assertNotEqual(self.db.user.get(userid, 'assignable'), a)
+ self.db.user.set(userid, assignable=0)
+ self.db.user.set(userid, assignable=1)
+ self.db.user.set('1', assignable=None)
+ self.assertEqual(self.db.user.get('1', "assignable"), None)
def testNumberChange(self):
self.db.user.create(username='foo', age='1')
self.db.user.set('1', age='3')
self.assertNotEqual(self.db.user.get('1', 'age'), a)
self.db.user.set('1', age='1.0')
+ self.db.user.set('1', age=None)
+ self.assertEqual(self.db.user.get('1', "age"), None)
def testNewProperty(self):
- ' make sure a new property is added ok '
self.db.issue.create(title="spam", status='1')
self.db.issue.addprop(fixer=Link("user"))
props = self.db.issue.getprops()
keys = props.keys()
keys.sort()
- self.assertEqual(keys, ['activity', 'creation', 'creator', 'deadline',
- 'files', 'fixer', 'foo', 'id', 'messages', 'nosy', 'status',
- 'superseder', 'title'])
+ self.assertEqual(keys, ['activity', 'assignedto', 'creation',
+ 'creator', 'deadline', 'files', 'fixer', 'foo', 'id', 'messages',
+ 'nosy', 'status', 'superseder', 'title'])
self.assertEqual(self.db.issue.get('1', "fixer"), None)
def testRetire(self):
self.assertNotEqual(num_files, self.db.numfiles())
self.assertEqual(num_files2, self.db.numfiles())
+ def testDestroyNoJournalling(self):
+ self.innerTestDestroy(klass=self.db.session)
+
+ def testDestroyJournalling(self):
+ self.innerTestDestroy(klass=self.db.issue)
+
+ def innerTestDestroy(self, klass):
+ newid = klass.create(title='Mr Friendly')
+ n = len(klass.list())
+ self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
+ klass.destroy(newid)
+ self.assertRaises(IndexError, klass.get, newid, 'title')
+ self.assertNotEqual(len(klass.list()), n)
+ if klass.do_journal:
+ self.assertRaises(IndexError, klass.history, newid)
+
+ # now with a commit
+ newid = klass.create(title='Mr Friendly')
+ n = len(klass.list())
+ self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
+ self.db.commit()
+ klass.destroy(newid)
+ self.assertRaises(IndexError, klass.get, newid, 'title')
+ self.db.commit()
+ self.assertRaises(IndexError, klass.get, newid, 'title')
+ self.assertNotEqual(len(klass.list()), n)
+ if klass.do_journal:
+ self.assertRaises(IndexError, klass.history, newid)
+
+ # now with a rollback
+ newid = klass.create(title='Mr Friendly')
+ n = len(klass.list())
+ self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
+ self.db.commit()
+ klass.destroy(newid)
+ self.assertNotEqual(len(klass.list()), n)
+ self.assertRaises(IndexError, klass.get, newid, 'title')
+ self.db.rollback()
+ self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
+ self.assertEqual(len(klass.list()), n)
+ if klass.do_journal:
+ self.assertNotEqual(klass.history(newid), [])
+
def testExceptions(self):
# this tests the exceptions that should be raised
ar = self.assertRaises
self.assertEqual(action, 'create')
keys = params.keys()
keys.sort()
- self.assertEqual(keys, ['deadline', 'files', 'fixer', 'foo',
- 'messages', 'nosy', 'status', 'superseder', 'title'])
+ self.assertEqual(keys, ['assignedto', 'deadline', 'files', 'fixer',
+ 'foo', 'messages', 'nosy', 'status', 'superseder', 'title'])
self.assertEqual(None,params['deadline'])
self.assertEqual(None,params['fixer'])
self.assertEqual(None,params['foo'])
setupSchema(self.db2, 0, anydbm)
def testExceptions(self):
- ' make sure exceptions are raised on writes to a read-only db '
# this tests the exceptions that should be raised
ar = self.assertRaises
unittest.makeSuite(anydbmDBTestCase, 'test'),
unittest.makeSuite(anydbmReadOnlyDBTestCase, 'test')
]
-# return unittest.TestSuite(l)
+ #return unittest.TestSuite(l)
try:
import bsddb
#
# $Log: not supported by cvs2svn $
+# Revision 1.38 2002/07/26 08:27:00 richard
+# Very close now. The cgi and mailgw now use the new security API. The two
+# templates have been migrated to that setup. Lots of unit tests. Still some
+# issue in the web form for editing Roles assigned to users.
+#
+# Revision 1.37 2002/07/25 07:14:06 richard
+# Bugger it. Here's the current shape of the new security implementation.
+# Still to do:
+# . call the security funcs from cgi and mailgw
+# . change shipped templates to include correct initialisation and remove
+# the old config vars
+# ... that seems like a lot. The bulk of the work has been done though. Honest :)
+#
+# Revision 1.36 2002/07/19 03:36:34 richard
+# Implemented the destroy() method needed by the session database (and possibly
+# others). At the same time, I removed the leading underscores from the hyperdb
+# methods that Really Didn't Need Them.
+# The journal also raises IndexError now for all situations where there is a
+# request for the journal of a node that doesn't have one. It used to return
+# [] in _some_ situations, but not all. This _may_ break code, but the tests
+# pass...
+#
+# Revision 1.35 2002/07/18 23:07:08 richard
+# Unit tests and a few fixes.
+#
# Revision 1.34 2002/07/18 11:52:00 richard
# oops
#