annotate test/db_test_base.py @ 4301:d47245c2530a

Fix some security assertions and tests. Fix some security assertions in mailgw to only assert Edit permissions if the user is editing an existing db node. If not then check Create. Fix some tests that were broken by the new assertions, the Create -> Register change and finally for the new "not registered" message.
author Richard Jones <richard@users.sourceforge.net>
date Mon, 07 Dec 2009 05:13:27 +0000
parents 88af08f8666f
children 0e33bf5571dc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # under the same terms as Python, so long as this copyright message and
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 # disclaimer are retained in their original form.
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # POSSIBILITY OF SUCH DAMAGE.
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
17 #
4005
3dec28d96583 fix some unit tests for python2.3
Richard Jones <richard@users.sourceforge.net>
parents: 3999
diff changeset
18 # $Id: db_test_base.py,v 1.101 2008-08-19 01:40:59 richard Exp $
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19
4089
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
20 import unittest, os, shutil, errno, imp, sys, time, pprint, base64, os.path
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
21 # Python 2.3 ... 2.6 compatibility:
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
22 from roundup.anypy.sets_ import set
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 from roundup.hyperdb import String, Password, Link, Multilink, Date, \
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 Interval, DatabaseError, Boolean, Number, Node
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
26 from roundup.mailer import Mailer
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
27 from roundup import date, password, init, instance, configuration, support
2514
091711fb2f8c Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents: 2508
diff changeset
28
091711fb2f8c Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents: 2508
diff changeset
29 from mocknull import MockNull
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
31 config = configuration.CoreConfig()
3546
a4edd24c32be test fixes and checking of indexer overwrites (xapian currently fails)
Richard Jones <richard@users.sourceforge.net>
parents: 3525
diff changeset
32 config.DATABASE = "db"
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
33 config.RDBMS_NAME = "rounduptest"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
34 config.RDBMS_HOST = "localhost"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
35 config.RDBMS_USER = "rounduptest"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
36 config.RDBMS_PASSWORD = "rounduptest"
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
37 #config.logging = MockNull()
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
38 # these TRACKER_WEB and MAIL_DOMAIN values are used in mailgw tests
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
39 config.MAIL_DOMAIN = "your.tracker.email.domain.example"
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
40 config.TRACKER_WEB = "http://tracker.example/cgi-bin/roundup.cgi/bugs/"
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
41 # uncomment the following to have excessive debug output from test cases
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
42 # FIXME: tracker logging level should be increased by -v arguments
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
43 # to 'run_tests.py' script
3247
e629e0057136 disable file logging [SF#1155649]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3155
diff changeset
44 #config.LOGGING_FILENAME = "/tmp/logfile"
e629e0057136 disable file logging [SF#1155649]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3155
diff changeset
45 #config.LOGGING_LEVEL = "DEBUG"
3155
57b60bda9473 Python 2.3 minimum version - bye bye roundup.rlog, you had a short life.
Richard Jones <richard@users.sourceforge.net>
parents: 3147
diff changeset
46 config.init_logging()
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
47
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
48 def setupTracker(dirname, backend="anydbm"):
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
49 """Install and initialize new tracker in dirname; return tracker instance.
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
50
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
51 If the directory exists, it is wiped out before the operation.
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
52
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
53 """
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
54 global config
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
55 try:
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
56 shutil.rmtree(dirname)
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
57 except OSError, error:
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
58 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
59 # create the instance
4082
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
60 init.install(dirname, os.path.join(os.path.dirname(__file__),
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
61 '..',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
62 'share',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
63 'roundup',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
64 'templates',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
65 'classic'))
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
66 init.write_select_db(dirname, backend)
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
67 config.save(os.path.join(dirname, 'config.ini'))
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
68 tracker = instance.open(dirname)
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
69 if tracker.exists():
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
70 tracker.nuke()
3973
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
71 init.write_select_db(dirname, backend)
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
72 tracker.init(password.Password('sekrit'))
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
73 return tracker
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
74
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 def setupSchema(db, create, module):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 status = module.Class(db, "status", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 status.setkey("name")
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
78 priority = module.Class(db, "priority", name=String(), order=String())
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
79 priority.setkey("name")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 user = module.Class(db, "user", username=String(), password=Password(),
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
81 assignable=Boolean(), age=Number(), roles=String(), address=String(),
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
82 supervisor=Link('user'),realname=String())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 user.setkey("username")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 file = module.FileClass(db, "file", name=String(), type=String(),
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 comment=String(indexme="yes"), fooz=Password())
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
86 file_nidx = module.FileClass(db, "file_nidx", content=String(indexme='no'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 issue = module.IssueClass(db, "issue", title=String(indexme="yes"),
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 status=Link("status"), nosy=Multilink("user"), deadline=Date(),
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
89 foo=Interval(), files=Multilink("file"), assignedto=Link('user'),
3997
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
90 priority=Link('priority'), spam=Multilink('msg'),
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
91 feedback=Link('msg'))
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
92 stuff = module.Class(db, "stuff", stuff=String())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 session = module.Class(db, 'session', title=String())
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
94 msg = module.FileClass(db, "msg", date=Date(),
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
95 author=Link("user", do_journal='no'),
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
96 files=Multilink('file'), inreplyto=String(),
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
97 messageid=String(),
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
98 recipients=Multilink("user", do_journal='no')
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
99 )
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 session.disableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 if create:
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
103 user.create(username="admin", roles='Admin',
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
104 password=password.Password('sekrit'))
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
105 user.create(username="fred", roles='User',
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
106 password=password.Password('sekrit'), address='fred@example.com')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 status.create(name="unread")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 status.create(name="in-progress")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 status.create(name="testing")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 status.create(name="resolved")
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
111 priority.create(name="feature", order="2")
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
112 priority.create(name="wish", order="3")
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
113 priority.create(name="bug", order="1")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115
4301
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
116 # nosy tests require this
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
117 db.security.addPermissionToRole('User', 'View', 'msg')
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
118
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 class MyTestCase(unittest.TestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 def tearDown(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 if hasattr(self, 'db'):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 self.db.close()
2082
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents: 2077
diff changeset
123 if os.path.exists(config.DATABASE):
c091cacdc505 Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents: 2077
diff changeset
124 shutil.rmtree(config.DATABASE)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125
2605
6e9bd67fefa9 complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents: 2603
diff changeset
126 if os.environ.has_key('LOGGING_LEVEL'):
6e9bd67fefa9 complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents: 2603
diff changeset
127 from roundup import rlog
6e9bd67fefa9 complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents: 2603
diff changeset
128 config.logging = rlog.BasicLogging()
6e9bd67fefa9 complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents: 2603
diff changeset
129 config.logging.setLevel(os.environ['LOGGING_LEVEL'])
6e9bd67fefa9 complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents: 2603
diff changeset
130 config.logging.getLogger('hyperdb').setFormat('%(message)s')
6e9bd67fefa9 complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents: 2603
diff changeset
131
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 class DBTest(MyTestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 os.makedirs(config.DATABASE + '/files')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 self.db = self.module.Database(config, 'admin')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 setupSchema(self.db, 1, self.module)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
141 def testRefresh(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
142 self.db.refresh_database()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 #
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
145 # automatic properties (well, the two easy ones anyway)
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
146 #
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
147 def testCreatorProperty(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
148 i = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
149 id1 = i.create(title='spam')
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
150 self.db.commit()
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
151 self.db.close()
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
152 self.db = self.module.Database(config, 'fred')
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
153 setupSchema(self.db, 0, self.module)
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
154 i = self.db.issue
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
155 id2 = i.create(title='spam')
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
156 self.assertNotEqual(id1, id2)
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
157 self.assertNotEqual(i.get(id1, 'creator'), i.get(id2, 'creator'))
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
158
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
159 def testActorProperty(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
160 i = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
161 id1 = i.create(title='spam')
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
162 self.db.commit()
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
163 self.db.close()
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
164 self.db = self.module.Database(config, 'fred')
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
165 setupSchema(self.db, 0, self.module)
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
166 i = self.db.issue
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
167 i.set(id1, title='asfasd')
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
168 self.assertNotEqual(i.get(id1, 'creator'), i.get(id1, 'actor'))
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
169
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
170 # ID number controls
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 def testIDGeneration(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 id1 = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 id2 = self.db.issue.create(title="eggs", status='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 self.assertNotEqual(id1, id2)
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
175 def testIDSetting(self):
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
176 # XXX numeric ids
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
177 self.db.setid('issue', 10)
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
178 id2 = self.db.issue.create(title="eggs", status='2')
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
179 self.assertEqual('11', id2)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
181 #
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
182 # basic operations
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
183 #
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
184 def testEmptySet(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
185 id1 = self.db.issue.create(title="spam", status='1')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
186 self.db.issue.set(id1)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
187
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
188 # String
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189 def testStringChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 # test set & retrieve
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
192 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
194
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
195 # change and make sure we retrieve the correct value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
196 self.db.issue.set(nid, title='eggs')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198 self.assertEqual(self.db.issue.get(nid, 'title'), 'eggs')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
199
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
200 def testStringUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
201 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 # make sure we can unset
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206 self.db.issue.set(nid, title=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
207 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208 self.assertEqual(self.db.issue.get(nid, "title"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
210 # FileClass "content" property (no unset test)
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
211 def testFileClassContentChange(self):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
212 for commit in (0,1):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
213 # test set & retrieve
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
214 nid = self.db.file.create(content="spam")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
215 self.assertEqual(self.db.file.get(nid, 'content'), 'spam')
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
216
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
217 # change and make sure we retrieve the correct value
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
218 self.db.file.set(nid, content='eggs')
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
219 if commit: self.db.commit()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
220 self.assertEqual(self.db.file.get(nid, 'content'), 'eggs')
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
221
3752
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
222 def testStringUnicode(self):
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
223 # test set & retrieve
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
224 ustr = u'\xe4\xf6\xfc\u20ac'.encode('utf8')
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
225 nid = self.db.issue.create(title=ustr, status='1')
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
226 self.assertEqual(self.db.issue.get(nid, 'title'), ustr)
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
227
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
228 # change and make sure we retrieve the correct value
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
229 ustr2 = u'change \u20ac change'.encode('utf8')
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
230 self.db.issue.set(nid, title=ustr2)
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
231 self.db.commit()
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
232 self.assertEqual(self.db.issue.get(nid, 'title'), ustr2)
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
233
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
234 # Link
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235 def testLinkChange(self):
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
236 self.assertRaises(IndexError, self.db.issue.create, title="spam",
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
237 status='100')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
238 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
239 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
241 self.assertEqual(self.db.issue.get(nid, "status"), '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
242 self.db.issue.set(nid, status='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
244 self.assertEqual(self.db.issue.get(nid, "status"), '2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246 def testLinkUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
248 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
250 self.db.issue.set(nid, status=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
252 self.assertEqual(self.db.issue.get(nid, "status"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
253
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
254 # Multilink
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
255 def testMultilinkChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
256 for commit in (0,1):
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
257 self.assertRaises(IndexError, self.db.issue.create, title="spam",
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
258 nosy=['foo%s'%commit])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
259 u1 = self.db.user.create(username='foo%s'%commit)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260 u2 = self.db.user.create(username='bar%s'%commit)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261 nid = self.db.issue.create(title="spam", nosy=[u1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
264 self.db.issue.set(nid, nosy=[])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
266 self.assertEqual(self.db.issue.get(nid, "nosy"), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
267 self.db.issue.set(nid, nosy=[u1,u2])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
268 if commit: self.db.commit()
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
269 l = [u1,u2]; l.sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
270 m = self.db.issue.get(nid, "nosy"); m.sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
271 self.assertEqual(l, m)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
272
3872
34128a809e22 Allow multilinks to take None (treated as an empty list).
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3870
diff changeset
273 # verify that when we pass None to an Multilink it sets
34128a809e22 Allow multilinks to take None (treated as an empty list).
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3870
diff changeset
274 # it to an empty list
34128a809e22 Allow multilinks to take None (treated as an empty list).
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3870
diff changeset
275 self.db.issue.set(nid, nosy=None)
34128a809e22 Allow multilinks to take None (treated as an empty list).
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3870
diff changeset
276 if commit: self.db.commit()
34128a809e22 Allow multilinks to take None (treated as an empty list).
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3870
diff changeset
277 self.assertEqual(self.db.issue.get(nid, "nosy"), [])
34128a809e22 Allow multilinks to take None (treated as an empty list).
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3870
diff changeset
278
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
279 def testMultilinkChangeIterable(self):
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
280 for commit in (0,1):
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
281 # invalid nosy value assertion
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
282 self.assertRaises(IndexError, self.db.issue.create, title='spam',
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
283 nosy=['foo%s'%commit])
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
284 # invalid type for nosy create
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
285 self.assertRaises(TypeError, self.db.issue.create, title='spam',
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
286 nosy=1)
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
287 u1 = self.db.user.create(username='foo%s'%commit)
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
288 u2 = self.db.user.create(username='bar%s'%commit)
3870
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
289 # try a couple of the built-in iterable types to make
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
290 # sure that we accept them and handle them properly
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
291 # try a set as input for the multilink
4089
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
292 nid = self.db.issue.create(title="spam", nosy=set(u1))
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
293 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
294 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1])
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
295 self.assertRaises(TypeError, self.db.issue.set, nid,
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
296 nosy='invalid type')
3870
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
297 # test with a tuple
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
298 self.db.issue.set(nid, nosy=tuple())
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
299 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
300 self.assertEqual(self.db.issue.get(nid, "nosy"), [])
3870
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
301 # make sure we accept a frozen set
4089
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
302 self.db.issue.set(nid, nosy=set([u1,u2]))
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
303 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
304 l = [u1,u2]; l.sort()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
305 m = self.db.issue.get(nid, "nosy"); m.sort()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
306 self.assertEqual(l, m)
3973
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
307
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
308
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
309 # XXX one day, maybe...
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
310 # def testMultilinkOrdering(self):
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
311 # for i in range(10):
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
312 # self.db.user.create(username='foo%s'%i)
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
313 # i = self.db.issue.create(title="spam", nosy=['5','3','12','4'])
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
314 # self.db.commit()
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
315 # l = self.db.issue.get(i, "nosy")
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
316 # # all backends should return the Multilink numeric-id-sorted
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
317 # self.assertEqual(l, ['3', '4', '5', '12'])
2899
09a4d6dd6dcb Handle older (really older) anydbm databases in export code.
Richard Jones <richard@users.sourceforge.net>
parents: 2872
diff changeset
318
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
319 # Date
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
320 def testDateChange(self):
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
321 self.assertRaises(TypeError, self.db.issue.create,
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
322 title='spam', deadline=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
323 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
324 nid = self.db.issue.create(title="spam", status='1')
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
325 self.assertRaises(TypeError, self.db.issue.set, nid, deadline=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
326 a = self.db.issue.get(nid, "deadline")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
327 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
328 self.db.issue.set(nid, deadline=date.Date())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
329 b = self.db.issue.get(nid, "deadline")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
330 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
331 self.assertNotEqual(a, b)
3457
88f0a5030404 Fix invalid date spec in db tests
Richard Jones <richard@users.sourceforge.net>
parents: 3247
diff changeset
332 self.assertNotEqual(b, date.Date('1970-1-1.00:00:00'))
3822
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
333 # The 1970 date will fail for metakit -- it is used
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
334 # internally for storing NULL. The others would, too
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
335 # because metakit tries to convert date.timestamp to an int
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
336 # for storing and fails with an overflow.
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
337 for d in [date.Date (x) for x in '2038', '1970', '0033', '9999']:
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
338 self.db.issue.set(nid, deadline=d)
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
339 if commit: self.db.commit()
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
340 c = self.db.issue.get(nid, "deadline")
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
341 self.assertEqual(c, d)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
342
3973
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
343 def testDateLeapYear(self):
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
344 nid = self.db.issue.create(title='spam', status='1',
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
345 deadline=date.Date('2008-02-29'))
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
346 self.assertEquals(str(self.db.issue.get(nid, 'deadline')),
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
347 '2008-02-29.00:00:00')
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
348 self.assertEquals(self.db.issue.filter(None,
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
349 {'deadline': '2008-02-29'}), [nid])
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
350 self.db.issue.set(nid, deadline=date.Date('2008-03-01'))
3973
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
351 self.assertEquals(str(self.db.issue.get(nid, 'deadline')),
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
352 '2008-03-01.00:00:00')
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
353 self.assertEquals(self.db.issue.filter(None,
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
354 {'deadline': '2008-02-29'}), [])
3973
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
355
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
356 def testDateUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
357 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
358 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
359 self.db.issue.set(nid, deadline=date.Date())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
360 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
361 self.assertNotEqual(self.db.issue.get(nid, "deadline"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
362 self.db.issue.set(nid, deadline=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
363 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
364 self.assertEqual(self.db.issue.get(nid, "deadline"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
365
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
366 # Interval
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
367 def testIntervalChange(self):
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
368 self.assertRaises(TypeError, self.db.issue.create,
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
369 title='spam', foo=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
370 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
371 nid = self.db.issue.create(title="spam", status='1')
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
372 self.assertRaises(TypeError, self.db.issue.set, nid, foo=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
373 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
374 a = self.db.issue.get(nid, "foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
375 i = date.Interval('-1d')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
376 self.db.issue.set(nid, foo=i)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
377 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
378 self.assertNotEqual(self.db.issue.get(nid, "foo"), a)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
379 self.assertEqual(i, self.db.issue.get(nid, "foo"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
380 j = date.Interval('1y')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
381 self.db.issue.set(nid, foo=j)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
382 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
383 self.assertNotEqual(self.db.issue.get(nid, "foo"), i)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
384 self.assertEqual(j, self.db.issue.get(nid, "foo"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
385
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
386 def testIntervalUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
387 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
388 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
389 self.db.issue.set(nid, foo=date.Interval('-1d'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
390 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
391 self.assertNotEqual(self.db.issue.get(nid, "foo"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
392 self.db.issue.set(nid, foo=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
393 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
394 self.assertEqual(self.db.issue.get(nid, "foo"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
395
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
396 # Boolean
2472
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
397 def testBooleanSet(self):
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
398 nid = self.db.user.create(username='one', assignable=1)
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
399 self.assertEqual(self.db.user.get(nid, "assignable"), 1)
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
400 nid = self.db.user.create(username='two', assignable=0)
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
401 self.assertEqual(self.db.user.get(nid, "assignable"), 0)
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
402
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
403 def testBooleanChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
404 userid = self.db.user.create(username='foo', assignable=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
405 self.assertEqual(1, self.db.user.get(userid, 'assignable'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
406 self.db.user.set(userid, assignable=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
407 self.assertEqual(self.db.user.get(userid, 'assignable'), 0)
2472
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
408 self.db.user.set(userid, assignable=1)
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
409 self.assertEqual(self.db.user.get(userid, 'assignable'), 1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
410
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
411 def testBooleanUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
412 nid = self.db.user.create(username='foo', assignable=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
413 self.db.user.set(nid, assignable=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
414 self.assertEqual(self.db.user.get(nid, "assignable"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
415
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
416 # Number
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
417 def testNumberChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
418 nid = self.db.user.create(username='foo', age=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
419 self.assertEqual(1, self.db.user.get(nid, 'age'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
420 self.db.user.set(nid, age=3)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
421 self.assertNotEqual(self.db.user.get(nid, 'age'), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
422 self.db.user.set(nid, age=1.0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
423 self.assertEqual(self.db.user.get(nid, 'age'), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
424 self.db.user.set(nid, age=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
425 self.assertEqual(self.db.user.get(nid, 'age'), 0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
426
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
427 nid = self.db.user.create(username='bar', age=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
428 self.assertEqual(self.db.user.get(nid, 'age'), 0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
429
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
430 def testNumberUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
431 nid = self.db.user.create(username='foo', age=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
432 self.db.user.set(nid, age=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
433 self.assertEqual(self.db.user.get(nid, "age"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
434
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
435 # Password
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
436 def testPasswordChange(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
437 x = password.Password('x')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
438 userid = self.db.user.create(username='foo', password=x)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
439 self.assertEqual(x, self.db.user.get(userid, 'password'))
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
440 self.assertEqual(self.db.user.get(userid, 'password'), 'x')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
441 y = password.Password('y')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
442 self.db.user.set(userid, password=y)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
443 self.assertEqual(self.db.user.get(userid, 'password'), 'y')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
444 self.assertRaises(TypeError, self.db.user.create, userid,
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
445 username='bar', password='x')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
446 self.assertRaises(TypeError, self.db.user.set, userid, password='x')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
447
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
448 def testPasswordUnset(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
449 x = password.Password('x')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
450 nid = self.db.user.create(username='foo', password=x)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
451 self.db.user.set(nid, assignable=None)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
452 self.assertEqual(self.db.user.get(nid, "assignable"), None)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
453
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
454 # key value
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
455 def testKeyValue(self):
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
456 self.assertRaises(ValueError, self.db.user.create)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
457
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
458 newid = self.db.user.create(username="spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
459 self.assertEqual(self.db.user.lookup('spam'), newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
460 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
461 self.assertEqual(self.db.user.lookup('spam'), newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
462 self.db.user.retire(newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
463 self.assertRaises(KeyError, self.db.user.lookup, 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
464
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
465 # use the key again now that the old is retired
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
466 newid2 = self.db.user.create(username="spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
467 self.assertNotEqual(newid, newid2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
468 # try to restore old node. this shouldn't succeed!
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
469 self.assertRaises(KeyError, self.db.user.restore, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
470
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
471 self.assertRaises(TypeError, self.db.issue.lookup, 'fubar')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
472
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
473 # label property
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
474 def testLabelProp(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
475 # key prop
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
476 self.assertEqual(self.db.status.labelprop(), 'name')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
477 self.assertEqual(self.db.user.labelprop(), 'username')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
478 # title
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
479 self.assertEqual(self.db.issue.labelprop(), 'title')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
480 # name
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
481 self.assertEqual(self.db.file.labelprop(), 'name')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
482 # id
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
483 self.assertEqual(self.db.stuff.labelprop(default_to_id=1), 'id')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
484
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
485 # retirement
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
486 def testRetire(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
487 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
488 b = self.db.status.get('1', 'name')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
489 a = self.db.status.list()
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
490 nodeids = self.db.status.getnodeids()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
491 self.db.status.retire('1')
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
492 others = nodeids[:]
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
493 others.remove('1')
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
494
4089
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
495 self.assertEqual(set(self.db.status.getnodeids()),
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
496 set(nodeids))
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
497 self.assertEqual(set(self.db.status.getnodeids(retired=True)),
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
498 set(['1']))
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
499 self.assertEqual(set(self.db.status.getnodeids(retired=False)),
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
500 set(others))
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
501
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
502 self.assert_(self.db.status.is_retired('1'))
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
503
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
504 # make sure the list is different
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
505 self.assertNotEqual(a, self.db.status.list())
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
506
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
507 # can still access the node if necessary
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
508 self.assertEqual(self.db.status.get('1', 'name'), b)
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
509 self.assertRaises(IndexError, self.db.status.set, '1', name='hello')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
510 self.db.commit()
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
511 self.assert_(self.db.status.is_retired('1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
512 self.assertEqual(self.db.status.get('1', 'name'), b)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
513 self.assertNotEqual(a, self.db.status.list())
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
514
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
515 # try to restore retired node
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
516 self.db.status.restore('1')
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
517
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
518 self.assert_(not self.db.status.is_retired('1'))
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
519
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
520 def testCacheCreateSet(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
521 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
522 a = self.db.issue.get('1', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
523 self.assertEqual(a, 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
524 self.db.issue.set('1', title='ham')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
525 b = self.db.issue.get('1', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
526 self.assertEqual(b, 'ham')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
527
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
528 def testSerialisation(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
529 nid = self.db.issue.create(title="spam", status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
530 deadline=date.Date(), foo=date.Interval('-1d'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
531 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
532 assert isinstance(self.db.issue.get(nid, 'deadline'), date.Date)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
533 assert isinstance(self.db.issue.get(nid, 'foo'), date.Interval)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
534 uid = self.db.user.create(username="fozzy",
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
535 password=password.Password('t. bear'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
536 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
537 assert isinstance(self.db.user.get(uid, 'password'), password.Password)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
538
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
539 def testTransactions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
540 # remember the number of items we started
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
541 num_issues = len(self.db.issue.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
542 num_files = self.db.numfiles()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
543 self.db.issue.create(title="don't commit me!", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
544 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
545 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
546 self.assertEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
547 self.db.issue.create(title="please commit me!", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
548 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
549 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
550 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
551 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
552 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
553 self.db.file.create(name="test", type="text/plain", content="hi")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
554 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
555 self.assertEqual(num_files, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
556 for i in range(10):
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
557 self.db.file.create(name="test", type="text/plain",
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
558 content="hi %d"%(i))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
559 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
560 num_files2 = self.db.numfiles()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
561 self.assertNotEqual(num_files, num_files2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
562 self.db.file.create(name="test", type="text/plain", content="hi")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
563 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
564 self.assertNotEqual(num_files, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
565 self.assertEqual(num_files2, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
566
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
567 # rollback / cache interaction
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
568 name1 = self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
569 self.db.user.set('1', username = name1+name1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
570 # get the prop so the info's forced into the cache (if there is one)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
571 self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
572 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
573 name2 = self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
574 self.assertEqual(name1, name2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
575
3906
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
576 def testDestroyBlob(self):
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
577 # destroy an uncommitted blob
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
578 f1 = self.db.file.create(content='hello', type="text/plain")
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
579 self.db.commit()
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
580 fn = self.db.filename('file', f1)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
581 self.db.file.destroy(f1)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
582 self.db.commit()
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
583 self.assertEqual(os.path.exists(fn), False)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
584
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
585 def testDestroyNoJournalling(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
586 self.innerTestDestroy(klass=self.db.session)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
587
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
588 def testDestroyJournalling(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
589 self.innerTestDestroy(klass=self.db.issue)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
590
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
591 def innerTestDestroy(self, klass):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
592 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
593 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
594 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
595 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
596 klass.destroy(newid)
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
597 self.assertNotEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
598 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
599 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
600 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
601 self.assertRaises(IndexError, klass.history, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
602
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
603 # now with a commit
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
604 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
605 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
606 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
607 self.db.commit()
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
608 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
609 klass.destroy(newid)
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
610 self.assertNotEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
611 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
612 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
613 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
614 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
615 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
616 self.assertRaises(IndexError, klass.history, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
617
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
618 # now with a rollback
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
619 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
620 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
621 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
622 self.db.commit()
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
623 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
624 klass.destroy(newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
625 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
626 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
627 self.db.rollback()
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
628 self.assertEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
629 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
630 self.assertEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
631 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
632 self.assertNotEqual(klass.history(newid), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
633
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
634 def testExceptions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
635 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
636 ar = self.assertRaises
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
637
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
638 ar(KeyError, self.db.getclass, 'fubar')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
639
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
640 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
641 # class create
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
642 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
643 # string property
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
644 ar(TypeError, self.db.status.create, name=1)
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
645 # id, creation, creator and activity properties are reserved
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
646 ar(KeyError, self.db.status.create, id=1)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
647 ar(KeyError, self.db.status.create, creation=1)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
648 ar(KeyError, self.db.status.create, creator=1)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
649 ar(KeyError, self.db.status.create, activity=1)
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
650 ar(KeyError, self.db.status.create, actor=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
651 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
652 ar(KeyError, self.db.status.create, foo='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
653 # key name clash
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
654 ar(ValueError, self.db.status.create, name='unread')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
655 # invalid link index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
656 ar(IndexError, self.db.issue.create, title='foo', status='bar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
657 # invalid link value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
658 ar(ValueError, self.db.issue.create, title='foo', status=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
659 # invalid multilink type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
660 ar(TypeError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
661 nosy='hello')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
662 # invalid multilink index type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
663 ar(ValueError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
664 nosy=[1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
665 # invalid multilink index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
666 ar(IndexError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
667 nosy=['10'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
668
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
669 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
670 # key property
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
671 #
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
672 # key must be a String
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
673 ar(TypeError, self.db.file.setkey, 'fooz')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
674 # key must exist
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
675 ar(KeyError, self.db.file.setkey, 'fubar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
676
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
677 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
678 # class get
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
679 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
680 # invalid node id
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
681 ar(IndexError, self.db.issue.get, '99', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
682 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
683 ar(KeyError, self.db.status.get, '2', 'foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
684
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
685 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
686 # class set
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
687 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
688 # invalid node id
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
689 ar(IndexError, self.db.issue.set, '99', title='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
690 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
691 ar(KeyError, self.db.status.set, '1', foo='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
692 # string property
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
693 ar(TypeError, self.db.status.set, '1', name=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
694 # key name clash
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
695 ar(ValueError, self.db.status.set, '2', name='unread')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
696 # set up a valid issue for me to work on
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
697 id = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
698 # invalid link index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
699 ar(IndexError, self.db.issue.set, id, title='foo', status='bar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
700 # invalid link value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
701 ar(ValueError, self.db.issue.set, id, title='foo', status=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
702 # invalid multilink type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
703 ar(TypeError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
704 nosy='hello')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
705 # invalid multilink index type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
706 ar(ValueError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
707 nosy=[1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
708 # invalid multilink index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
709 ar(IndexError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
710 nosy=['10'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
711 # NOTE: the following increment the username to avoid problems
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
712 # within metakit's backend (it creates the node, and then sets the
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
713 # info, so the create (and by a fluke the username set) go through
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
714 # before the age/assignable/etc. set, which raises the exception)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
715 # invalid number value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
716 ar(TypeError, self.db.user.create, username='foo', age='a')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
717 # invalid boolean value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
718 ar(TypeError, self.db.user.create, username='foo2', assignable='true')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
719 nid = self.db.user.create(username='foo3')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
720 # invalid number value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
721 ar(TypeError, self.db.user.set, nid, age='a')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
722 # invalid boolean value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
723 ar(TypeError, self.db.user.set, nid, assignable='true')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
724
3743
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
725 def testAuditors(self):
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
726 class test:
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
727 called = False
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
728 def call(self, *args): self.called = True
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
729 create = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
730
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
731 self.db.user.audit('create', create.call)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
732 self.db.user.create(username="mary")
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
733 self.assertEqual(create.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
734
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
735 set = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
736 self.db.user.audit('set', set.call)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
737 self.db.user.set('1', username="joe")
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
738 self.assertEqual(set.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
739
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
740 retire = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
741 self.db.user.audit('retire', retire.call)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
742 self.db.user.retire('1')
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
743 self.assertEqual(retire.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
744
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
745 def testAuditorTwo(self):
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
746 class test:
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
747 n = 0
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
748 def a(self, *args): self.call_a = self.n; self.n += 1
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
749 def b(self, *args): self.call_b = self.n; self.n += 1
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
750 def c(self, *args): self.call_c = self.n; self.n += 1
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
751 test = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
752 self.db.user.audit('create', test.b, 1)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
753 self.db.user.audit('create', test.a, 1)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
754 self.db.user.audit('create', test.c, 2)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
755 self.db.user.create(username="mary")
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
756 self.assertEqual(test.call_a, 0)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
757 self.assertEqual(test.call_b, 1)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
758 self.assertEqual(test.call_c, 2)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
759
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
760 def testJournals(self):
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
761 muid = self.db.user.create(username="mary")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
762 self.db.user.create(username="pete")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
763 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
764 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
765
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
766 # journal entry for issue create
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
767 journal = self.db.getjournal('issue', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
768 self.assertEqual(1, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
769 (nodeid, date_stamp, journaltag, action, params) = journal[0]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
770 self.assertEqual(nodeid, '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
771 self.assertEqual(journaltag, self.db.user.lookup('admin'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
772 self.assertEqual(action, 'create')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
773 keys = params.keys()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
774 keys.sort()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
775 self.assertEqual(keys, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
776
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
777 # journal entry for link
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
778 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
779 self.assertEqual(1, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
780 self.db.issue.set('1', assignedto='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
781 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
782 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
783 self.assertEqual(2, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
784 (nodeid, date_stamp, journaltag, action, params) = journal[1]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
785 self.assertEqual('1', nodeid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
786 self.assertEqual('1', journaltag)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
787 self.assertEqual('link', action)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
788 self.assertEqual(('issue', '1', 'assignedto'), params)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
789
2754
1f89984c0ea5 testJournals: if backend is too fast, two journal entries...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2753
diff changeset
790 # wait a bit to keep proper order of journal entries
1f89984c0ea5 testJournals: if backend is too fast, two journal entries...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2753
diff changeset
791 time.sleep(0.01)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
792 # journal entry for unlink
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
793 self.db.setCurrentUser('mary')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
794 self.db.issue.set('1', assignedto='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
795 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
796 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
797 self.assertEqual(3, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
798 (nodeid, date_stamp, journaltag, action, params) = journal[2]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
799 self.assertEqual('1', nodeid)
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
800 self.assertEqual(muid, journaltag)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
801 self.assertEqual('unlink', action)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
802 self.assertEqual(('issue', '1', 'assignedto'), params)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
803
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
804 # test disabling journalling
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
805 # ... get the last entry
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
806 jlen = len(self.db.getjournal('user', '1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
807 self.db.issue.disableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
808 self.db.issue.set('1', title='hello world')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
809 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
810 # see if the change was journalled when it shouldn't have been
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
811 self.assertEqual(jlen, len(self.db.getjournal('user', '1')))
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
812 jlen = len(self.db.getjournal('issue', '1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
813 self.db.issue.enableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
814 self.db.issue.set('1', title='hello world 2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
815 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
816 # see if the change was journalled
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
817 self.assertNotEqual(jlen, len(self.db.getjournal('issue', '1')))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
818
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
819 def testJournalPreCommit(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
820 id = self.db.user.create(username="mary")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
821 self.assertEqual(len(self.db.getjournal('user', id)), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
822 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
823
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
824 def testPack(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
825 id = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
826 self.db.commit()
2255
4990fd3d57a7 fix mysql testing date granularity thingy
Richard Jones <richard@users.sourceforge.net>
parents: 2247
diff changeset
827 time.sleep(1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
828 self.db.issue.set(id, status='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
829 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
830
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
831 # sleep for at least a second, then get a date to pack at
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
832 time.sleep(1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
833 pack_before = date.Date('.')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
834
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
835 # wait another second and add one more entry
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
836 time.sleep(1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
837 self.db.issue.set(id, status='3')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
838 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
839 jlen = len(self.db.getjournal('issue', id))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
840
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
841 # pack
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
842 self.db.pack(pack_before)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
843
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
844 # we should have the create and last set entries now
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
845 self.assertEqual(jlen-1, len(self.db.getjournal('issue', id)))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
846
1986
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
847 def testIndexerSearching(self):
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
848 f1 = self.db.file.create(content='hello', type="text/plain")
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
849 # content='world' has the wrong content-type and won't be indexed
1986
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
850 f2 = self.db.file.create(content='world', type="text/frozz",
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
851 comment='blah blah')
1986
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
852 i1 = self.db.issue.create(files=[f1, f2], title="flebble plop")
2872
d530b68e4b42 don't index common words [SF#1046612]
Richard Jones <richard@users.sourceforge.net>
parents: 2820
diff changeset
853 i2 = self.db.issue.create(title="flebble the frooz")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
854 self.db.commit()
3033
f8d0fd056ac0 fix indexer searching with no valid words [SF#1086787]
Richard Jones <richard@users.sourceforge.net>
parents: 3016
diff changeset
855 self.assertEquals(self.db.indexer.search([], self.db.issue), {})
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
856 self.assertEquals(self.db.indexer.search(['hello'], self.db.issue),
1986
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
857 {i1: {'files': [f1]}})
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
858 self.assertEquals(self.db.indexer.search(['world'], self.db.issue), {})
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
859 self.assertEquals(self.db.indexer.search(['frooz'], self.db.issue),
1986
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
860 {i2: {}})
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
861 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue),
1986
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
862 {i1: {}, i2: {}})
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
863
3048
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
864 # test AND'ing of search terms
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
865 self.assertEquals(self.db.indexer.search(['frooz', 'flebble'],
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
866 self.db.issue), {i2: {}})
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
867
2872
d530b68e4b42 don't index common words [SF#1046612]
Richard Jones <richard@users.sourceforge.net>
parents: 2820
diff changeset
868 # unindexed stopword
d530b68e4b42 don't index common words [SF#1046612]
Richard Jones <richard@users.sourceforge.net>
parents: 2820
diff changeset
869 self.assertEquals(self.db.indexer.search(['the'], self.db.issue), {})
d530b68e4b42 don't index common words [SF#1046612]
Richard Jones <richard@users.sourceforge.net>
parents: 2820
diff changeset
870
3997
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
871 def testIndexerSearchingLink(self):
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
872 m1 = self.db.msg.create(content="one two")
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
873 i1 = self.db.issue.create(messages=[m1])
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
874 m2 = self.db.msg.create(content="two three")
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
875 i2 = self.db.issue.create(feedback=m2)
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
876 self.db.commit()
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
877 self.assertEquals(self.db.indexer.search(['two'], self.db.issue),
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
878 {i1: {'messages': [m1]}, i2: {'feedback': [m2]}})
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
879
3751
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
880 def testIndexerSearchMulti(self):
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
881 m1 = self.db.msg.create(content="one two")
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
882 m2 = self.db.msg.create(content="two three")
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
883 i1 = self.db.issue.create(messages=[m1])
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
884 i2 = self.db.issue.create(spam=[m2])
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
885 self.db.commit()
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
886 self.assertEquals(self.db.indexer.search([], self.db.issue), {})
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
887 self.assertEquals(self.db.indexer.search(['one'], self.db.issue),
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
888 {i1: {'messages': [m1]}})
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
889 self.assertEquals(self.db.indexer.search(['two'], self.db.issue),
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
890 {i1: {'messages': [m1]}, i2: {'spam': [m2]}})
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
891 self.assertEquals(self.db.indexer.search(['three'], self.db.issue),
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
892 {i2: {'spam': [m2]}})
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
893
3547
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
894 def testReindexingChange(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
895 search = self.db.indexer.search
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
896 issue = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
897 i1 = issue.create(title="flebble plop")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
898 i2 = issue.create(title="flebble frooz")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
899 self.db.commit()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
900 self.assertEquals(search(['plop'], issue), {i1: {}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
901 self.assertEquals(search(['flebble'], issue), {i1: {}, i2: {}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
902
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
903 # change i1's title
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
904 issue.set(i1, title="plop")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
905 self.db.commit()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
906 self.assertEquals(search(['plop'], issue), {i1: {}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
907 self.assertEquals(search(['flebble'], issue), {i2: {}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
908
3547
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
909 def testReindexingClear(self):
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
910 search = self.db.indexer.search
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
911 issue = self.db.issue
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
912 i1 = issue.create(title="flebble plop")
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
913 i2 = issue.create(title="flebble frooz")
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
914 self.db.commit()
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
915 self.assertEquals(search(['plop'], issue), {i1: {}})
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
916 self.assertEquals(search(['flebble'], issue), {i1: {}, i2: {}})
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
917
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
918 # unset i1's title
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
919 issue.set(i1, title="")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
920 self.db.commit()
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
921 self.assertEquals(search(['plop'], issue), {})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
922 self.assertEquals(search(['flebble'], issue), {i2: {}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
923
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
924 def testFileClassReindexing(self):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
925 f1 = self.db.file.create(content='hello')
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
926 f2 = self.db.file.create(content='hello, world')
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
927 i1 = self.db.issue.create(files=[f1, f2])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
928 self.db.commit()
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
929 d = self.db.indexer.search(['hello'], self.db.issue)
2601
113548baeed2 API clarification.
Richard Jones <richard@users.sourceforge.net>
parents: 2536
diff changeset
930 self.assert_(d.has_key(i1))
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
931 d[i1]['files'].sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
932 self.assertEquals(d, {i1: {'files': [f1, f2]}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
933 self.assertEquals(self.db.indexer.search(['world'], self.db.issue),
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
934 {i1: {'files': [f2]}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
935 self.db.file.set(f1, content="world")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
936 self.db.commit()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
937 d = self.db.indexer.search(['world'], self.db.issue)
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
938 d[i1]['files'].sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
939 self.assertEquals(d, {i1: {'files': [f1, f2]}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
940 self.assertEquals(self.db.indexer.search(['hello'], self.db.issue),
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
941 {i1: {'files': [f2]}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
942
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
943 def testFileClassIndexingNoNoNo(self):
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
944 f1 = self.db.file.create(content='hello')
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
945 self.db.commit()
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
946 self.assertEquals(self.db.indexer.search(['hello'], self.db.file),
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
947 {'1': {}})
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
948
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
949 f1 = self.db.file_nidx.create(content='hello')
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
950 self.db.commit()
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
951 self.assertEquals(self.db.indexer.search(['hello'], self.db.file_nidx),
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
952 {})
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
953
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
954 def testForcedReindexing(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
955 self.db.issue.create(title="flebble frooz")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
956 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
957 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue),
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
958 {'1': {}})
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
959 self.db.indexer.quiet = 1
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
960 self.db.indexer.force_reindex()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
961 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
962 self.db.indexer.quiet = 9
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
963 self.assertEquals(self.db.indexer.search(['flebble'], self.db.issue),
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
964 {'1': {}})
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
965
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
966 def testIndexingOnImport(self):
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
967 # import a message
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
968 msgcontent = 'Glrk'
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
969 msgid = self.db.msg.import_list(['content', 'files', 'recipients'],
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
970 [repr(msgcontent), '[]', '[]'])
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
971 msg_filename = self.db.filename(self.db.msg.classname, msgid,
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
972 create=1)
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
973 support.ensureParentsExist(msg_filename)
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
974 msg_file = open(msg_filename, 'w')
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
975 msg_file.write(msgcontent)
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
976 msg_file.close()
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
977
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
978 # import a file
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
979 filecontent = 'Brrk'
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
980 fileid = self.db.file.import_list(['content'], [repr(filecontent)])
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
981 file_filename = self.db.filename(self.db.file.classname, fileid,
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
982 create=1)
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
983 support.ensureParentsExist(file_filename)
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
984 file_file = open(file_filename, 'w')
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
985 file_file.write(filecontent)
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
986 file_file.close()
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
987
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
988 # import an issue
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
989 title = 'Bzzt'
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
990 nodeid = self.db.issue.import_list(['title', 'messages', 'files',
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
991 'spam', 'nosy', 'superseder'], [repr(title), repr([msgid]),
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
992 repr([fileid]), '[]', '[]', '[]'])
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
993 self.db.commit()
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
994
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
995 # Content of title attribute is indexed
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
996 self.assertEquals(self.db.indexer.search([title], self.db.issue),
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
997 {str(nodeid):{}})
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
998 # Content of message is indexed
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
999 self.assertEquals(self.db.indexer.search([msgcontent], self.db.issue),
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
1000 {str(nodeid):{'messages':[str(msgid)]}})
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1001 # Content of file is indexed
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1002 self.assertEquals(self.db.indexer.search([filecontent], self.db.issue),
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
1003 {str(nodeid):{'files':[str(fileid)]}})
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1004
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1005
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1006
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1007 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1008 # searching tests follow
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1009 #
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1010 def testFindIncorrectProperty(self):
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1011 self.assertRaises(TypeError, self.db.issue.find, title='fubar')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1012
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1013 def _find_test_setup(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1014 self.db.file.create(content='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1015 self.db.file.create(content='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1016 self.db.user.create(username='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1017 one = self.db.issue.create(status="1", nosy=['1'])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1018 two = self.db.issue.create(status="2", nosy=['2'], files=['1'],
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1019 assignedto='2')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1020 three = self.db.issue.create(status="1", nosy=['1','2'])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1021 four = self.db.issue.create(status="3", assignedto='1',
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1022 files=['1','2'])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1023 return one, two, three, four
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1024
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1025 def testFindLink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1026 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1027 got = self.db.issue.find(status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1028 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1029 self.assertEqual(got, [one, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1030 got = self.db.issue.find(status={'1':1})
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1031 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1032 self.assertEqual(got, [one, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1033
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1034 def testFindLinkFail(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1035 self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1036 self.assertEqual(self.db.issue.find(status='4'), [])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1037 self.assertEqual(self.db.issue.find(status={'4':1}), [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1038
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1039 def testFindLinkUnset(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1040 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1041 got = self.db.issue.find(assignedto=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1042 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1043 self.assertEqual(got, [one, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1044 got = self.db.issue.find(assignedto={None:1})
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1045 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1046 self.assertEqual(got, [one, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1047
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2472
diff changeset
1048 def testFindMultipleLink(self):
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2472
diff changeset
1049 one, two, three, four = self._find_test_setup()
2968
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1050 l = self.db.issue.find(status={'1':1, '3':1})
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1051 l.sort()
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1052 self.assertEqual(l, [one, three, four])
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1053 l = self.db.issue.find(assignedto={None:1, '1':1})
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1054 l.sort()
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1055 self.assertEqual(l, [one, three, four])
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2472
diff changeset
1056
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1057 def testFindMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1058 one, two, three, four = self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1059 got = self.db.issue.find(nosy='2')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1060 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1061 self.assertEqual(got, [two, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1062 got = self.db.issue.find(nosy={'2':1})
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1063 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1064 self.assertEqual(got, [two, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1065 got = self.db.issue.find(nosy={'2':1}, files={})
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1066 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1067 self.assertEqual(got, [two, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1068
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1069 def testFindMultiMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1070 one, two, three, four = self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1071 got = self.db.issue.find(nosy='2', files='1')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1072 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1073 self.assertEqual(got, [two, three, four])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1074 got = self.db.issue.find(nosy={'2':1}, files={'1':1})
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1075 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1076 self.assertEqual(got, [two, three, four])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1077
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1078 def testFindMultilinkFail(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1079 self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1080 self.assertEqual(self.db.issue.find(nosy='3'), [])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1081 self.assertEqual(self.db.issue.find(nosy={'3':1}), [])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1082
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1083 def testFindMultilinkUnset(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1084 self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1085 self.assertEqual(self.db.issue.find(nosy={}), [])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1086
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1087 def testFindLinkAndMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1088 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1089 got = self.db.issue.find(status='1', nosy='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1090 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1091 self.assertEqual(got, [one, two, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1092 got = self.db.issue.find(status={'1':1}, nosy={'2':1})
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1093 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1094 self.assertEqual(got, [one, two, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1095
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1096 def testFindRetired(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1097 one, two, three, four = self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1098 self.assertEqual(len(self.db.issue.find(status='1')), 2)
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1099 self.db.issue.retire(one)
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1100 self.assertEqual(len(self.db.issue.find(status='1')), 1)
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1101
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1102 def testStringFind(self):
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1103 self.assertRaises(TypeError, self.db.issue.stringFind, status='1')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1104
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1105 ids = []
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1106 ids.append(self.db.issue.create(title="spam"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1107 self.db.issue.create(title="not spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1108 ids.append(self.db.issue.create(title="spam"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1109 ids.sort()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1110 got = self.db.issue.stringFind(title='spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1111 got.sort()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1112 self.assertEqual(got, ids)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1113 self.assertEqual(self.db.issue.stringFind(title='fubar'), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1114
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1115 # test retiring a node
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1116 self.db.issue.retire(ids[0])
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1117 self.assertEqual(len(self.db.issue.stringFind(title='spam')), 1)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1118
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1119 def filteringSetup(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1120 for user in (
2418
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1121 {'username': 'bleep', 'age': 1},
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1122 {'username': 'blop', 'age': 1.5},
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1123 {'username': 'blorp', 'age': 2}):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1124 self.db.user.create(**user)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1125 iss = self.db.issue
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1126 file_content = ''.join([chr(i) for i in range(255)])
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1127 f = self.db.file.create(content=file_content)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1128 for issue in (
1955
b00ad075bb2f more unit tests, fixes and cleanups
Richard Jones <richard@users.sourceforge.net>
parents: 1951
diff changeset
1129 {'title': 'issue one', 'status': '2', 'assignedto': '1',
2536
70ede89e8056 handle postgresql bug in SQL generation [SF#984591]
Richard Jones <richard@users.sourceforge.net>
parents: 2533
diff changeset
1130 'foo': date.Interval('1:10'), 'priority': '3',
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1131 'deadline': date.Date('2003-02-16.22:50')},
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1132 {'title': 'issue two', 'status': '1', 'assignedto': '2',
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1133 'foo': date.Interval('1d'), 'priority': '3',
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1134 'deadline': date.Date('2003-01-01.00:00')},
2601
113548baeed2 API clarification.
Richard Jones <richard@users.sourceforge.net>
parents: 2536
diff changeset
1135 {'title': 'issue three', 'status': '1', 'priority': '2',
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1136 'nosy': ['1','2'], 'deadline': date.Date('2003-02-18')},
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1137 {'title': 'non four', 'status': '3',
2536
70ede89e8056 handle postgresql bug in SQL generation [SF#984591]
Richard Jones <richard@users.sourceforge.net>
parents: 2533
diff changeset
1138 'foo': date.Interval('0:10'), 'priority': '2',
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1139 'nosy': ['1','2','3'], 'deadline': date.Date('2004-03-08'),
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1140 'files': [f]}):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1141 self.db.issue.create(**issue)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1142 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1143 return self.assertEqual, self.db.issue.filter
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1144
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1145 def testFilteringID(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1146 ae, filt = self.filteringSetup()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1147 ae(filt(None, {'id': '1'}, ('+','id'), (None,None)), ['1'])
2075
b1704ba7be41 make mysql / postgresql work again. beginnings of otk/session store in rdbmses
Richard Jones <richard@users.sourceforge.net>
parents: 1988
diff changeset
1148 ae(filt(None, {'id': '2'}, ('+','id'), (None,None)), ['2'])
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1149 ae(filt(None, {'id': '100'}, ('+','id'), (None,None)), [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1150
2418
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1151 def testFilteringNumber(self):
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1152 self.filteringSetup()
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1153 ae, filt = self.assertEqual, self.db.user.filter
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1154 ae(filt(None, {'age': '1'}, ('+','id'), (None,None)), ['3'])
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1155 ae(filt(None, {'age': '1.5'}, ('+','id'), (None,None)), ['4'])
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1156 ae(filt(None, {'age': '2'}, ('+','id'), (None,None)), ['5'])
2453
0e2a0c2c8142 allow list of values for id, Number and Boolean filtering in anydbm backend
Richard Jones <richard@users.sourceforge.net>
parents: 2418
diff changeset
1157 ae(filt(None, {'age': ['1','2']}, ('+','id'), (None,None)), ['3','5'])
2418
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1158
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1159 def testFilteringString(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1160 ae, filt = self.filteringSetup()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1161 ae(filt(None, {'title': ['one']}, ('+','id'), (None,None)), ['1'])
3147
dbf80d7db63f consistent text searching behaviour (AND everywhere) [SF#1101036]
Richard Jones <richard@users.sourceforge.net>
parents: 3048
diff changeset
1162 ae(filt(None, {'title': ['issue one']}, ('+','id'), (None,None)),
dbf80d7db63f consistent text searching behaviour (AND everywhere) [SF#1101036]
Richard Jones <richard@users.sourceforge.net>
parents: 3048
diff changeset
1163 ['1'])
dbf80d7db63f consistent text searching behaviour (AND everywhere) [SF#1101036]
Richard Jones <richard@users.sourceforge.net>
parents: 3048
diff changeset
1164 ae(filt(None, {'title': ['issue', 'one']}, ('+','id'), (None,None)),
dbf80d7db63f consistent text searching behaviour (AND everywhere) [SF#1101036]
Richard Jones <richard@users.sourceforge.net>
parents: 3048
diff changeset
1165 ['1'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1166 ae(filt(None, {'title': ['issue']}, ('+','id'), (None,None)),
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1167 ['1','2','3'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1168 ae(filt(None, {'title': ['one', 'two']}, ('+','id'), (None,None)),
3147
dbf80d7db63f consistent text searching behaviour (AND everywhere) [SF#1101036]
Richard Jones <richard@users.sourceforge.net>
parents: 3048
diff changeset
1169 [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1170
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1171 def testFilteringLink(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1172 ae, filt = self.filteringSetup()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1173 ae(filt(None, {'status': '1'}, ('+','id'), (None,None)), ['2','3'])
1955
b00ad075bb2f more unit tests, fixes and cleanups
Richard Jones <richard@users.sourceforge.net>
parents: 1951
diff changeset
1174 ae(filt(None, {'assignedto': '-1'}, ('+','id'), (None,None)), ['3','4'])
2508
8e1c1623710b rdbms backends not filtering correctly on link=None
Richard Jones <richard@users.sourceforge.net>
parents: 2505
diff changeset
1175 ae(filt(None, {'assignedto': None}, ('+','id'), (None,None)), ['3','4'])
3636
fa7becc62534 Of course for Links there is the same bug as I fixed before for multilinks.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3635
diff changeset
1176 ae(filt(None, {'assignedto': [None]}, ('+','id'), (None,None)),
fa7becc62534 Of course for Links there is the same bug as I fixed before for multilinks.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3635
diff changeset
1177 ['3','4'])
2508
8e1c1623710b rdbms backends not filtering correctly on link=None
Richard Jones <richard@users.sourceforge.net>
parents: 2505
diff changeset
1178 ae(filt(None, {'assignedto': ['-1', None]}, ('+','id'), (None,None)),
8e1c1623710b rdbms backends not filtering correctly on link=None
Richard Jones <richard@users.sourceforge.net>
parents: 2505
diff changeset
1179 ['3','4'])
2533
0a63854816ee add test for latest bugfix
Richard Jones <richard@users.sourceforge.net>
parents: 2514
diff changeset
1180 ae(filt(None, {'assignedto': ['1', None]}, ('+','id'), (None,None)),
0a63854816ee add test for latest bugfix
Richard Jones <richard@users.sourceforge.net>
parents: 2514
diff changeset
1181 ['1', '3','4'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1182
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1183 def testFilteringMultilinkAndGroup(self):
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1184 """testFilteringMultilinkAndGroup:
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1185 See roundup Bug 1541128: apparently grouping by something and
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1186 searching a Multilink failed with MySQL 5.0
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1187 """
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1188 ae, filt = self.filteringSetup()
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1189 ae(filt(None, {'files': '1'}, ('-','activity'), ('+','status')), ['4'])
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1190
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1191 def testFilteringRetired(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1192 ae, filt = self.filteringSetup()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1193 self.db.issue.retire('2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1194 ae(filt(None, {'status': '1'}, ('+','id'), (None,None)), ['3'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1195
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1196 def testFilteringMultilink(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1197 ae, filt = self.filteringSetup()
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1198 ae(filt(None, {'nosy': '3'}, ('+','id'), (None,None)), ['4'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1199 ae(filt(None, {'nosy': '-1'}, ('+','id'), (None,None)), ['1', '2'])
2536
70ede89e8056 handle postgresql bug in SQL generation [SF#984591]
Richard Jones <richard@users.sourceforge.net>
parents: 2533
diff changeset
1200 ae(filt(None, {'nosy': ['1','2']}, ('+', 'status'),
2601
113548baeed2 API clarification.
Richard Jones <richard@users.sourceforge.net>
parents: 2536
diff changeset
1201 ('-', 'deadline')), ['4', '3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1202
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1203 def testFilteringMany(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1204 ae, filt = self.filteringSetup()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1205 ae(filt(None, {'nosy': '2', 'status': '1'}, ('+','id'), (None,None)),
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1206 ['3'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1207
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1208 def testFilteringRangeBasic(self):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1209 ae, filt = self.filteringSetup()
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1210 ae(filt(None, {'deadline': 'from 2003-02-10 to 2003-02-23'}), ['1','3'])
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1211 ae(filt(None, {'deadline': '2003-02-10; 2003-02-23'}), ['1','3'])
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1212 ae(filt(None, {'deadline': '; 2003-02-16'}), ['2'])
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1213
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1214 def testFilteringRangeTwoSyntaxes(self):
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1215 ae, filt = self.filteringSetup()
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1216 ae(filt(None, {'deadline': 'from 2003-02-16'}), ['1', '3', '4'])
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1217 ae(filt(None, {'deadline': '2003-02-16;'}), ['1', '3', '4'])
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1218
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1219 def testFilteringRangeYearMonthDay(self):
3953
78dc9b275aeb New tests for range searching by specifying just a month.
Richard Jones <richard@users.sourceforge.net>
parents: 3952
diff changeset
1220 ae, filt = self.filteringSetup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1221 ae(filt(None, {'deadline': '2002'}), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1222 ae(filt(None, {'deadline': '2003'}), ['1', '2', '3'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1223 ae(filt(None, {'deadline': '2004'}), ['4'])
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1224 ae(filt(None, {'deadline': '2003-02-16'}), ['1'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1225 ae(filt(None, {'deadline': '2003-02-17'}), [])
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1226
3952
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1227 def testFilteringRangeMonths(self):
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1228 ae, filt = self.filteringSetup()
3955
de6326aee6d0 Final fix for date range searching stuff: fix the test :)
Richard Jones <richard@users.sourceforge.net>
parents: 3953
diff changeset
1229 for month in range(1, 13):
3952
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1230 for n in range(1, month+1):
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1231 i = self.db.issue.create(title='%d.%d'%(month, n),
3955
de6326aee6d0 Final fix for date range searching stuff: fix the test :)
Richard Jones <richard@users.sourceforge.net>
parents: 3953
diff changeset
1232 deadline=date.Date('2001-%02d-%02d.00:00'%(month, n)))
3952
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1233 self.db.commit()
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1234
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1235 for month in range(1, 13):
3955
de6326aee6d0 Final fix for date range searching stuff: fix the test :)
Richard Jones <richard@users.sourceforge.net>
parents: 3953
diff changeset
1236 r = filt(None, dict(deadline='2001-%02d'%month))
3952
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1237 assert len(r) == month, 'month %d != length %d'%(month, len(r))
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
1238
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1239 def testFilteringRangeInterval(self):
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1240 ae, filt = self.filteringSetup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1241 ae(filt(None, {'foo': 'from 0:50 to 2:00'}), ['1'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1242 ae(filt(None, {'foo': 'from 0:50 to 1d 2:00'}), ['1', '2'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1243 ae(filt(None, {'foo': 'from 5:50'}), ['2'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1244 ae(filt(None, {'foo': 'to 0:05'}), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1245
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1246 def testFilteringRangeGeekInterval(self):
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
1247 ae, filt = self.filteringSetup()
3586
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1248 for issue in (
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1249 { 'deadline': date.Date('. -2d')},
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1250 { 'deadline': date.Date('. -1d')},
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1251 { 'deadline': date.Date('. -8d')},
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1252 ):
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1253 self.db.issue.create(**issue)
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1254 ae(filt(None, {'deadline': '-2d;'}), ['5', '6'])
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1255 ae(filt(None, {'deadline': '-1d;'}), ['6'])
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1256 ae(filt(None, {'deadline': '-1w;'}), ['5', '6'])
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
1257
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1258 def testFilteringIntervalSort(self):
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1259 # 1: '1:10'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1260 # 2: '1d'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1261 # 3: None
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1262 # 4: '0:10'
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1263 ae, filt = self.filteringSetup()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1264 # ascending should sort None, 1:10, 1d
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1265 ae(filt(None, {}, ('+','foo'), (None,None)), ['3', '4', '1', '2'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1266 # descending should sort 1d, 1:10, None
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1267 ae(filt(None, {}, ('-','foo'), (None,None)), ['2', '1', '4', '3'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1268
3681
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1269 def testFilteringStringSort(self):
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1270 # 1: 'issue one'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1271 # 2: 'issue two'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1272 # 3: 'issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1273 # 4: 'non four'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1274 ae, filt = self.filteringSetup()
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1275 ae(filt(None, {}, ('+','title')), ['1', '3', '2', '4'])
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1276 ae(filt(None, {}, ('-','title')), ['4', '2', '3', '1'])
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1277 # Test string case: For now allow both, w/wo case matching.
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1278 # 1: 'issue one'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1279 # 2: 'issue two'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1280 # 3: 'Issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1281 # 4: 'non four'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1282 self.db.issue.set('3', title='Issue three')
3684
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3682
diff changeset
1283 ae(filt(None, {}, ('+','title')), ['1', '3', '2', '4'])
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3682
diff changeset
1284 ae(filt(None, {}, ('-','title')), ['4', '2', '3', '1'])
3681
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1285 # Obscure bug in anydbm backend trying to convert to number
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1286 # 1: '1st issue'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1287 # 2: '2'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1288 # 3: 'Issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1289 # 4: 'non four'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1290 self.db.issue.set('1', title='1st issue')
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1291 self.db.issue.set('2', title='2')
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1292 ae(filt(None, {}, ('+','title')), ['1', '2', '3', '4'])
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1293 ae(filt(None, {}, ('-','title')), ['4', '3', '2', '1'])
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
1294
2185
c52a931879c4 sort/group by multilink in RDBMS
Richard Jones <richard@users.sourceforge.net>
parents: 2102
diff changeset
1295 def testFilteringMultilinkSort(self):
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1296 # 1: [] Reverse: 1: []
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1297 # 2: [] 2: []
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1298 # 3: ['admin','fred'] 3: ['fred','admin']
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1299 # 4: ['admin','bleep','fred'] 4: ['fred','bleep','admin']
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1300 # Note the sort order for the multilink doen't change when
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1301 # reversing the sort direction due to the re-sorting of the
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1302 # multilink!
2185
c52a931879c4 sort/group by multilink in RDBMS
Richard Jones <richard@users.sourceforge.net>
parents: 2102
diff changeset
1303 ae, filt = self.filteringSetup()
c52a931879c4 sort/group by multilink in RDBMS
Richard Jones <richard@users.sourceforge.net>
parents: 2102
diff changeset
1304 ae(filt(None, {}, ('+','nosy'), (None,None)), ['1', '2', '4', '3'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1305 ae(filt(None, {}, ('-','nosy'), (None,None)), ['4', '3', '1', '2'])
2185
c52a931879c4 sort/group by multilink in RDBMS
Richard Jones <richard@users.sourceforge.net>
parents: 2102
diff changeset
1306
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1307 def testFilteringMultilinkSortGroup(self):
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1308 # 1: status: 2 "in-progress" nosy: []
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1309 # 2: status: 1 "unread" nosy: []
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1310 # 3: status: 1 "unread" nosy: ['admin','fred']
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1311 # 4: status: 3 "testing" nosy: ['admin','bleep','fred']
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1312 ae, filt = self.filteringSetup()
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1313 ae(filt(None, {}, ('+','nosy'), ('+','status')), ['1', '4', '2', '3'])
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1314 ae(filt(None, {}, ('-','nosy'), ('+','status')), ['1', '4', '3', '2'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1315 ae(filt(None, {}, ('+','nosy'), ('-','status')), ['2', '3', '4', '1'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1316 ae(filt(None, {}, ('-','nosy'), ('-','status')), ['3', '2', '4', '1'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1317 ae(filt(None, {}, ('+','status'), ('+','nosy')), ['1', '2', '4', '3'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1318 ae(filt(None, {}, ('-','status'), ('+','nosy')), ['2', '1', '4', '3'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1319 ae(filt(None, {}, ('+','status'), ('-','nosy')), ['4', '3', '1', '2'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1320 ae(filt(None, {}, ('-','status'), ('-','nosy')), ['4', '3', '2', '1'])
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1321
3525
7be25d75c3d5 Fixed SQL generation for sort/group by separate Link properties [SF#1417565]
Richard Jones <richard@users.sourceforge.net>
parents: 3486
diff changeset
1322 def testFilteringLinkSortGroup(self):
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1323 # 1: status: 2 -> 'i', priority: 3 -> 1
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1324 # 2: status: 1 -> 'u', priority: 3 -> 1
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1325 # 3: status: 1 -> 'u', priority: 2 -> 3
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1326 # 4: status: 3 -> 't', priority: 2 -> 3
3525
7be25d75c3d5 Fixed SQL generation for sort/group by separate Link properties [SF#1417565]
Richard Jones <richard@users.sourceforge.net>
parents: 3486
diff changeset
1327 ae, filt = self.filteringSetup()
7be25d75c3d5 Fixed SQL generation for sort/group by separate Link properties [SF#1417565]
Richard Jones <richard@users.sourceforge.net>
parents: 3486
diff changeset
1328 ae(filt(None, {}, ('+','status'), ('+','priority')),
7be25d75c3d5 Fixed SQL generation for sort/group by separate Link properties [SF#1417565]
Richard Jones <richard@users.sourceforge.net>
parents: 3486
diff changeset
1329 ['1', '2', '4', '3'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1330 ae(filt(None, {'priority':'2'}, ('+','status'), ('+','priority')),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1331 ['4', '3'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1332 ae(filt(None, {'priority.order':'3'}, ('+','status'), ('+','priority')),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1333 ['4', '3'])
3692
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1334 ae(filt(None, {'priority':['2','3']}, ('+','priority'), ('+','status')),
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1335 ['1', '4', '2', '3'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1336 ae(filt(None, {}, ('+','priority'), ('+','status')),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1337 ['1', '4', '2', '3'])
3525
7be25d75c3d5 Fixed SQL generation for sort/group by separate Link properties [SF#1417565]
Richard Jones <richard@users.sourceforge.net>
parents: 3486
diff changeset
1338
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1339 def testFilteringDateSort(self):
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1340 # '1': '2003-02-16.22:50'
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1341 # '2': '2003-01-01.00:00'
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1342 # '3': '2003-02-18'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1343 # '4': '2004-03-08'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1344 ae, filt = self.filteringSetup()
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1345 # ascending
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1346 ae(filt(None, {}, ('+','deadline'), (None,None)), ['2', '1', '3', '4'])
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1347 # descending
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1348 ae(filt(None, {}, ('-','deadline'), (None,None)), ['4', '3', '1', '2'])
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1349
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1350 def testFilteringDateSortPriorityGroup(self):
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1351 # '1': '2003-02-16.22:50' 1 => 2
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1352 # '2': '2003-01-01.00:00' 3 => 1
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1353 # '3': '2003-02-18' 2 => 3
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1354 # '4': '2004-03-08' 1 => 2
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1355 ae, filt = self.filteringSetup()
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1356
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1357 # ascending
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1358 ae(filt(None, {}, ('+','deadline'), ('+','priority')),
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1359 ['2', '1', '3', '4'])
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1360 ae(filt(None, {}, ('-','deadline'), ('+','priority')),
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1361 ['1', '2', '4', '3'])
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1362 # descending
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1363 ae(filt(None, {}, ('+','deadline'), ('-','priority')),
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1364 ['3', '4', '2', '1'])
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1365 ae(filt(None, {}, ('-','deadline'), ('-','priority')),
2603
5ccd99777869 fix metakit handling of filter on Link==None; fix some unit tests
Richard Jones <richard@users.sourceforge.net>
parents: 2602
diff changeset
1366 ['4', '3', '1', '2'])
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1367
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1368 def filteringSetupTransitiveSearch(self):
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1369 u_m = {}
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1370 k = 30
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1371 for user in (
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1372 {'username': 'ceo', 'age': 129},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1373 {'username': 'grouplead1', 'age': 29, 'supervisor': '3'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1374 {'username': 'grouplead2', 'age': 29, 'supervisor': '3'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1375 {'username': 'worker1', 'age': 25, 'supervisor' : '4'},
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1376 {'username': 'worker2', 'age': 24, 'supervisor' : '4'},
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1377 {'username': 'worker3', 'age': 23, 'supervisor' : '5'},
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1378 {'username': 'worker4', 'age': 22, 'supervisor' : '5'},
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1379 {'username': 'worker5', 'age': 21, 'supervisor' : '5'}):
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1380 u = self.db.user.create(**user)
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1381 u_m [u] = self.db.msg.create(author = u, content = ' '
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1382 , date = date.Date ('2006-01-%s' % k))
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1383 k -= 1
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1384 iss = self.db.issue
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1385 for issue in (
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1386 {'title': 'ts1', 'status': '2', 'assignedto': '6',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1387 'priority': '3', 'messages' : [u_m ['6']], 'nosy' : ['4']},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1388 {'title': 'ts2', 'status': '1', 'assignedto': '6',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1389 'priority': '3', 'messages' : [u_m ['6']], 'nosy' : ['5']},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1390 {'title': 'ts4', 'status': '2', 'assignedto': '7',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1391 'priority': '3', 'messages' : [u_m ['7']]},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1392 {'title': 'ts5', 'status': '1', 'assignedto': '8',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1393 'priority': '3', 'messages' : [u_m ['8']]},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1394 {'title': 'ts6', 'status': '2', 'assignedto': '9',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1395 'priority': '3', 'messages' : [u_m ['9']]},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1396 {'title': 'ts7', 'status': '1', 'assignedto': '10',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1397 'priority': '3', 'messages' : [u_m ['10']]},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1398 {'title': 'ts8', 'status': '2', 'assignedto': '10',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1399 'priority': '3', 'messages' : [u_m ['10']]},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1400 {'title': 'ts9', 'status': '1', 'assignedto': '10',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1401 'priority': '3', 'messages' : [u_m ['10'], u_m ['9']]}):
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1402 self.db.issue.create(**issue)
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1403 return self.assertEqual, self.db.issue.filter
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1404
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1405 def testFilteringTransitiveLinkUser(self):
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1406 ae, filt = self.filteringSetupTransitiveSearch()
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1407 ufilt = self.db.user.filter
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1408 ae(ufilt(None, {'supervisor.username': 'ceo'}, ('+','username')),
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1409 ['4', '5'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1410 ae(ufilt(None, {'supervisor.supervisor.username': 'ceo'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1411 ('+','username')), ['6', '7', '8', '9', '10'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1412 ae(ufilt(None, {'supervisor.supervisor': '3'}, ('+','username')),
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1413 ['6', '7', '8', '9', '10'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1414 ae(ufilt(None, {'supervisor.supervisor.id': '3'}, ('+','username')),
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1415 ['6', '7', '8', '9', '10'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1416 ae(ufilt(None, {'supervisor.username': 'grouplead1'}, ('+','username')),
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1417 ['6', '7'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1418 ae(ufilt(None, {'supervisor.username': 'grouplead2'}, ('+','username')),
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1419 ['8', '9', '10'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1420 ae(ufilt(None, {'supervisor.username': 'grouplead2',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1421 'supervisor.supervisor.username': 'ceo'}, ('+','username')),
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1422 ['8', '9', '10'])
3636
fa7becc62534 Of course for Links there is the same bug as I fixed before for multilinks.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3635
diff changeset
1423 ae(ufilt(None, {'supervisor.supervisor': '3', 'supervisor': '4'},
fa7becc62534 Of course for Links there is the same bug as I fixed before for multilinks.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3635
diff changeset
1424 ('+','username')), ['6', '7'])
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1425
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1426 def testFilteringTransitiveLinkSort(self):
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1427 ae, filt = self.filteringSetupTransitiveSearch()
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1428 ufilt = self.db.user.filter
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1429 # Need to make ceo his own (and first two users') supervisor,
3685
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1430 # otherwise we will depend on sorting order of NULL values.
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1431 # Leave that to a separate test.
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1432 self.db.user.set('1', supervisor = '3')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1433 self.db.user.set('2', supervisor = '3')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1434 self.db.user.set('3', supervisor = '3')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1435 ae(ufilt(None, {'supervisor':'3'}, []), ['1', '2', '3', '4', '5'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1436 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1437 ('+','supervisor.supervisor'), ('+','supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1438 ('+','username')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1439 ['1', '3', '2', '4', '5', '6', '7', '8', '9', '10'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1440 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1441 ('-','supervisor.supervisor'), ('-','supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1442 ('+','username')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1443 ['8', '9', '10', '6', '7', '1', '3', '2', '4', '5'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1444 ae(filt(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1445 ('+','assignedto.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1446 ('+','assignedto.supervisor'), ('+','assignedto')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1447 ['1', '2', '3', '4', '5', '6', '7', '8'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1448 ae(filt(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1449 ('+','assignedto.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1450 ('-','assignedto.supervisor'), ('+','assignedto')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1451 ['4', '5', '6', '7', '8', '1', '2', '3'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1452 ae(filt(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1453 ('+','assignedto.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1454 ('+','assignedto.supervisor'), ('+','assignedto'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1455 ('-','status')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1456 ['2', '1', '3', '4', '5', '6', '8', '7'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1457 ae(filt(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1458 ('+','assignedto.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1459 ('+','assignedto.supervisor'), ('+','assignedto'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1460 ('+','status')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1461 ['1', '2', '3', '4', '5', '7', '6', '8'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1462 ae(filt(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1463 ('+','assignedto.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1464 ('-','assignedto.supervisor'), ('+','assignedto'), ('+','status')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1465 ['4', '5', '7', '6', '8', '1', '2', '3'])
3692
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1466 ae(filt(None, {'assignedto':['6','7','8','9','10']},
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1467 [('+','assignedto.supervisor.supervisor.supervisor'),
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1468 ('+','assignedto.supervisor.supervisor'),
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1469 ('-','assignedto.supervisor'), ('+','assignedto'), ('+','status')]),
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1470 ['4', '5', '7', '6', '8', '1', '2', '3'])
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1471 ae(filt(None, {'assignedto':['6','7','8','9']},
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1472 [('+','assignedto.supervisor.supervisor.supervisor'),
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1473 ('+','assignedto.supervisor.supervisor'),
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1474 ('-','assignedto.supervisor'), ('+','assignedto'), ('+','status')]),
8e52157e2073 More transitive-property work.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3685
diff changeset
1475 ['4', '5', '1', '2', '3'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1476
3685
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1477 def testFilteringTransitiveLinkSortNull(self):
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1478 """Check sorting of NULL values"""
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1479 ae, filt = self.filteringSetupTransitiveSearch()
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1480 ufilt = self.db.user.filter
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1481 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1482 ('+','supervisor.supervisor'), ('+','supervisor'),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1483 ('+','username')]),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1484 ['1', '3', '2', '4', '5', '6', '7', '8', '9', '10'])
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1485 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1486 ('-','supervisor.supervisor'), ('-','supervisor'),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1487 ('+','username')]),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1488 ['8', '9', '10', '6', '7', '4', '5', '1', '3', '2'])
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1489 ae(filt(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1490 ('+','assignedto.supervisor.supervisor'),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1491 ('+','assignedto.supervisor'), ('+','assignedto')]),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1492 ['1', '2', '3', '4', '5', '6', '7', '8'])
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1493 ae(filt(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1494 ('+','assignedto.supervisor.supervisor'),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1495 ('-','assignedto.supervisor'), ('+','assignedto')]),
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1496 ['4', '5', '6', '7', '8', '1', '2', '3'])
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
1497
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1498 def testFilteringTransitiveLinkIssue(self):
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1499 ae, filt = self.filteringSetupTransitiveSearch()
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1500 ae(filt(None, {'assignedto.supervisor.username': 'grouplead1'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1501 ('+','id')), ['1', '2', '3'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1502 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1503 ('+','id')), ['4', '5', '6', '7', '8'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1504 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1505 'status': '1'}, ('+','id')), ['4', '6', '8'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1506 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2',
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1507 'status': '2'}, ('+','id')), ['5', '7'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1508 ae(filt(None, {'assignedto.supervisor.username': ['grouplead2'],
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1509 'status': '2'}, ('+','id')), ['5', '7'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1510 ae(filt(None, {'assignedto.supervisor': ['4', '5'], 'status': '2'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1511 ('+','id')), ['1', '3', '5', '7'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1512
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1513 def testFilteringTransitiveMultilink(self):
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1514 ae, filt = self.filteringSetupTransitiveSearch()
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1515 ae(filt(None, {'messages.author.username': 'grouplead1'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1516 ('+','id')), [])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1517 ae(filt(None, {'messages.author': '6'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1518 ('+','id')), ['1', '2'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1519 ae(filt(None, {'messages.author.id': '6'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1520 ('+','id')), ['1', '2'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1521 ae(filt(None, {'messages.author.username': 'worker1'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1522 ('+','id')), ['1', '2'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1523 ae(filt(None, {'messages.author': '10'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1524 ('+','id')), ['6', '7', '8'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1525 ae(filt(None, {'messages.author': '9'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1526 ('+','id')), ['5', '8'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1527 ae(filt(None, {'messages.author': ['9', '10']},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1528 ('+','id')), ['5', '6', '7', '8'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1529 ae(filt(None, {'messages.author': ['8', '9']},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1530 ('+','id')), ['4', '5', '8'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1531 ae(filt(None, {'messages.author': ['8', '9'], 'status' : '1'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1532 ('+','id')), ['4', '8'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1533 ae(filt(None, {'messages.author': ['8', '9'], 'status' : '2'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1534 ('+','id')), ['5'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1535 ae(filt(None, {'messages.author': ['8', '9', '10'],
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1536 'messages.date': '2006-01-22.21:00;2006-01-23'}, ('+','id')),
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1537 ['6', '7', '8'])
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1538 ae(filt(None, {'nosy.supervisor.username': 'ceo'},
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1539 ('+','id')), ['1', '2'])
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3634
diff changeset
1540 ae(filt(None, {'messages.author': ['6', '9']},
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3634
diff changeset
1541 ('+','id')), ['1', '2', '5', '8'])
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3634
diff changeset
1542 ae(filt(None, {'messages': ['5', '7']},
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3634
diff changeset
1543 ('+','id')), ['3', '5', '8'])
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3634
diff changeset
1544 ae(filt(None, {'messages.author': ['6', '9'], 'messages': ['5', '7']},
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3634
diff changeset
1545 ('+','id')), ['5', '8'])
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
1546
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1547 def testFilteringTransitiveMultilinkSort(self):
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1548 ae, filt = self.filteringSetupTransitiveSearch()
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1549 ae(filt(None, {}, [('+','messages.author')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1550 ['1', '2', '3', '4', '5', '8', '6', '7'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1551 ae(filt(None, {}, [('-','messages.author')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1552 ['8', '6', '7', '5', '4', '3', '1', '2'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1553 ae(filt(None, {}, [('+','messages.date')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1554 ['6', '7', '8', '5', '4', '3', '1', '2'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1555 ae(filt(None, {}, [('-','messages.date')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1556 ['1', '2', '3', '4', '8', '5', '6', '7'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1557 ae(filt(None, {}, [('+','messages.author'),('+','messages.date')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1558 ['1', '2', '3', '4', '5', '8', '6', '7'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1559 ae(filt(None, {}, [('-','messages.author'),('+','messages.date')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1560 ['8', '6', '7', '5', '4', '3', '1', '2'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1561 ae(filt(None, {}, [('+','messages.author'),('-','messages.date')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1562 ['1', '2', '3', '4', '5', '8', '6', '7'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1563 ae(filt(None, {}, [('-','messages.author'),('-','messages.date')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1564 ['8', '6', '7', '5', '4', '3', '1', '2'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1565 ae(filt(None, {}, [('+','messages.author'),('+','assignedto')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1566 ['1', '2', '3', '4', '5', '8', '6', '7'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1567 ae(filt(None, {}, [('+','messages.author'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1568 ('-','assignedto.supervisor'),('-','assignedto')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1569 ['1', '2', '3', '4', '5', '8', '6', '7'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1570 ae(filt(None, {},
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1571 [('+','messages.author.supervisor.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1572 ('+','messages.author.supervisor.supervisor'),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1573 ('+','messages.author.supervisor'), ('+','messages.author')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1574 ['1', '2', '3', '4', '5', '6', '7', '8'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1575 self.db.user.setorderprop('age')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1576 self.db.msg.setorderprop('date')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1577 ae(filt(None, {}, [('+','messages'), ('+','messages.author')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1578 ['6', '7', '8', '5', '4', '3', '1', '2'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1579 ae(filt(None, {}, [('+','messages.author'), ('+','messages')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1580 ['6', '7', '8', '5', '4', '3', '1', '2'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1581 self.db.msg.setorderprop('author')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1582 # Orderprop is a Link/Multilink:
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1583 # messages are sorted by orderprop().labelprop(), i.e. by
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1584 # author.username, *not* by author.orderprop() (author.age)!
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1585 ae(filt(None, {}, [('+','messages')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1586 ['1', '2', '3', '4', '5', '8', '6', '7'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1587 ae(filt(None, {}, [('+','messages.author'), ('+','messages')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1588 ['6', '7', '8', '5', '4', '3', '1', '2'])
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1589 # The following will sort by
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1590 # author.supervisor.username and then by
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1591 # author.username
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1592 # I've resited the tempation to implement recursive orderprop
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1593 # here: There could even be loops if several classes specify a
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1594 # Link or Multilink as the orderprop...
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1595 # msg: 4: worker1 (id 5) : grouplead1 (id 4) ceo (id 3)
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1596 # msg: 5: worker2 (id 7) : grouplead1 (id 4) ceo (id 3)
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1597 # msg: 6: worker3 (id 8) : grouplead2 (id 5) ceo (id 3)
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1598 # msg: 7: worker4 (id 9) : grouplead2 (id 5) ceo (id 3)
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1599 # msg: 8: worker5 (id 10) : grouplead2 (id 5) ceo (id 3)
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1600 # issue 1: messages 4 sortkey:[[grouplead1], [worker1], 1]
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1601 # issue 2: messages 4 sortkey:[[grouplead1], [worker1], 2]
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1602 # issue 3: messages 5 sortkey:[[grouplead1], [worker2], 3]
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1603 # issue 4: messages 6 sortkey:[[grouplead2], [worker3], 4]
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1604 # issue 5: messages 7 sortkey:[[grouplead2], [worker4], 5]
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1605 # issue 6: messages 8 sortkey:[[grouplead2], [worker5], 6]
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1606 # issue 7: messages 8 sortkey:[[grouplead2], [worker5], 7]
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1607 # issue 8: messages 7,8 sortkey:[[grouplead2, grouplead2], ...]
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1608 self.db.user.setorderprop('supervisor')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1609 ae(filt(None, {}, [('+','messages.author'), ('-','messages')]),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1610 ['3', '1', '2', '6', '7', '5', '4', '8'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1611
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1612 def testFilteringSortId(self):
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1613 ae, filt = self.filteringSetupTransitiveSearch()
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1614 ae(self.db.user.filter(None, {}, ('+','id')),
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1615 ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1616
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1617 # XXX add sorting tests for other types
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1618
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1619 # nuke and re-create db for restore
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1620 def nukeAndCreate(self):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1621 # shut down this db and nuke it
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1622 self.db.close()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1623 self.nuke_database()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1624
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1625 # open a new, empty database
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1626 os.makedirs(config.DATABASE + '/files')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1627 self.db = self.module.Database(config, 'admin')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1628 setupSchema(self.db, 0, self.module)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1629
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1630
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1631 def testImportExport(self):
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1632 # use the filtering setup to create a bunch of items
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1633 ae, filt = self.filteringSetup()
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1634 # Get some stuff into the journal for testing import/export of
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1635 # journal data:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1636 self.db.user.set('4', password = password.Password('xyzzy'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1637 self.db.user.set('4', age = 3)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1638 self.db.user.set('4', assignable = True)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1639 self.db.issue.set('1', title = 'i1', status = '3')
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1640 self.db.issue.set('1', deadline = date.Date('2007'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1641 self.db.issue.set('1', foo = date.Interval('1:20'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1642 p = self.db.priority.create(name = 'some_prio_without_order')
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1643 self.db.commit()
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1644 self.db.user.set('4', password = password.Password('123xyzzy'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1645 self.db.user.set('4', assignable = False)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1646 self.db.priority.set(p, order = '4711')
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1647 self.db.commit()
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1648
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1649 self.db.user.retire('3')
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1650 self.db.issue.retire('2')
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1651
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1652 # grab snapshot of the current database
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1653 orig = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1654 origj = {}
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1655 for cn,klass in self.db.classes.items():
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1656 cl = orig[cn] = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1657 jn = origj[cn] = {}
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1658 for id in klass.list():
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1659 it = cl[id] = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1660 jn[id] = self.db.getjournal(cn, id)
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1661 for name in klass.getprops().keys():
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1662 it[name] = klass.get(id, name)
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1663
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1664 os.mkdir('_test_export')
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1665 try:
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1666 # grab the export
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1667 export = {}
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1668 journals = {}
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1669 for cn,klass in self.db.classes.items():
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1670 names = klass.export_propnames()
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1671 cl = export[cn] = [names+['is retired']]
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1672 for id in klass.getnodeids():
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1673 cl.append(klass.export_list(names, id))
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1674 if hasattr(klass, 'export_files'):
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1675 klass.export_files('_test_export', id)
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1676 journals[cn] = klass.export_journals()
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1677
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1678 self.nukeAndCreate()
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1679
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1680 # import
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1681 for cn, items in export.items():
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1682 klass = self.db.classes[cn]
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1683 names = items[0]
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1684 maxid = 1
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1685 for itemprops in items[1:]:
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1686 id = int(klass.import_list(names, itemprops))
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1687 if hasattr(klass, 'import_files'):
3546
a4edd24c32be test fixes and checking of indexer overwrites (xapian currently fails)
Richard Jones <richard@users.sourceforge.net>
parents: 3525
diff changeset
1688 klass.import_files('_test_export', str(id))
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1689 maxid = max(maxid, id)
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1690 self.db.setid(cn, str(maxid+1))
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1691 klass.import_journals(journals[cn])
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1692 # This is needed, otherwise journals won't be there for anydbm
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1693 self.db.commit()
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1694 finally:
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1695 shutil.rmtree('_test_export')
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1696
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1697 # compare with snapshot of the database
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1698 for cn, items in orig.iteritems():
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1699 klass = self.db.classes[cn]
2102
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
1700 propdefs = klass.getprops(1)
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1701 # ensure retired items are retired :)
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1702 l = items.keys(); l.sort()
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1703 m = klass.list(); m.sort()
2217
98d3bf8ffb19 store Intervals as two columns (and other fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2198
diff changeset
1704 ae(l, m, '%s id list wrong %r vs. %r'%(cn, l, m))
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1705 for id, props in items.items():
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1706 for name, value in props.items():
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1707 l = klass.get(id, name)
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1708 if isinstance(value, type([])):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1709 value.sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1710 l.sort()
2102
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
1711 try:
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
1712 ae(l, value)
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
1713 except AssertionError:
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
1714 if not isinstance(propdefs[name], Date):
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
1715 raise
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
1716 # don't get hung up on rounding errors
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
1717 assert not l.__cmp__(value, int_seconds=1)
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1718 for jc, items in origj.iteritems():
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1719 for id, oj in items.iteritems():
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1720 rj = self.db.getjournal(jc, id)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1721 # Both mysql and postgresql have some minor issues with
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1722 # rounded seconds on export/import, so we compare only
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1723 # the integer part.
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1724 for j in oj:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1725 j[1].second = float(int(j[1].second))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1726 for j in rj:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1727 j[1].second = float(int(j[1].second))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1728 oj.sort()
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1729 rj.sort()
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
1730 ae(oj, rj)
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1731
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1732 # make sure the retired items are actually imported
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1733 ae(self.db.user.get('4', 'username'), 'blop')
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
1734 ae(self.db.issue.get('2', 'title'), 'issue two')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1735
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1736 # make sure id counters are set correctly
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1737 maxid = max([int(id) for id in self.db.user.list()])
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1738 newid = self.db.user.create(username='testing')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1739 assert newid > maxid
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1740
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1741 # test import/export via admin interface
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1742 def testAdminImportExport(self):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1743 import roundup.admin
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1744 import csv
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1745 # use the filtering setup to create a bunch of items
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1746 ae, filt = self.filteringSetup()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1747 # create large field
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1748 self.db.priority.create(name = 'X' * 500)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1749 self.db.config.CSV_FIELD_SIZE = 400
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1750 self.db.commit()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1751 output = []
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1752 # ugly hack to get stderr output and disable stdout output
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1753 # during regression test. Depends on roundup.admin not using
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1754 # anything but stdout/stderr from sys (which is currently the
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1755 # case)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1756 def stderrwrite(s):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1757 output.append(s)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1758 roundup.admin.sys = MockNull ()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1759 try:
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1760 roundup.admin.sys.stderr.write = stderrwrite
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1761 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1762 home = '.'
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1763 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1764 tool.db = self.db
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1765 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1766 tool.do_export (['_test_export'])
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1767 self.assertEqual(len(output), 2)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1768 self.assertEqual(output [1], '\n')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1769 self.failUnless(output [0].startswith
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1770 ('Warning: config csv_field_size should be at least'))
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1771 self.failUnless(int(output[0].split()[-1]) > 500)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1772
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1773 if hasattr(roundup.admin.csv, 'field_size_limit'):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1774 self.nukeAndCreate()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1775 self.db.config.CSV_FIELD_SIZE = 400
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1776 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1777 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1778 tool.db = self.db
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1779 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1780 self.assertRaises(csv.Error, tool.do_import, ['_test_export'])
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1781
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1782 self.nukeAndCreate()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1783 self.db.config.CSV_FIELD_SIZE = 3200
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1784 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1785 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1786 tool.db = self.db
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1787 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1788 tool.do_import(['_test_export'])
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1789 finally:
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1790 roundup.admin.sys = sys
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1791 shutil.rmtree('_test_export')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
1792
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1793 def testAddProperty(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1794 self.db.issue.create(title="spam", status='1')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1795 self.db.commit()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1796
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1797 self.db.issue.addprop(fixer=Link("user"))
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1798 # force any post-init stuff to happen
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1799 self.db.post_init()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1800 props = self.db.issue.getprops()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1801 keys = props.keys()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1802 keys.sort()
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
1803 self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation',
3997
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1804 'creator', 'deadline', 'feedback', 'files', 'fixer', 'foo', 'id', 'messages',
3751
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
1805 'nosy', 'priority', 'spam', 'status', 'superseder', 'title'])
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1806 self.assertEqual(self.db.issue.get('1', "fixer"), None)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1807
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1808 def testRemoveProperty(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1809 self.db.issue.create(title="spam", status='1')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1810 self.db.commit()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1811
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1812 del self.db.issue.properties['title']
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1813 self.db.post_init()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1814 props = self.db.issue.getprops()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1815 keys = props.keys()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1816 keys.sort()
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
1817 self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation',
3997
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1818 'creator', 'deadline', 'feedback', 'files', 'foo', 'id', 'messages',
3751
44603dd791b7 full-text search wasn't coping with multiple multilinks to the same class
Richard Jones <richard@users.sourceforge.net>
parents: 3746
diff changeset
1819 'nosy', 'priority', 'spam', 'status', 'superseder'])
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1820 self.assertEqual(self.db.issue.list(), ['1'])
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1821
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1822 def testAddRemoveProperty(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1823 self.db.issue.create(title="spam", status='1')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1824 self.db.commit()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1825
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1826 self.db.issue.addprop(fixer=Link("user"))
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1827 del self.db.issue.properties['title']
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1828 self.db.post_init()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1829 props = self.db.issue.getprops()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1830 keys = props.keys()
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1831 keys.sort()
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
1832 self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation',
3999
953234004ba2 unit test fix for added property
Richard Jones <richard@users.sourceforge.net>
parents: 3997
diff changeset
1833 'creator', 'deadline', 'feedback', 'files', 'fixer', 'foo', 'id',
953234004ba2 unit test fix for added property
Richard Jones <richard@users.sourceforge.net>
parents: 3997
diff changeset
1834 'messages', 'nosy', 'priority', 'spam', 'status', 'superseder'])
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1835 self.assertEqual(self.db.issue.list(), ['1'])
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1836
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1837 def testNosyMail(self) :
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1838 """Creates one issue with two attachments, one smaller and one larger
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1839 than the set max_attachment_size.
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1840 """
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1841 db = self.db
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1842 db.config.NOSY_MAX_ATTACHMENT_SIZE = 4096
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1843 res = dict(mail_to = None, mail_msg = None)
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1844 def dummy_snd(s, to, msg, res=res) :
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1845 res["mail_to"], res["mail_msg"] = to, msg
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1846 backup, Mailer.smtp_send = Mailer.smtp_send, dummy_snd
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1847 try :
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1848 f1 = db.file.create(name="test1.txt", content="x" * 20)
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1849 f2 = db.file.create(name="test2.txt", content="y" * 5000)
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1850 m = db.msg.create(content="one two", author="admin",
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1851 files = [f1, f2])
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1852 i = db.issue.create(title='spam', files = [f1, f2],
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1853 messages = [m], nosy = [db.user.lookup("fred")])
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1854
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1855 db.issue.nosymessage(i, m, {})
4102
dcca66d56815 fix unit test compatibility
Richard Jones <richard@users.sourceforge.net>
parents: 4089
diff changeset
1856 mail_msg = str(res["mail_msg"])
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1857 self.assertEqual(res["mail_to"], ["fred@example.com"])
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1858 self.failUnless("From: admin" in mail_msg)
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1859 self.failUnless("Subject: [issue1] spam" in mail_msg)
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1860 self.failUnless("New submission from admin" in mail_msg)
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1861 self.failUnless("one two" in mail_msg)
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1862 self.failIf("File 'test1.txt' not attached" in mail_msg)
4005
3dec28d96583 fix some unit tests for python2.3
Richard Jones <richard@users.sourceforge.net>
parents: 3999
diff changeset
1863 self.failUnless(base64.encodestring("xxx").rstrip() in mail_msg)
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1864 self.failUnless("File 'test2.txt' not attached" in mail_msg)
4005
3dec28d96583 fix some unit tests for python2.3
Richard Jones <richard@users.sourceforge.net>
parents: 3999
diff changeset
1865 self.failIf(base64.encodestring("yyy").rstrip() in mail_msg)
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1866 finally :
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1867 Mailer.smtp_send = backup
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1868
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1869 class ROTest(MyTestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1870 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1871 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1872 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1873 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1874 os.makedirs(config.DATABASE + '/files')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1875 self.db = self.module.Database(config, 'admin')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1876 setupSchema(self.db, 1, self.module)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1877 self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1878
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1879 self.db = self.module.Database(config)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1880 setupSchema(self.db, 0, self.module)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1881
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1882 def testExceptions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1883 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1884 ar = self.assertRaises
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1885
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1886 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1887 ar(DatabaseError, self.db.status.create, name="foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1888 ar(DatabaseError, self.db.status.set, '1', name="foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1889 ar(DatabaseError, self.db.status.retire, '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1890
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1891
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1892 class SchemaTest(MyTestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1893 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1894 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1895 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1896 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1897 os.makedirs(config.DATABASE + '/files')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1898
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1899 def test_reservedProperties(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1900 self.db = self.module.Database(config, 'admin')
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1901 self.assertRaises(ValueError, self.module.Class, self.db, "a",
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1902 creation=String())
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1903 self.assertRaises(ValueError, self.module.Class, self.db, "a",
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1904 activity=String())
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1905 self.assertRaises(ValueError, self.module.Class, self.db, "a",
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1906 creator=String())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
1907 self.assertRaises(ValueError, self.module.Class, self.db, "a",
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
1908 actor=String())
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1909
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1910 def init_a(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1911 self.db = self.module.Database(config, 'admin')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1912 a = self.module.Class(self.db, "a", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1913 a.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1914 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1915
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1916 def test_fileClassProps(self):
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1917 self.db = self.module.Database(config, 'admin')
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1918 a = self.module.FileClass(self.db, 'a')
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1919 l = a.getprops().keys()
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1920 l.sort()
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1921 self.assert_(l, ['activity', 'actor', 'content', 'created',
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1922 'creation', 'type'])
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1923
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1924 def init_ab(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1925 self.db = self.module.Database(config, 'admin')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1926 a = self.module.Class(self.db, "a", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1927 a.setkey("name")
2196
85954067e496 mysql and postgresql schema mutation now handle added Multilinks; fixed test too
Richard Jones <richard@users.sourceforge.net>
parents: 2185
diff changeset
1928 b = self.module.Class(self.db, "b", name=String(),
85954067e496 mysql and postgresql schema mutation now handle added Multilinks; fixed test too
Richard Jones <richard@users.sourceforge.net>
parents: 2185
diff changeset
1929 fooz=Multilink('a'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1930 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1931 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1932
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1933 def test_addNewClass(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1934 self.init_a()
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1935
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1936 self.assertRaises(ValueError, self.module.Class, self.db, "a",
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1937 name=String())
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
1938
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1939 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1940 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1941
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1942 # add a new class to the schema and check creation of new items
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1943 # (and existence of old ones)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1944 self.init_ab()
2196
85954067e496 mysql and postgresql schema mutation now handle added Multilinks; fixed test too
Richard Jones <richard@users.sourceforge.net>
parents: 2185
diff changeset
1945 bid = self.db.b.create(name='bear', fooz=[aid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1946 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1947 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1948 self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1949
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1950 # now check we can recall the added class' items
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1951 self.init_ab()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1952 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1953 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1954 self.assertEqual(self.db.b.get(bid, 'name'), 'bear')
2196
85954067e496 mysql and postgresql schema mutation now handle added Multilinks; fixed test too
Richard Jones <richard@users.sourceforge.net>
parents: 2185
diff changeset
1955 self.assertEqual(self.db.b.get(bid, 'fooz'), [aid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1956 self.assertEqual(self.db.b.lookup('bear'), bid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1957
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
1958 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
1959 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
1960 self.db.getjournal('b', bid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
1961
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1962 def init_amod(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1963 self.db = self.module.Database(config, 'admin')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
1964 a = self.module.Class(self.db, "a", name=String(), newstr=String(),
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
1965 newint=Interval(), newnum=Number(), newbool=Boolean(),
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
1966 newdate=Date())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1967 a.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1968 b = self.module.Class(self.db, "b", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1969 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1970 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1971
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1972 def test_modifyClass(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1973 self.init_ab()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1974
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1975 # add item to user and issue class
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1976 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1977 bid = self.db.b.create(name='bear')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1978 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1979
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1980 # modify "a" schema
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1981 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1982 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
1983 self.assertEqual(self.db.a.get(aid, 'newstr'), None)
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
1984 self.assertEqual(self.db.a.get(aid, 'newint'), None)
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
1985 # hack - metakit can't return None for missing values, and we're not
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
1986 # really checking for that behavior here anyway
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
1987 self.assert_(not self.db.a.get(aid, 'newnum'))
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
1988 self.assert_(not self.db.a.get(aid, 'newbool'))
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
1989 self.assertEqual(self.db.a.get(aid, 'newdate'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1990 self.assertEqual(self.db.b.get(aid, 'name'), 'bear')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
1991 aid2 = self.db.a.create(name='aardvark', newstr='booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1992 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1993
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1994 # test
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1995 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1996 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
1997 self.assertEqual(self.db.a.get(aid, 'newstr'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1998 self.assertEqual(self.db.b.get(aid, 'name'), 'bear')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1999 self.assertEqual(self.db.a.get(aid2, 'name'), 'aardvark')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2000 self.assertEqual(self.db.a.get(aid2, 'newstr'), 'booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2001
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2002 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2003 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2004 self.db.getjournal('a', aid2)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2005
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2006 def init_amodkey(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2007 self.db = self.module.Database(config, 'admin')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2008 a = self.module.Class(self.db, "a", name=String(), newstr=String())
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2009 a.setkey("newstr")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2010 b = self.module.Class(self.db, "b", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2011 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2012 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2013
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2014 def test_changeClassKey(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2015 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2016 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2017 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2018 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2019
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2020 # change the key to newstr on a
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2021 self.init_amodkey()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2022 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2023 self.assertEqual(self.db.a.get(aid, 'newstr'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2024 self.assertRaises(KeyError, self.db.a.lookup, 'apple')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2025 aid2 = self.db.a.create(name='aardvark', newstr='booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2026 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2027
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2028 # check
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2029 self.init_amodkey()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2030 self.assertEqual(self.db.a.lookup('booz'), aid2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2031
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2032 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2033 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2034
3554
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2035 def test_removeClassKey(self):
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2036 self.init_amod()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2037 aid = self.db.a.create(name='apple')
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2038 self.assertEqual(self.db.a.lookup('apple'), aid)
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2039 self.db.commit(); self.db.close()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2040
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2041 self.db = self.module.Database(config, 'admin')
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2042 a = self.module.Class(self.db, "a", name=String(), newstr=String())
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2043 self.db.post_init()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2044
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2045 aid2 = self.db.a.create(name='apple', newstr='booz')
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2046 self.db.commit()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2047
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
2048
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
2049 def init_amodml(self):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2050 self.db = self.module.Database(config, 'admin')
2196
85954067e496 mysql and postgresql schema mutation now handle added Multilinks; fixed test too
Richard Jones <richard@users.sourceforge.net>
parents: 2185
diff changeset
2051 a = self.module.Class(self.db, "a", name=String(),
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2052 newml=Multilink('a'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2053 a.setkey('name')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2054 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2055
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2056 def test_makeNewMultilink(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2057 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2058 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2059 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2060 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2061
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2062 # add a multilink prop
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
2063 self.init_amodml()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2064 bid = self.db.a.create(name='bear', newml=[aid])
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2065 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2066 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2067 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2068
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2069 # check
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
2070 self.init_amodml()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2071 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2072 self.assertEqual(self.db.a.lookup('apple'), aid)
2196
85954067e496 mysql and postgresql schema mutation now handle added Multilinks; fixed test too
Richard Jones <richard@users.sourceforge.net>
parents: 2185
diff changeset
2073 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2074
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2075 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2076 self.db.getjournal('a', aid)
2196
85954067e496 mysql and postgresql schema mutation now handle added Multilinks; fixed test too
Richard Jones <richard@users.sourceforge.net>
parents: 2185
diff changeset
2077 self.db.getjournal('a', bid)
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2078
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2079 def test_removeMultilink(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2080 # add a multilink prop
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
2081 self.init_amodml()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2082 aid = self.db.a.create(name='apple')
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2083 bid = self.db.a.create(name='bear', newml=[aid])
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
2084 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2085 self.assertEqual(self.db.a.lookup('apple'), aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
2086 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2087 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2088
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2089 # remove the multilink
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
2090 self.init_a()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2091 self.assertEqual(self.db.a.lookup('apple'), aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
2092 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2093
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2094 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2095 self.db.getjournal('a', aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
2096 self.db.getjournal('a', bid)
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2097
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2098 def test_removeClass(self):
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
2099 self.init_ab()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2100 aid = self.db.a.create(name='apple')
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
2101 bid = self.db.b.create(name='bear')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2102 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2103
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2104 # drop the b class
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2105 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2106 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2107 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2108 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2109
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2110 # now check we can recall the added class' items
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2111 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2112 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2113 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2114
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2115 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2116 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
2117
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
2118 class RDBMSTest:
4089
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4082
diff changeset
2119 """ tests specific to RDBMS backends """
1951
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
2120 def test_indexTest(self):
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
2121 self.assertEqual(self.db.sql_index_exists('_issue', '_issue_id_idx'), 1)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
2122 self.assertEqual(self.db.sql_index_exists('_issue', '_issue_x_idx'), 0)
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
2123
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2124
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2125 class ClassicInitTest(unittest.TestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2126 count = 0
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2127 db = None
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2128
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2129 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2130 ClassicInitTest.count = ClassicInitTest.count + 1
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2131 self.dirname = '_test_init_%s'%self.count
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2132 try:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2133 shutil.rmtree(self.dirname)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2134 except OSError, error:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2135 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2136
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2137 def testCreation(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2138 ae = self.assertEqual
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2139
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
2140 # set up and open a tracker
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
2141 tracker = setupTracker(self.dirname, self.backend)
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
2142 # open the database
2689
9d044127c5eb tracker.open() requires the 2nd argument - journal tag name
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2687
diff changeset
2143 db = self.db = tracker.open('test')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2144
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2145 # check the basics of the schema and initial data set
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2146 l = db.priority.list()
3963
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3955
diff changeset
2147 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2148 ae(l, ['1', '2', '3', '4', '5'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2149 l = db.status.list()
3963
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3955
diff changeset
2150 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2151 ae(l, ['1', '2', '3', '4', '5', '6', '7', '8'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2152 l = db.keyword.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2153 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2154 l = db.user.list()
3963
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3955
diff changeset
2155 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2156 ae(l, ['1', '2'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2157 l = db.msg.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2158 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2159 l = db.file.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2160 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2161 l = db.issue.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2162 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2163
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2164 def tearDown(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2165 if self.db is not None:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2166 self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2167 try:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2168 shutil.rmtree(self.dirname)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2169 except OSError, error:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2170 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2171
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
2172 # vim: set et sts=4 sw=4 :

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