Mercurial > p > roundup > code
comparison test/test_db.py @ 1563:e2a8ce4d2317
Class.find() may now find unset Links [SF#700620]
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Wed, 26 Mar 2003 10:44:05 +0000 |
| parents | 948c7764d46c |
| children | fc8998ce6274 |
comparison
equal
deleted
inserted
replaced
| 1562:b975da59cd11 | 1563:e2a8ce4d2317 |
|---|---|
| 13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" | 14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
| 15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, | 15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
| 16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | 16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
| 17 # | 17 # |
| 18 # $Id: test_db.py,v 1.82 2003-03-26 04:56:21 richard Exp $ | 18 # $Id: test_db.py,v 1.83 2003-03-26 10:44:05 richard Exp $ |
| 19 | 19 |
| 20 import unittest, os, shutil, time | 20 import unittest, os, shutil, time |
| 21 | 21 |
| 22 from roundup.hyperdb import String, Password, Link, Multilink, Date, \ | 22 from roundup.hyperdb import String, Password, Link, Multilink, Date, \ |
| 23 Interval, DatabaseError, Boolean, Number, Node | 23 Interval, DatabaseError, Boolean, Number, Node |
| 86 setupSchema(self.db, 1, anydbm) | 86 setupSchema(self.db, 1, anydbm) |
| 87 | 87 |
| 88 # | 88 # |
| 89 # schema mutation | 89 # schema mutation |
| 90 # | 90 # |
| 91 def testAddProperty(self): | 91 def xtestAddProperty(self): |
| 92 self.db.issue.create(title="spam", status='1') | 92 self.db.issue.create(title="spam", status='1') |
| 93 self.db.commit() | 93 self.db.commit() |
| 94 | 94 |
| 95 self.db.issue.addprop(fixer=Link("user")) | 95 self.db.issue.addprop(fixer=Link("user")) |
| 96 # force any post-init stuff to happen | 96 # force any post-init stuff to happen |
| 101 self.assertEqual(keys, ['activity', 'assignedto', 'creation', | 101 self.assertEqual(keys, ['activity', 'assignedto', 'creation', |
| 102 'creator', 'deadline', 'files', 'fixer', 'foo', 'id', 'messages', | 102 'creator', 'deadline', 'files', 'fixer', 'foo', 'id', 'messages', |
| 103 'nosy', 'status', 'superseder', 'title']) | 103 'nosy', 'status', 'superseder', 'title']) |
| 104 self.assertEqual(self.db.issue.get('1', "fixer"), None) | 104 self.assertEqual(self.db.issue.get('1', "fixer"), None) |
| 105 | 105 |
| 106 def testRemoveProperty(self): | 106 def xtestRemoveProperty(self): |
| 107 self.db.issue.create(title="spam", status='1') | 107 self.db.issue.create(title="spam", status='1') |
| 108 self.db.commit() | 108 self.db.commit() |
| 109 | 109 |
| 110 del self.db.issue.properties['title'] | 110 del self.db.issue.properties['title'] |
| 111 self.db.post_init() | 111 self.db.post_init() |
| 115 self.assertEqual(keys, ['activity', 'assignedto', 'creation', | 115 self.assertEqual(keys, ['activity', 'assignedto', 'creation', |
| 116 'creator', 'deadline', 'files', 'foo', 'id', 'messages', | 116 'creator', 'deadline', 'files', 'foo', 'id', 'messages', |
| 117 'nosy', 'status', 'superseder']) | 117 'nosy', 'status', 'superseder']) |
| 118 self.assertEqual(self.db.issue.list(), ['1']) | 118 self.assertEqual(self.db.issue.list(), ['1']) |
| 119 | 119 |
| 120 def testAddRemoveProperty(self): | 120 def xtestAddRemoveProperty(self): |
| 121 self.db.issue.create(title="spam", status='1') | 121 self.db.issue.create(title="spam", status='1') |
| 122 self.db.commit() | 122 self.db.commit() |
| 123 | 123 |
| 124 self.db.issue.addprop(fixer=Link("user")) | 124 self.db.issue.addprop(fixer=Link("user")) |
| 125 del self.db.issue.properties['title'] | 125 del self.db.issue.properties['title'] |
| 133 self.assertEqual(self.db.issue.list(), ['1']) | 133 self.assertEqual(self.db.issue.list(), ['1']) |
| 134 | 134 |
| 135 # | 135 # |
| 136 # basic operations | 136 # basic operations |
| 137 # | 137 # |
| 138 def testIDGeneration(self): | 138 def xtestIDGeneration(self): |
| 139 id1 = self.db.issue.create(title="spam", status='1') | 139 id1 = self.db.issue.create(title="spam", status='1') |
| 140 id2 = self.db.issue.create(title="eggs", status='2') | 140 id2 = self.db.issue.create(title="eggs", status='2') |
| 141 self.assertNotEqual(id1, id2) | 141 self.assertNotEqual(id1, id2) |
| 142 | 142 |
| 143 def testStringChange(self): | 143 def xtestStringChange(self): |
| 144 for commit in (0,1): | 144 for commit in (0,1): |
| 145 # test set & retrieve | 145 # test set & retrieve |
| 146 nid = self.db.issue.create(title="spam", status='1') | 146 nid = self.db.issue.create(title="spam", status='1') |
| 147 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam') | 147 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam') |
| 148 | 148 |
| 149 # change and make sure we retrieve the correct value | 149 # change and make sure we retrieve the correct value |
| 150 self.db.issue.set(nid, title='eggs') | 150 self.db.issue.set(nid, title='eggs') |
| 151 if commit: self.db.commit() | 151 if commit: self.db.commit() |
| 152 self.assertEqual(self.db.issue.get(nid, 'title'), 'eggs') | 152 self.assertEqual(self.db.issue.get(nid, 'title'), 'eggs') |
| 153 | 153 |
| 154 def testStringUnset(self): | 154 def xtestStringUnset(self): |
| 155 for commit in (0,1): | 155 for commit in (0,1): |
| 156 nid = self.db.issue.create(title="spam", status='1') | 156 nid = self.db.issue.create(title="spam", status='1') |
| 157 if commit: self.db.commit() | 157 if commit: self.db.commit() |
| 158 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam') | 158 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam') |
| 159 # make sure we can unset | 159 # make sure we can unset |
| 160 self.db.issue.set(nid, title=None) | 160 self.db.issue.set(nid, title=None) |
| 161 if commit: self.db.commit() | 161 if commit: self.db.commit() |
| 162 self.assertEqual(self.db.issue.get(nid, "title"), None) | 162 self.assertEqual(self.db.issue.get(nid, "title"), None) |
| 163 | 163 |
| 164 def testLinkChange(self): | 164 def xtestLinkChange(self): |
| 165 for commit in (0,1): | 165 for commit in (0,1): |
| 166 nid = self.db.issue.create(title="spam", status='1') | 166 nid = self.db.issue.create(title="spam", status='1') |
| 167 if commit: self.db.commit() | 167 if commit: self.db.commit() |
| 168 self.assertEqual(self.db.issue.get(nid, "status"), '1') | 168 self.assertEqual(self.db.issue.get(nid, "status"), '1') |
| 169 self.db.issue.set(nid, status='2') | 169 self.db.issue.set(nid, status='2') |
| 170 if commit: self.db.commit() | 170 if commit: self.db.commit() |
| 171 self.assertEqual(self.db.issue.get(nid, "status"), '2') | 171 self.assertEqual(self.db.issue.get(nid, "status"), '2') |
| 172 | 172 |
| 173 def testLinkUnset(self): | 173 def xtestLinkUnset(self): |
| 174 for commit in (0,1): | 174 for commit in (0,1): |
| 175 nid = self.db.issue.create(title="spam", status='1') | 175 nid = self.db.issue.create(title="spam", status='1') |
| 176 if commit: self.db.commit() | 176 if commit: self.db.commit() |
| 177 self.db.issue.set(nid, status=None) | 177 self.db.issue.set(nid, status=None) |
| 178 if commit: self.db.commit() | 178 if commit: self.db.commit() |
| 179 self.assertEqual(self.db.issue.get(nid, "status"), None) | 179 self.assertEqual(self.db.issue.get(nid, "status"), None) |
| 180 | 180 |
| 181 def testMultilinkChange(self): | 181 def xtestMultilinkChange(self): |
| 182 for commit in (0,1): | 182 for commit in (0,1): |
| 183 u1 = self.db.user.create(username='foo%s'%commit) | 183 u1 = self.db.user.create(username='foo%s'%commit) |
| 184 u2 = self.db.user.create(username='bar%s'%commit) | 184 u2 = self.db.user.create(username='bar%s'%commit) |
| 185 nid = self.db.issue.create(title="spam", nosy=[u1]) | 185 nid = self.db.issue.create(title="spam", nosy=[u1]) |
| 186 if commit: self.db.commit() | 186 if commit: self.db.commit() |
| 190 self.assertEqual(self.db.issue.get(nid, "nosy"), []) | 190 self.assertEqual(self.db.issue.get(nid, "nosy"), []) |
| 191 self.db.issue.set(nid, nosy=[u1,u2]) | 191 self.db.issue.set(nid, nosy=[u1,u2]) |
| 192 if commit: self.db.commit() | 192 if commit: self.db.commit() |
| 193 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1,u2]) | 193 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1,u2]) |
| 194 | 194 |
| 195 def testDateChange(self): | 195 def xtestDateChange(self): |
| 196 for commit in (0,1): | 196 for commit in (0,1): |
| 197 nid = self.db.issue.create(title="spam", status='1') | 197 nid = self.db.issue.create(title="spam", status='1') |
| 198 a = self.db.issue.get(nid, "deadline") | 198 a = self.db.issue.get(nid, "deadline") |
| 199 if commit: self.db.commit() | 199 if commit: self.db.commit() |
| 200 self.db.issue.set(nid, deadline=date.Date()) | 200 self.db.issue.set(nid, deadline=date.Date()) |
| 201 b = self.db.issue.get(nid, "deadline") | 201 b = self.db.issue.get(nid, "deadline") |
| 202 if commit: self.db.commit() | 202 if commit: self.db.commit() |
| 203 self.assertNotEqual(a, b) | 203 self.assertNotEqual(a, b) |
| 204 self.assertNotEqual(b, date.Date('1970-1-1 00:00:00')) | 204 self.assertNotEqual(b, date.Date('1970-1-1 00:00:00')) |
| 205 | 205 |
| 206 def testDateUnset(self): | 206 def xtestDateUnset(self): |
| 207 for commit in (0,1): | 207 for commit in (0,1): |
| 208 nid = self.db.issue.create(title="spam", status='1') | 208 nid = self.db.issue.create(title="spam", status='1') |
| 209 self.db.issue.set(nid, deadline=date.Date()) | 209 self.db.issue.set(nid, deadline=date.Date()) |
| 210 if commit: self.db.commit() | 210 if commit: self.db.commit() |
| 211 self.assertNotEqual(self.db.issue.get(nid, "deadline"), None) | 211 self.assertNotEqual(self.db.issue.get(nid, "deadline"), None) |
| 212 self.db.issue.set(nid, deadline=None) | 212 self.db.issue.set(nid, deadline=None) |
| 213 if commit: self.db.commit() | 213 if commit: self.db.commit() |
| 214 self.assertEqual(self.db.issue.get(nid, "deadline"), None) | 214 self.assertEqual(self.db.issue.get(nid, "deadline"), None) |
| 215 | 215 |
| 216 def testIntervalChange(self): | 216 def xtestIntervalChange(self): |
| 217 for commit in (0,1): | 217 for commit in (0,1): |
| 218 nid = self.db.issue.create(title="spam", status='1') | 218 nid = self.db.issue.create(title="spam", status='1') |
| 219 if commit: self.db.commit() | 219 if commit: self.db.commit() |
| 220 a = self.db.issue.get(nid, "foo") | 220 a = self.db.issue.get(nid, "foo") |
| 221 i = date.Interval('-1d') | 221 i = date.Interval('-1d') |
| 227 self.db.issue.set(nid, foo=j) | 227 self.db.issue.set(nid, foo=j) |
| 228 if commit: self.db.commit() | 228 if commit: self.db.commit() |
| 229 self.assertNotEqual(self.db.issue.get(nid, "foo"), i) | 229 self.assertNotEqual(self.db.issue.get(nid, "foo"), i) |
| 230 self.assertEqual(j, self.db.issue.get(nid, "foo")) | 230 self.assertEqual(j, self.db.issue.get(nid, "foo")) |
| 231 | 231 |
| 232 def testIntervalUnset(self): | 232 def xtestIntervalUnset(self): |
| 233 for commit in (0,1): | 233 for commit in (0,1): |
| 234 nid = self.db.issue.create(title="spam", status='1') | 234 nid = self.db.issue.create(title="spam", status='1') |
| 235 self.db.issue.set(nid, foo=date.Interval('-1d')) | 235 self.db.issue.set(nid, foo=date.Interval('-1d')) |
| 236 if commit: self.db.commit() | 236 if commit: self.db.commit() |
| 237 self.assertNotEqual(self.db.issue.get(nid, "foo"), None) | 237 self.assertNotEqual(self.db.issue.get(nid, "foo"), None) |
| 238 self.db.issue.set(nid, foo=None) | 238 self.db.issue.set(nid, foo=None) |
| 239 if commit: self.db.commit() | 239 if commit: self.db.commit() |
| 240 self.assertEqual(self.db.issue.get(nid, "foo"), None) | 240 self.assertEqual(self.db.issue.get(nid, "foo"), None) |
| 241 | 241 |
| 242 def testBooleanChange(self): | 242 def xtestBooleanChange(self): |
| 243 userid = self.db.user.create(username='foo', assignable=1) | 243 userid = self.db.user.create(username='foo', assignable=1) |
| 244 self.assertEqual(1, self.db.user.get(userid, 'assignable')) | 244 self.assertEqual(1, self.db.user.get(userid, 'assignable')) |
| 245 self.db.user.set(userid, assignable=0) | 245 self.db.user.set(userid, assignable=0) |
| 246 self.assertEqual(self.db.user.get(userid, 'assignable'), 0) | 246 self.assertEqual(self.db.user.get(userid, 'assignable'), 0) |
| 247 | 247 |
| 248 def testBooleanUnset(self): | 248 def xtestBooleanUnset(self): |
| 249 nid = self.db.user.create(username='foo', assignable=1) | 249 nid = self.db.user.create(username='foo', assignable=1) |
| 250 self.db.user.set(nid, assignable=None) | 250 self.db.user.set(nid, assignable=None) |
| 251 self.assertEqual(self.db.user.get(nid, "assignable"), None) | 251 self.assertEqual(self.db.user.get(nid, "assignable"), None) |
| 252 | 252 |
| 253 def testNumberChange(self): | 253 def xtestNumberChange(self): |
| 254 nid = self.db.user.create(username='foo', age=1) | 254 nid = self.db.user.create(username='foo', age=1) |
| 255 self.assertEqual(1, self.db.user.get(nid, 'age')) | 255 self.assertEqual(1, self.db.user.get(nid, 'age')) |
| 256 self.db.user.set(nid, age=3) | 256 self.db.user.set(nid, age=3) |
| 257 self.assertNotEqual(self.db.user.get(nid, 'age'), 1) | 257 self.assertNotEqual(self.db.user.get(nid, 'age'), 1) |
| 258 self.db.user.set(nid, age=1.0) | 258 self.db.user.set(nid, age=1.0) |
| 261 self.assertEqual(self.db.user.get(nid, 'age'), 0) | 261 self.assertEqual(self.db.user.get(nid, 'age'), 0) |
| 262 | 262 |
| 263 nid = self.db.user.create(username='bar', age=0) | 263 nid = self.db.user.create(username='bar', age=0) |
| 264 self.assertEqual(self.db.user.get(nid, 'age'), 0) | 264 self.assertEqual(self.db.user.get(nid, 'age'), 0) |
| 265 | 265 |
| 266 def testNumberUnset(self): | 266 def xtestNumberUnset(self): |
| 267 nid = self.db.user.create(username='foo', age=1) | 267 nid = self.db.user.create(username='foo', age=1) |
| 268 self.db.user.set(nid, age=None) | 268 self.db.user.set(nid, age=None) |
| 269 self.assertEqual(self.db.user.get(nid, "age"), None) | 269 self.assertEqual(self.db.user.get(nid, "age"), None) |
| 270 | 270 |
| 271 def testKeyValue(self): | 271 def xtestKeyValue(self): |
| 272 newid = self.db.user.create(username="spam") | 272 newid = self.db.user.create(username="spam") |
| 273 self.assertEqual(self.db.user.lookup('spam'), newid) | 273 self.assertEqual(self.db.user.lookup('spam'), newid) |
| 274 self.db.commit() | 274 self.db.commit() |
| 275 self.assertEqual(self.db.user.lookup('spam'), newid) | 275 self.assertEqual(self.db.user.lookup('spam'), newid) |
| 276 self.db.user.retire(newid) | 276 self.db.user.retire(newid) |
| 280 newid2 = self.db.user.create(username="spam") | 280 newid2 = self.db.user.create(username="spam") |
| 281 self.assertNotEqual(newid, newid2) | 281 self.assertNotEqual(newid, newid2) |
| 282 # try to restore old node. this shouldn't succeed! | 282 # try to restore old node. this shouldn't succeed! |
| 283 self.assertRaises(KeyError, self.db.user.restore, newid) | 283 self.assertRaises(KeyError, self.db.user.restore, newid) |
| 284 | 284 |
| 285 def testRetire(self): | 285 def xtestRetire(self): |
| 286 self.db.issue.create(title="spam", status='1') | 286 self.db.issue.create(title="spam", status='1') |
| 287 b = self.db.status.get('1', 'name') | 287 b = self.db.status.get('1', 'name') |
| 288 a = self.db.status.list() | 288 a = self.db.status.list() |
| 289 self.db.status.retire('1') | 289 self.db.status.retire('1') |
| 290 # make sure the list is different | 290 # make sure the list is different |
| 296 self.assertNotEqual(a, self.db.status.list()) | 296 self.assertNotEqual(a, self.db.status.list()) |
| 297 # try to restore retired node | 297 # try to restore retired node |
| 298 self.db.status.restore('1') | 298 self.db.status.restore('1') |
| 299 self.assertEqual(a, self.db.status.list()) | 299 self.assertEqual(a, self.db.status.list()) |
| 300 | 300 |
| 301 def testSerialisation(self): | 301 def xtestSerialisation(self): |
| 302 nid = self.db.issue.create(title="spam", status='1', | 302 nid = self.db.issue.create(title="spam", status='1', |
| 303 deadline=date.Date(), foo=date.Interval('-1d')) | 303 deadline=date.Date(), foo=date.Interval('-1d')) |
| 304 self.db.commit() | 304 self.db.commit() |
| 305 assert isinstance(self.db.issue.get(nid, 'deadline'), date.Date) | 305 assert isinstance(self.db.issue.get(nid, 'deadline'), date.Date) |
| 306 assert isinstance(self.db.issue.get(nid, 'foo'), date.Interval) | 306 assert isinstance(self.db.issue.get(nid, 'foo'), date.Interval) |
| 307 uid = self.db.user.create(username="fozzy", | 307 uid = self.db.user.create(username="fozzy", |
| 308 password=password.Password('t. bear')) | 308 password=password.Password('t. bear')) |
| 309 self.db.commit() | 309 self.db.commit() |
| 310 assert isinstance(self.db.user.get(uid, 'password'), password.Password) | 310 assert isinstance(self.db.user.get(uid, 'password'), password.Password) |
| 311 | 311 |
| 312 def testTransactions(self): | 312 def xtestTransactions(self): |
| 313 # remember the number of items we started | 313 # remember the number of items we started |
| 314 num_issues = len(self.db.issue.list()) | 314 num_issues = len(self.db.issue.list()) |
| 315 num_files = self.db.numfiles() | 315 num_files = self.db.numfiles() |
| 316 self.db.issue.create(title="don't commit me!", status='1') | 316 self.db.issue.create(title="don't commit me!", status='1') |
| 317 self.assertNotEqual(num_issues, len(self.db.issue.list())) | 317 self.assertNotEqual(num_issues, len(self.db.issue.list())) |
| 344 self.db.user.get('1', 'username') | 344 self.db.user.get('1', 'username') |
| 345 self.db.rollback() | 345 self.db.rollback() |
| 346 name2 = self.db.user.get('1', 'username') | 346 name2 = self.db.user.get('1', 'username') |
| 347 self.assertEqual(name1, name2) | 347 self.assertEqual(name1, name2) |
| 348 | 348 |
| 349 def testDestroyNoJournalling(self): | 349 def xtestDestroyNoJournalling(self): |
| 350 self.innerTestDestroy(klass=self.db.session) | 350 self.innerTestDestroy(klass=self.db.session) |
| 351 | 351 |
| 352 def testDestroyJournalling(self): | 352 def xtestDestroyJournalling(self): |
| 353 self.innerTestDestroy(klass=self.db.issue) | 353 self.innerTestDestroy(klass=self.db.issue) |
| 354 | 354 |
| 355 def innerTestDestroy(self, klass): | 355 def innerTestDestroy(self, klass): |
| 356 newid = klass.create(title='Mr Friendly') | 356 newid = klass.create(title='Mr Friendly') |
| 357 n = len(klass.list()) | 357 n = len(klass.list()) |
| 387 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly') | 387 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly') |
| 388 self.assertEqual(len(klass.list()), n) | 388 self.assertEqual(len(klass.list()), n) |
| 389 if klass.do_journal: | 389 if klass.do_journal: |
| 390 self.assertNotEqual(klass.history(newid), []) | 390 self.assertNotEqual(klass.history(newid), []) |
| 391 | 391 |
| 392 def testExceptions(self): | 392 def xtestExceptions(self): |
| 393 # this tests the exceptions that should be raised | 393 # this tests the exceptions that should be raised |
| 394 ar = self.assertRaises | 394 ar = self.assertRaises |
| 395 | 395 |
| 396 # | 396 # |
| 397 # class create | 397 # class create |
| 470 # invalid number value | 470 # invalid number value |
| 471 ar(TypeError, self.db.user.set, nid, age='a') | 471 ar(TypeError, self.db.user.set, nid, age='a') |
| 472 # invalid boolean value | 472 # invalid boolean value |
| 473 ar(TypeError, self.db.user.set, nid, assignable='true') | 473 ar(TypeError, self.db.user.set, nid, assignable='true') |
| 474 | 474 |
| 475 def testJournals(self): | 475 def xtestJournals(self): |
| 476 self.db.user.create(username="mary") | 476 self.db.user.create(username="mary") |
| 477 self.db.user.create(username="pete") | 477 self.db.user.create(username="pete") |
| 478 self.db.issue.create(title="spam", status='1') | 478 self.db.issue.create(title="spam", status='1') |
| 479 self.db.commit() | 479 self.db.commit() |
| 480 | 480 |
| 532 entry = self.db.getjournal('issue', '1')[-1] | 532 entry = self.db.getjournal('issue', '1')[-1] |
| 533 (x, date_stamp2, x, x, x) = entry | 533 (x, date_stamp2, x, x, x) = entry |
| 534 # see if the change was journalled | 534 # see if the change was journalled |
| 535 self.assertNotEqual(date_stamp, date_stamp2) | 535 self.assertNotEqual(date_stamp, date_stamp2) |
| 536 | 536 |
| 537 def testPack(self): | 537 def xtestPack(self): |
| 538 id = self.db.issue.create(title="spam", status='1') | 538 id = self.db.issue.create(title="spam", status='1') |
| 539 self.db.commit() | 539 self.db.commit() |
| 540 self.db.issue.set(id, status='2') | 540 self.db.issue.set(id, status='2') |
| 541 self.db.commit() | 541 self.db.commit() |
| 542 | 542 |
| 554 self.db.pack(pack_before) | 554 self.db.pack(pack_before) |
| 555 | 555 |
| 556 # we should have the create and last set entries now | 556 # we should have the create and last set entries now |
| 557 self.assertEqual(jlen-1, len(self.db.getjournal('issue', id))) | 557 self.assertEqual(jlen-1, len(self.db.getjournal('issue', id))) |
| 558 | 558 |
| 559 def testSearching(self): | 559 def xtestSearching(self): |
| 560 self.db.file.create(content='hello', type="text/plain") | 560 self.db.file.create(content='hello', type="text/plain") |
| 561 self.db.file.create(content='world', type="text/frozz", | 561 self.db.file.create(content='world', type="text/frozz", |
| 562 comment='blah blah') | 562 comment='blah blah') |
| 563 self.db.issue.create(files=['1', '2'], title="flebble plop") | 563 self.db.issue.create(files=['1', '2'], title="flebble plop") |
| 564 self.db.issue.create(title="flebble frooz") | 564 self.db.issue.create(title="flebble frooz") |
| 569 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue), | 569 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue), |
| 570 {'2': {}}) | 570 {'2': {}}) |
| 571 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue), | 571 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue), |
| 572 {'2': {}, '1': {}}) | 572 {'2': {}, '1': {}}) |
| 573 | 573 |
| 574 def testReindexing(self): | 574 def xtestReindexing(self): |
| 575 self.db.issue.create(title="frooz") | 575 self.db.issue.create(title="frooz") |
| 576 self.db.commit() | 576 self.db.commit() |
| 577 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue), | 577 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue), |
| 578 {'1': {}}) | 578 {'1': {}}) |
| 579 self.db.issue.set('1', title="dooble") | 579 self.db.issue.set('1', title="dooble") |
| 580 self.db.commit() | 580 self.db.commit() |
| 581 self.assertEquals(self.db.indexer.search(['dooble'], self.db.issue), | 581 self.assertEquals(self.db.indexer.search(['dooble'], self.db.issue), |
| 582 {'1': {}}) | 582 {'1': {}}) |
| 583 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue), {}) | 583 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue), {}) |
| 584 | 584 |
| 585 def testForcedReindexing(self): | 585 def xtestForcedReindexing(self): |
| 586 self.db.issue.create(title="flebble frooz") | 586 self.db.issue.create(title="flebble frooz") |
| 587 self.db.commit() | 587 self.db.commit() |
| 588 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue), | 588 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue), |
| 589 {'1': {}}) | 589 {'1': {}}) |
| 590 self.db.indexer.quiet = 1 | 590 self.db.indexer.quiet = 1 |
| 599 # | 599 # |
| 600 def testFind(self): | 600 def testFind(self): |
| 601 self.db.user.create(username='test') | 601 self.db.user.create(username='test') |
| 602 ids = [] | 602 ids = [] |
| 603 ids.append(self.db.issue.create(status="1", nosy=['1'])) | 603 ids.append(self.db.issue.create(status="1", nosy=['1'])) |
| 604 oddid = self.db.issue.create(status="2", nosy=['2']) | 604 oddid = self.db.issue.create(status="2", nosy=['2'], assignedto='2') |
| 605 ids.append(self.db.issue.create(status="1", nosy=['1','2'])) | 605 ids.append(self.db.issue.create(status="1", nosy=['1','2'])) |
| 606 self.db.issue.create(status="3", nosy=['1']) | 606 self.db.issue.create(status="3", nosy=['1'], assignedto='1') |
| 607 ids.sort() | 607 ids.sort() |
| 608 | 608 |
| 609 # should match first and third | 609 # should match first and third |
| 610 got = self.db.issue.find(status='1') | 610 got = self.db.issue.find(status='1') |
| 611 got.sort() | 611 got.sort() |
| 612 self.assertEqual(got, ids) | 612 self.assertEqual(got, ids) |
| 613 | 613 |
| 614 # none | 614 # none |
| 615 self.assertEqual(self.db.issue.find(status='4'), []) | 615 self.assertEqual(self.db.issue.find(status='4'), []) |
| 616 | |
| 617 # should match first and third | |
| 618 got = self.db.issue.find(assignedto=None) | |
| 619 got.sort() | |
| 620 self.assertEqual(got, ids) | |
| 616 | 621 |
| 617 # should match first three | 622 # should match first three |
| 618 got = self.db.issue.find(status='1', nosy='2') | 623 got = self.db.issue.find(status='1', nosy='2') |
| 619 got.sort() | 624 got.sort() |
| 620 ids.append(oddid) | 625 ids.append(oddid) |
| 622 self.assertEqual(got, ids) | 627 self.assertEqual(got, ids) |
| 623 | 628 |
| 624 # none | 629 # none |
| 625 self.assertEqual(self.db.issue.find(status='4', nosy='3'), []) | 630 self.assertEqual(self.db.issue.find(status='4', nosy='3'), []) |
| 626 | 631 |
| 627 def testStringFind(self): | 632 def xtestStringFind(self): |
| 628 ids = [] | 633 ids = [] |
| 629 ids.append(self.db.issue.create(title="spam")) | 634 ids.append(self.db.issue.create(title="spam")) |
| 630 self.db.issue.create(title="not spam") | 635 self.db.issue.create(title="not spam") |
| 631 ids.append(self.db.issue.create(title="spam")) | 636 ids.append(self.db.issue.create(title="spam")) |
| 632 ids.sort() | 637 ids.sort() |
| 653 'nosy': ['1','2'], 'deadline': date.Date('2003-03-08')}): | 658 'nosy': ['1','2'], 'deadline': date.Date('2003-03-08')}): |
| 654 self.db.issue.create(**issue) | 659 self.db.issue.create(**issue) |
| 655 self.db.commit() | 660 self.db.commit() |
| 656 return self.assertEqual, self.db.issue.filter | 661 return self.assertEqual, self.db.issue.filter |
| 657 | 662 |
| 658 def testFilteringID(self): | 663 def xtestFilteringID(self): |
| 659 ae, filt = self.filteringSetup() | 664 ae, filt = self.filteringSetup() |
| 660 ae(filt(None, {'id': '1'}, ('+','id'), (None,None)), ['1']) | 665 ae(filt(None, {'id': '1'}, ('+','id'), (None,None)), ['1']) |
| 661 | 666 |
| 662 def testFilteringString(self): | 667 def xtestFilteringString(self): |
| 663 ae, filt = self.filteringSetup() | 668 ae, filt = self.filteringSetup() |
| 664 ae(filt(None, {'title': 'issue one'}, ('+','id'), (None,None)), ['1']) | 669 ae(filt(None, {'title': 'issue one'}, ('+','id'), (None,None)), ['1']) |
| 665 ae(filt(None, {'title': 'issue'}, ('+','id'), (None,None)), | 670 ae(filt(None, {'title': 'issue'}, ('+','id'), (None,None)), |
| 666 ['1','2','3']) | 671 ['1','2','3']) |
| 667 | 672 |
| 668 def testFilteringLink(self): | 673 def xtestFilteringLink(self): |
| 669 ae, filt = self.filteringSetup() | 674 ae, filt = self.filteringSetup() |
| 670 ae(filt(None, {'status': '1'}, ('+','id'), (None,None)), ['2','3']) | 675 ae(filt(None, {'status': '1'}, ('+','id'), (None,None)), ['2','3']) |
| 671 | 676 |
| 672 def testFilteringMultilink(self): | 677 def xtestFilteringMultilink(self): |
| 673 ae, filt = self.filteringSetup() | 678 ae, filt = self.filteringSetup() |
| 674 ae(filt(None, {'nosy': '2'}, ('+','id'), (None,None)), ['3']) | 679 ae(filt(None, {'nosy': '2'}, ('+','id'), (None,None)), ['3']) |
| 675 ae(filt(None, {'nosy': '-1'}, ('+','id'), (None,None)), ['1', '2']) | 680 ae(filt(None, {'nosy': '-1'}, ('+','id'), (None,None)), ['1', '2']) |
| 676 | 681 |
| 677 def testFilteringMany(self): | 682 def xtestFilteringMany(self): |
| 678 ae, filt = self.filteringSetup() | 683 ae, filt = self.filteringSetup() |
| 679 ae(filt(None, {'nosy': '2', 'status': '1'}, ('+','id'), (None,None)), | 684 ae(filt(None, {'nosy': '2', 'status': '1'}, ('+','id'), (None,None)), |
| 680 ['3']) | 685 ['3']) |
| 681 | 686 |
| 682 def testFilteringRange(self): | 687 def xtestFilteringRange(self): |
| 683 ae, filt = self.filteringSetup() | 688 ae, filt = self.filteringSetup() |
| 684 ae(filt(None, {'deadline': 'from 2003-02-10 to 2003-02-23'}), ['2']) | 689 ae(filt(None, {'deadline': 'from 2003-02-10 to 2003-02-23'}), ['2']) |
| 685 ae(filt(None, {'deadline': '2003-02-10; 2003-02-23'}), ['2']) | 690 ae(filt(None, {'deadline': '2003-02-10; 2003-02-23'}), ['2']) |
| 686 ae(filt(None, {'deadline': '; 2003-02-16'}), ['1']) | 691 ae(filt(None, {'deadline': '; 2003-02-16'}), ['1']) |
| 687 # Lets assume people won't invent a time machine, otherwise this test | 692 # Lets assume people won't invent a time machine, otherwise this test |
| 688 # may fail :) | 693 # may fail :) |
| 689 ae(filt(None, {'deadline': 'from 2003-02-16'}), ['2', '3']) | 694 ae(filt(None, {'deadline': 'from 2003-02-16'}), ['2', '3']) |
| 690 ae(filt(None, {'deadline': '2003-02-16'}), ['2', '3']) | 695 ae(filt(None, {'deadline': '2003-02-16'}), ['2', '3']) |
| 691 | 696 |
| 692 def testFilteringIntervalSort(self): | 697 def xtestFilteringIntervalSort(self): |
| 693 ae, filt = self.filteringSetup() | 698 ae, filt = self.filteringSetup() |
| 694 # ascending should sort None, 1:10, 1d | 699 # ascending should sort None, 1:10, 1d |
| 695 ae(filt(None, {}, ('+','foo'), (None,None)), ['3', '1', '2']) | 700 ae(filt(None, {}, ('+','foo'), (None,None)), ['3', '1', '2']) |
| 696 # descending should sort 1d, 1:10, None | 701 # descending should sort 1d, 1:10, None |
| 697 ae(filt(None, {}, ('-','foo'), (None,None)), ['2', '1', '3']) | 702 ae(filt(None, {}, ('-','foo'), (None,None)), ['2', '1', '3']) |
| 710 setupSchema(db, 1, anydbm) | 715 setupSchema(db, 1, anydbm) |
| 711 db.close() | 716 db.close() |
| 712 self.db = anydbm.Database(config) | 717 self.db = anydbm.Database(config) |
| 713 setupSchema(self.db, 0, anydbm) | 718 setupSchema(self.db, 0, anydbm) |
| 714 | 719 |
| 715 def testExceptions(self): | 720 def xtestExceptions(self): |
| 716 # this tests the exceptions that should be raised | 721 # this tests the exceptions that should be raised |
| 717 ar = self.assertRaises | 722 ar = self.assertRaises |
| 718 | 723 |
| 719 # this tests the exceptions that should be raised | 724 # this tests the exceptions that should be raised |
| 720 ar(DatabaseError, self.db.status.create, name="foo") | 725 ar(DatabaseError, self.db.status.create, name="foo") |
| 835 shutil.rmtree(config.DATABASE) | 840 shutil.rmtree(config.DATABASE) |
| 836 os.makedirs(config.DATABASE + '/files') | 841 os.makedirs(config.DATABASE + '/files') |
| 837 self.db = metakit.Database(config, 'admin') | 842 self.db = metakit.Database(config, 'admin') |
| 838 setupSchema(self.db, 1, metakit) | 843 setupSchema(self.db, 1, metakit) |
| 839 | 844 |
| 840 def testTransactions(self): | 845 def xtestTransactions(self): |
| 841 # remember the number of items we started | 846 # remember the number of items we started |
| 842 num_issues = len(self.db.issue.list()) | 847 num_issues = len(self.db.issue.list()) |
| 843 self.db.issue.create(title="don't commit me!", status='1') | 848 self.db.issue.create(title="don't commit me!", status='1') |
| 844 self.assertNotEqual(num_issues, len(self.db.issue.list())) | 849 self.assertNotEqual(num_issues, len(self.db.issue.list())) |
| 845 self.db.rollback() | 850 self.db.rollback() |
| 866 self.db.rollback() | 871 self.db.rollback() |
| 867 num_rfiles2 = len(os.listdir(self.db.config.DATABASE + '/files/file/0')) | 872 num_rfiles2 = len(os.listdir(self.db.config.DATABASE + '/files/file/0')) |
| 868 self.assertEqual(num_files2, len(self.db.file.list())) | 873 self.assertEqual(num_files2, len(self.db.file.list())) |
| 869 self.assertEqual(num_rfiles2, num_rfiles-1) | 874 self.assertEqual(num_rfiles2, num_rfiles-1) |
| 870 | 875 |
| 871 def testBooleanUnset(self): | 876 def xtestBooleanUnset(self): |
| 872 # XXX: metakit can't unset Booleans :( | 877 # XXX: metakit can't unset Booleans :( |
| 873 nid = self.db.user.create(username='foo', assignable=1) | 878 nid = self.db.user.create(username='foo', assignable=1) |
| 874 self.db.user.set(nid, assignable=None) | 879 self.db.user.set(nid, assignable=None) |
| 875 self.assertEqual(self.db.user.get(nid, "assignable"), 0) | 880 self.assertEqual(self.db.user.get(nid, "assignable"), 0) |
| 876 | 881 |
| 877 def testNumberUnset(self): | 882 def xtestNumberUnset(self): |
| 878 # XXX: metakit can't unset Numbers :( | 883 # XXX: metakit can't unset Numbers :( |
| 879 nid = self.db.user.create(username='foo', age=1) | 884 nid = self.db.user.create(username='foo', age=1) |
| 880 self.db.user.set(nid, age=None) | 885 self.db.user.set(nid, age=None) |
| 881 self.assertEqual(self.db.user.get(nid, "age"), 0) | 886 self.assertEqual(self.db.user.get(nid, "age"), 0) |
| 882 | 887 |
