annotate test/test_db.py @ 1797:c1eec970d5c0

Optimize mailgw and cgi tests... ...by creating an empty instance before the tests start (only if needed). In setUp(), this instance is then copied to another directory for the actual tests. On my system, this about halved the execution time for test_cgi (33s -> 14s) and test_mailgw (40s -> 25s).
author Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
date Sun, 07 Sep 2003 20:37:33 +0000
parents d2801a2b0a77
children 06f5b36b201b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
1 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
4 # under the same terms as Python, so long as this copyright message and
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
5 # disclaimer are retained in their original form.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
6 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
10 # POSSIBILITY OF SUCH DAMAGE.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
11 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 158
diff changeset
17 #
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
18 # $Id: test_db.py,v 1.91 2003-09-04 00:47:01 richard Exp $
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19
860
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
20 import unittest, os, shutil, time
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 243
diff changeset
22 from roundup.hyperdb import String, Password, Link, Multilink, Date, \
1486
f5f60c75a458 added test for error in sqlite backend, and fixed *dbm backend error
Richard Jones <richard@users.sourceforge.net>
parents: 1479
diff changeset
23 Interval, DatabaseError, Boolean, Number, Node
676
bc46480e2a2b Fixed serialisation problem...
Richard Jones <richard@users.sourceforge.net>
parents: 646
diff changeset
24 from roundup import date, password
825
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
25 from roundup.indexer import Indexer
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
27 def setupSchema(db, create, module):
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
28 status = module.Class(db, "status", name=String())
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 status.setkey("name")
886
816b593c755f added tests for boolean type, and fixes to anydbm backend
Richard Jones <richard@users.sourceforge.net>
parents: 868
diff changeset
30 user = module.Class(db, "user", username=String(), password=Password(),
905
502a5ae11cc5 Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
31 assignable=Boolean(), age=Number(), roles=String())
902
b0d3d3535998 Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents: 891
diff changeset
32 user.setkey("username")
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
33 file = module.FileClass(db, "file", name=String(), type=String(),
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
34 comment=String(indexme="yes"), fooz=Password())
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
35 issue = module.IssueClass(db, "issue", title=String(indexme="yes"),
825
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
36 status=Link("status"), nosy=Multilink("user"), deadline=Date(),
902
b0d3d3535998 Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents: 891
diff changeset
37 foo=Interval(), files=Multilink("file"), assignedto=Link('user'))
891
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
38 session = module.Class(db, 'session', title=String())
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
39 session.disableJournalling()
825
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
40 db.post_init()
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 if create:
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
42 user.create(username="admin", roles='Admin')
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 status.create(name="unread")
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 status.create(name="in-progress")
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 status.create(name="testing")
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 status.create(name="resolved")
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
47 db.commit()
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
48
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
49 class MyTestCase(unittest.TestCase):
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
50 def tearDown(self):
1126
d77b86cc541b close the databases before test cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
51 self.db.close()
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
52 if os.path.exists('_test_dir'):
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
53 shutil.rmtree('_test_dir')
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
54
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
55 class config:
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
56 DATABASE='_test_dir'
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
57 MAILHOST = 'localhost'
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
58 MAIL_DOMAIN = 'fill.me.in.'
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
59 TRACKER_NAME = 'Roundup issue tracker'
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
60 TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
61 TRACKER_WEB = 'http://some.useful.url/'
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
62 ADMIN_EMAIL = 'roundup-admin@%s'%MAIL_DOMAIN
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
63 FILTER_POSITION = 'bottom' # one of 'top', 'bottom', 'top and bottom'
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
64 ANONYMOUS_ACCESS = 'deny' # either 'deny' or 'allow'
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
65 ANONYMOUS_REGISTER = 'deny' # either 'deny' or 'allow'
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
66 MESSAGES_TO_AUTHOR = 'no' # either 'yes' or 'no'
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
67 EMAIL_SIGNATURE_POSITION = 'bottom'
1433
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
68 # Mysql connection data
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
69 MYSQL_DBHOST = 'localhost'
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
70 MYSQL_DBUSER = 'rounduptest'
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
71 MYSQL_DBPASSWORD = 'rounduptest'
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
72 MYSQL_DBNAME = 'rounduptest'
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
73 MYSQL_DATABASE = (MYSQL_DBHOST, MYSQL_DBUSER, MYSQL_DBPASSWORD, MYSQL_DBNAME)
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
74
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
75 class nodbconfig(config):
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
76 MYSQL_DATABASE = (config.MYSQL_DBHOST, config.MYSQL_DBUSER, config.MYSQL_DBPASSWORD)
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
77
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
78 class anydbmDBTestCase(MyTestCase):
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 def setUp(self):
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
80 from roundup.backends import anydbm
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 # remove previous test, ignore errors
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
82 if os.path.exists(config.DATABASE):
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
83 shutil.rmtree(config.DATABASE)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
84 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
85 self.db = anydbm.Database(config, 'admin')
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
86 setupSchema(self.db, 1, anydbm)
1333
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
87
1479
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
88 #
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
89 # schema mutation
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
90 #
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
91 def testAddProperty(self):
1479
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
92 self.db.issue.create(title="spam", status='1')
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
93 self.db.commit()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
94
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
95 self.db.issue.addprop(fixer=Link("user"))
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
96 # force any post-init stuff to happen
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
97 self.db.post_init()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
98 props = self.db.issue.getprops()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
99 keys = props.keys()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
100 keys.sort()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
101 self.assertEqual(keys, ['activity', 'assignedto', 'creation',
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
102 'creator', 'deadline', 'files', 'fixer', 'foo', 'id', 'messages',
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
103 'nosy', 'status', 'superseder', 'title'])
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
104 self.assertEqual(self.db.issue.get('1', "fixer"), None)
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
105
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
106 def testRemoveProperty(self):
1479
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
107 self.db.issue.create(title="spam", status='1')
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
108 self.db.commit()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
109
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
110 del self.db.issue.properties['title']
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
111 self.db.post_init()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
112 props = self.db.issue.getprops()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
113 keys = props.keys()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
114 keys.sort()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
115 self.assertEqual(keys, ['activity', 'assignedto', 'creation',
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
116 'creator', 'deadline', 'files', 'foo', 'id', 'messages',
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
117 'nosy', 'status', 'superseder'])
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
118 self.assertEqual(self.db.issue.list(), ['1'])
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
119
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
120 def testAddRemoveProperty(self):
1479
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
121 self.db.issue.create(title="spam", status='1')
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
122 self.db.commit()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
123
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
124 self.db.issue.addprop(fixer=Link("user"))
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
125 del self.db.issue.properties['title']
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
126 self.db.post_init()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
127 props = self.db.issue.getprops()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
128 keys = props.keys()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
129 keys.sort()
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
130 self.assertEqual(keys, ['activity', 'assignedto', 'creation',
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
131 'creator', 'deadline', 'files', 'fixer', 'foo', 'id', 'messages',
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
132 'nosy', 'status', 'superseder'])
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
133 self.assertEqual(self.db.issue.list(), ['1'])
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
134
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
135 #
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
136 # basic operations
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
137 #
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
138 def testIDGeneration(self):
1333
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
139 id1 = self.db.issue.create(title="spam", status='1')
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
140 id2 = self.db.issue.create(title="eggs", status='2')
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
141 self.assertNotEqual(id1, id2)
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
143 def testStringChange(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
144 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
145 # test set & retrieve
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
146 nid = self.db.issue.create(title="spam", status='1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
147 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam')
1143
Richard Jones <richard@users.sourceforge.net>
parents: 1126
diff changeset
148
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
149 # change and make sure we retrieve the correct value
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
150 self.db.issue.set(nid, title='eggs')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
151 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
152 self.assertEqual(self.db.issue.get(nid, 'title'), 'eggs')
1143
Richard Jones <richard@users.sourceforge.net>
parents: 1126
diff changeset
153
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
154 def testStringUnset(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
155 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
156 nid = self.db.issue.create(title="spam", status='1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
157 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
158 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
159 # make sure we can unset
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
160 self.db.issue.set(nid, title=None)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
161 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
162 self.assertEqual(self.db.issue.get(nid, "title"), None)
785
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
163
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
164 def testLinkChange(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
165 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
166 nid = self.db.issue.create(title="spam", status='1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
167 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
168 self.assertEqual(self.db.issue.get(nid, "status"), '1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
169 self.db.issue.set(nid, status='2')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
170 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
171 self.assertEqual(self.db.issue.get(nid, "status"), '2')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
172
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
173 def testLinkUnset(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
174 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
175 nid = self.db.issue.create(title="spam", status='1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
176 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
177 self.db.issue.set(nid, status=None)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
178 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
179 self.assertEqual(self.db.issue.get(nid, "status"), None)
785
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
180
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
181 def testMultilinkChange(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
182 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
183 u1 = self.db.user.create(username='foo%s'%commit)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
184 u2 = self.db.user.create(username='bar%s'%commit)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
185 nid = self.db.issue.create(title="spam", nosy=[u1])
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
186 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
187 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1])
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
188 self.db.issue.set(nid, nosy=[])
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
189 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
190 self.assertEqual(self.db.issue.get(nid, "nosy"), [])
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
191 self.db.issue.set(nid, nosy=[u1,u2])
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
192 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
193 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1,u2])
976
8c2036dace08 implemented multilink changes (and a unit test)
Richard Jones <richard@users.sourceforge.net>
parents: 974
diff changeset
194
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
195 def testDateChange(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
196 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
197 nid = self.db.issue.create(title="spam", status='1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
198 a = self.db.issue.get(nid, "deadline")
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
199 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
200 self.db.issue.set(nid, deadline=date.Date())
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
201 b = self.db.issue.get(nid, "deadline")
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
202 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
203 self.assertNotEqual(a, b)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
204 self.assertNotEqual(b, date.Date('1970-1-1 00:00:00'))
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
205
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
206 def testDateUnset(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
207 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
208 nid = self.db.issue.create(title="spam", status='1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
209 self.db.issue.set(nid, deadline=date.Date())
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
210 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
211 self.assertNotEqual(self.db.issue.get(nid, "deadline"), None)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
212 self.db.issue.set(nid, deadline=None)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
213 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
214 self.assertEqual(self.db.issue.get(nid, "deadline"), None)
785
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
215
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
216 def testIntervalChange(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
217 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
218 nid = self.db.issue.create(title="spam", status='1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
219 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
220 a = self.db.issue.get(nid, "foo")
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
221 i = date.Interval('-1d')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
222 self.db.issue.set(nid, foo=i)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
223 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
224 self.assertNotEqual(self.db.issue.get(nid, "foo"), a)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
225 self.assertEqual(i, self.db.issue.get(nid, "foo"))
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
226 j = date.Interval('1y')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
227 self.db.issue.set(nid, foo=j)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
228 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
229 self.assertNotEqual(self.db.issue.get(nid, "foo"), i)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
230 self.assertEqual(j, self.db.issue.get(nid, "foo"))
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
231
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
232 def testIntervalUnset(self):
1264
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
233 for commit in (0,1):
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
234 nid = self.db.issue.create(title="spam", status='1')
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
235 self.db.issue.set(nid, foo=date.Interval('-1d'))
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
236 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
237 self.assertNotEqual(self.db.issue.get(nid, "foo"), None)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
238 self.db.issue.set(nid, foo=None)
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
239 if commit: self.db.commit()
9e6743c00b5f more anal unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 1261
diff changeset
240 self.assertEqual(self.db.issue.get(nid, "foo"), None)
785
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
241
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
242 def testBooleanChange(self):
902
b0d3d3535998 Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents: 891
diff changeset
243 userid = self.db.user.create(username='foo', assignable=1)
1168
94620e088e3a fixes to the rdbms backends
Richard Jones <richard@users.sourceforge.net>
parents: 1165
diff changeset
244 self.assertEqual(1, self.db.user.get(userid, 'assignable'))
902
b0d3d3535998 Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents: 891
diff changeset
245 self.db.user.set(userid, assignable=0)
1168
94620e088e3a fixes to the rdbms backends
Richard Jones <richard@users.sourceforge.net>
parents: 1165
diff changeset
246 self.assertEqual(self.db.user.get(userid, 'assignable'), 0)
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
247
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
248 def testBooleanUnset(self):
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
249 nid = self.db.user.create(username='foo', assignable=1)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
250 self.db.user.set(nid, assignable=None)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
251 self.assertEqual(self.db.user.get(nid, "assignable"), None)
887
e7169d6e6e45 added tests for number type too
Richard Jones <richard@users.sourceforge.net>
parents: 886
diff changeset
252
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
253 def testNumberChange(self):
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
254 nid = self.db.user.create(username='foo', age=1)
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
255 self.assertEqual(1, self.db.user.get(nid, 'age'))
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
256 self.db.user.set(nid, age=3)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
257 self.assertNotEqual(self.db.user.get(nid, 'age'), 1)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
258 self.db.user.set(nid, age=1.0)
1532
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
259 self.assertEqual(self.db.user.get(nid, 'age'), 1)
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
260 self.db.user.set(nid, age=0)
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
261 self.assertEqual(self.db.user.get(nid, 'age'), 0)
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
262
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
263 nid = self.db.user.create(username='bar', age=0)
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
264 self.assertEqual(self.db.user.get(nid, 'age'), 0)
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
265
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
266 def testNumberUnset(self):
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
267 nid = self.db.user.create(username='foo', age=1)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
268 self.db.user.set(nid, age=None)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
269 self.assertEqual(self.db.user.get(nid, "age"), None)
886
816b593c755f added tests for boolean type, and fixes to anydbm backend
Richard Jones <richard@users.sourceforge.net>
parents: 868
diff changeset
270
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
271 def testKeyValue(self):
1174
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
272 newid = self.db.user.create(username="spam")
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
273 self.assertEqual(self.db.user.lookup('spam'), newid)
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
274 self.db.commit()
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
275 self.assertEqual(self.db.user.lookup('spam'), newid)
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
276 self.db.user.retire(newid)
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
277 self.assertRaises(KeyError, self.db.user.lookup, 'spam')
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
278
1378
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
279 # use the key again now that the old is retired
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
280 newid2 = self.db.user.create(username="spam")
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
281 self.assertNotEqual(newid, newid2)
1523
63aa7be52d2c checked to make sure that the restored item doesn't clash...
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1519
diff changeset
282 # try to restore old node. this shouldn't succeed!
63aa7be52d2c checked to make sure that the restored item doesn't clash...
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1519
diff changeset
283 self.assertRaises(KeyError, self.db.user.restore, newid)
1378
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
284
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
285 def testRetire(self):
785
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
286 self.db.issue.create(title="spam", status='1')
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
287 b = self.db.status.get('1', 'name')
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
288 a = self.db.status.list()
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
289 self.db.status.retire('1')
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
290 # make sure the list is different
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
291 self.assertNotEqual(a, self.db.status.list())
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
292 # can still access the node if necessary
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
293 self.assertEqual(self.db.status.get('1', 'name'), b)
432
f97415cccb9d Fixes so the tests use commit and not close
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
294 self.db.commit()
785
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
295 self.assertEqual(self.db.status.get('1', 'name'), b)
491049fb8e31 Cleaned up the hyperdb tests
Richard Jones <richard@users.sourceforge.net>
parents: 726
diff changeset
296 self.assertNotEqual(a, self.db.status.list())
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1506
diff changeset
297 # try to restore retired node
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1506
diff changeset
298 self.db.status.restore('1')
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
299
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
300 def testCacheCreateSet(self):
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
301 self.db.issue.create(title="spam", status='1')
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
302 a = self.db.issue.get('1', 'title')
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
303 self.assertEqual(a, 'spam')
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
304 self.db.issue.set('1', title='ham')
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
305 b = self.db.issue.get('1', 'title')
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1740
diff changeset
306 self.assertEqual(b, 'ham')
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
307
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
308 def testSerialisation(self):
1253
fe67477e678f fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents: 1244
diff changeset
309 nid = self.db.issue.create(title="spam", status='1',
676
bc46480e2a2b Fixed serialisation problem...
Richard Jones <richard@users.sourceforge.net>
parents: 646
diff changeset
310 deadline=date.Date(), foo=date.Interval('-1d'))
bc46480e2a2b Fixed serialisation problem...
Richard Jones <richard@users.sourceforge.net>
parents: 646
diff changeset
311 self.db.commit()
1253
fe67477e678f fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents: 1244
diff changeset
312 assert isinstance(self.db.issue.get(nid, 'deadline'), date.Date)
fe67477e678f fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents: 1244
diff changeset
313 assert isinstance(self.db.issue.get(nid, 'foo'), date.Interval)
fe67477e678f fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents: 1244
diff changeset
314 uid = self.db.user.create(username="fozzy",
676
bc46480e2a2b Fixed serialisation problem...
Richard Jones <richard@users.sourceforge.net>
parents: 646
diff changeset
315 password=password.Password('t. bear'))
bc46480e2a2b Fixed serialisation problem...
Richard Jones <richard@users.sourceforge.net>
parents: 646
diff changeset
316 self.db.commit()
1253
fe67477e678f fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents: 1244
diff changeset
317 assert isinstance(self.db.user.get(uid, 'password'), password.Password)
676
bc46480e2a2b Fixed serialisation problem...
Richard Jones <richard@users.sourceforge.net>
parents: 646
diff changeset
318
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
319 def testTransactions(self):
646
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
320 # remember the number of items we started
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
321 num_issues = len(self.db.issue.list())
646
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
322 num_files = self.db.numfiles()
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
323 self.db.issue.create(title="don't commit me!", status='1')
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
324 self.assertNotEqual(num_issues, len(self.db.issue.list()))
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
325 self.db.rollback()
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
326 self.assertEqual(num_issues, len(self.db.issue.list()))
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
327 self.db.issue.create(title="please commit me!", status='1')
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
328 self.assertNotEqual(num_issues, len(self.db.issue.list()))
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
329 self.db.commit()
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
330 self.assertNotEqual(num_issues, len(self.db.issue.list()))
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
331 self.db.rollback()
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
332 self.assertNotEqual(num_issues, len(self.db.issue.list()))
461
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 441
diff changeset
333 self.db.file.create(name="test", type="text/plain", content="hi")
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 441
diff changeset
334 self.db.rollback()
646
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
335 self.assertEqual(num_files, self.db.numfiles())
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
336 for i in range(10):
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
337 self.db.file.create(name="test", type="text/plain",
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
338 content="hi %d"%(i))
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
339 self.db.commit()
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
340 num_files2 = self.db.numfiles()
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
341 self.assertNotEqual(num_files, num_files2)
461
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 441
diff changeset
342 self.db.file.create(name="test", type="text/plain", content="hi")
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 441
diff changeset
343 self.db.rollback()
646
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
344 self.assertNotEqual(num_files, self.db.numfiles())
07abfe8f0c01 use blobfiles in back_anydbm which is used in back_bsddb.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 570
diff changeset
345 self.assertEqual(num_files2, self.db.numfiles())
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
346
1492
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
347 # rollback / cache interaction
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
348 name1 = self.db.user.get('1', 'username')
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
349 self.db.user.set('1', username = name1+name1)
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
350 # get the prop so the info's forced into the cache (if there is one)
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
351 self.db.user.get('1', 'username')
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
352 self.db.rollback()
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
353 name2 = self.db.user.get('1', 'username')
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
354 self.assertEqual(name1, name2)
2fc7d4a8c9e7 fixed sqlite rollback/caching bug [SF#689383]
Richard Jones <richard@users.sourceforge.net>
parents: 1486
diff changeset
355
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
356 def testDestroyNoJournalling(self):
891
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
357 self.innerTestDestroy(klass=self.db.session)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
358
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
359 def testDestroyJournalling(self):
891
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
360 self.innerTestDestroy(klass=self.db.issue)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
361
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
362 def innerTestDestroy(self, klass):
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
363 newid = klass.create(title='Mr Friendly')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
364 n = len(klass.list())
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
365 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
366 klass.destroy(newid)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
367 self.assertRaises(IndexError, klass.get, newid, 'title')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
368 self.assertNotEqual(len(klass.list()), n)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
369 if klass.do_journal:
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
370 self.assertRaises(IndexError, klass.history, newid)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
371
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
372 # now with a commit
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
373 newid = klass.create(title='Mr Friendly')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
374 n = len(klass.list())
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
375 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
376 self.db.commit()
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
377 klass.destroy(newid)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
378 self.assertRaises(IndexError, klass.get, newid, 'title')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
379 self.db.commit()
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
380 self.assertRaises(IndexError, klass.get, newid, 'title')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
381 self.assertNotEqual(len(klass.list()), n)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
382 if klass.do_journal:
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
383 self.assertRaises(IndexError, klass.history, newid)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
384
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
385 # now with a rollback
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
386 newid = klass.create(title='Mr Friendly')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
387 n = len(klass.list())
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
388 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
389 self.db.commit()
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
390 klass.destroy(newid)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
391 self.assertNotEqual(len(klass.list()), n)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
392 self.assertRaises(IndexError, klass.get, newid, 'title')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
393 self.db.rollback()
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
394 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
395 self.assertEqual(len(klass.list()), n)
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
396 if klass.do_journal:
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
397 self.assertNotEqual(klass.history(newid), [])
974a4b94c5e3 Implemented the destroy() method needed by the session database...
Richard Jones <richard@users.sourceforge.net>
parents: 890
diff changeset
398
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
399 def testExceptions(self):
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
400 # this tests the exceptions that should be raised
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
401 ar = self.assertRaises
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
402
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
403 #
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
404 # class create
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
405 #
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
406 # string property
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
407 ar(TypeError, self.db.status.create, name=1)
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
408 # invalid property name
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
409 ar(KeyError, self.db.status.create, foo='foo')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
410 # key name clash
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
411 ar(ValueError, self.db.status.create, name='unread')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
412 # invalid link index
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
413 ar(IndexError, self.db.issue.create, title='foo', status='bar')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
414 # invalid link value
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
415 ar(ValueError, self.db.issue.create, title='foo', status=1)
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
416 # invalid multilink type
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
417 ar(TypeError, self.db.issue.create, title='foo', status='1',
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
418 nosy='hello')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
419 # invalid multilink index type
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
420 ar(ValueError, self.db.issue.create, title='foo', status='1',
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
421 nosy=[1])
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
422 # invalid multilink index
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
423 ar(IndexError, self.db.issue.create, title='foo', status='1',
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
424 nosy=['10'])
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
425
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
426 #
862
37fb48c3a136 Did some old TODOs
Richard Jones <richard@users.sourceforge.net>
parents: 860
diff changeset
427 # key property
37fb48c3a136 Did some old TODOs
Richard Jones <richard@users.sourceforge.net>
parents: 860
diff changeset
428 #
37fb48c3a136 Did some old TODOs
Richard Jones <richard@users.sourceforge.net>
parents: 860
diff changeset
429 # key must be a String
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
430 ar(TypeError, self.db.file.setkey, 'fooz')
862
37fb48c3a136 Did some old TODOs
Richard Jones <richard@users.sourceforge.net>
parents: 860
diff changeset
431 # key must exist
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
432 ar(KeyError, self.db.file.setkey, 'fubar')
862
37fb48c3a136 Did some old TODOs
Richard Jones <richard@users.sourceforge.net>
parents: 860
diff changeset
433
37fb48c3a136 Did some old TODOs
Richard Jones <richard@users.sourceforge.net>
parents: 860
diff changeset
434 #
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
435 # class get
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
436 #
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
437 # invalid node id
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
438 ar(IndexError, self.db.issue.get, '99', 'title')
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
439 # invalid property name
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
440 ar(KeyError, self.db.status.get, '2', 'foo')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
441
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
442 #
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
443 # class set
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
444 #
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
445 # invalid node id
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
446 ar(IndexError, self.db.issue.set, '99', title='foo')
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
447 # invalid property name
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
448 ar(KeyError, self.db.status.set, '1', foo='foo')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
449 # string property
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
450 ar(TypeError, self.db.status.set, '1', name=1)
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
451 # key name clash
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
452 ar(ValueError, self.db.status.set, '2', name='unread')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
453 # set up a valid issue for me to work on
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
454 id = self.db.issue.create(title="spam", status='1')
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
455 # invalid link index
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
456 ar(IndexError, self.db.issue.set, id, title='foo', status='bar')
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
457 # invalid link value
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
458 ar(ValueError, self.db.issue.set, id, title='foo', status=1)
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
459 # invalid multilink type
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
460 ar(TypeError, self.db.issue.set, id, title='foo', status='1',
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
461 nosy='hello')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
462 # invalid multilink index type
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
463 ar(ValueError, self.db.issue.set, id, title='foo', status='1',
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
464 nosy=[1])
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
465 # invalid multilink index
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
466 ar(IndexError, self.db.issue.set, id, title='foo', status='1',
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
467 nosy=['10'])
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
468 # NOTE: the following increment the username to avoid problems
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
469 # within metakit's backend (it creates the node, and then sets the
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
470 # info, so the create (and by a fluke the username set) go through
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
471 # before the age/assignable/etc. set, which raises the exception)
887
e7169d6e6e45 added tests for number type too
Richard Jones <richard@users.sourceforge.net>
parents: 886
diff changeset
472 # invalid number value
e7169d6e6e45 added tests for number type too
Richard Jones <richard@users.sourceforge.net>
parents: 886
diff changeset
473 ar(TypeError, self.db.user.create, username='foo', age='a')
e7169d6e6e45 added tests for number type too
Richard Jones <richard@users.sourceforge.net>
parents: 886
diff changeset
474 # invalid boolean value
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
475 ar(TypeError, self.db.user.create, username='foo2', assignable='true')
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
476 nid = self.db.user.create(username='foo3')
887
e7169d6e6e45 added tests for number type too
Richard Jones <richard@users.sourceforge.net>
parents: 886
diff changeset
477 # invalid number value
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
478 ar(TypeError, self.db.user.set, nid, age='a')
887
e7169d6e6e45 added tests for number type too
Richard Jones <richard@users.sourceforge.net>
parents: 886
diff changeset
479 # invalid boolean value
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
480 ar(TypeError, self.db.user.set, nid, assignable='true')
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
481
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
482 def testJournals(self):
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
483 self.db.user.create(username="mary")
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
484 self.db.user.create(username="pete")
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
485 self.db.issue.create(title="spam", status='1')
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
486 self.db.commit()
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
487
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
488 # journal entry for issue create
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
489 journal = self.db.getjournal('issue', '1')
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
490 self.assertEqual(1, len(journal))
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
491 (nodeid, date_stamp, journaltag, action, params) = journal[0]
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
492 self.assertEqual(nodeid, '1')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
493 self.assertEqual(journaltag, self.db.user.lookup('admin'))
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
494 self.assertEqual(action, 'create')
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
495 keys = params.keys()
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
496 keys.sort()
1305
d8de80de9fc4 oops, fixed unit tests for journal change
Richard Jones <richard@users.sourceforge.net>
parents: 1264
diff changeset
497 self.assertEqual(keys, [])
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
498
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
499 # journal entry for link
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
500 journal = self.db.getjournal('user', '1')
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
501 self.assertEqual(1, len(journal))
973
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
502 self.db.issue.set('1', assignedto='1')
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
503 self.db.commit()
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
504 journal = self.db.getjournal('user', '1')
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
505 self.assertEqual(2, len(journal))
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
506 (nodeid, date_stamp, journaltag, action, params) = journal[1]
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
507 self.assertEqual('1', nodeid)
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
508 self.assertEqual('1', journaltag)
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
509 self.assertEqual('link', action)
973
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
510 self.assertEqual(('issue', '1', 'assignedto'), params)
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
511
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
512 # journal entry for unlink
973
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
513 self.db.issue.set('1', assignedto='2')
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
514 self.db.commit()
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
515 journal = self.db.getjournal('user', '1')
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
516 self.assertEqual(3, len(journal))
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
517 (nodeid, date_stamp, journaltag, action, params) = journal[2]
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
518 self.assertEqual('1', nodeid)
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
519 self.assertEqual('1', journaltag)
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
520 self.assertEqual('unlink', action)
973
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
521 self.assertEqual(('issue', '1', 'assignedto'), params)
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
522
860
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
523 # test disabling journalling
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
524 # ... get the last entry
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
525 time.sleep(1)
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
526 entry = self.db.getjournal('issue', '1')[-1]
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
527 (x, date_stamp, x, x, x) = entry
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
528 self.db.issue.disableJournalling()
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
529 self.db.issue.set('1', title='hello world')
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
530 self.db.commit()
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
531 entry = self.db.getjournal('issue', '1')[-1]
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
532 (x, date_stamp2, x, x, x) = entry
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
533 # see if the change was journalled when it shouldn't have been
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
534 self.assertEqual(date_stamp, date_stamp2)
1183
08a13a84ed43 Some speedups - both of the SQL backends can handle using only one cursor.
Richard Jones <richard@users.sourceforge.net>
parents: 1178
diff changeset
535 time.sleep(1)
860
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
536 self.db.issue.enableJournalling()
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
537 self.db.issue.set('1', title='hello world 2')
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
538 self.db.commit()
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
539 entry = self.db.getjournal('issue', '1')[-1]
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
540 (x, date_stamp2, x, x, x) = entry
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
541 # see if the change was journalled
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
542 self.assertNotEqual(date_stamp, date_stamp2)
2df32a73eb45 Implemented a switch to disable journalling for a Class.
Richard Jones <richard@users.sourceforge.net>
parents: 859
diff changeset
543
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
544 def testJournalPreCommit(self):
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
545 id = self.db.user.create(username="mary")
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
546 self.assertEqual(len(self.db.getjournal('user', id)), 1)
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
547 self.db.commit()
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
548
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
549 def testPack(self):
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
550 id = self.db.issue.create(title="spam", status='1')
566
73af3e54c309 We need to keep the last 'set' entry in the journal...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 562
diff changeset
551 self.db.commit()
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
552 self.db.issue.set(id, status='2')
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 555
diff changeset
553 self.db.commit()
973
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
554
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
555 # sleep for at least a second, then get a date to pack at
1222
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
556 time.sleep(1)
973
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
557 pack_before = date.Date('.')
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
558
1222
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
559 # wait another second and add one more entry
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
560 time.sleep(1)
1178
18bb36e4f62f Remove some assumptions about what idi numbers will be created.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1176
diff changeset
561 self.db.issue.set(id, status='3')
566
73af3e54c309 We need to keep the last 'set' entry in the journal...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 562
diff changeset
562 self.db.commit()
1222
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
563 jlen = len(self.db.getjournal('issue', id))
973
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
564
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
565 # pack
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 555
diff changeset
566 self.db.pack(pack_before)
973
e21259073500 oops, forgot
Richard Jones <richard@users.sourceforge.net>
parents: 927
diff changeset
567
974
84216d63ed9c ahhh, I understand now
Richard Jones <richard@users.sourceforge.net>
parents: 973
diff changeset
568 # we should have the create and last set entries now
1222
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
569 self.assertEqual(jlen-1, len(self.db.getjournal('issue', id)))
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 555
diff changeset
570
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
571 def testSearching(self):
825
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
572 self.db.file.create(content='hello', type="text/plain")
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
573 self.db.file.create(content='world', type="text/frozz",
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
574 comment='blah blah')
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
575 self.db.issue.create(files=['1', '2'], title="flebble plop")
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
576 self.db.issue.create(title="flebble frooz")
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
577 self.db.commit()
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
578 self.assertEquals(self.db.indexer.search(['hello'], self.db.issue),
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
579 {'1': {'files': ['1']}})
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
580 self.assertEquals(self.db.indexer.search(['world'], self.db.issue), {})
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
581 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue),
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
582 {'2': {}})
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
583 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue),
0779ea9f1f18 More indexer work:
Richard Jones <richard@users.sourceforge.net>
parents: 785
diff changeset
584 {'2': {}, '1': {}})
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
585
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
586 def testReindexing(self):
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
587 self.db.issue.create(title="frooz")
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
588 self.db.commit()
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
589 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue),
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
590 {'1': {}})
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
591 self.db.issue.set('1', title="dooble")
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
592 self.db.commit()
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
593 self.assertEquals(self.db.indexer.search(['dooble'], self.db.issue),
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
594 {'1': {}})
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
595 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue), {})
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
596
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
597 def testForcedReindexing(self):
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
598 self.db.issue.create(title="flebble frooz")
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
599 self.db.commit()
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
600 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue),
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
601 {'1': {}})
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
602 self.db.indexer.quiet = 1
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
603 self.db.indexer.force_reindex()
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
604 self.db.post_init()
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
605 self.db.indexer.quiet = 9
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
606 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue),
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
607 {'1': {}})
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
608
1222
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
609 #
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
610 # searching tests follow
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
611 #
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
612 def testFind(self):
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
613 self.db.user.create(username='test')
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
614 ids = []
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
615 ids.append(self.db.issue.create(status="1", nosy=['1']))
1563
e2a8ce4d2317 Class.find() may now find unset Links [SF#700620]
Richard Jones <richard@users.sourceforge.net>
parents: 1555
diff changeset
616 oddid = self.db.issue.create(status="2", nosy=['2'], assignedto='2')
1222
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
617 ids.append(self.db.issue.create(status="1", nosy=['1','2']))
1563
e2a8ce4d2317 Class.find() may now find unset Links [SF#700620]
Richard Jones <richard@users.sourceforge.net>
parents: 1555
diff changeset
618 self.db.issue.create(status="3", nosy=['1'], assignedto='1')
1222
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
619 ids.sort()
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
620
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
621 # should match first and third
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
622 got = self.db.issue.find(status='1')
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
623 got.sort()
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
624 self.assertEqual(got, ids)
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
625
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
626 # none
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
627 self.assertEqual(self.db.issue.find(status='4'), [])
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
628
1563
e2a8ce4d2317 Class.find() may now find unset Links [SF#700620]
Richard Jones <richard@users.sourceforge.net>
parents: 1555
diff changeset
629 # should match first and third
e2a8ce4d2317 Class.find() may now find unset Links [SF#700620]
Richard Jones <richard@users.sourceforge.net>
parents: 1555
diff changeset
630 got = self.db.issue.find(assignedto=None)
e2a8ce4d2317 Class.find() may now find unset Links [SF#700620]
Richard Jones <richard@users.sourceforge.net>
parents: 1555
diff changeset
631 got.sort()
e2a8ce4d2317 Class.find() may now find unset Links [SF#700620]
Richard Jones <richard@users.sourceforge.net>
parents: 1555
diff changeset
632 self.assertEqual(got, ids)
e2a8ce4d2317 Class.find() may now find unset Links [SF#700620]
Richard Jones <richard@users.sourceforge.net>
parents: 1555
diff changeset
633
1222
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
634 # should match first three
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
635 got = self.db.issue.find(status='1', nosy='2')
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
636 got.sort()
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
637 ids.append(oddid)
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
638 ids.sort()
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
639 self.assertEqual(got, ids)
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
640
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
641 # none
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
642 self.assertEqual(self.db.issue.find(status='4', nosy='3'), [])
bc3bc3248dd1 added Class.find() unit test, fixed implementations
Richard Jones <richard@users.sourceforge.net>
parents: 1198
diff changeset
643
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
644 def testStringFind(self):
1198
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
645 ids = []
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
646 ids.append(self.db.issue.create(title="spam"))
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
647 self.db.issue.create(title="not spam")
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
648 ids.append(self.db.issue.create(title="spam"))
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
649 ids.sort()
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
650 got = self.db.issue.stringFind(title='spam')
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
651 got.sort()
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
652 self.assertEqual(got, ids)
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
653 self.assertEqual(self.db.issue.stringFind(title='fubar'), [])
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
654
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
655 def filteringSetup(self):
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
656 for user in (
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
657 {'username': 'bleep'},
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
658 {'username': 'blop'},
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
659 {'username': 'blorp'}):
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
660 self.db.user.create(**user)
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
661 iss = self.db.issue
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
662 for issue in (
1505
c101d2ff5a20 fix to [SF#691071], really this time
Richard Jones <richard@users.sourceforge.net>
parents: 1492
diff changeset
663 {'title': 'issue one', 'status': '2',
1506
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
664 'foo': date.Interval('1:10'),
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
665 'deadline': date.Date('2003-01-01.00:00')},
1505
c101d2ff5a20 fix to [SF#691071], really this time
Richard Jones <richard@users.sourceforge.net>
parents: 1492
diff changeset
666 {'title': 'issue two', 'status': '1',
1506
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
667 'foo': date.Interval('1d'),
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
668 'deadline': date.Date('2003-02-16.22:50')},
1505
c101d2ff5a20 fix to [SF#691071], really this time
Richard Jones <richard@users.sourceforge.net>
parents: 1492
diff changeset
669 {'title': 'issue three', 'status': '1',
1598
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
670 'nosy': ['1','2'], 'deadline': date.Date('2003-02-18')},
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
671 {'title': 'non four', 'status': '3',
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
672 'foo': date.Interval('0:10'),
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
673 'nosy': ['1'], 'deadline': date.Date('2004-03-08')}):
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
674 self.db.issue.create(**issue)
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
675 self.db.commit()
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
676 return self.assertEqual, self.db.issue.filter
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
677
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
678 def testFilteringID(self):
1365
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
679 ae, filt = self.filteringSetup()
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
680 ae(filt(None, {'id': '1'}, ('+','id'), (None,None)), ['1'])
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
681
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
682 def testFilteringString(self):
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
683 ae, filt = self.filteringSetup()
1631
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1599
diff changeset
684 ae(filt(None, {'title': ['one']}, ('+','id'), (None,None)), ['1'])
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1599
diff changeset
685 ae(filt(None, {'title': ['issue']}, ('+','id'), (None,None)),
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
686 ['1','2','3'])
1631
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1599
diff changeset
687 ae(filt(None, {'title': ['one', 'two']}, ('+','id'), (None,None)),
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1599
diff changeset
688 ['1', '2'])
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
689
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
690 def testFilteringLink(self):
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
691 ae, filt = self.filteringSetup()
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
692 ae(filt(None, {'status': '1'}, ('+','id'), (None,None)), ['2','3'])
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
693
1740
5ca448ff8052 don't have RDBMS backends list retired nodes [SF#767319]
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
694 def testFilteringRetired(self):
5ca448ff8052 don't have RDBMS backends list retired nodes [SF#767319]
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
695 ae, filt = self.filteringSetup()
5ca448ff8052 don't have RDBMS backends list retired nodes [SF#767319]
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
696 self.db.issue.retire('2')
5ca448ff8052 don't have RDBMS backends list retired nodes [SF#767319]
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
697 ae(filt(None, {'status': '1'}, ('+','id'), (None,None)), ['3'])
5ca448ff8052 don't have RDBMS backends list retired nodes [SF#767319]
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
698
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
699 def testFilteringMultilink(self):
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
700 ae, filt = self.filteringSetup()
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
701 ae(filt(None, {'nosy': '2'}, ('+','id'), (None,None)), ['3'])
1555
948c7764d46c implemented ability to search for multilink properties with no value (not in mk)
Richard Jones <richard@users.sourceforge.net>
parents: 1542
diff changeset
702 ae(filt(None, {'nosy': '-1'}, ('+','id'), (None,None)), ['1', '2'])
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
703
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
704 def testFilteringMany(self):
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
705 ae, filt = self.filteringSetup()
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
706 ae(filt(None, {'nosy': '2', 'status': '1'}, ('+','id'), (None,None)),
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
707 ['3'])
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
708
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
709 def testFilteringRange(self):
1506
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
710 ae, filt = self.filteringSetup()
1596
33a0d94c7658 searching on ranges of intervals is implemented
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1567
diff changeset
711 # Date ranges
1598
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
712 ae(filt(None, {'deadline': 'from 2003-02-10 to 2003-02-23'}), ['2','3'])
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
713 ae(filt(None, {'deadline': '2003-02-10; 2003-02-23'}), ['2','3'])
1506
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
714 ae(filt(None, {'deadline': '; 2003-02-16'}), ['1'])
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
715 # Lets assume people won't invent a time machine, otherwise this test
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
716 # may fail :)
1598
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
717 ae(filt(None, {'deadline': 'from 2003-02-16'}), ['2', '3', '4'])
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
718 ae(filt(None, {'deadline': '2003-02-16;'}), ['2', '3', '4'])
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
719 # year and month granularity
1599
cc96bf971b33 extended date syntax to make range searches even more useful
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1598
diff changeset
720 ae(filt(None, {'deadline': '2002'}), [])
1598
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
721 ae(filt(None, {'deadline': '2003'}), ['1', '2', '3'])
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
722 ae(filt(None, {'deadline': '2004'}), ['4'])
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
723 ae(filt(None, {'deadline': '2003-02'}), ['2', '3'])
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
724 ae(filt(None, {'deadline': '2003-03'}), [])
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
725 ae(filt(None, {'deadline': '2003-02-16'}), ['2'])
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
726 ae(filt(None, {'deadline': '2003-02-17'}), [])
1596
33a0d94c7658 searching on ranges of intervals is implemented
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1567
diff changeset
727 # Interval ranges
33a0d94c7658 searching on ranges of intervals is implemented
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1567
diff changeset
728 ae(filt(None, {'foo': 'from 0:50 to 2:00'}), ['1'])
33a0d94c7658 searching on ranges of intervals is implemented
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1567
diff changeset
729 ae(filt(None, {'foo': 'from 0:50 to 1d 2:00'}), ['1', '2'])
33a0d94c7658 searching on ranges of intervals is implemented
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1567
diff changeset
730 ae(filt(None, {'foo': 'from 5:50'}), ['2'])
1599
cc96bf971b33 extended date syntax to make range searches even more useful
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1598
diff changeset
731 ae(filt(None, {'foo': 'to 0:05'}), [])
1506
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
732
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
733 def testFilteringIntervalSort(self):
1505
c101d2ff5a20 fix to [SF#691071], really this time
Richard Jones <richard@users.sourceforge.net>
parents: 1492
diff changeset
734 ae, filt = self.filteringSetup()
c101d2ff5a20 fix to [SF#691071], really this time
Richard Jones <richard@users.sourceforge.net>
parents: 1492
diff changeset
735 # ascending should sort None, 1:10, 1d
1598
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
736 ae(filt(None, {}, ('+','foo'), (None,None)), ['3', '4', '1', '2'])
1505
c101d2ff5a20 fix to [SF#691071], really this time
Richard Jones <richard@users.sourceforge.net>
parents: 1492
diff changeset
737 # descending should sort 1d, 1:10, None
1598
b3263567b8c6 new tests for new range specs - currently failing
Richard Jones <richard@users.sourceforge.net>
parents: 1597
diff changeset
738 ae(filt(None, {}, ('-','foo'), (None,None)), ['2', '1', '4', '3'])
1486
f5f60c75a458 added test for error in sqlite backend, and fixed *dbm backend error
Richard Jones <richard@users.sourceforge.net>
parents: 1479
diff changeset
739
1505
c101d2ff5a20 fix to [SF#691071], really this time
Richard Jones <richard@users.sourceforge.net>
parents: 1492
diff changeset
740 # XXX add sorting tests for other types
c101d2ff5a20 fix to [SF#691071], really this time
Richard Jones <richard@users.sourceforge.net>
parents: 1492
diff changeset
741 # XXX test auditors and reactors
1361
b94cc62090be reminder comments for where we need new tests
Richard Jones <richard@users.sourceforge.net>
parents: 1333
diff changeset
742
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
743 class anydbmReadOnlyDBTestCase(MyTestCase):
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
744 def setUp(self):
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
745 from roundup.backends import anydbm
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
746 # remove previous test, ignore errors
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
747 if os.path.exists(config.DATABASE):
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
748 shutil.rmtree(config.DATABASE)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
749 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
750 db = anydbm.Database(config, 'admin')
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
751 setupSchema(db, 1, anydbm)
1333
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
752 db.close()
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
753 self.db = anydbm.Database(config)
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
754 setupSchema(self.db, 0, anydbm)
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
755
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
756 def testExceptions(self):
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
757 # this tests the exceptions that should be raised
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
758 ar = self.assertRaises
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
759
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
760 # this tests the exceptions that should be raised
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
761 ar(DatabaseError, self.db.status.create, name="foo")
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
762 ar(DatabaseError, self.db.status.set, '1', name="foo")
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
763 ar(DatabaseError, self.db.status.retire, '1')
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
764
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
765
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
766 class bsddbDBTestCase(anydbmDBTestCase):
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
767 def setUp(self):
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
768 from roundup.backends import bsddb
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
769 # remove previous test, ignore errors
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
770 if os.path.exists(config.DATABASE):
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
771 shutil.rmtree(config.DATABASE)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
772 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
773 self.db = bsddb.Database(config, 'admin')
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
774 setupSchema(self.db, 1, bsddb)
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
775
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
776 class bsddbReadOnlyDBTestCase(anydbmReadOnlyDBTestCase):
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
777 def setUp(self):
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
778 from roundup.backends import bsddb
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
779 # remove previous test, ignore errors
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
780 if os.path.exists(config.DATABASE):
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
781 shutil.rmtree(config.DATABASE)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
782 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
783 db = bsddb.Database(config, 'admin')
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
784 setupSchema(db, 1, bsddb)
1333
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
785 db.close()
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
786 self.db = bsddb.Database(config)
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
787 setupSchema(self.db, 0, bsddb)
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
788
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
789
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
790 class bsddb3DBTestCase(anydbmDBTestCase):
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
791 def setUp(self):
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
792 from roundup.backends import bsddb3
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
793 # remove previous test, ignore errors
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
794 if os.path.exists(config.DATABASE):
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
795 shutil.rmtree(config.DATABASE)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
796 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
797 self.db = bsddb3.Database(config, 'admin')
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
798 setupSchema(self.db, 1, bsddb3)
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
799
441
698534628072 Added transaction tests to test_db
Richard Jones <richard@users.sourceforge.net>
parents: 432
diff changeset
800 class bsddb3ReadOnlyDBTestCase(anydbmReadOnlyDBTestCase):
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
801 def setUp(self):
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
802 from roundup.backends import bsddb3
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
803 # remove previous test, ignore errors
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
804 if os.path.exists(config.DATABASE):
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
805 shutil.rmtree(config.DATABASE)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
806 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
807 db = bsddb3.Database(config, 'admin')
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
808 setupSchema(db, 1, bsddb3)
1333
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
809 db.close()
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 461
diff changeset
810 self.db = bsddb3.Database(config)
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
811 setupSchema(self.db, 0, bsddb3)
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
812
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
813
1365
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
814 class mysqlDBTestCase(anydbmDBTestCase):
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
815 def setUp(self):
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
816 from roundup.backends import mysql
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
817 # remove previous test, ignore errors
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
818 if os.path.exists(config.DATABASE):
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
819 shutil.rmtree(config.DATABASE)
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
820 os.makedirs(config.DATABASE + '/files')
1433
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
821 # open database for testing
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
822 self.db = mysql.Database(config, 'admin')
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
823 setupSchema(self.db, 1, mysql)
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
824
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
825 def tearDown(self):
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
826 from roundup.backends import mysql
1415
6883852e9b15 mysql backend passes all tests (at last!)
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1392
diff changeset
827 self.db.close()
1434
b953750bdc04 trackers on mysql can be initialised
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1433
diff changeset
828 mysql.Database.nuke(config)
1365
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
829
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
830 class mysqlReadOnlyDBTestCase(anydbmReadOnlyDBTestCase):
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
831 def setUp(self):
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
832 from roundup.backends import mysql
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
833 # remove previous test, ignore errors
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
834 if os.path.exists(config.DATABASE):
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
835 shutil.rmtree(config.DATABASE)
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
836 os.makedirs(config.DATABASE + '/files')
1415
6883852e9b15 mysql backend passes all tests (at last!)
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1392
diff changeset
837 self.db = mysql.Database(config)
1365
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
838 setupSchema(self.db, 0, mysql)
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
839
1433
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
840 def tearDown(self):
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
841 from roundup.backends import mysql
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
842 self.db.close()
1434
b953750bdc04 trackers on mysql can be initialised
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1433
diff changeset
843 mysql.Database.nuke(config)
1433
8429095241d7 mysql tests will not be run if there is no chance of passing.
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1415
diff changeset
844
1165
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
845 class sqliteDBTestCase(anydbmDBTestCase):
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
846 def setUp(self):
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
847 from roundup.backends import sqlite
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
848 # remove previous test, ignore errors
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
849 if os.path.exists(config.DATABASE):
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
850 shutil.rmtree(config.DATABASE)
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
851 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
852 self.db = sqlite.Database(config, 'admin')
1165
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
853 setupSchema(self.db, 1, sqlite)
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
854
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
855 class sqliteReadOnlyDBTestCase(anydbmReadOnlyDBTestCase):
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
856 def setUp(self):
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
857 from roundup.backends import sqlite
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
858 # remove previous test, ignore errors
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
859 if os.path.exists(config.DATABASE):
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
860 shutil.rmtree(config.DATABASE)
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
861 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
862 db = sqlite.Database(config, 'admin')
1165
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
863 setupSchema(db, 1, sqlite)
1333
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
864 db.close()
1165
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
865 self.db = sqlite.Database(config)
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
866 setupSchema(self.db, 0, sqlite)
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
867
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1156
diff changeset
868
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
869 class metakitDBTestCase(anydbmDBTestCase):
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
870 def setUp(self):
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
871 from roundup.backends import metakit
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
872 import weakref
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
873 metakit._instances = weakref.WeakValueDictionary()
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
874 # remove previous test, ignore errors
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
875 if os.path.exists(config.DATABASE):
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
876 shutil.rmtree(config.DATABASE)
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
877 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
878 self.db = metakit.Database(config, 'admin')
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
879 setupSchema(self.db, 1, metakit)
1143
Richard Jones <richard@users.sourceforge.net>
parents: 1126
diff changeset
880
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
881 def testTransactions(self):
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
882 # remember the number of items we started
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
883 num_issues = len(self.db.issue.list())
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
884 self.db.issue.create(title="don't commit me!", status='1')
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
885 self.assertNotEqual(num_issues, len(self.db.issue.list()))
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
886 self.db.rollback()
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
887 self.assertEqual(num_issues, len(self.db.issue.list()))
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
888 self.db.issue.create(title="please commit me!", status='1')
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
889 self.assertNotEqual(num_issues, len(self.db.issue.list()))
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
890 self.db.commit()
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
891 self.assertNotEqual(num_issues, len(self.db.issue.list()))
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
892 self.db.rollback()
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
893 self.assertNotEqual(num_issues, len(self.db.issue.list()))
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
894 self.db.file.create(name="test", type="text/plain", content="hi")
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
895 self.db.rollback()
1243
3a028d2f7830 Fix (re)indexing & find in back_metakit.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1222
diff changeset
896 num_files = len(self.db.file.list())
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
897 for i in range(10):
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
898 self.db.file.create(name="test", type="text/plain",
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
899 content="hi %d"%(i))
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
900 self.db.commit()
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
901 # TODO: would be good to be able to ensure the file is not on disk after
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
902 # a rollback...
1243
3a028d2f7830 Fix (re)indexing & find in back_metakit.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1222
diff changeset
903 num_files2 = len(self.db.file.list())
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
904 self.assertNotEqual(num_files, num_files2)
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
905 self.db.file.create(name="test", type="text/plain", content="hi")
1243
3a028d2f7830 Fix (re)indexing & find in back_metakit.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1222
diff changeset
906 num_rfiles = len(os.listdir(self.db.config.DATABASE + '/files/file/0'))
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
907 self.db.rollback()
1243
3a028d2f7830 Fix (re)indexing & find in back_metakit.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1222
diff changeset
908 num_rfiles2 = len(os.listdir(self.db.config.DATABASE + '/files/file/0'))
3a028d2f7830 Fix (re)indexing & find in back_metakit.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1222
diff changeset
909 self.assertEqual(num_files2, len(self.db.file.list()))
3a028d2f7830 Fix (re)indexing & find in back_metakit.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents: 1222
diff changeset
910 self.assertEqual(num_rfiles2, num_rfiles-1)
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
911
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
912 def testBooleanUnset(self):
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
913 # XXX: metakit can't unset Booleans :(
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
914 nid = self.db.user.create(username='foo', assignable=1)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
915 self.db.user.set(nid, assignable=None)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
916 self.assertEqual(self.db.user.get(nid, "assignable"), 0)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
917
1567
fc8998ce6274 fixed missing (pre-commit) journal entries in *dbm backends [SF#679217]
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
918 def testNumberUnset(self):
1392
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
919 # XXX: metakit can't unset Numbers :(
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
920 nid = self.db.user.create(username='foo', age=1)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
921 self.db.user.set(nid, age=None)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
922 self.assertEqual(self.db.user.get(nid, "age"), 0)
083cce7840aa Metakit now passes all unit tests! w00t! (except the Number/Boolean unset)
Richard Jones <richard@users.sourceforge.net>
parents: 1378
diff changeset
923
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
924 class metakitReadOnlyDBTestCase(anydbmReadOnlyDBTestCase):
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
925 def setUp(self):
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
926 from roundup.backends import metakit
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
927 import weakref
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
928 metakit._instances = weakref.WeakValueDictionary()
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
929 # remove previous test, ignore errors
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
930 if os.path.exists(config.DATABASE):
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
931 shutil.rmtree(config.DATABASE)
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
932 os.makedirs(config.DATABASE + '/files')
1176
bd3b57859c37 On second thought, that last checkin was dumb.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
933 db = metakit.Database(config, 'admin')
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
934 setupSchema(db, 1, metakit)
1333
80d27b7d6db5 implemented whole-database locking
Richard Jones <richard@users.sourceforge.net>
parents: 1305
diff changeset
935 db.close()
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
936 self.db = metakit.Database(config)
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 854
diff changeset
937 setupSchema(self.db, 0, metakit)
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
938
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
939 def suite():
1532
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
940 p = []
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
941
1479
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
942 l = [
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
943 unittest.makeSuite(anydbmDBTestCase, 'test'),
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
944 unittest.makeSuite(anydbmReadOnlyDBTestCase, 'test')
405e91b5be46 fixed rdbms mutation of properties
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
945 ]
1532
dad5d3214a1e additional Number test
Richard Jones <richard@users.sourceforge.net>
parents: 1528
diff changeset
946 p.append('anydbm')
1542
3faabaeab6aa fixed date unserialisation for *dbm backends
Richard Jones <richard@users.sourceforge.net>
parents: 1532
diff changeset
947 # return unittest.TestSuite(l)
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
948
1198
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
949 from roundup import backends
1506
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
950 if hasattr(backends, 'mysql'):
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
951 from roundup.backends import mysql
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
952 try:
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
953 # Check if we can run mysql tests
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
954 import MySQLdb
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
955 db = mysql.Database(nodbconfig, 'admin')
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
956 db.conn.select_db(config.MYSQL_DBNAME)
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
957 db.sql("SHOW TABLES");
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
958 tables = db.sql_fetchall()
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
959 if tables:
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
960 # Database should be empty. We don't dare to delete any data
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
961 raise DatabaseError, "(Database %s contains tables)" % config.MYSQL_DBNAME
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
962 db.sql("DROP DATABASE %s" % config.MYSQL_DBNAME)
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
963 db.sql("CREATE DATABASE %s" % config.MYSQL_DBNAME)
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
964 db.close()
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
965 except (MySQLdb.ProgrammingError, DatabaseError), msg:
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
966 print "Warning! Mysql tests will not be performed", msg
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
967 print "See doc/mysql.txt for more details."
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
968 else:
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
969 p.append('mysql')
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
970 l.append(unittest.makeSuite(mysqlDBTestCase, 'test'))
8b698780bb7d unit tests for filtering ranges
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1505
diff changeset
971 l.append(unittest.makeSuite(mysqlReadOnlyDBTestCase, 'test'))
1415
6883852e9b15 mysql backend passes all tests (at last!)
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1392
diff changeset
972 #return unittest.TestSuite(l)
1365
4884fb0860f9 fixed rdbms searching by ID [SF#666615]
Richard Jones <richard@users.sourceforge.net>
parents: 1361
diff changeset
973
1198
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
974 if hasattr(backends, 'sqlite'):
1378
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
975 p.append('sqlite')
1170
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
976 l.append(unittest.makeSuite(sqliteDBTestCase, 'test'))
af104fa52746 Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents: 1168
diff changeset
977 l.append(unittest.makeSuite(sqliteReadOnlyDBTestCase, 'test'))
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
978
1198
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
979 if hasattr(backends, 'bsddb'):
1378
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
980 p.append('bsddb')
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
981 l.append(unittest.makeSuite(bsddbDBTestCase, 'test'))
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
982 l.append(unittest.makeSuite(bsddbReadOnlyDBTestCase, 'test'))
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
983
1198
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
984 if hasattr(backends, 'bsddb3'):
1378
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
985 p.append('bsddb3')
726
e3d742c75ac3 Well whadya know, bsddb3 works again.
Richard Jones <richard@users.sourceforge.net>
parents: 690
diff changeset
986 l.append(unittest.makeSuite(bsddb3DBTestCase, 'test'))
e3d742c75ac3 Well whadya know, bsddb3 works again.
Richard Jones <richard@users.sourceforge.net>
parents: 690
diff changeset
987 l.append(unittest.makeSuite(bsddb3ReadOnlyDBTestCase, 'test'))
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
988
1198
1c5bc0e2ed7d *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
989 if hasattr(backends, 'metakit'):
1378
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
990 p.append('metakit')
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
991 l.append(unittest.makeSuite(metakitDBTestCase, 'test'))
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
992 l.append(unittest.makeSuite(metakitReadOnlyDBTestCase, 'test'))
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
993
1378
5d1fe5d51c12 note on how to fix mysql tests - also indicate which tests are being run
Richard Jones <richard@users.sourceforge.net>
parents: 1375
diff changeset
994 print 'running %s backend tests'%(', '.join(p))
158
86ebcf734a8e Added more DB to test_db. Can skip tests where imports fail.
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
995 return unittest.TestSuite(l)
92
fa44da8d9df2 moving tests -> test
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
996
127
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 121
diff changeset
997 # vim: set filetype=python ts=4 sw=4 et si

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