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 #

Roundup Issue Tracker: http://roundup-tracker.org/