Mercurial > p > roundup > code
comparison test/test_db.py @ 1392:083cce7840aa
Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
- fixed bug in metakit unlink journalling
- metakit now handles "unset" for most types (not Number and Boolean)
- fixed bug in metakit search-by-ID
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Mon, 20 Jan 2003 23:03:41 +0000 |
| parents | 5d1fe5d51c12 |
| children | 6883852e9b15 |
comparison
equal
deleted
inserted
replaced
| 1389:7f9bd5b1e798 | 1392:083cce7840aa |
|---|---|
| 13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" | 14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
| 15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, | 15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
| 16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | 16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
| 17 # | 17 # |
| 18 # $Id: test_db.py,v 1.67 2003-01-14 10:52:05 richard Exp $ | 18 # $Id: test_db.py,v 1.68 2003-01-20 23:03:41 richard Exp $ |
| 19 | 19 |
| 20 import unittest, os, shutil, time | 20 import unittest, os, shutil, time |
| 21 | 21 |
| 22 from roundup.hyperdb import String, Password, Link, Multilink, Date, \ | 22 from roundup.hyperdb import String, Password, Link, Multilink, Date, \ |
| 23 Interval, DatabaseError, Boolean, Number | 23 Interval, DatabaseError, Boolean, Number |
| 183 def testBooleanChange(self): | 183 def testBooleanChange(self): |
| 184 userid = self.db.user.create(username='foo', assignable=1) | 184 userid = self.db.user.create(username='foo', assignable=1) |
| 185 self.assertEqual(1, self.db.user.get(userid, 'assignable')) | 185 self.assertEqual(1, self.db.user.get(userid, 'assignable')) |
| 186 self.db.user.set(userid, assignable=0) | 186 self.db.user.set(userid, assignable=0) |
| 187 self.assertEqual(self.db.user.get(userid, 'assignable'), 0) | 187 self.assertEqual(self.db.user.get(userid, 'assignable'), 0) |
| 188 self.db.user.set(userid, assignable=None) | 188 |
| 189 self.assertEqual(self.db.user.get('1', "assignable"), None) | 189 def testBooleanUnset(self): |
| 190 nid = self.db.user.create(username='foo', assignable=1) | |
| 191 self.db.user.set(nid, assignable=None) | |
| 192 self.assertEqual(self.db.user.get(nid, "assignable"), None) | |
| 190 | 193 |
| 191 def testNumberChange(self): | 194 def testNumberChange(self): |
| 192 nid = self.db.user.create(username='foo', age=1) | 195 nid = self.db.user.create(username='foo', age=1) |
| 193 self.assertEqual(1, self.db.user.get(nid, 'age')) | 196 self.assertEqual(1, self.db.user.get(nid, 'age')) |
| 194 self.db.user.set('1', age=3) | 197 self.db.user.set(nid, age=3) |
| 195 self.assertNotEqual(self.db.user.get('1', 'age'), 1) | 198 self.assertNotEqual(self.db.user.get(nid, 'age'), 1) |
| 196 self.db.user.set('1', age=1.0) | 199 self.db.user.set(nid, age=1.0) |
| 197 self.db.user.set('1', age=None) | 200 |
| 198 self.assertEqual(self.db.user.get('1', "age"), None) | 201 def testNumberUnset(self): |
| 202 nid = self.db.user.create(username='foo', age=1) | |
| 203 self.db.user.set(nid, age=None) | |
| 204 self.assertEqual(self.db.user.get(nid, "age"), None) | |
| 199 | 205 |
| 200 def testKeyValue(self): | 206 def testKeyValue(self): |
| 201 newid = self.db.user.create(username="spam") | 207 newid = self.db.user.create(username="spam") |
| 202 self.assertEqual(self.db.user.lookup('spam'), newid) | 208 self.assertEqual(self.db.user.lookup('spam'), newid) |
| 203 self.db.commit() | 209 self.db.commit() |
| 384 ar(ValueError, self.db.issue.set, id, title='foo', status='1', | 390 ar(ValueError, self.db.issue.set, id, title='foo', status='1', |
| 385 nosy=[1]) | 391 nosy=[1]) |
| 386 # invalid multilink index | 392 # invalid multilink index |
| 387 ar(IndexError, self.db.issue.set, id, title='foo', status='1', | 393 ar(IndexError, self.db.issue.set, id, title='foo', status='1', |
| 388 nosy=['10']) | 394 nosy=['10']) |
| 395 # NOTE: the following increment the username to avoid problems | |
| 396 # within metakit's backend (it creates the node, and then sets the | |
| 397 # info, so the create (and by a fluke the username set) go through | |
| 398 # before the age/assignable/etc. set, which raises the exception) | |
| 389 # invalid number value | 399 # invalid number value |
| 390 ar(TypeError, self.db.user.create, username='foo', age='a') | 400 ar(TypeError, self.db.user.create, username='foo', age='a') |
| 391 # invalid boolean value | 401 # invalid boolean value |
| 392 ar(TypeError, self.db.user.create, username='foo', assignable='true') | 402 ar(TypeError, self.db.user.create, username='foo2', assignable='true') |
| 393 nid = self.db.user.create(username='foo') | 403 nid = self.db.user.create(username='foo3') |
| 394 # invalid number value | 404 # invalid number value |
| 395 ar(TypeError, self.db.user.set, nid, username='foo', age='a') | 405 ar(TypeError, self.db.user.set, nid, age='a') |
| 396 # invalid boolean value | 406 # invalid boolean value |
| 397 ar(TypeError, self.db.user.set, nid, username='foo', assignable='true') | 407 ar(TypeError, self.db.user.set, nid, assignable='true') |
| 398 | 408 |
| 399 def testJournals(self): | 409 def testJournals(self): |
| 400 self.db.user.create(username="mary") | 410 self.db.user.create(username="mary") |
| 401 self.db.user.create(username="pete") | 411 self.db.user.create(username="pete") |
| 402 self.db.issue.create(title="spam", status='1') | 412 self.db.issue.create(title="spam", status='1') |
| 806 self.db.rollback() | 816 self.db.rollback() |
| 807 num_rfiles2 = len(os.listdir(self.db.config.DATABASE + '/files/file/0')) | 817 num_rfiles2 = len(os.listdir(self.db.config.DATABASE + '/files/file/0')) |
| 808 self.assertEqual(num_files2, len(self.db.file.list())) | 818 self.assertEqual(num_files2, len(self.db.file.list())) |
| 809 self.assertEqual(num_rfiles2, num_rfiles-1) | 819 self.assertEqual(num_rfiles2, num_rfiles-1) |
| 810 | 820 |
| 821 def testBooleanUnset(self): | |
| 822 # XXX: metakit can't unset Booleans :( | |
| 823 nid = self.db.user.create(username='foo', assignable=1) | |
| 824 self.db.user.set(nid, assignable=None) | |
| 825 self.assertEqual(self.db.user.get(nid, "assignable"), 0) | |
| 826 | |
| 827 def testNumberUnset(self): | |
| 828 # XXX: metakit can't unset Numbers :( | |
| 829 nid = self.db.user.create(username='foo', age=1) | |
| 830 self.db.user.set(nid, age=None) | |
| 831 self.assertEqual(self.db.user.get(nid, "age"), 0) | |
| 832 | |
| 811 class metakitReadOnlyDBTestCase(anydbmReadOnlyDBTestCase): | 833 class metakitReadOnlyDBTestCase(anydbmReadOnlyDBTestCase): |
| 812 def setUp(self): | 834 def setUp(self): |
| 813 from roundup.backends import metakit | 835 from roundup.backends import metakit |
| 814 import weakref | 836 import weakref |
| 815 metakit._instances = weakref.WeakValueDictionary() | 837 metakit._instances = weakref.WeakValueDictionary() |
