Mercurial > p > roundup > code
comparison test/test_db.py @ 973:e21259073500
oops, forgot
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Fri, 23 Aug 2002 04:48:36 +0000 |
| parents | 51519406b73e |
| children | 84216d63ed9c |
comparison
equal
deleted
inserted
replaced
| 972:ca0a542b2d19 | 973:e21259073500 |
|---|---|
| 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.39 2002-07-31 23:57:37 richard Exp $ | 18 # $Id: test_db.py,v 1.40 2002-08-23 04:48:36 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 |
| 142 self.assertEqual(self.db.user.get('1', "age"), None) | 142 self.assertEqual(self.db.user.get('1', "age"), None) |
| 143 | 143 |
| 144 def testNewProperty(self): | 144 def testNewProperty(self): |
| 145 self.db.issue.create(title="spam", status='1') | 145 self.db.issue.create(title="spam", status='1') |
| 146 self.db.issue.addprop(fixer=Link("user")) | 146 self.db.issue.addprop(fixer=Link("user")) |
| 147 # force any post-init stuff to happen | |
| 148 self.db.post_init() | |
| 147 props = self.db.issue.getprops() | 149 props = self.db.issue.getprops() |
| 148 keys = props.keys() | 150 keys = props.keys() |
| 149 keys.sort() | 151 keys.sort() |
| 150 self.assertEqual(keys, ['activity', 'assignedto', 'creation', | 152 self.assertEqual(keys, ['activity', 'assignedto', 'creation', |
| 151 'creator', 'deadline', 'files', 'fixer', 'foo', 'id', 'messages', | 153 'creator', 'deadline', 'files', 'fixer', 'foo', 'id', 'messages', |
| 325 ar(TypeError, self.db.user.set, '3', username='foo', age='a') | 327 ar(TypeError, self.db.user.set, '3', username='foo', age='a') |
| 326 # invalid boolean value | 328 # invalid boolean value |
| 327 ar(TypeError, self.db.user.set, '3', username='foo', assignable='true') | 329 ar(TypeError, self.db.user.set, '3', username='foo', assignable='true') |
| 328 | 330 |
| 329 def testJournals(self): | 331 def testJournals(self): |
| 330 self.db.issue.addprop(fixer=Link("user", do_journal='yes')) | |
| 331 self.db.user.create(username="mary") | 332 self.db.user.create(username="mary") |
| 332 self.db.user.create(username="pete") | 333 self.db.user.create(username="pete") |
| 333 self.db.issue.create(title="spam", status='1') | 334 self.db.issue.create(title="spam", status='1') |
| 334 self.db.commit() | 335 self.db.commit() |
| 335 | 336 |
| 340 self.assertEqual(nodeid, '1') | 341 self.assertEqual(nodeid, '1') |
| 341 self.assertEqual(journaltag, 'test') | 342 self.assertEqual(journaltag, 'test') |
| 342 self.assertEqual(action, 'create') | 343 self.assertEqual(action, 'create') |
| 343 keys = params.keys() | 344 keys = params.keys() |
| 344 keys.sort() | 345 keys.sort() |
| 345 self.assertEqual(keys, ['assignedto', 'deadline', 'files', 'fixer', | 346 self.assertEqual(keys, ['assignedto', 'deadline', 'files', |
| 346 'foo', 'messages', 'nosy', 'status', 'superseder', 'title']) | 347 'foo', 'messages', 'nosy', 'status', 'superseder', 'title']) |
| 347 self.assertEqual(None,params['deadline']) | 348 self.assertEqual(None,params['deadline']) |
| 348 self.assertEqual(None,params['fixer']) | |
| 349 self.assertEqual(None,params['foo']) | 349 self.assertEqual(None,params['foo']) |
| 350 self.assertEqual([],params['nosy']) | 350 self.assertEqual([],params['nosy']) |
| 351 self.assertEqual('1',params['status']) | 351 self.assertEqual('1',params['status']) |
| 352 self.assertEqual('spam',params['title']) | 352 self.assertEqual('spam',params['title']) |
| 353 | 353 |
| 354 # journal entry for link | 354 # journal entry for link |
| 355 journal = self.db.getjournal('user', '1') | 355 journal = self.db.getjournal('user', '1') |
| 356 self.assertEqual(1, len(journal)) | 356 self.assertEqual(1, len(journal)) |
| 357 self.db.issue.set('1', fixer='1') | 357 self.db.issue.set('1', assignedto='1') |
| 358 self.db.commit() | 358 self.db.commit() |
| 359 journal = self.db.getjournal('user', '1') | 359 journal = self.db.getjournal('user', '1') |
| 360 self.assertEqual(2, len(journal)) | 360 self.assertEqual(2, len(journal)) |
| 361 (nodeid, date_stamp, journaltag, action, params) = journal[1] | 361 (nodeid, date_stamp, journaltag, action, params) = journal[1] |
| 362 self.assertEqual('1', nodeid) | 362 self.assertEqual('1', nodeid) |
| 363 self.assertEqual('test', journaltag) | 363 self.assertEqual('test', journaltag) |
| 364 self.assertEqual('link', action) | 364 self.assertEqual('link', action) |
| 365 self.assertEqual(('issue', '1', 'fixer'), params) | 365 self.assertEqual(('issue', '1', 'assignedto'), params) |
| 366 | 366 |
| 367 # journal entry for unlink | 367 # journal entry for unlink |
| 368 self.db.issue.set('1', fixer='2') | 368 self.db.issue.set('1', assignedto='2') |
| 369 self.db.commit() | 369 self.db.commit() |
| 370 journal = self.db.getjournal('user', '1') | 370 journal = self.db.getjournal('user', '1') |
| 371 self.assertEqual(3, len(journal)) | 371 self.assertEqual(3, len(journal)) |
| 372 (nodeid, date_stamp, journaltag, action, params) = journal[2] | 372 (nodeid, date_stamp, journaltag, action, params) = journal[2] |
| 373 self.assertEqual('1', nodeid) | 373 self.assertEqual('1', nodeid) |
| 374 self.assertEqual('test', journaltag) | 374 self.assertEqual('test', journaltag) |
| 375 self.assertEqual('unlink', action) | 375 self.assertEqual('unlink', action) |
| 376 self.assertEqual(('issue', '1', 'fixer'), params) | 376 self.assertEqual(('issue', '1', 'assignedto'), params) |
| 377 | 377 |
| 378 # test disabling journalling | 378 # test disabling journalling |
| 379 # ... get the last entry | 379 # ... get the last entry |
| 380 time.sleep(1) | 380 time.sleep(1) |
| 381 entry = self.db.getjournal('issue', '1')[-1] | 381 entry = self.db.getjournal('issue', '1')[-1] |
| 398 def testPack(self): | 398 def testPack(self): |
| 399 self.db.issue.create(title="spam", status='1') | 399 self.db.issue.create(title="spam", status='1') |
| 400 self.db.commit() | 400 self.db.commit() |
| 401 self.db.issue.set('1', status='2') | 401 self.db.issue.set('1', status='2') |
| 402 self.db.commit() | 402 self.db.commit() |
| 403 | |
| 404 # sleep for at least a second, then get a date to pack at | |
| 405 time.sleep(1) | |
| 406 pack_before = date.Date('.') | |
| 407 | |
| 408 # one more entry | |
| 403 self.db.issue.set('1', status='3') | 409 self.db.issue.set('1', status='3') |
| 404 self.db.commit() | 410 self.db.commit() |
| 405 pack_before = date.Date(". + 1d") | 411 |
| 412 # pack | |
| 406 self.db.pack(pack_before) | 413 self.db.pack(pack_before) |
| 407 journal = self.db.getjournal('issue', '1') | 414 journal = self.db.getjournal('issue', '1') |
| 408 self.assertEqual(2, len(journal)) | 415 |
| 416 # we should have one entry now | |
| 417 self.assertEqual(1, len(journal)) | |
| 409 | 418 |
| 410 def testIDGeneration(self): | 419 def testIDGeneration(self): |
| 411 id1 = self.db.issue.create(title="spam", status='1') | 420 id1 = self.db.issue.create(title="spam", status='1') |
| 412 id2 = self.db2.issue.create(title="eggs", status='2') | 421 id2 = self.db2.issue.create(title="eggs", status='2') |
| 413 self.assertNotEqual(id1, id2) | 422 self.assertNotEqual(id1, id2) |
| 524 setupSchema(db, 1, bsddb3) | 533 setupSchema(db, 1, bsddb3) |
| 525 self.db = bsddb3.Database(config) | 534 self.db = bsddb3.Database(config) |
| 526 setupSchema(self.db, 0, bsddb3) | 535 setupSchema(self.db, 0, bsddb3) |
| 527 self.db2 = bsddb3.Database(config, 'test') | 536 self.db2 = bsddb3.Database(config, 'test') |
| 528 setupSchema(self.db2, 0, bsddb3) | 537 setupSchema(self.db2, 0, bsddb3) |
| 538 | |
| 539 | |
| 540 class gadflyDBTestCase(anydbmDBTestCase): | |
| 541 ''' Gadfly doesn't support multiple connections to the one local | |
| 542 database | |
| 543 ''' | |
| 544 def setUp(self): | |
| 545 from roundup.backends import gadfly | |
| 546 # remove previous test, ignore errors | |
| 547 if os.path.exists(config.DATABASE): | |
| 548 shutil.rmtree(config.DATABASE) | |
| 549 config.GADFLY_DATABASE = ('test', config.DATABASE) | |
| 550 os.makedirs(config.DATABASE + '/files') | |
| 551 self.db = gadfly.Database(config, 'test') | |
| 552 setupSchema(self.db, 1, gadfly) | |
| 553 | |
| 554 def testIDGeneration(self): | |
| 555 id1 = self.db.issue.create(title="spam", status='1') | |
| 556 id2 = self.db.issue.create(title="eggs", status='2') | |
| 557 self.assertNotEqual(id1, id2) | |
| 558 | |
| 559 def testNewProperty(self): | |
| 560 # gadfly doesn't have an ALTER TABLE command :( | |
| 561 pass | |
| 562 | |
| 563 class gadflyReadOnlyDBTestCase(anydbmReadOnlyDBTestCase): | |
| 564 def setUp(self): | |
| 565 from roundup.backends import gadfly | |
| 566 # remove previous test, ignore errors | |
| 567 if os.path.exists(config.DATABASE): | |
| 568 shutil.rmtree(config.DATABASE) | |
| 569 config.GADFLY_DATABASE = ('test', config.DATABASE) | |
| 570 os.makedirs(config.DATABASE + '/files') | |
| 571 db = gadfly.Database(config, 'test') | |
| 572 setupSchema(db, 1, gadfly) | |
| 573 self.db = gadfly.Database(config) | |
| 574 setupSchema(self.db, 0, gadfly) | |
| 529 | 575 |
| 530 | 576 |
| 531 class metakitDBTestCase(anydbmDBTestCase): | 577 class metakitDBTestCase(anydbmDBTestCase): |
| 532 def setUp(self): | 578 def setUp(self): |
| 533 from roundup.backends import metakit | 579 from roundup.backends import metakit |
| 603 l.append(unittest.makeSuite(bsddb3ReadOnlyDBTestCase, 'test')) | 649 l.append(unittest.makeSuite(bsddb3ReadOnlyDBTestCase, 'test')) |
| 604 except: | 650 except: |
| 605 print 'bsddb3 module not found, skipping bsddb3 DBTestCase' | 651 print 'bsddb3 module not found, skipping bsddb3 DBTestCase' |
| 606 | 652 |
| 607 try: | 653 try: |
| 654 import gadfly | |
| 655 l.append(unittest.makeSuite(gadflyDBTestCase, 'test')) | |
| 656 l.append(unittest.makeSuite(gadflyReadOnlyDBTestCase, 'test')) | |
| 657 except: | |
| 658 print 'gadfly module not found, skipping gadfly DBTestCase' | |
| 659 | |
| 660 try: | |
| 608 import metakit | 661 import metakit |
| 609 l.append(unittest.makeSuite(metakitDBTestCase, 'test')) | 662 l.append(unittest.makeSuite(metakitDBTestCase, 'test')) |
| 610 l.append(unittest.makeSuite(metakitReadOnlyDBTestCase, 'test')) | 663 l.append(unittest.makeSuite(metakitReadOnlyDBTestCase, 'test')) |
| 611 except: | 664 except: |
| 612 print 'metakit module not found, skipping metakit DBTestCase' | 665 print 'metakit module not found, skipping metakit DBTestCase' |
| 613 | 666 |
| 614 return unittest.TestSuite(l) | 667 return unittest.TestSuite(l) |
| 615 | 668 |
| 616 # | 669 # |
| 617 # $Log: not supported by cvs2svn $ | 670 # $Log: not supported by cvs2svn $ |
| 671 # Revision 1.39 2002/07/31 23:57:37 richard | |
| 672 # . web forms may now unset Link values (like assignedto) | |
| 673 # | |
| 618 # Revision 1.38 2002/07/26 08:27:00 richard | 674 # Revision 1.38 2002/07/26 08:27:00 richard |
| 619 # Very close now. The cgi and mailgw now use the new security API. The two | 675 # Very close now. The cgi and mailgw now use the new security API. The two |
| 620 # templates have been migrated to that setup. Lots of unit tests. Still some | 676 # templates have been migrated to that setup. Lots of unit tests. Still some |
| 621 # issue in the web form for editing Roles assigned to users. | 677 # issue in the web form for editing Roles assigned to users. |
| 622 # | 678 # |
