annotate test/db_test_base.py @ 6404:e29d5f4e0af4

issue2551132 - Setting form value in query string --- issues Code now uses value in query string even if there is a default_value set. Also handle the exception caused by an invalid value specified in the query string.
author John Rouillard <rouilj@ieee.org>
date Mon, 10 May 2021 16:47:51 -0400
parents 9957d8d10783
children 66ccddb034f2
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.
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
18 from __future__ import print_function
6300
778a9f455067 Remove old code import imp, old style trackers db/backend_name
John Rouillard <rouilj@ieee.org>
parents: 6297
diff changeset
19 import unittest, os, shutil, errno, sys, time, pprint, os.path
5790
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
20
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
21 try:
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
22 from base64 import encodebytes as base64_encode # python3 only
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
23 except ImportError:
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
24 # python2 and deplricated in 3
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
25 from base64 import encodestring as base64_encode
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
26
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
27 import logging, cgi
5388
d26921b851c3 Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
28 from . import gpgmelib
5494
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
29 from email import message_from_string
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30
5036
380d8d8b30a3 Replace existing run_tests.py script with a pytest script
John Kristensen <john@jerrykan.com>
parents: 5033
diff changeset
31 import pytest
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 from roundup.hyperdb import String, Password, Link, Multilink, Date, \
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
33 Interval, DatabaseError, Boolean, Number, Node, Integer
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
34 from roundup.mailer import Mailer
4407
f6a2bfd351ee force tests checking text output to work in the "C" locale
Richard Jones <richard@users.sourceforge.net>
parents: 4365
diff changeset
35 from roundup import date, password, init, instance, configuration, \
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
36 roundupdb, i18n, hyperdb
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
37 from roundup.cgi.templating import HTMLItem
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
38 from roundup.cgi.templating import HTMLProperty, _HTMLItem, anti_csrf_nonce
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
39 from roundup.cgi import client, actions
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
40 from roundup.cgi.engine_zopetal import RoundupPageTemplate
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
41 from roundup.cgi.templating import HTMLItem
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
42 from roundup.exceptions import UsageError, Reject
2514
091711fb2f8c Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents: 2508
diff changeset
43
5476
b0048969990d encoding fixes in test cases
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5469
diff changeset
44 from roundup.anypy.strings import b2s, s2b, u2s
5481
9a09719b0d8e helper to allow comparing dicts and None values in Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5476
diff changeset
45 from roundup.anypy.cmp_ import NoneAndDictComparable
5494
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
46 from roundup.anypy.email_ import message_from_bytes
5468
0cde8a595893 fix tests for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5395
diff changeset
47
6366
f2c31f5ec50b Move mocknull from test to roundup/test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6365
diff changeset
48 from roundup.test.mocknull import MockNull
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
50 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
51 config.DATABASE = "db"
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
52 config.RDBMS_NAME = "rounduptest"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
53 config.RDBMS_HOST = "localhost"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
54 config.RDBMS_USER = "rounduptest"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
55 config.RDBMS_PASSWORD = "rounduptest"
4480
1613754d2646 Fix first part of Password handling security issue2550688
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4472
diff changeset
56 config.RDBMS_TEMPLATE = "template0"
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
57 # 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
58 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
59 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
60 # 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
61 # 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
62 # to 'run_tests.py' script
3247
e629e0057136 disable file logging [SF#1155649]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3155
diff changeset
63 #config.LOGGING_FILENAME = "/tmp/logfile"
e629e0057136 disable file logging [SF#1155649]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3155
diff changeset
64 #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
65 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
66
5878
1b57d8f3eb97 Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents: 5869
diff changeset
67 def setupTracker(dirname, backend="anydbm", optimize=False):
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
68 """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
69
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
70 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
71
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
72 """
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
73 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
74 try:
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
75 shutil.rmtree(dirname)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5235
diff changeset
76 except OSError as error:
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
77 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
78 # create the instance
4082
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
79 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
80 '..',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
81 'share',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
82 'roundup',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
83 'templates',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
84 'classic'))
5041
5251e97b1de0 Configure the database backend in the config.ini
John Kristensen <john@jerrykan.com>
parents: 5036
diff changeset
85 config.RDBMS_BACKEND = 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
86 config.save(os.path.join(dirname, 'config.ini'))
5878
1b57d8f3eb97 Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents: 5869
diff changeset
87 tracker = instance.open(dirname, optimize=optimize)
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
88 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
89 tracker.nuke()
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
90 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
91 return tracker
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
92
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 def setupSchema(db, create, module):
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
94 mls = module.Class(db, "mls", name=String())
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
95 mls.setkey("name")
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
96 keyword = module.Class(db, "keyword", name=String(), order=Number())
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
97 keyword.setkey("name")
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
98 status = module.Class(db, "status", name=String(), mls=Multilink("mls"))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 status.setkey("name")
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
100 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
101 priority.setkey("name")
5175
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
102 user = module.Class(db, "user", username=String(),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
103 password=Password(quiet=True), assignable=Boolean(quiet=True),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
104 age=Number(quiet=True), roles=String(), address=String(),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
105 rating=Integer(quiet=True), supervisor=Link('user'),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
106 realname=String(quiet=True), longnumber=Number(use_double=True))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 user.setkey("username")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 file = module.FileClass(db, "file", name=String(), type=String(),
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 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
110 file_nidx = module.FileClass(db, "file_nidx", content=String(indexme='no'))
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
111
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
112 # initialize quiet mode a second way without using Multilink("user", quiet=True)
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
113 mynosy = Multilink("user", rev_multilink='nosy_issues')
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
114 mynosy.quiet = True
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 issue = module.IssueClass(db, "issue", title=String(indexme="yes"),
5175
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
116 status=Link("status"), nosy=mynosy, deadline=Date(quiet=True),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
117 foo=Interval(quiet=True, default_value=date.Interval('-1w')),
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
118 files=Multilink("file"), assignedto=Link('user', quiet=True,
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
119 rev_multilink='issues'), priority=Link('priority'),
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
120 spam=Multilink('msg'), feedback=Link('msg'),
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
121 keywords=Multilink('keyword'), keywords2=Multilink('keyword'))
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
122 stuff = module.Class(db, "stuff", stuff=String())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 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
124 msg = module.FileClass(db, "msg", date=Date(),
5175
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
125 author=Link("user", do_journal='no'), files=Multilink('file'),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
126 inreplyto=String(), messageid=String(),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
127 recipients=Multilink("user", do_journal='no'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 session.disableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 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
131 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
132 password=password.Password('sekrit'))
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
133 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
134 password=password.Password('sekrit'), address='fred@example.com')
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
135 u1 = mls.create(name="unread_1")
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
136 u2 = mls.create(name="unread_2")
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
137 status.create(name="unread",mls=[u1, u2])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 status.create(name="in-progress")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 status.create(name="testing")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 status.create(name="resolved")
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
141 priority.create(name="feature", order="2")
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
142 priority.create(name="wish", order="3")
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
143 priority.create(name="bug", order="1")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145
4301
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
146 # nosy tests require this
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
147 db.security.addPermissionToRole('User', 'View', 'msg')
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
148
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
149 # quiet journal tests require this
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
150 # QuietJournal - reference used later in tests
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
151 v1 = db.security.addPermission(name='View', klass='user',
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
152 properties=['username', 'supervisor', 'assignable'],
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
153 description="Prevent users from seeing roles")
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
154
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
155 db.security.addPermissionToRole("User", v1)
5033
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 4886
diff changeset
156
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 4886
diff changeset
157 class MyTestCase(object):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 def tearDown(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 if hasattr(self, 'db'):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 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
161 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
162 shutil.rmtree(config.DATABASE)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
164 def open_database(self, user='admin'):
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
165 self.db = self.module.Database(config, user)
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
166
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
167
5381
0942fe89e82e Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
168 if 'LOGGING_LEVEL' in os.environ:
4786
6018617c55ab Removing remains of "rlog" module, fixes db unit test debug logging via environment variable.
Bernhard Reiter <bernhard@intevation.de>
parents: 4687
diff changeset
169 logger = logging.getLogger('roundup.hyperdb')
6018617c55ab Removing remains of "rlog" module, fixes db unit test debug logging via environment variable.
Bernhard Reiter <bernhard@intevation.de>
parents: 4687
diff changeset
170 logger.setLevel(os.environ['LOGGING_LEVEL'])
2605
6e9bd67fefa9 complete transition from HYPERDBDEBUG to new logging
Richard Jones <richard@users.sourceforge.net>
parents: 2603
diff changeset
171
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
172 class commonDBTest(MyTestCase):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 os.makedirs(config.DATABASE + '/files')
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
178 self.open_database()
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
179 setupSchema(self.db, 1, self.module)
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
180
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
181 def iterSetup(self, classname='issue'):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
182 cls = getattr(self.db, classname)
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
183 def filt_iter_list(*args, **kw):
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
184 """ for checking equivalence of filter and filter_iter """
5317
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
185 return list(cls.filter_iter(*args, **kw))
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
186 def filter_test_iterator():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
187 """ yield all filter variants with config settings changed
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
188 appropriately
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
189 """
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
190 self.db.config.RDBMS_SERVERSIDE_CURSOR = False
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
191 yield (cls.filter)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
192 yield (filt_iter_list)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
193 self.db.config.RDBMS_SERVERSIDE_CURSOR = True
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
194 yield (cls.filter)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
195 yield (filt_iter_list)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
196 return self.assertEqual, filter_test_iterator
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
197
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
198 def filteringSetupTransitiveSearch(self, classname='issue'):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
199 u_m = {}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
200 k = 30
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
201 for user in (
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
202 {'username': 'ceo', 'age': 129},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
203 {'username': 'grouplead1', 'age': 29, 'supervisor': '3'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
204 {'username': 'grouplead2', 'age': 29, 'supervisor': '3'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
205 {'username': 'worker1', 'age': 25, 'supervisor' : '4'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
206 {'username': 'worker2', 'age': 24, 'supervisor' : '4'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
207 {'username': 'worker3', 'age': 23, 'supervisor' : '5'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
208 {'username': 'worker4', 'age': 22, 'supervisor' : '5'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
209 {'username': 'worker5', 'age': 21, 'supervisor' : '5'}):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
210 u = self.db.user.create(**user)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
211 u_m [u] = self.db.msg.create(author = u, content = ' '
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
212 , date = date.Date ('2006-01-%s' % k))
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
213 k -= 1
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
214 i = date.Interval('-1d')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
215 for issue in (
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
216 {'title': 'ts1', 'status': '2', 'assignedto': '6',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
217 'priority': '3', 'messages' : [u_m ['6']], 'nosy' : ['4']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
218 {'title': 'ts2', 'status': '1', 'assignedto': '6',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
219 'priority': '3', 'messages' : [u_m ['6']], 'nosy' : ['5']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
220 {'title': 'ts4', 'status': '2', 'assignedto': '7',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
221 'priority': '3', 'messages' : [u_m ['7']]},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
222 {'title': 'ts5', 'status': '1', 'assignedto': '8',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
223 'priority': '3', 'messages' : [u_m ['8']]},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
224 {'title': 'ts6', 'status': '2', 'assignedto': '9',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
225 'priority': '3', 'messages' : [u_m ['9']]},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
226 {'title': 'ts7', 'status': '1', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
227 'priority': '3', 'messages' : [u_m ['10']]},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
228 {'title': 'ts8', 'status': '2', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
229 'priority': '3', 'messages' : [u_m ['10']], 'foo' : i},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
230 {'title': 'ts9', 'status': '1', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
231 'priority': '3', 'messages' : [u_m ['10'], u_m ['9']]}):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
232 self.db.issue.create(**issue)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
233 return self.iterSetup(classname)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
234
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
235
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
236 class DBTest(commonDBTest):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
237
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
238 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
239 self.db.refresh_database()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
241 #
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
242 # automatic properties (well, the two easy ones anyway)
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
243 #
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
244 def testCreatorProperty(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
245 i = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
246 id1 = i.create(title='spam')
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
247 self.db.journaltag = 'fred'
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
248 id2 = i.create(title='spam')
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
249 self.assertNotEqual(id1, id2)
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
250 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
251
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
252 def testActorProperty(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
253 i = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
254 id1 = i.create(title='spam')
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
255 self.db.journaltag = 'fred'
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
256 i.set(id1, title='asfasd')
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
257 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
258
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
259 # ID number controls
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260 def testIDGeneration(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261 id1 = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262 id2 = self.db.issue.create(title="eggs", status='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 self.assertNotEqual(id1, id2)
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
264 def testIDSetting(self):
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
265 # XXX numeric ids
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
266 self.db.setid('issue', 10)
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
267 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
268 self.assertEqual('11', id2)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
270 #
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
271 # basic operations
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
272 #
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
273 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
274 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
275 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
276
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
277 # String
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
278 def testStringChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280 # test set & retrieve
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
282 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
283
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
284 # change and make sure we retrieve the correct value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
285 self.db.issue.set(nid, title='eggs')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287 self.assertEqual(self.db.issue.get(nid, 'title'), 'eggs')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
288
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
289 def testStringUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
290 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
291 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
292 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
293 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
294 # make sure we can unset
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
295 self.db.issue.set(nid, title=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
296 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
297 self.assertEqual(self.db.issue.get(nid, "title"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
298
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
299 # FileClass "content" property (no unset test)
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
300 def testFileClassContentChange(self):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
301 for commit in (0,1):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
302 # test set & retrieve
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
303 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
304 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
305
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
306 # 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
307 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
308 if commit: self.db.commit()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
309 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
310
3752
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
311 def testStringUnicode(self):
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
312 # test set & retrieve
5468
0cde8a595893 fix tests for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5395
diff changeset
313 ustr = u2s(u'\xe4\xf6\xfc\u20ac')
3752
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
314 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
315 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
316
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
317 # change and make sure we retrieve the correct value
5468
0cde8a595893 fix tests for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5395
diff changeset
318 ustr2 = u2s(u'change \u20ac change')
3752
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
319 self.db.issue.set(nid, title=ustr2)
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
320 self.db.commit()
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
321 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
322
5492
6b0c542642be blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5488
diff changeset
323 # test set & retrieve (this time for file contents)
6b0c542642be blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5488
diff changeset
324 nid = self.db.file.create(content=ustr)
6b0c542642be blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5488
diff changeset
325 self.assertEqual(self.db.file.get(nid, 'content'), ustr)
6b0c542642be blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5488
diff changeset
326 self.assertEqual(self.db.file.get(nid, 'binary_content'), s2b(ustr))
6b0c542642be blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5488
diff changeset
327
5725
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
328 def testStringBinary(self):
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
329 ''' Create file with binary content that is not able
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
330 to be interpreted as unicode. Try to cause file module
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
331 trigger and handle UnicodeDecodeError
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
332 and get valid output
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
333 '''
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
334 # test set & retrieve
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
335 bstr = b'\x00\xF0\x34\x33' # random binary data
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
336
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
337 # test set & retrieve (this time for file contents)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
338 nid = self.db.file.create(content=bstr)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
339 print(nid)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
340 print(repr(self.db.file.get(nid, 'content')))
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
341 print(repr(self.db.file.get(nid, 'binary_content')))
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
342 p3val='file1 is not text, retrieve using binary_content property. mdsum: 0e1d1b47e4bd1beab3afc9b79f596c1d'
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
343
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
344 if sys.version_info[0] > 2:
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
345 # python 3
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
346 self.assertEqual(self.db.file.get(nid, 'content'), p3val)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
347 self.assertEqual(self.db.file.get(nid, 'binary_content'),
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
348 bstr)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
349 else:
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
350 # python 2
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
351 self.assertEqual(self.db.file.get(nid, 'content'), bstr)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
352 self.assertEqual(self.db.file.get(nid, 'binary_content'), bstr)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
353
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
354 # Link
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
355 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
356 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
357 status='100')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
358 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
359 nid = self.db.issue.create(title="spam", status='1')
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.assertEqual(self.db.issue.get(nid, "status"), '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
362 self.db.issue.set(nid, status='2')
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, "status"), '2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
365
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
366 def testLinkUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
367 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
368 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
369 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
370 self.db.issue.set(nid, status=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
371 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
372 self.assertEqual(self.db.issue.get(nid, "status"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
373
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
374 # Multilink
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
375 def testMultilinkChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
376 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
377 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
378 nosy=['foo%s'%commit])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
379 u1 = self.db.user.create(username='foo%s'%commit)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
380 u2 = self.db.user.create(username='bar%s'%commit)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
381 nid = self.db.issue.create(title="spam", nosy=[u1])
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.assertEqual(self.db.issue.get(nid, "nosy"), [u1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
384 self.db.issue.set(nid, nosy=[])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
385 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
386 self.assertEqual(self.db.issue.get(nid, "nosy"), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
387 self.db.issue.set(nid, nosy=[u1,u2])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
388 if commit: self.db.commit()
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
389 l = [u1,u2]; l.sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
390 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
391 self.assertEqual(l, m)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
392
3872
34128a809e22 Allow multilinks to take None (treated as an empty list).
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3870
diff changeset
393 # 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
394 # 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
395 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
396 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
397 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
398
4490
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
399 def testMakeSeveralMultilinkedNodes(self):
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
400 for commit in (0,1):
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
401 u1 = self.db.user.create(username='foo%s'%commit)
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
402 u2 = self.db.user.create(username='bar%s'%commit)
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
403 u3 = self.db.user.create(username='baz%s'%commit)
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
404 nid = self.db.issue.create(title="spam", nosy=[u1])
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
405 if commit: self.db.commit()
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
406 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1])
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
407 self.db.issue.set(nid, deadline=date.Date('.'))
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
408 self.db.issue.set(nid, nosy=[u1,u2], title='ta%s'%commit)
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
409 if commit: self.db.commit()
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
410 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1,u2])
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
411 self.db.issue.set(nid, deadline=date.Date('.'))
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
412 self.db.issue.set(nid, nosy=[u1,u2,u3], title='tb%s'%commit)
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
413 if commit: self.db.commit()
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
414 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1,u2,u3])
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
415
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
416 def testMultilinkChangeIterable(self):
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
417 for commit in (0,1):
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
418 # invalid nosy value assertion
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
419 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
420 nosy=['foo%s'%commit])
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
421 # invalid type for nosy create
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
422 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
423 nosy=1)
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
424 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
425 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
426 # 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
427 # 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
428 # 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
429 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
430 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
431 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
432 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
433 nosy='invalid type')
3870
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
434 # test with a tuple
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
435 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
436 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
437 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
438 # 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
439 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
440 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
441 l = [u1,u2]; l.sort()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
442 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
443 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
444
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
445
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
446 # XXX one day, maybe...
6351
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
447 def testMultilinkOrdering(self):
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
448 for i in range(10):
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
449 self.db.user.create(username='foo%s'%i)
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
450 i = self.db.issue.create(title="spam", nosy=['5','3','12','4'])
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
451 self.db.commit()
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
452 l = self.db.issue.get(i, "nosy")
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
453 # all backends should return the Multilink numeric-id-sorted
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
454 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
455
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
456 # Date
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
457 def testDateChange(self):
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
458 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
459 title='spam', deadline=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
460 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
461 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
462 self.assertRaises(TypeError, self.db.issue.set, nid, deadline=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
463 a = self.db.issue.get(nid, "deadline")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
464 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
465 self.db.issue.set(nid, deadline=date.Date())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
466 b = self.db.issue.get(nid, "deadline")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
467 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
468 self.assertNotEqual(a, b)
3457
88f0a5030404 Fix invalid date spec in db tests
Richard Jones <richard@users.sourceforge.net>
parents: 3247
diff changeset
469 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
470 # 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
471 # internally for storing NULL. The others would, too
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
472 # 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
473 # for storing and fails with an overflow.
5390
0fd27da353eb Python 3 preparation: use parentheses in list comprehension.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
474 for d in [date.Date (x) for x in ('2038', '1970', '0033', '9999')]:
3822
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
475 self.db.issue.set(nid, deadline=d)
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
476 if commit: self.db.commit()
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
477 c = self.db.issue.get(nid, "deadline")
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
478 self.assertEqual(c, d)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
479
3973
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
480 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
481 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
482 deadline=date.Date('2008-02-29'))
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
483 self.assertEqual(str(self.db.issue.get(nid, 'deadline')),
3973
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
484 '2008-02-29.00:00:00')
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
485 self.assertEqual(self.db.issue.filter(None,
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
486 {'deadline': '2008-02-29'}), [nid])
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
487 self.assertEqual(list(self.db.issue.filter_iter(None,
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
488 {'deadline': '2008-02-29'})), [nid])
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
489 self.db.issue.set(nid, deadline=date.Date('2008-03-01'))
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
490 self.assertEqual(str(self.db.issue.get(nid, 'deadline')),
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
491 '2008-03-01.00:00:00')
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
492 self.assertEqual(self.db.issue.filter(None,
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
493 {'deadline': '2008-02-29'}), [])
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
494 self.assertEqual(list(self.db.issue.filter_iter(None,
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
495 {'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
496
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
497 def testDateUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
498 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
499 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
500 self.db.issue.set(nid, deadline=date.Date())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
501 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
502 self.assertNotEqual(self.db.issue.get(nid, "deadline"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
503 self.db.issue.set(nid, deadline=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
504 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
505 self.assertEqual(self.db.issue.get(nid, "deadline"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
506
4885
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
507 def testDateSort(self):
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
508 d1 = date.Date('.')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
509 ae, iiter = self.filteringSetup()
4885
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
510 nid = self.db.issue.create(title="nodeadline", status='1')
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
511 self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
512 for filt in iiter():
4885
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
513 ae(filt(None, {}, ('+','deadline')), ['5', '2', '1', '3', '4'])
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
514 ae(filt(None, {}, ('+','id'), ('+', 'deadline')),
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
515 ['5', '2', '1', '3', '4'])
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
516 ae(filt(None, {}, ('-','id'), ('-', 'deadline')),
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
517 ['4', '3', '1', '2', '5'])
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
518
4886
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
519 def testDateSortMultilink(self):
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
520 d1 = date.Date('.')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
521 ae, iiter = self.filteringSetup()
4886
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
522 nid = self.db.issue.create(title="nodeadline", status='1')
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
523 self.db.commit()
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
524 ae(sorted(self.db.issue.get('1','nosy')), [])
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
525 ae(sorted(self.db.issue.get('2','nosy')), [])
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
526 ae(sorted(self.db.issue.get('3','nosy')), ['1','2'])
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
527 ae(sorted(self.db.issue.get('4','nosy')), ['1','2','3'])
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
528 ae(sorted(self.db.issue.get('5','nosy')), [])
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
529 ae(self.db.user.get('1','username'), 'admin')
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
530 ae(self.db.user.get('2','username'), 'fred')
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
531 ae(self.db.user.get('3','username'), 'bleep')
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
532 # filter_iter currently doesn't work for Multilink sort
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
533 # so testing only filter
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
534 for f in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
535 if f.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
536 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
537 ae(f(None, {}, ('+', 'id'), ('+','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
538 ['1', '2', '5', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
539 ae(f(None, {}, ('+','deadline'), ('+', 'nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
540 ['5', '2', '1', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
541 ae(f(None, {}, ('+','nosy'), ('+', 'deadline')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
542 ['5', '2', '1', '3', '4'])
4885
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
543
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
544 # Interval
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
545 def testIntervalChange(self):
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
546 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
547 title='spam', foo=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
548 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
549 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
550 self.assertRaises(TypeError, self.db.issue.set, nid, foo=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
551 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
552 a = self.db.issue.get(nid, "foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
553 i = date.Interval('-1d')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
554 self.db.issue.set(nid, foo=i)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
555 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
556 self.assertNotEqual(self.db.issue.get(nid, "foo"), a)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
557 self.assertEqual(i, self.db.issue.get(nid, "foo"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
558 j = date.Interval('1y')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
559 self.db.issue.set(nid, foo=j)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
560 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
561 self.assertNotEqual(self.db.issue.get(nid, "foo"), i)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
562 self.assertEqual(j, self.db.issue.get(nid, "foo"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
563
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
564 def testIntervalUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
565 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
566 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
567 self.db.issue.set(nid, foo=date.Interval('-1d'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
568 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
569 self.assertNotEqual(self.db.issue.get(nid, "foo"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
570 self.db.issue.set(nid, foo=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
571 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
572 self.assertEqual(self.db.issue.get(nid, "foo"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
573
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
574 # Boolean
2472
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
575 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
576 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
577 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
578 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
579 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
580
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
581 def testBooleanChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
582 userid = self.db.user.create(username='foo', assignable=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
583 self.assertEqual(1, self.db.user.get(userid, 'assignable'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
584 self.db.user.set(userid, assignable=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
585 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
586 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
587 self.assertEqual(self.db.user.get(userid, 'assignable'), 1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
588
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
589 def testBooleanUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
590 nid = self.db.user.create(username='foo', assignable=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
591 self.db.user.set(nid, assignable=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
592 self.assertEqual(self.db.user.get(nid, "assignable"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
593
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
594 # Number
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
595 def testNumberChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
596 nid = self.db.user.create(username='foo', age=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
597 self.assertEqual(1, self.db.user.get(nid, 'age'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
598 self.db.user.set(nid, age=3)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
599 self.assertNotEqual(self.db.user.get(nid, 'age'), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
600 self.db.user.set(nid, age=1.0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
601 self.assertEqual(self.db.user.get(nid, 'age'), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
602 self.db.user.set(nid, age=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
603 self.assertEqual(self.db.user.get(nid, 'age'), 0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
604
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
605 nid = self.db.user.create(username='bar', age=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
606 self.assertEqual(self.db.user.get(nid, 'age'), 0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
607
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
608 def testNumberUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
609 nid = self.db.user.create(username='foo', age=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
610 self.db.user.set(nid, age=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
611 self.assertEqual(self.db.user.get(nid, "age"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
612
5175
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
613 # Long number
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
614 def testDoubleChange(self):
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
615 lnl = 100.12345678
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
616 ln = 100.123456789
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
617 lng = 100.12345679
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
618 nid = self.db.user.create(username='foo', longnumber=ln)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
619 self.assertEqual(self.db.user.get(nid, 'longnumber') < lng, True)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
620 self.assertEqual(self.db.user.get(nid, 'longnumber') > lnl, True)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
621 lnl = 1.0012345678e55
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
622 ln = 1.00123456789e55
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
623 lng = 1.0012345679e55
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
624 self.db.user.set(nid, longnumber=ln)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
625 self.assertEqual(self.db.user.get(nid, 'longnumber') < lng, True)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
626 self.assertEqual(self.db.user.get(nid, 'longnumber') > lnl, True)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
627 self.db.user.set(nid, longnumber=-1)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
628 self.assertEqual(self.db.user.get(nid, 'longnumber'), -1)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
629 self.db.user.set(nid, longnumber=0)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
630 self.assertEqual(self.db.user.get(nid, 'longnumber'), 0)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
631
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
632 nid = self.db.user.create(username='bar', longnumber=0)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
633 self.assertEqual(self.db.user.get(nid, 'longnumber'), 0)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
634
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
635 def testDoubleUnset(self):
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
636 nid = self.db.user.create(username='foo', longnumber=1.2345)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
637 self.db.user.set(nid, longnumber=None)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
638 self.assertEqual(self.db.user.get(nid, "longnumber"), None)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
639
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
640
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
641 # Integer
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
642 def testIntegerChange(self):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
643 nid = self.db.user.create(username='foo', rating=100)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
644 self.assertEqual(100, self.db.user.get(nid, 'rating'))
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
645 self.db.user.set(nid, rating=300)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
646 self.assertNotEqual(self.db.user.get(nid, 'rating'), 100)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
647 self.db.user.set(nid, rating=-1)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
648 self.assertEqual(self.db.user.get(nid, 'rating'), -1)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
649 self.db.user.set(nid, rating=0)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
650 self.assertEqual(self.db.user.get(nid, 'rating'), 0)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
651
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
652 nid = self.db.user.create(username='bar', rating=0)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
653 self.assertEqual(self.db.user.get(nid, 'rating'), 0)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
654
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
655 def testIntegerUnset(self):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
656 nid = self.db.user.create(username='foo', rating=1)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
657 self.db.user.set(nid, rating=None)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
658 self.assertEqual(self.db.user.get(nid, "rating"), None)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
659
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
660 # 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
661 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
662 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
663 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
664 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
665 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
666 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
667 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
668 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
669 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
670 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
671 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
672
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
673 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
674 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
675 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
676 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
677 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
678
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
679 # key value
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
680 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
681 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
682
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
683 newid = self.db.user.create(username="spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
684 self.assertEqual(self.db.user.lookup('spam'), newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
685 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
686 self.assertEqual(self.db.user.lookup('spam'), newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
687 self.db.user.retire(newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
688 self.assertRaises(KeyError, self.db.user.lookup, 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
689
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
690 # use the key again now that the old is retired
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
691 newid2 = self.db.user.create(username="spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
692 self.assertNotEqual(newid, newid2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
693 # try to restore old node. this shouldn't succeed!
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
694 self.assertRaises(KeyError, self.db.user.restore, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
695
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
696 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
697
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
698 # 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
699 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
700 # 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
701 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
702 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
703 # 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
704 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
705 # 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
706 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
707 # 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
708 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
709
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
710 # retirement
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
711 def testRetire(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
712 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
713 b = self.db.status.get('1', 'name')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
714 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
715 nodeids = self.db.status.getnodeids()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
716 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
717 others = nodeids[:]
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
718 others.remove('1')
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
719
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
720 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
721 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
722 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
723 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
724 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
725 set(others))
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
726
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
727 self.assertTrue(self.db.status.is_retired('1'))
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
728
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
729 # make sure the list is different
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
730 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
731
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
732 # can still access the node if necessary
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
733 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
734 self.assertRaises(IndexError, self.db.status.set, '1', name='hello')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
735 self.db.commit()
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
736 self.assertTrue(self.db.status.is_retired('1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
737 self.assertEqual(self.db.status.get('1', 'name'), b)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
738 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
739
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
740 # try to restore retired node
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
741 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
742
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
743 self.assertTrue(not self.db.status.is_retired('1'))
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
744
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
745 def testCacheCreateSet(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
746 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
747 a = self.db.issue.get('1', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
748 self.assertEqual(a, 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
749 self.db.issue.set('1', title='ham')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
750 b = self.db.issue.get('1', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
751 self.assertEqual(b, 'ham')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
752
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
753 def testSerialisation(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
754 nid = self.db.issue.create(title="spam", status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
755 deadline=date.Date(), foo=date.Interval('-1d'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
756 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
757 assert isinstance(self.db.issue.get(nid, 'deadline'), date.Date)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
758 assert isinstance(self.db.issue.get(nid, 'foo'), date.Interval)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
759 uid = self.db.user.create(username="fozzy",
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
760 password=password.Password('t. bear'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
761 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
762 assert isinstance(self.db.user.get(uid, 'password'), password.Password)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
763
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
764 def testTransactions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
765 # remember the number of items we started
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
766 num_issues = len(self.db.issue.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
767 num_files = self.db.numfiles()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
768 self.db.issue.create(title="don't commit me!", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
769 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
770 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
771 self.assertEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
772 self.db.issue.create(title="please commit me!", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
773 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
774 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
775 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
776 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
777 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
778 self.db.file.create(name="test", type="text/plain", content="hi")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
779 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
780 self.assertEqual(num_files, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
781 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
782 self.db.file.create(name="test", type="text/plain",
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
783 content="hi %d"%(i))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
784 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
785 num_files2 = self.db.numfiles()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
786 self.assertNotEqual(num_files, num_files2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
787 self.db.file.create(name="test", type="text/plain", content="hi")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
788 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
789 self.assertNotEqual(num_files, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
790 self.assertEqual(num_files2, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
791
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
792 # rollback / cache interaction
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
793 name1 = self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
794 self.db.user.set('1', username = name1+name1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
795 # 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
796 self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
797 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
798 name2 = self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
799 self.assertEqual(name1, name2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
800
3906
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
801 def testDestroyBlob(self):
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
802 # destroy an uncommitted blob
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
803 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
804 self.db.commit()
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
805 fn = self.db.filename('file', f1)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
806 self.db.file.destroy(f1)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
807 self.db.commit()
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
808 self.assertEqual(os.path.exists(fn), False)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
809
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
810 def testDestroyNoJournalling(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
811 self.innerTestDestroy(klass=self.db.session)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
812
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
813 def testDestroyJournalling(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
814 self.innerTestDestroy(klass=self.db.issue)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
815
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
816 def innerTestDestroy(self, klass):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
817 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
818 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
819 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
820 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
821 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
822 self.assertNotEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
823 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
824 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
825 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
826 self.assertRaises(IndexError, klass.history, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
827
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
828 # now with a commit
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
829 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
830 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
831 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
832 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
833 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
834 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
835 self.assertNotEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
836 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
837 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
838 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
839 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
840 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
841 self.assertRaises(IndexError, klass.history, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
842
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
843 # now with a rollback
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
844 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
845 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
846 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
847 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
848 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
849 klass.destroy(newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
850 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
851 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
852 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
853 self.assertEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
854 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
855 self.assertEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
856 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
857 self.assertNotEqual(klass.history(newid), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
858
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
859 def testExceptions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
860 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
861 ar = self.assertRaises
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
862
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
863 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
864
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
865 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
866 # class create
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
867 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
868 # string property
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
869 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
870 # 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
871 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
872 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
873 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
874 ar(KeyError, self.db.status.create, activity=1)
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
875 ar(KeyError, self.db.status.create, actor=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
876 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
877 ar(KeyError, self.db.status.create, foo='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
878 # key name clash
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
879 ar(ValueError, self.db.status.create, name='unread')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
880 # invalid link index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
881 ar(IndexError, self.db.issue.create, title='foo', status='bar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
882 # invalid link value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
883 ar(ValueError, self.db.issue.create, title='foo', status=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
884 # invalid multilink type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
885 ar(TypeError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
886 nosy='hello')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
887 # invalid multilink index type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
888 ar(ValueError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
889 nosy=[1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
890 # invalid multilink index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
891 ar(IndexError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
892 nosy=['10'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
893
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
894 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
895 # key property
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
896 #
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
897 # key must be a String
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
898 ar(TypeError, self.db.file.setkey, 'fooz')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
899 # key must exist
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
900 ar(KeyError, self.db.file.setkey, 'fubar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
901
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
902 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
903 # class get
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
904 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
905 # invalid node id
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
906 ar(IndexError, self.db.issue.get, '99', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
907 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
908 ar(KeyError, self.db.status.get, '2', 'foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
909
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
910 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
911 # class set
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
912 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
913 # invalid node id
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
914 ar(IndexError, self.db.issue.set, '99', title='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
915 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
916 ar(KeyError, self.db.status.set, '1', foo='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
917 # string property
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
918 ar(TypeError, self.db.status.set, '1', name=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
919 # key name clash
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
920 ar(ValueError, self.db.status.set, '2', name='unread')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
921 # set up a valid issue for me to work on
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
922 id = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
923 # invalid link index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
924 ar(IndexError, self.db.issue.set, id, title='foo', status='bar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
925 # invalid link value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
926 ar(ValueError, self.db.issue.set, id, title='foo', status=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
927 # invalid multilink type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
928 ar(TypeError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
929 nosy='hello')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
930 # invalid multilink index type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
931 ar(ValueError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
932 nosy=[1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
933 # invalid multilink index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
934 ar(IndexError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
935 nosy=['10'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
936 # NOTE: the following increment the username to avoid problems
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
937 # within metakit's backend (it creates the node, and then sets the
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
938 # 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
939 # before the age/assignable/etc. set, which raises the exception)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
940 # invalid number value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
941 ar(TypeError, self.db.user.create, username='foo', age='a')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
942 # invalid boolean value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
943 ar(TypeError, self.db.user.create, username='foo2', assignable='true')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
944 nid = self.db.user.create(username='foo3')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
945 # invalid number value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
946 ar(TypeError, self.db.user.set, nid, age='a')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
947 # invalid boolean value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
948 ar(TypeError, self.db.user.set, nid, assignable='true')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
949
3743
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
950 def testAuditors(self):
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
951 class test:
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
952 called = False
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
953 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
954 create = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
955
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
956 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
957 self.db.user.create(username="mary")
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
958 self.assertEqual(create.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
959
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
960 set = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
961 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
962 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
963 self.assertEqual(set.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
964
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
965 retire = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
966 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
967 self.db.user.retire('1')
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
968 self.assertEqual(retire.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
969
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
970 def testAuditorTwo(self):
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
971 class test:
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
972 n = 0
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
973 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
974 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
975 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
976 test = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
977 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
978 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
979 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
980 self.db.user.create(username="mary")
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
981 self.assertEqual(test.call_a, 0)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
982 self.assertEqual(test.call_b, 1)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
983 self.assertEqual(test.call_c, 2)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
984
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
985 def testDefault_Value(self):
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
986 new_issue=self.db.issue.create(title="title", deadline=date.Date('2016-6-30.22:39'))
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
987
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
988 # John Rouillard claims this should return the default value of 1 week for foo,
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
989 # but the hyperdb doesn't assign the default value for missing properties in the
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
990 # db on creation.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
991 result=self.db.issue.get(new_issue, 'foo')
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
992 # When the defaultis automatically set by the hyperdb, change this to
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
993 # match the Interval test below.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
994 self.assertEqual(result, None)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
995
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
996 # but verify that the default value is retreivable
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
997 result=self.db.issue.properties['foo'].get_default_value()
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
998 self.assertEqual(result, date.Interval('-7d'))
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
999
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1000 def testQuietProperty(self):
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1001 # make sure that the quiet properties: "assignable" and "age" are not
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1002 # returned as part of the proplist
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1003 new_user=self.db.user.create(username="pete", age=10, assignable=False)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1004 new_issue=self.db.issue.create(title="title", deadline=date.Date('2016-6-30.22:39'))
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1005 # change all quiet params. Verify they aren't returned in object.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1006 # between this and the issue class every type represented in hyperdb
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1007 # should be initalized with a quiet parameter.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1008 result=self.db.user.set(new_user, username="new", age=20, supervisor='3', assignable=True,
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1009 password=password.Password("3456"), rating=4, realname="newname")
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1010 self.assertEqual(result, {'supervisor': '3', 'username': "new"})
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1011 result=self.db.user.get(new_user, 'age')
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1012 self.assertEqual(result, 20)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1013
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1014 # change all quiet params. Verify they aren't returned in object.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1015 result=self.db.issue.set(new_issue, title="title2", deadline=date.Date('2016-7-13.22:39'),
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1016 assignedto="2", nosy=["3", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1017 self.assertEqual(result, {'title': 'title2'})
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1018
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1019 # also test that we can make a property noisy
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1020 self.db.user.properties['age'].quiet=False
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1021 result=self.db.user.set(new_user, username="old", age=30, supervisor='2', assignable=False)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1022 self.assertEqual(result, {'age': 30, 'supervisor': '2', 'username': "old"})
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1023 self.db.user.properties['age'].quiet=True
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1024
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1025 def testQuietChangenote(self):
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1026 # create user 3 for later use
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1027 self.db.user.create(username="pete", age=10, assignable=False)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1028
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1029 new_issue=self.db.issue.create(title="title", deadline=date.Date('2016-6-30.22:39'))
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1030
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1031 # change all quiet params. Verify they aren't returned in CreateNote.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1032 result=self.db.issue.set(new_issue, title="title2", deadline=date.Date('2016-6-30.22:39'),
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1033 assignedto="2", nosy=["3", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1034 result=self.db.issue.generateCreateNote(new_issue)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1035 self.assertEqual(result, '\n----------\ntitle: title2')
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1036
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1037 # also test that we can make a property noisy
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1038 self.db.issue.properties['nosy'].quiet=False
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1039 self.db.issue.properties['deadline'].quiet=False
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1040 result=self.db.issue.set(new_issue, title="title2", deadline=date.Date('2016-7-13.22:39'),
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1041 assignedto="2", nosy=["1", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1042 result=self.db.issue.generateCreateNote(new_issue)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1043 self.assertEqual(result, '\n----------\ndeadline: 2016-07-13.22:39:00\nnosy: admin, fred\ntitle: title2')
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1044 self.db.issue.properties['nosy'].quiet=True
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1045 self.db.issue.properties['deadline'].quiet=True
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1046
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1047 def testViewPremJournal(self):
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1048 pass
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1049
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1050 def testQuietJournal(self):
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1051 ## This is an example of how to enable logging module
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1052 ## and report the results. It uses testfixtures
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1053 ## that can be installed via pip.
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1054 ## Uncomment below 2 lines:
5263
f015df5f8edf Also comment out testfixture used to capture debug logging.
John Rouillard <rouilj@ieee.org>
parents: 5262
diff changeset
1055 #import logging
f015df5f8edf Also comment out testfixture used to capture debug logging.
John Rouillard <rouilj@ieee.org>
parents: 5262
diff changeset
1056 #from testfixtures import LogCapture
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1057 ## then run every call to roundup functions with:
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1058 #with LogCapture('roundup.hyperdb', level=logging.DEBUG) as l:
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1059 # result=self.db.user.history('2')
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1060 #print l
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1061 ## change 'roundup.hyperdb' to the logging name you want to capture.
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1062 ## print l just prints the output. Run using:
6297
a635a60ffb84 Remove standalone pytest run_tests.py bundle
John Rouillard <rouilj@ieee.org>
parents: 6242
diff changeset
1063 ## python -m pytest --capture=no -k testQuietJournal test/test_anydbm.py
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1064
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1065 # FIXME There should be a test via
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1066 # template.py::_HTMLItem::history() and verify the output.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1067 # not sure how to get there from here. -- rouilj
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1068
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1069 # The Class::history() method now does filtering of quiet
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1070 # props. Make sure that the quiet properties: "assignable"
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1071 # and "age" are not returned as part of the journal
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1072 new_user=self.db.user.create(username="pete", age=10, assignable=False)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1073 new_issue=self.db.issue.create(title="title", deadline=date.Date('2016-6-30.22:39'))
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1074
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1075 # change all quiet params. Verify they aren't returned in journal.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1076 # between this and the issue class every type represented in hyperdb
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1077 # should be initalized with a quiet parameter.
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1078 result=self.db.user.set(new_user, username="new", age=20,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1079 supervisor='1', assignable=True,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1080 password=password.Password("3456"),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1081 rating=4, realname="newname")
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1082 result=self.db.user.history(new_user, skipquiet=False)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1083 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1084 [('3', <Date 2017-04-14.02:12:20.922>, '1', 'create', {}),
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1085 ('3', <Date 2017-04-14.02:12:20.922>, '1', 'set',
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1086 {'username': 'pete', 'assignable': False,
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1087 'supervisor': None, 'realname': None, 'rating': None,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1088 'age': 10, 'password': None})]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1089 '''
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1090 expected = {'username': 'pete', 'assignable': False,
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1091 'supervisor': None, 'realname': None, 'rating': None,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1092 'age': 10, 'password': None}
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1093
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1094 result.sort()
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1095 (id, tx_date, user, action, args) = result[-1]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1096 # check piecewise ignoring date of transaction
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1097 self.assertEqual('3', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1098 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1099 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1100 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1101
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1102 # change all quiet params on issue.
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1103 result=self.db.issue.set(new_issue, title="title2",
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1104 deadline=date.Date('2016-07-30.22:39'),
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1105 assignedto="2", nosy=["3", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1106 result=self.db.issue.generateCreateNote(new_issue)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1107 self.assertEqual(result, '\n----------\ntitle: title2')
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1108
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1109 # check history including quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1110 result=self.db.issue.history(new_issue, skipquiet=False)
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
1111 print(result)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1112 ''' output should be like:
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1113 [ ... ('1', <Date 2017-04-14.01:41:08.466>, '1', 'set',
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1114 {'assignedto': None, 'nosy': (('+', ['3', '2']),),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1115 'deadline': <Date 2016-06-30.22:39:00.000>,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1116 'title': 'title'})
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1117 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1118 expected = {'assignedto': None,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1119 'nosy': (('+', ['3', '2']),),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1120 'deadline': date.Date('2016-06-30.22:39'),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1121 'title': 'title'}
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1122
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1123 result.sort()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
1124 print("history include quiet props", result[-1])
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1125 (id, tx_date, user, action, args) = result[-1]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1126 # check piecewise ignoring date of transaction
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1127 self.assertEqual('1', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1128 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1129 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1130 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1131
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1132 # check history removing quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1133 result=self.db.issue.history(new_issue)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1134 ''' output should be like:
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1135 [ ... ('1', <Date 2017-04-14.01:41:08.466>, '1', 'set',
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1136 {'title': 'title'})
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1137 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1138 expected = {'title': 'title'}
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1139
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1140 result.sort()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
1141 print("history remove quiet props", result[-1])
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1142 (id, tx_date, user, action, args) = result[-1]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1143 # check piecewise
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1144 self.assertEqual('1', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1145 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1146 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1147 self.assertEqual(expected, args)
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1148
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1149 # also test that we can make a property noisy
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1150 self.db.issue.properties['nosy'].quiet=False
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1151 self.db.issue.properties['deadline'].quiet=False
5234
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1152
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1153 # FIXME: mysql use should be fixed or
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1154 # a different way of checking this should be done.
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1155 # this sleep is a hack.
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1156 # mysql transation timestamps are in whole
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1157 # seconds. To get the history to sort in proper
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1158 # order by using timestamps we have to sleep 2 seconds
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1159 # here tomake sure the timestamp between this transaction
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1160 # and the last transaction is at least 1 second apart.
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1161 import time; time.sleep(2)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1162 result=self.db.issue.set(new_issue, title="title2",
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1163 deadline=date.Date('2016-7-13.22:39'),
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1164 assignedto="2", nosy=["1", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1165 result=self.db.issue.generateCreateNote(new_issue)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1166 self.assertEqual(result, '\n----------\ndeadline: 2016-07-13.22:39:00\nnosy: admin, fred\ntitle: title2')
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1167
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1168
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1169 # check history removing the current quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1170 result=self.db.issue.history(new_issue)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1171 expected = {'nosy': (('+', ['1']), ('-', ['3'])),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1172 'deadline': date.Date("2016-07-30.22:39:00.000")}
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1173
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1174 result.sort()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
1175 print("result unquiet", result)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1176 (id, tx_date, user, action, args) = result[-1]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1177 # check piecewise
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1178 self.assertEqual('1', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1179 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1180 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1181 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1182
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1183 result=self.db.user.history('2')
5262
b5400cae9c2a Make sure to sort the result otherwise anydbm and sql ordering is different.
John Rouillard <rouilj@ieee.org>
parents: 5261
diff changeset
1184 result.sort()
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1185
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1186 # result should look like:
5262
b5400cae9c2a Make sure to sort the result otherwise anydbm and sql ordering is different.
John Rouillard <rouilj@ieee.org>
parents: 5261
diff changeset
1187 # [('2', <Date 2017-08-29.01:42:40.227>, '1', 'create', {}),
b5400cae9c2a Make sure to sort the result otherwise anydbm and sql ordering is different.
John Rouillard <rouilj@ieee.org>
parents: 5261
diff changeset
1188 # ('2', <Date 2017-08-29.01:42:44.283>, '1', 'link',
b5400cae9c2a Make sure to sort the result otherwise anydbm and sql ordering is different.
John Rouillard <rouilj@ieee.org>
parents: 5261
diff changeset
1189 # ('issue', '1', 'nosy')) ]
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1190
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1191 expected2 = ('issue', '1', 'nosy')
5262
b5400cae9c2a Make sure to sort the result otherwise anydbm and sql ordering is different.
John Rouillard <rouilj@ieee.org>
parents: 5261
diff changeset
1192
b5400cae9c2a Make sure to sort the result otherwise anydbm and sql ordering is different.
John Rouillard <rouilj@ieee.org>
parents: 5261
diff changeset
1193 (id, tx_date, user, action, args) = result[-1]
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1194
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1195 self.assertEqual(len(result),2)
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1196
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1197 self.assertEqual('2', id)
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1198 self.assertEqual('1', user)
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1199 self.assertEqual('link', action)
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1200 self.assertEqual(expected2, args)
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1201
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1202 # reset quiet props
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1203 self.db.issue.properties['nosy'].quiet=True
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1204 self.db.issue.properties['deadline'].quiet=True
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1205
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1206 # Change the role for the new_user.
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1207 # If journal is retrieved by admin this adds the role
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1208 # change as the last element. If retreived by non-admin
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1209 # it should not be returned because the user has no
5235
9886917c8545 Add more sleeps to work around mysql timestamp issue.
John Rouillard <rouilj@ieee.org>
parents: 5234
diff changeset
1210 # View permissons on role.
9886917c8545 Add more sleeps to work around mysql timestamp issue.
John Rouillard <rouilj@ieee.org>
parents: 5234
diff changeset
1211 # FIXME delay by two seconds due to mysql missing
9886917c8545 Add more sleeps to work around mysql timestamp issue.
John Rouillard <rouilj@ieee.org>
parents: 5234
diff changeset
1212 # fractional seconds. See sleep above for details
9886917c8545 Add more sleeps to work around mysql timestamp issue.
John Rouillard <rouilj@ieee.org>
parents: 5234
diff changeset
1213 time.sleep(2)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1214 result=self.db.user.set(new_user, roles="foo, bar")
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1215
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1216 # Verify last journal entry as admin is a role change
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1217 # from None
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1218 result=self.db.user.history(new_user, skipquiet=False)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1219 result.sort()
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1220 ''' result should end like:
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1221 [ ...
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1222 ('3', <Date 2017-04-15.02:06:11.482>, '1', 'set',
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1223 {'username': 'pete', 'assignable': False,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1224 'supervisor': None, 'realname': None,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1225 'rating': None, 'age': 10, 'password': None}),
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1226 ('3', <Date 2017-04-15.02:06:11.482>, '1', 'link',
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1227 ('issue', '1', 'nosy')),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1228 ('3', <Date 2017-04-15.02:06:11.482>, '1', 'unlink',
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1229 ('issue', '1', 'nosy')),
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1230 ('3', <Date 2017-04-15.02:06:11.482>, '1', 'set',
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1231 {'roles': None})]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1232 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1233 (id, tx_date, user, action, args) = result[-1]
5235
9886917c8545 Add more sleeps to work around mysql timestamp issue.
John Rouillard <rouilj@ieee.org>
parents: 5234
diff changeset
1234 expected = {'roles': None }
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1235
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1236 self.assertEqual('3', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1237 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1238 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1239 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1240
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1241 # set an existing user's role to User so it can
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1242 # view some props of the user class (search backwards
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1243 # for QuietJournal to see the properties, they should be:
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1244 # 'username', 'supervisor', 'assignable' i.e. age is not
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1245 # one of them.
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1246 id = self.db.user.lookup("fred")
5235
9886917c8545 Add more sleeps to work around mysql timestamp issue.
John Rouillard <rouilj@ieee.org>
parents: 5234
diff changeset
1247 # FIXME mysql timestamp issue see sleeps above
9886917c8545 Add more sleeps to work around mysql timestamp issue.
John Rouillard <rouilj@ieee.org>
parents: 5234
diff changeset
1248 time.sleep(2)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1249 result=self.db.user.set(id, roles="User")
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1250 # make the user fred current.
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1251 self.db.setCurrentUser('fred')
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1252 self.assertEqual(self.db.getuid(), id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1253
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1254 # check history as the user fred
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1255 # include quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1256 # but require View perms
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1257 result=self.db.user.history(new_user, skipquiet=False)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1258 result.sort()
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1259 ''' result should look like
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1260 [('3', <Date 2017-04-15.01:43:26.911>, '1', 'create', {}),
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1261 ('3', <Date 2017-04-15.01:43:26.911>, '1', 'set',
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1262 {'username': 'pete', 'assignable': False,
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1263 'supervisor': None, 'age': 10})]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1264 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1265 # analyze last item
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1266 (id, tx_date, user, action, args) = result[-1]
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1267 expected= {'username': 'pete', 'assignable': False,
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1268 'supervisor': None}
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1269
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1270 self.assertEqual('3', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1271 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1272 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1273 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1274
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1275 # reset the user to admin
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1276 self.db.setCurrentUser('admin')
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1277 self.assertEqual(self.db.getuid(), '1') # admin is always 1
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1278
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1279 def testJournals(self):
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
1280 muid = self.db.user.create(username="mary")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1281 self.db.user.create(username="pete")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1282 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1283 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1284
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1285 # journal entry for issue create
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1286 journal = self.db.getjournal('issue', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1287 self.assertEqual(1, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1288 (nodeid, date_stamp, journaltag, action, params) = journal[0]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1289 self.assertEqual(nodeid, '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1290 self.assertEqual(journaltag, self.db.user.lookup('admin'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1291 self.assertEqual(action, 'create')
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
1292 keys = sorted(params.keys())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1293 self.assertEqual(keys, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1294
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1295 # journal entry for link
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1296 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1297 self.assertEqual(1, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1298 self.db.issue.set('1', assignedto='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1299 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1300 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1301 self.assertEqual(2, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1302 (nodeid, date_stamp, journaltag, action, params) = journal[1]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1303 self.assertEqual('1', nodeid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1304 self.assertEqual('1', journaltag)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1305 self.assertEqual('link', action)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1306 self.assertEqual(('issue', '1', 'assignedto'), params)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1307
2754
1f89984c0ea5 testJournals: if backend is too fast, two journal entries...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2753
diff changeset
1308 # 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
1309 time.sleep(0.01)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1310 # 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
1311 self.db.setCurrentUser('mary')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1312 self.db.issue.set('1', assignedto='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1313 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1314 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1315 self.assertEqual(3, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1316 (nodeid, date_stamp, journaltag, action, params) = journal[2]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1317 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
1318 self.assertEqual(muid, journaltag)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1319 self.assertEqual('unlink', action)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1320 self.assertEqual(('issue', '1', 'assignedto'), params)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1321
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1322 # test disabling journalling
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1323 # ... get the last entry
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
1324 jlen = len(self.db.getjournal('user', '1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1325 self.db.issue.disableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1326 self.db.issue.set('1', title='hello world')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1327 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1328 # 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
1329 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
1330 jlen = len(self.db.getjournal('issue', '1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1331 self.db.issue.enableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1332 self.db.issue.set('1', title='hello world 2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1333 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1334 # 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
1335 self.assertNotEqual(jlen, len(self.db.getjournal('issue', '1')))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1336
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1337 def testJournalNonexistingProperty(self):
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1338 # Test for non-existing properties, link/unlink events to
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1339 # non-existing classes and link/unlink events to non-existing
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1340 # properties in a class: These all may be the result of a schema
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1341 # change and should not lead to a traceback.
5317
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1342 self.db.user.create(username="mary", roles="User")
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1343 id = self.db.issue.create(title="spam", status='1')
5330
c5e72a3c69dd I forgot that mysql is missing fractional seconds in it's
John Rouillard <rouilj@ieee.org>
parents: 5329
diff changeset
1344 # FIXME delay by two seconds due to mysql missing
c5e72a3c69dd I forgot that mysql is missing fractional seconds in it's
John Rouillard <rouilj@ieee.org>
parents: 5329
diff changeset
1345 # fractional seconds. This keeps the journal order correct.
c5e72a3c69dd I forgot that mysql is missing fractional seconds in it's
John Rouillard <rouilj@ieee.org>
parents: 5329
diff changeset
1346 time.sleep(2)
5329
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1347 self.db.issue.set(id, title='green eggs')
5330
c5e72a3c69dd I forgot that mysql is missing fractional seconds in it's
John Rouillard <rouilj@ieee.org>
parents: 5329
diff changeset
1348 time.sleep(2)
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1349 self.db.commit()
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1350 journal = self.db.getjournal('issue', id)
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1351 now = date.Date('.')
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1352 sec = date.Interval('0:00:01')
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1353 sec2 = date.Interval('0:00:02')
5329
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1354 jp0 = dict(title = 'spam')
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1355 # Non-existing property changed
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1356 jp1 = dict(nonexisting = None)
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1357 journal.append ((id, now, '1', 'set', jp1))
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1358 # Link from user-class to non-existing property
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1359 jp2 = ('user', '1', 'xyzzy')
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1360 journal.append ((id, now+sec, '1', 'link', jp2))
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1361 # Link from non-existing class
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1362 jp3 = ('frobozz', '1', 'xyzzy')
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1363 journal.append ((id, now+sec2, '1', 'link', jp3))
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1364 self.db.setjournal('issue', id, journal)
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1365 self.db.commit()
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1366 result=self.db.issue.history(id)
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1367 result.sort()
5317
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1368 # anydbm drops unknown properties during serialisation
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1369 if self.db.dbtype == 'anydbm':
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1370 self.assertEqual(len(result), 4)
5329
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1371 self.assertEqual(result [1][4], jp0)
5317
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1372 self.assertEqual(result [2][4], jp2)
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1373 self.assertEqual(result [3][4], jp3)
5329
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1374 else:
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1375 self.assertEqual(len(result), 5)
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1376 self.assertEqual(result [1][4], jp0)
5753
486824f4455a Dump results of test. Getting intermittent failure from
John Rouillard <rouilj@ieee.org>
parents: 5725
diff changeset
1377 print(result) # following test fails sometimes under sqlite
486824f4455a Dump results of test. Getting intermittent failure from
John Rouillard <rouilj@ieee.org>
parents: 5725
diff changeset
1378 # in travis. Looks like an ordering issue
486824f4455a Dump results of test. Getting intermittent failure from
John Rouillard <rouilj@ieee.org>
parents: 5725
diff changeset
1379 # in python 3.5. Print result to debug.
5329
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1380 self.assertEqual(result [2][4], jp1)
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1381 self.assertEqual(result [3][4], jp2)
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1382 self.assertEqual(result [4][4], jp3)
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1383 self.db.close()
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1384 # Verify that normal user doesn't see obsolete props/classes
6365
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1385 self.open_database('mary')
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1386 setupSchema(self.db, 0, self.module)
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1387 # allow mary to see issue fields like title
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1388 self.db.security.addPermissionToRole('User', 'View', 'issue')
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1389 result=self.db.issue.history(id)
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1390 self.assertEqual(len(result), 2)
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1391 self.assertEqual(result [1][4], jp0)
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1392
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1393 def testJournalPreCommit(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1394 id = self.db.user.create(username="mary")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1395 self.assertEqual(len(self.db.getjournal('user', id)), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1396 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1397
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1398 def testPack(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1399 id = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1400 self.db.commit()
2255
4990fd3d57a7 fix mysql testing date granularity thingy
Richard Jones <richard@users.sourceforge.net>
parents: 2247
diff changeset
1401 time.sleep(1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1402 self.db.issue.set(id, status='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1403 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1404
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1405 # 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
1406 time.sleep(1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1407 pack_before = date.Date('.')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1408
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1409 # wait another second and add one more entry
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1410 time.sleep(1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1411 self.db.issue.set(id, status='3')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1412 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1413 jlen = len(self.db.getjournal('issue', id))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1414
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1415 # pack
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1416 self.db.pack(pack_before)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1417
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1418 # we should have the create and last set entries now
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1419 self.assertEqual(jlen-1, len(self.db.getjournal('issue', id)))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1420
1986
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
1421 def testIndexerSearching(self):
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
1422 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
1423 # 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
1424 f2 = self.db.file.create(content='world', type="text/frozz",
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1425 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
1426 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
1427 i2 = self.db.issue.create(title="flebble the frooz")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1428 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1429 self.assertEqual(self.db.indexer.search([], self.db.issue), {})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1430 self.assertEqual(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
1431 {i1: {'files': [f1]}})
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
1432 # content='world' has the wrong content-type and shouldn't be indexed
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1433 self.assertEqual(self.db.indexer.search(['world'], self.db.issue), {})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1434 self.assertEqual(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
1435 {i2: {}})
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1436 self.assertEqual(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
1437 {i1: {}, i2: {}})
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1438
3048
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
1439 # test AND'ing of search terms
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1440 self.assertEqual(self.db.indexer.search(['frooz', 'flebble'],
3048
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
1441 self.db.issue), {i2: {}})
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
1442
2872
d530b68e4b42 don't index common words [SF#1046612]
Richard Jones <richard@users.sourceforge.net>
parents: 2820
diff changeset
1443 # unindexed stopword
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1444 self.assertEqual(self.db.indexer.search(['the'], self.db.issue), {})
2872
d530b68e4b42 don't index common words [SF#1046612]
Richard Jones <richard@users.sourceforge.net>
parents: 2820
diff changeset
1445
3997
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1446 def testIndexerSearchingLink(self):
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1447 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
1448 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
1449 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
1450 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
1451 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1452 self.assertEqual(self.db.indexer.search(['two'], self.db.issue),
3997
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1453 {i1: {'messages': [m1]}, i2: {'feedback': [m2]}})
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1454
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
1455 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
1456 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
1457 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
1458 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
1459 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
1460 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1461 self.assertEqual(self.db.indexer.search([], self.db.issue), {})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1462 self.assertEqual(self.db.indexer.search(['one'], self.db.issue),
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
1463 {i1: {'messages': [m1]}})
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1464 self.assertEqual(self.db.indexer.search(['two'], self.db.issue),
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
1465 {i1: {'messages': [m1]}, i2: {'spam': [m2]}})
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1466 self.assertEqual(self.db.indexer.search(['three'], self.db.issue),
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
1467 {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
1468
3547
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1469 def testReindexingChange(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1470 search = self.db.indexer.search
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1471 issue = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1472 i1 = issue.create(title="flebble plop")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1473 i2 = issue.create(title="flebble frooz")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1474 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1475 self.assertEqual(search(['plop'], issue), {i1: {}})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1476 self.assertEqual(search(['flebble'], issue), {i1: {}, i2: {}})
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1477
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1478 # change i1's title
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1479 issue.set(i1, title="plop")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1480 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1481 self.assertEqual(search(['plop'], issue), {i1: {}})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1482 self.assertEqual(search(['flebble'], issue), {i2: {}})
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1483
3547
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1484 def testReindexingClear(self):
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1485 search = self.db.indexer.search
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1486 issue = self.db.issue
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1487 i1 = issue.create(title="flebble plop")
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1488 i2 = issue.create(title="flebble frooz")
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1489 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1490 self.assertEqual(search(['plop'], issue), {i1: {}})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1491 self.assertEqual(search(['flebble'], issue), {i1: {}, i2: {}})
3547
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1492
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1493 # unset i1's title
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1494 issue.set(i1, title="")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1495 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1496 self.assertEqual(search(['plop'], issue), {})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1497 self.assertEqual(search(['flebble'], issue), {i2: {}})
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1498
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1499 def testFileClassReindexing(self):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1500 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
1501 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
1502 i1 = self.db.issue.create(files=[f1, f2])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1503 self.db.commit()
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1504 d = self.db.indexer.search(['hello'], self.db.issue)
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
1505 self.assertTrue(i1 in d)
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1506 d[i1]['files'].sort()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1507 self.assertEqual(d, {i1: {'files': [f1, f2]}})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1508 self.assertEqual(self.db.indexer.search(['world'], self.db.issue),
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1509 {i1: {'files': [f2]}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1510 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
1511 self.db.commit()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1512 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
1513 d[i1]['files'].sort()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1514 self.assertEqual(d, {i1: {'files': [f1, f2]}})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1515 self.assertEqual(self.db.indexer.search(['hello'], self.db.issue),
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1516 {i1: {'files': [f2]}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1517
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1518 def testFileClassIndexingNoNoNo(self):
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1519 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
1520 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1521 self.assertEqual(self.db.indexer.search(['hello'], self.db.file),
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1522 {'1': {}})
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1523
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1524 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
1525 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1526 self.assertEqual(self.db.indexer.search(['hello'], self.db.file_nidx),
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1527 {})
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1528
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1529 def testForcedReindexing(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1530 self.db.issue.create(title="flebble frooz")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1531 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1532 self.assertEqual(self.db.indexer.search(['flebble'], self.db.issue),
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1533 {'1': {}})
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1534 self.db.indexer.quiet = 1
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1535 self.db.indexer.force_reindex()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1536 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1537 self.db.indexer.quiet = 9
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1538 self.assertEqual(self.db.indexer.search(['flebble'], self.db.issue),
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1539 {'1': {}})
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1540
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
1541 def testIndexingPropertiesOnImport(self):
3935
1dab48842cbd Throwing up hands in resignation and finally deleting the metakit backend.
Richard Jones <richard@users.sourceforge.net>
parents: 3931
diff changeset
1542 # 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
1543 title = 'Bzzt'
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1544 nodeid = self.db.issue.import_list(['title', 'messages', 'files',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
1545 'spam', 'nosy', 'superseder', 'keywords', 'keywords2'],
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
1546 [repr(title), '[]', '[]', '[]', '[]', '[]', '[]', '[]'])
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1547 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
1548
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1549 # Content of title attribute is indexed
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1550 self.assertEqual(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
1551 {str(nodeid):{}})
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1552
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1553
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1554 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1555 # searching tests follow
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1556 #
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1557 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
1558 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
1559
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1560 def _find_test_setup(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1561 self.db.file.create(content='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1562 self.db.file.create(content='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1563 self.db.user.create(username='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1564 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
1565 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
1566 assignedto='2')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1567 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
1568 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
1569 files=['1','2'])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1570 return one, two, three, four
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1571
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1572 def testFindLink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1573 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1574 got = self.db.issue.find(status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1575 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1576 self.assertEqual(got, [one, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1577 got = self.db.issue.find(status={'1':1})
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1578 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1579 self.assertEqual(got, [one, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1580
6151
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1581 def testFindRevLinkMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1582 ae, dummy = self.filteringSetupTransitiveSearch('user')
6151
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1583 ni = 'nosy_issues'
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1584 self.db.issue.set('6', nosy=['3', '4', '5'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1585 self.db.issue.set('7', nosy=['5'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1586 # After this setup we have the following values for nosy:
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1587 # issue assignedto nosy
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1588 # 1: 6 4
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1589 # 2: 6 5
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1590 # 3: 7
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1591 # 4: 8
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1592 # 5: 9
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1593 # 6: 10 3, 4, 5
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1594 # 7: 10 5
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1595 # 8: 10
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1596 # assignedto links back from 'issues'
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1597 # nosy links back from 'nosy_issues'
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1598 self.assertEqual(self.db.user.find(issues={'1':1}), ['6'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1599 self.assertEqual(self.db.user.find(issues={'8':1}), ['10'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1600 self.assertEqual(self.db.user.find(issues={'2':1, '5':1}), ['6', '9'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1601 self.assertEqual(self.db.user.find(nosy_issues={'8':1}), [])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1602 self.assertEqual(self.db.user.find(nosy_issues={'6':1}),
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1603 ['3', '4', '5'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1604 self.assertEqual(self.db.user.find(nosy_issues={'3':1, '5':1}), [])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1605 self.assertEqual(self.db.user.find(nosy_issues={'2':1, '6':1, '7':1}),
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1606 ['3', '4', '5'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1607
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1608 def testFindLinkFail(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1609 self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1610 self.assertEqual(self.db.issue.find(status='4'), [])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1611 self.assertEqual(self.db.issue.find(status={'4':1}), [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1612
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1613 def testFindLinkUnset(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1614 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1615 got = self.db.issue.find(assignedto=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1616 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1617 self.assertEqual(got, [one, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1618 got = self.db.issue.find(assignedto={None:1})
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1619 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1620 self.assertEqual(got, [one, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1621
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2472
diff changeset
1622 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
1623 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
1624 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
1625 l.sort()
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1626 self.assertEqual(l, [one, three, four])
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1627 l = self.db.issue.find(status=('1', '3'))
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1628 l.sort()
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1629 self.assertEqual(l, [one, three, four])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1630 l = self.db.issue.find(status=['1', '3'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1631 l.sort()
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1632 self.assertEqual(l, [one, three, four])
2968
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1633 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
1634 l.sort()
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1635 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
1636
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1637 def testFindMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1638 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
1639 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
1640 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1641 self.assertEqual(got, [two, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1642 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
1643 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1644 self.assertEqual(got, [two, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1645 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
1646 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1647 self.assertEqual(got, [two, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1648
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1649 def testFindMultiMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1650 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
1651 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
1652 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1653 self.assertEqual(got, [two, three, four])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1654 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
1655 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1656 self.assertEqual(got, [two, three, four])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1657
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1658 def testFindMultilinkFail(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1659 self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1660 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
1661 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
1662
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1663 def testFindMultilinkUnset(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1664 self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1665 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
1666
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1667 def testFindLinkAndMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1668 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1669 got = self.db.issue.find(status='1', nosy='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1670 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1671 self.assertEqual(got, [one, two, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1672 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
1673 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1674 self.assertEqual(got, [one, two, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1675
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1676 def testFindRetired(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1677 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
1678 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
1679 self.db.issue.retire(one)
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1680 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
1681
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1682 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
1683 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
1684
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1685 ids = []
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1686 ids.append(self.db.issue.create(title="spam"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1687 self.db.issue.create(title="not spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1688 ids.append(self.db.issue.create(title="spam"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1689 ids.sort()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1690 got = self.db.issue.stringFind(title='spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1691 got.sort()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1692 self.assertEqual(got, ids)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1693 self.assertEqual(self.db.issue.stringFind(title='fubar'), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1694
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
1695 # 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
1696 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
1697 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
1698
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1699 def filteringSetup(self, classname='issue'):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1700 for user in (
4365
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1701 {'username': 'bleep', 'age': 1, 'assignable': True},
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1702 {'username': 'blop', 'age': 1.5, 'assignable': True},
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1703 {'username': 'blorp', 'age': 2, 'assignable': False}):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1704 self.db.user.create(**user)
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1705 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
1706 f = self.db.file.create(content=file_content)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1707 for issue in (
1955
b00ad075bb2f more unit tests, fixes and cleanups
Richard Jones <richard@users.sourceforge.net>
parents: 1951
diff changeset
1708 {'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
1709 '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
1710 '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
1711 {'title': 'issue two', 'status': '1', 'assignedto': '2',
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1712 '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
1713 'deadline': date.Date('2003-01-01.00:00')},
2601
113548baeed2 API clarification.
Richard Jones <richard@users.sourceforge.net>
parents: 2536
diff changeset
1714 {'title': 'issue three', 'status': '1', 'priority': '2',
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1715 'nosy': ['1','2'], 'deadline': date.Date('2003-02-18')},
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1716 {'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
1717 'foo': date.Interval('0:10'), 'priority': '2',
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1718 '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
1719 'files': [f]}):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1720 self.db.issue.create(**issue)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1721 self.db.commit()
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1722 return self.iterSetup(classname)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1723
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1724 def testFilteringID(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1725 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1726 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1727 ae(filt(None, {'id': '1'}, ('+','id'), (None,None)), ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1728 ae(filt(None, {'id': '2'}, ('+','id'), (None,None)), ['2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1729 ae(filt(None, {'id': '100'}, ('+','id'), (None,None)), [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1730
4365
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1731 def testFilteringBoolean(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1732 ae, iiter = self.filteringSetup('user')
4365
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1733 a = 'assignable'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1734 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1735 ae(filt(None, {a: '1'}, ('+','id'), (None,None)), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1736 ae(filt(None, {a: '0'}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1737 ae(filt(None, {a: ['1']}, ('+','id'), (None,None)), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1738 ae(filt(None, {a: ['0']}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1739 ae(filt(None, {a: ['0','1']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1740 ['3','4','5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1741 ae(filt(None, {a: 'True'}, ('+','id'), (None,None)), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1742 ae(filt(None, {a: 'False'}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1743 ae(filt(None, {a: ['True']}, ('+','id'), (None,None)), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1744 ae(filt(None, {a: ['False']}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1745 ae(filt(None, {a: ['False','True']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1746 ['3','4','5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1747 ae(filt(None, {a: True}, ('+','id'), (None,None)), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1748 ae(filt(None, {a: False}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1749 ae(filt(None, {a: 1}, ('+','id'), (None,None)), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1750 ae(filt(None, {a: 0}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1751 ae(filt(None, {a: [1]}, ('+','id'), (None,None)), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1752 ae(filt(None, {a: [0]}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1753 ae(filt(None, {a: [0,1]}, ('+','id'), (None,None)), ['3','4','5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1754 ae(filt(None, {a: [True]}, ('+','id'), (None,None)), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1755 ae(filt(None, {a: [False]}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1756 ae(filt(None, {a: [False,True]}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1757 ['3','4','5'])
4365
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1758
2418
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1759 def testFilteringNumber(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1760 ae, iiter = self.filteringSetup('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1761 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1762 ae(filt(None, {'age': '1'}, ('+','id'), (None,None)), ['3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1763 ae(filt(None, {'age': '1.5'}, ('+','id'), (None,None)), ['4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1764 ae(filt(None, {'age': '2'}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1765 ae(filt(None, {'age': ['1','2']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1766 ['3','5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1767 ae(filt(None, {'age': 2}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1768 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
1769
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1770 def testFilteringString(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1771 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1772 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1773 ae(filt(None, {'title': ['one']}, ('+','id'), (None,None)), ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1774 ae(filt(None, {'title': ['issue one']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1775 ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1776 ae(filt(None, {'title': ['issue', 'one']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1777 ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1778 ae(filt(None, {'title': ['issue']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1779 ['1','2','3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1780 ae(filt(None, {'title': ['one', 'two']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1781 [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1782
4787
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1783 def testFilteringStringCase(self):
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1784 """
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1785 Similar to testFilteringString except the search parameters
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1786 have different capitalization.
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1787 """
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1788 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1789 for filt in iiter():
4787
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1790 ae(filt(None, {'title': ['One']}, ('+','id'), (None,None)), ['1'])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1791 ae(filt(None, {'title': ['Issue One']}, ('+','id'), (None,None)),
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1792 ['1'])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1793 ae(filt(None, {'title': ['ISSUE', 'ONE']}, ('+','id'), (None,None)),
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1794 ['1'])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1795 ae(filt(None, {'title': ['iSSUE']}, ('+','id'), (None,None)),
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1796 ['1','2','3'])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1797 ae(filt(None, {'title': ['One', 'Two']}, ('+','id'), (None,None)),
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1798 [])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1799
5867
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1800 def testFilteringStringExactMatch(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1801 ae, iiter = self.filteringSetup()
5867
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1802 # Change title of issue2 to 'issue' so we can test substring
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1803 # search vs exact search
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1804 self.db.issue.set('2', title='issue')
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1805 #self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1806 for filt in iiter():
5867
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1807 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1808 {'title': ['one']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1809 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1810 {'title': ['issue one']}), ['1'])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1811 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1812 {'title': ['issue', 'one']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1813 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1814 {'title': ['issue']}), ['2'])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1815 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1816 {'title': ['one', 'two']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1817 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1818 {'title': ['One']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1819 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1820 {'title': ['Issue One']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1821 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1822 {'title': ['ISSUE', 'ONE']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1823 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1824 {'title': ['iSSUE']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1825 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1826 {'title': ['One', 'Two']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1827 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1828 {'title': ['non four']}), ['4'])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1829 # Both, filterspec and exact_match_spec on same prop
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1830 ae(filt(None, {'title': 'iSSUE'}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1831 {'title': ['issue']}), ['2'])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1832
4849
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1833 def testFilteringSpecialChars(self):
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1834 """ Special characters in SQL search are '%' and '_', some used
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1835 to lead to a traceback.
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1836 """
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1837 ae, iiter = self.filteringSetup()
4849
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1838 self.db.issue.set('1', title="With % symbol")
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1839 self.db.issue.set('2', title="With _ symbol")
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1840 self.db.issue.set('3', title="With \\ symbol")
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1841 self.db.issue.set('4', title="With ' symbol")
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1842 d = dict (status = '1')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1843 for filt in iiter():
4849
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1844 ae(filt(None, dict(title='%'), ('+','id'), (None,None)), ['1'])
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1845 ae(filt(None, dict(title='_'), ('+','id'), (None,None)), ['2'])
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1846 ae(filt(None, dict(title='\\'), ('+','id'), (None,None)), ['3'])
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1847 ae(filt(None, dict(title="'"), ('+','id'), (None,None)), ['4'])
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1848
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1849 def testFilteringLink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1850 ae, iiter = self.filteringSetup()
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1851 a = 'assignedto'
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1852 grp = (None, None)
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1853 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1854 ae(filt(None, {'status': '1'}, ('+','id'), grp), ['2','3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1855 ae(filt(None, {a: '-1'}, ('+','id'), grp), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1856 ae(filt(None, {a: None}, ('+','id'), grp), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1857 ae(filt(None, {a: [None]}, ('+','id'), grp), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1858 ae(filt(None, {a: ['-1', None]}, ('+','id'), grp), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1859 ae(filt(None, {a: ['1', None]}, ('+','id'), grp), ['1', '3','4'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1860
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1861 def testFilteringRevLink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1862 ae, iiter = self.filteringSetupTransitiveSearch('user')
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1863 # We have
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1864 # issue assignedto
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1865 # 1: 6
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1866 # 2: 6
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1867 # 3: 7
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1868 # 4: 8
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1869 # 5: 9
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1870 # 6: 10
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1871 # 7: 10
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1872 # 8: 10
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1873 for filt in iiter():
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1874 ae(filt(None, {'issues': ['3', '4']}), ['7', '8'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1875 ae(filt(None, {'issues': ['1', '4', '8']}), ['6', '8', '10'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1876 ae(filt(None, {'issues.title': ['ts2']}), ['6'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1877 ae(filt(None, {'issues': ['-1']}), ['1', '2', '3', '4', '5'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1878 ae(filt(None, {'issues': '-1'}), ['1', '2', '3', '4', '5'])
6179
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1879 def ls(x):
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1880 return list(sorted(x))
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1881 self.assertEqual(ls(self.db.user.get('6', 'issues')), ['1', '2'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1882 self.assertEqual(ls(self.db.user.get('7', 'issues')), ['3'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1883 self.assertEqual(ls(self.db.user.get('10', 'issues')), ['6', '7', '8'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1884 n = self.db.user.getnode('6')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1885 self.assertEqual(ls(n.issues), ['1', '2'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1886 # Now retire some linked-to issues and retry
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1887 self.db.issue.retire('6')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1888 self.db.issue.retire('2')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1889 self.db.issue.retire('3')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1890 self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1891 for filt in iiter():
6179
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1892 ae(filt(None, {'issues': ['3', '4']}), ['8'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1893 ae(filt(None, {'issues': ['1', '4', '8']}), ['6', '8', '10'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1894 ae(filt(None, {'issues.title': ['ts2']}), [])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1895 ae(filt(None, {'issues': ['-1']}), ['1', '2', '3', '4', '5', '7'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1896 ae(filt(None, {'issues': '-1'}), ['1', '2', '3', '4', '5', '7'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1897 self.assertEqual(ls(self.db.user.get('6', 'issues')), ['1'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1898 self.assertEqual(ls(self.db.user.get('7', 'issues')), [])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
1899 self.assertEqual(ls(self.db.user.get('10', 'issues')), ['7', '8'])
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1900
6402
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1901 def testFilteringRevLinkExpression(self):
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1902 ae, iiter = self.filteringSetupTransitiveSearch('user')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1903 # We have
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1904 # issue assignedto
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1905 # 1: 6
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1906 # 2: 6
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1907 # 3: 7
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1908 # 4: 8
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1909 # 5: 9
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1910 # 6: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1911 # 7: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1912 # 8: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1913 for filt in iiter():
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1914 # Explicit 'or'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1915 ae(filt(None, {'issues': ['3', '4', '-4']}), ['7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1916 # Implicit or with '-1'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1917 ae(filt(None, {'issues': ['3', '4', '-1']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1918 ['1', '2', '3', '4', '5', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1919 # Explicit or with '-1': 3 or 4 or empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1920 ae(filt(None, {'issues': ['3', '4', '-4', '-1', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1921 ['1', '2', '3', '4', '5', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1922 # '3' and empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1923 ae(filt(None, {'issues': ['3', '-1', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1924 # '6' and '7' and '8'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1925 ae(filt(None, {'issues': ['6', '7', '-3', '8', '-3']}), ['10'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1926 # '6' and '7' or '1' and '2'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1927 ae(filt(None, {'issues': ['6', '7', '-3', '1', '2', '-3', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1928 ['6', '10'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1929 # '1' or '4'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1930 ae(filt(None, {'issues': ['1', '4', '-4']}), ['6', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1931
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1932 # Now retire some linked-to issues and retry
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1933 self.db.issue.retire('6')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1934 self.db.issue.retire('2')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1935 self.db.issue.retire('3')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1936 self.db.commit()
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1937 # We have now
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1938 # issue assignedto
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1939 # 1: 6
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1940 # 4: 8
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1941 # 5: 9
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1942 # 7: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1943 # 8: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1944 for filt in iiter():
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1945 # Explicit 'or'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1946 ae(filt(None, {'issues': ['3', '4', '-4']}), ['8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1947 # Implicit or with '-1'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1948 ae(filt(None, {'issues': ['3', '4', '-1']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1949 ['1', '2', '3', '4', '5', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1950 # Explicit or with '-1': 3 or 4 or empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1951 ae(filt(None, {'issues': ['3', '4', '-4', '-1', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1952 ['1', '2', '3', '4', '5', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1953 # '3' and empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1954 ae(filt(None, {'issues': ['3', '-1', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1955 # '6' and '7' and '8'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1956 ae(filt(None, {'issues': ['6', '7', '-3', '8', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1957 # '7' and '8'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1958 ae(filt(None, {'issues': ['7', '8', '-3']}), ['10'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1959 # '6' and '7' or '1' and '2'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1960 ae(filt(None, {'issues': ['6', '7', '-3', '1', '2', '-3', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1961 [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1962 # '1' or '4'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1963 ae(filt(None, {'issues': ['1', '4', '-4']}), ['6', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
1964
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
1965 def testFilteringLinkSortSearchMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1966 ae, iiter = self.filteringSetup()
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
1967 a = 'assignedto'
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
1968 grp = (None, None)
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1969 for filt in iiter():
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
1970 ae(filt(None, {'status.mls': '1'}, ('+','status')), ['2','3'])
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
1971 ae(filt(None, {'status.mls': '2'}, ('+','status')), ['2','3'])
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
1972
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1973 def testFilteringMultilinkAndGroup(self):
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1974 """testFilteringMultilinkAndGroup:
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1975 See roundup Bug 1541128: apparently grouping by something and
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1976 searching a Multilink failed with MySQL 5.0
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1977 """
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1978 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1979 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1980 ae(f(None, {'files': '1'}, ('-','activity'), ('+','status')), ['4'])
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1981
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1982 def testFilteringRetired(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1983 ae, iiter = self.filteringSetup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1984 self.db.issue.retire('2')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1985 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1986 ae(f(None, {'status': '1'}, ('+','id'), (None,None)), ['3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1987
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1988 def testFilteringMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1989 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1990 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1991 ae(filt(None, {'nosy': '3'}, ('+','id'), (None,None)), ['4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1992 ae(filt(None, {'nosy': '-1'}, ('+','id'), (None,None)), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1993 ae(filt(None, {'nosy': ['1','2']}, ('+', 'status'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1994 ('-', 'deadline')), ['4', '3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1995
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
1996 def testFilteringMultilinkExpression(self):
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
1997 ae, iiter = self.filteringSetup()
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
1998 kw1 = self.db.keyword.create(name='Key1')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
1999 kw2 = self.db.keyword.create(name='Key2')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2000 kw3 = self.db.keyword.create(name='Key3')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2001 kw4 = self.db.keyword.create(name='Key4')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2002 self.db.issue.set('1', keywords=[kw1, kw2])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2003 self.db.issue.set('2', keywords=[kw1, kw3])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2004 self.db.issue.set('3', keywords=[kw2, kw3, kw4])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2005 self.db.issue.set('4', keywords=[kw1, kw2, kw4])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2006 self.db.commit()
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2007 kw = 'keywords'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2008 for filt in iiter():
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2009 # '1' and '2'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2010 ae(filt(None, {kw: ['1', '2', '-3']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2011 ['1', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2012 # ('2' and '4') and '1'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2013 ae(filt(None, {kw: ['1', '2', '4', '-3', '-3']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2014 ['4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2015 # not '4' and '3'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2016 ae(filt(None, {kw: ['3', '4', '-2', '-3']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2017 ['2'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2018 # (not '4' and '3') and '2'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2019 ae(filt(None, {kw: ['2', '3', '4', '-2', '-3', '-3']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2020 [])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2021 # '1' or '2' without explicit 'or'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2022 ae(filt(None, {kw: ['1', '2']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2023 ['1', '2', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2024 # '1' or '2' with explicit 'or'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2025 ae(filt(None, {kw: ['1', '2', '-4']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2026 ['1', '2', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2027 # '3' or '4' without explicit 'or'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2028 ae(filt(None, {kw: ['3', '4']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2029 ['2', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2030 # '3' or '4' with explicit 'or'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2031 ae(filt(None, {kw: ['3', '4', '-4']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2032 ['2', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2033 # ('3' and '4') or ('1' and '2')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2034 ae(filt(None, {kw: ['3', '4', '-3', '1', '2', '-3', '-4']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2035 ['1', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2036 # '2' and empty
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2037 ae(filt(None, {kw: ['2', '-1', '-3']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2038 [])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2039 self.db.issue.set('1', keywords=[])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2040 self.db.commit()
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2041 for filt in iiter():
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2042 ae(filt(None, {kw: ['-1']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2043 ['1'])
6396
75a53956cf13 Multilink expressions with simple "or"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6395
diff changeset
2044 # '3' or empty (without explicit 'or')
75a53956cf13 Multilink expressions with simple "or"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6395
diff changeset
2045 ae(filt(None, {kw: ['3', '-1']}),
75a53956cf13 Multilink expressions with simple "or"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6395
diff changeset
2046 ['1', '2', '3'])
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2047 # '3' or empty (with explicit 'or')
6399
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2048 ae(filt(None, {kw: ['3', '-1', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2049 ['1', '2', '3'])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2050 # empty or '3' (with explicit 'or')
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2051 ae(filt(None, {kw: ['-1', '3', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2052 ['1', '2', '3'])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2053 # '3' and empty (should always return empty list)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2054 ae(filt(None, {kw: ['3', '-1', '-3']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2055 [])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2056 # empty and '3' (should always return empty list)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2057 ae(filt(None, {kw: ['3', '-1', '-3']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2058 [])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2059 # ('4' and empty) or ('3' or empty)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2060 ae(filt(None, {kw: ['4', '-1', '-3', '3', '-1', '-4', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2061 ['1', '2', '3'])
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2062
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2063 def testFilteringTwoMultilinksExpression(self):
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2064 ae, iiter = self.filteringSetup()
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2065 kw1 = self.db.keyword.create(name='Key1', order=10)
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2066 kw2 = self.db.keyword.create(name='Key2', order=20)
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2067 kw3 = self.db.keyword.create(name='Key3', order=30)
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2068 kw4 = self.db.keyword.create(name='Key4', order=40)
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2069 self.db.issue.set('1', keywords=[kw1, kw2])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2070 self.db.issue.set('2', keywords=[kw1, kw3])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2071 self.db.issue.set('3', keywords=[kw2, kw3, kw4])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2072 self.db.issue.set('4', keywords=[])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2073 self.db.issue.set('1', keywords2=[kw3, kw4])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2074 self.db.issue.set('2', keywords2=[kw2, kw3])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2075 self.db.issue.set('3', keywords2=[kw1, kw3, kw4])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2076 self.db.issue.set('4', keywords2=[])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2077 self.db.commit()
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2078 kw = 'keywords'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2079 kw2 = 'keywords2'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2080 for filt in iiter():
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2081 # kw: '1' and '3' kw2: '2' and '3'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2082 ae(filt(None, {kw: ['1', '3', '-3'], kw2: ['2', '3', '-3']}), ['2'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2083 # kw: empty kw2: empty
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2084 ae(filt(None, {kw: ['-1'], kw2: ['-1']}), ['4'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2085 # kw: empty kw2: empty
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2086 ae(filt(None, {kw: [], kw2: []}), ['4'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2087 # look for both keyword name and order
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2088 ae(filt(None, {'keywords.name': 'y4', 'keywords.order': 40}), ['3'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2089 # look for both keyword and order non-matching
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2090 ae(filt(None, {kw: '3', 'keywords.order': 40}), [])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2091 # look for both keyword and order non-matching with kw and kw2
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2092 ae(filt(None, {kw: '3', 'keywords2.order': 40}), ['3'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2093
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2094 def testFilteringRevMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2095 ae, iiter = self.filteringSetupTransitiveSearch('user')
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2096 ni = 'nosy_issues'
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2097 self.db.issue.set('6', nosy=['3', '4', '5'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2098 self.db.issue.set('7', nosy=['5'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2099 # After this setup we have the following values for nosy:
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2100 # issue nosy
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2101 # 1: 4
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2102 # 2: 5
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2103 # 3:
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2104 # 4:
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2105 # 5:
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2106 # 6: 3, 4, 5
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2107 # 7: 5
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2108 # 8:
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2109 for filt in iiter():
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2110 ae(filt(None, {ni: ['1', '2']}), ['4', '5'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2111 ae(filt(None, {ni: ['6','7']}), ['3', '4', '5'])
6179
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2112 ae(filt(None, {'nosy_issues.title': ['ts2']}), ['5'])
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2113 ae(filt(None, {ni: ['-1']}), ['1', '2', '6', '7', '8', '9', '10'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2114 ae(filt(None, {ni: '-1'}), ['1', '2', '6', '7', '8', '9', '10'])
6179
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2115 def ls(x):
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2116 return list(sorted(x))
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2117 self.assertEqual(ls(self.db.user.get('4', ni)), ['1', '6'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2118 self.assertEqual(ls(self.db.user.get('5', ni)), ['2', '6', '7'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2119 n = self.db.user.getnode('4')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2120 self.assertEqual(ls(n.nosy_issues), ['1', '6'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2121 # Now retire some linked-to issues and retry
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2122 self.db.issue.retire('2')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2123 self.db.issue.retire('6')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2124 self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2125 for filt in iiter():
6179
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2126 ae(filt(None, {ni: ['1', '2']}), ['4'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2127 ae(filt(None, {ni: ['6','7']}), ['5'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2128 ae(filt(None, {'nosy_issues.title': ['ts2']}), [])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2129 ae(filt(None, {ni: ['-1']}),
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2130 ['1', '2', '3', '6', '7', '8', '9', '10'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2131 ae(filt(None, {ni: '-1'}),
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2132 ['1', '2', '3', '6', '7', '8', '9', '10'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2133 self.assertEqual(ls(self.db.user.get('4', ni)), ['1'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2134 self.assertEqual(ls(self.db.user.get('5', ni)), ['7'])
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2135
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2136 def testFilteringRevMultilinkQ2(self):
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2137 ae, iiter = self.filteringSetupTransitiveSearch('user')
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2138 ni = 'nosy_issues'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2139 nis = 'nosy_issues.status'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2140 self.db.issue.set('6', nosy=['3', '4', '5'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2141 self.db.issue.set('7', nosy=['5'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2142 self.db.commit()
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2143 # After this setup we have the following values for nosy:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2144 # The issues '1', '3', '5', '7' have status '2'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2145 # issue nosy
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2146 # 1: 4
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2147 # 2: 5
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2148 # 3:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2149 # 4:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2150 # 5:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2151 # 6: 3, 4, 5
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2152 # 7: 5
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2153 # 8:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2154 for filt in iiter():
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2155 # status of issue is '2'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2156 ae(filt(None, {nis: ['2']}),
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2157 ['4', '5'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2158 # Issue non-empty and status of issue is '2'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2159 ae(filt(None, {nis: ['2'], ni:['-1', '-2']}),
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2160 ['4', '5'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2161 # empty and status '2'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2162 # This is the test-case for issue2551119
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2163 ae(filt(None, {nis: ['2'], ni:['-1']}), [])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2164
6397
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2165 def testFilteringRevMultilinkExpression(self):
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2166 ae, iiter = self.filteringSetupTransitiveSearch('user')
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2167 ni = 'nosy_issues'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2168 self.db.issue.set('6', nosy=['3', '4', '5'])
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2169 self.db.issue.set('7', nosy=['5'])
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2170 # After this setup we have the following values for nosy:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2171 # issue nosy
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2172 # 1: 4
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2173 # 2: 5
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2174 # 3:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2175 # 4:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2176 # 5:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2177 # 6: 3, 4, 5
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2178 # 7: 5
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2179 # 8:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2180 # Retire users '9' and '10' to reduce list
6402
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2181 self.db.user.retire('9')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2182 self.db.user.retire('10')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2183 self.db.commit()
6397
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2184 for filt in iiter():
6402
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2185 # not empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2186 ae(filt(None, {ni: ['-1', '-2']}), ['3', '4', '5'])
6397
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2187 # '1' or '2'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2188 ae(filt(None, {ni: ['1', '2', '-4']}), ['4', '5'])
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2189 # '6' or '7'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2190 ae(filt(None, {ni: ['6', '7', '-4']}), ['3', '4', '5'])
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2191 # '6' and '7'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2192 ae(filt(None, {ni: ['6', '7', '-3']}), ['5'])
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2193 # '6' and not '1'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2194 ae(filt(None, {ni: ['6', '1', '-2', '-3']}), ['3', '5'])
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2195 # '2' or empty (implicit or)
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2196 ae(filt(None, {ni: ['-1', '2']}), ['1', '2', '5', '6', '7', '8'])
6399
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2197 # '2' or empty (explicit or)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2198 ae(filt(None, {ni: ['-1', '2', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2199 ['1', '2', '5', '6', '7', '8'])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2200 # empty or '2' (explicit or)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2201 ae(filt(None, {ni: ['2', '-1', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2202 ['1', '2', '5', '6', '7', '8'])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2203 # '2' and empty (should always return empty list)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2204 ae(filt(None, {ni: ['-1', '2', '-3']}), [])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2205 # empty and '2' (should always return empty list)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2206 ae(filt(None, {ni: ['2', '-1', '-3']}), [])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2207 # ('4' and empty) or ('2' or empty)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2208 ae(filt(None, {ni: ['4', '-1', '-3', '2', '-1', '-4', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2209 ['1', '2', '5', '6', '7', '8'])
6402
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2210 # Retire issues 2, 6 and retry
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2211 self.db.issue.retire('2')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2212 self.db.issue.retire('6')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2213 self.db.commit()
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2214 # After this setup we have the following values for nosy:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2215 # issue nosy
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2216 # 1: 4
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2217 # 3:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2218 # 4:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2219 # 5:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2220 # 7: 5
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2221 # 8:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2222 for filt in iiter():
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2223 # not empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2224 ae(filt(None, {ni: ['-1', '-2']}), ['4', '5'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2225 # '1' or '2' (implicit)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2226 ae(filt(None, {ni: ['1', '2']}), ['4'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2227 # '1' or '2'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2228 ae(filt(None, {ni: ['1', '2', '-4']}), ['4'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2229 # '6' or '7'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2230 ae(filt(None, {ni: ['6', '7', '-4']}), ['5'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2231 # '6' and '7'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2232 ae(filt(None, {ni: ['6', '7', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2233 # '6' and not '1'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2234 ae(filt(None, {ni: ['6', '1', '-2', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2235 # not '1'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2236 ae(filt(None, {ni: ['1', '-2']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2237 ['1', '2', '3', '5', '6', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2238 # '2' or empty (implicit or)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2239 ae(filt(None, {ni: ['-1', '2']}), ['1', '2', '3', '6', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2240 # '2' or empty (explicit or)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2241 ae(filt(None, {ni: ['-1', '2', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2242 ['1', '2', '3', '6', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2243 # empty or '2' (explicit or)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2244 ae(filt(None, {ni: ['2', '-1', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2245 ['1', '2', '3', '6', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2246 # '2' and empty (should always return empty list)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2247 ae(filt(None, {ni: ['-1', '2', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2248 # empty and '2' (should always return empty list)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2249 ae(filt(None, {ni: ['2', '-1', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2250 # ('4' and empty) or ('2' or empty)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2251 ae(filt(None, {ni: ['4', '-1', '-3', '2', '-1', '-4', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2252 ['1', '2', '3', '6', '7', '8'])
6397
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2253
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2254 def testFilteringMany(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2255 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2256 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2257 ae(f(None, {'nosy': '2', 'status': '1'}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2258 ['3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2259
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2260 def testFilteringRangeBasic(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2261 ae, iiter = self.filteringSetup()
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2262 d = 'deadline'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2263 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2264 ae(f(None, {d: 'from 2003-02-10 to 2003-02-23'}), ['1','3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2265 ae(f(None, {d: '2003-02-10; 2003-02-23'}), ['1','3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2266 ae(f(None, {d: '; 2003-02-16'}), ['2'])
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2267
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2268 def testFilteringRangeTwoSyntaxes(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2269 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2270 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2271 ae(filt(None, {'deadline': 'from 2003-02-16'}), ['1', '3', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2272 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
2273
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2274 def testFilteringRangeYearMonthDay(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2275 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2276 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2277 ae(filt(None, {'deadline': '2002'}), [])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2278 ae(filt(None, {'deadline': '2003'}), ['1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2279 ae(filt(None, {'deadline': '2004'}), ['4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2280 ae(filt(None, {'deadline': '2003-02-16'}), ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2281 ae(filt(None, {'deadline': '2003-02-17'}), [])
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2282
3952
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
2283 def testFilteringRangeMonths(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2284 ae, iiter = self.filteringSetup()
3955
de6326aee6d0 Final fix for date range searching stuff: fix the test :)
Richard Jones <richard@users.sourceforge.net>
parents: 3953
diff changeset
2285 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
2286 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
2287 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
2288 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
2289 self.db.commit()
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
2290
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
2291 for month in range(1, 13):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2292 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2293 r = filt(None, dict(deadline='2001-%02d'%month))
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2294 assert len(r) == month, 'month %d != length %d'%(month, len(r))
3952
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
2295
6118
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2296 def testFilteringDateRangeMulti(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2297 ae, iiter = self.filteringSetup()
6118
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2298 self.db.issue.create(title='no deadline')
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2299 self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2300 for filt in iiter():
6118
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2301 r = filt (None, dict(deadline='-'))
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2302 self.assertEqual(r, ['5'])
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2303 r = filt (None, dict(deadline=';2003-02-01,2004;'))
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2304 self.assertEqual(r, ['2', '4'])
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2305 r = filt (None, dict(deadline='-,;2003-02-01,2004;'))
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2306 self.assertEqual(r, ['2', '4', '5'])
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2307
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2308 def testFilteringRangeInterval(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2309 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2310 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2311 ae(filt(None, {'foo': 'from 0:50 to 2:00'}), ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2312 ae(filt(None, {'foo': 'from 0:50 to 1d 2:00'}), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2313 ae(filt(None, {'foo': 'from 5:50'}), ['2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2314 ae(filt(None, {'foo': 'to 0:05'}), [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2315
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2316 def testFilteringRangeGeekInterval(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2317 ae, iiter = self.filteringSetup()
4876
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2318 # Note: When querying, create date one minute later than the
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2319 # timespan later queried to avoid race conditions where the
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2320 # creation of the deadline is more than a second ago when
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2321 # queried -- in that case we wouldn't get the expected result.
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2322 # By extending the interval by a minute we would need a very
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2323 # slow machine for this test to fail :-)
3586
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
2324 for issue in (
4876
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2325 { 'deadline': date.Date('. -2d') + date.Interval ('00:01')},
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2326 { 'deadline': date.Date('. -1d') + date.Interval ('00:01')},
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2327 { 'deadline': date.Date('. -8d') + date.Interval ('00:01')},
3586
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
2328 ):
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
2329 self.db.issue.create(**issue)
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2330 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2331 ae(filt(None, {'deadline': '-2d;'}), ['5', '6'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2332 ae(filt(None, {'deadline': '-1d;'}), ['6'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2333 ae(filt(None, {'deadline': '-1w;'}), ['5', '6'])
4876
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2334 ae(filt(None, {'deadline': '. -2d;'}), ['5', '6'])
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2335 ae(filt(None, {'deadline': '. -1d;'}), ['6'])
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2336 ae(filt(None, {'deadline': '. -1w;'}), ['5', '6'])
3586
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
2337
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2338 def testFilteringIntervalSort(self):
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2339 # 1: '1:10'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2340 # 2: '1d'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2341 # 3: None
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2342 # 4: '0:10'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2343 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2344 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2345 # ascending should sort None, 1:10, 1d
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2346 ae(filt(None, {}, ('+','foo'), (None,None)), ['3', '4', '1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2347 # descending should sort 1d, 1:10, None
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2348 ae(filt(None, {}, ('-','foo'), (None,None)), ['2', '1', '4', '3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2349
3681
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2350 def testFilteringStringSort(self):
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2351 # 1: 'issue one'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2352 # 2: 'issue two'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2353 # 3: 'issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2354 # 4: 'non four'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2355 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2356 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2357 ae(filt(None, {}, ('+','title')), ['1', '3', '2', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2358 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
2359 # 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
2360 # 1: 'issue one'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2361 # 2: 'issue two'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2362 # 3: 'Issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2363 # 4: 'non four'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2364 self.db.issue.set('3', title='Issue three')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2365 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2366 ae(filt(None, {}, ('+','title')), ['1', '3', '2', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2367 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
2368 # 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
2369 # 1: '1st issue'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2370 # 2: '2'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2371 # 3: 'Issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2372 # 4: 'non four'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2373 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
2374 self.db.issue.set('2', title='2')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2375 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2376 ae(filt(None, {}, ('+','title')), ['1', '2', '3', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2377 ae(filt(None, {}, ('-','title')), ['4', '3', '2', '1'])
3681
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2378
2185
c52a931879c4 sort/group by multilink in RDBMS
Richard Jones <richard@users.sourceforge.net>
parents: 2102
diff changeset
2379 def testFilteringMultilinkSort(self):
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2380 # 1: [] Reverse: 1: []
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
2381 # 2: [] 2: []
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
2382 # 3: ['admin','fred'] 3: ['fred','admin']
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2383 # 4: ['admin','bleep','fred'] 4: ['fred','bleep','admin']
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2384 # 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
2385 # 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
2386 # multilink!
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2387 # Note that we don't test filter_iter here, Multilink sort-order
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2388 # isn't defined for that.
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2389 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2390 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2391 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2392 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2393 ae(filt(None, {}, ('+','nosy'), (None,None)), ['1', '2', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2394 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
2395
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2396 def testFilteringMultilinkSortGroup(self):
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2397 # 1: status: 2 "in-progress" nosy: []
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2398 # 2: status: 1 "unread" nosy: []
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2399 # 3: status: 1 "unread" nosy: ['admin','fred']
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2400 # 4: status: 3 "testing" nosy: ['admin','bleep','fred']
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2401 # Note that we don't test filter_iter here, Multilink sort-order
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2402 # isn't defined for that.
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2403 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2404 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2405 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2406 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2407 ae(filt(None, {}, ('+','nosy'), ('+','status')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2408 ['1', '4', '2', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2409 ae(filt(None, {}, ('-','nosy'), ('+','status')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2410 ['1', '4', '3', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2411 ae(filt(None, {}, ('+','nosy'), ('-','status')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2412 ['2', '3', '4', '1'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2413 ae(filt(None, {}, ('-','nosy'), ('-','status')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2414 ['3', '2', '4', '1'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2415 ae(filt(None, {}, ('+','status'), ('+','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2416 ['1', '2', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2417 ae(filt(None, {}, ('-','status'), ('+','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2418 ['2', '1', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2419 ae(filt(None, {}, ('+','status'), ('-','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2420 ['4', '3', '1', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2421 ae(filt(None, {}, ('-','status'), ('-','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2422 ['4', '3', '2', '1'])
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2423
3525
7be25d75c3d5 Fixed SQL generation for sort/group by separate Link properties [SF#1417565]
Richard Jones <richard@users.sourceforge.net>
parents: 3486
diff changeset
2424 def testFilteringLinkSortGroup(self):
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2425 # 1: status: 2 -> 'i', priority: 3 -> 1
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2426 # 2: status: 1 -> 'u', priority: 3 -> 1
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2427 # 3: status: 1 -> 'u', priority: 2 -> 3
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2428 # 4: status: 3 -> 't', priority: 2 -> 3
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2429 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2430 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2431 ae(filt(None, {}, ('+','status'), ('+','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2432 ['1', '2', '4', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2433 ae(filt(None, {'priority':'2'}, ('+','status'), ('+','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2434 ['4', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2435 ae(filt(None, {'priority.order':'3'}, ('+','status'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2436 ('+','priority')), ['4', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2437 ae(filt(None, {'priority':['2','3']}, ('+','priority'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2438 ('+','status')), ['1', '4', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2439 ae(filt(None, {}, ('+','priority'), ('+','status')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2440 ['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
2441
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2442 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
2443 # '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
2444 # '2': '2003-01-01.00:00'
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2445 # '3': '2003-02-18'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2446 # '4': '2004-03-08'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2447 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2448 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2449 # ascending
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2450 ae(f(None, {}, ('+','deadline'), (None,None)), ['2', '1', '3', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2451 # descending
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2452 ae(f(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
2453
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2454 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
2455 # '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
2456 # '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
2457 # '3': '2003-02-18' 2 => 3
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2458 # '4': '2004-03-08' 1 => 2
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2459 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2460
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2461 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2462 # ascending
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2463 ae(filt(None, {}, ('+','deadline'), ('+','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2464 ['2', '1', '3', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2465 ae(filt(None, {}, ('-','deadline'), ('+','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2466 ['1', '2', '4', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2467 # descending
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2468 ae(filt(None, {}, ('+','deadline'), ('-','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2469 ['3', '4', '2', '1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2470 ae(filt(None, {}, ('-','deadline'), ('-','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2471 ['4', '3', '1', '2'])
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2472
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2473 def testFilteringTransitiveLinkUser(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2474 ae, iiter = self.filteringSetupTransitiveSearch('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2475 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2476 ae(f(None, {'supervisor.username': 'ceo'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2477 ['4', '5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2478 ae(f(None, {'supervisor.supervisor.username': 'ceo'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2479 ('+','username')), ['6', '7', '8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2480 ae(f(None, {'supervisor.supervisor': '3'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2481 ['6', '7', '8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2482 ae(f(None, {'supervisor.supervisor.id': '3'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2483 ['6', '7', '8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2484 ae(f(None, {'supervisor.username': 'grouplead1'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2485 ['6', '7'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2486 ae(f(None, {'supervisor.username': 'grouplead2'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2487 ['8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2488 ae(f(None, {'supervisor.username': 'grouplead2',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2489 'supervisor.supervisor.username': 'ceo'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2490 ['8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2491 ae(f(None, {'supervisor.supervisor': '3', 'supervisor': '4'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2492 ('+','username')), ['6', '7'])
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2493
5869
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2494 def testFilteringTransitiveLinkUserLimit(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2495 ae, iiter = self.filteringSetupTransitiveSearch('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2496 for f in iiter():
5869
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2497 ae(f(None, {'supervisor.username': 'ceo'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2498 limit=1), ['4'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2499 ae(f(None, {'supervisor.supervisor.username': 'ceo'},
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2500 ('+','username'), limit=4), ['6', '7', '8', '9'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2501 ae(f(None, {'supervisor.supervisor': '3'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2502 limit=2, offset=2), ['8', '9'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2503 ae(f(None, {'supervisor.supervisor.id': '3'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2504 limit=3, offset=1), ['7', '8', '9'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2505 ae(f(None, {'supervisor.username': 'grouplead2'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2506 limit=2, offset=2), ['10'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2507 ae(f(None, {'supervisor.username': 'grouplead2',
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2508 'supervisor.supervisor.username': 'ceo'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2509 limit=4, offset=3), [])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2510 ae(f(None, {'supervisor.supervisor': '3', 'supervisor': '4'},
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2511 ('+','username'), limit=1, offset=5), [])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2512
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2513 def testFilteringTransitiveLinkSort(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2514 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2515 ae, uiter = self.iterSetup('user')
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2516 # 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
2517 # 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
2518 # Leave that to a separate test.
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2519 self.db.user.set('1', supervisor = '3')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2520 self.db.user.set('2', supervisor = '3')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2521 self.db.user.set('3', supervisor = '3')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2522 for ufilt in uiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2523 ae(ufilt(None, {'supervisor':'3'}, []), ['1', '2', '3', '4', '5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2524 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2525 ('+','supervisor.supervisor'), ('+','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2526 ('+','username')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2527 ['1', '3', '2', '4', '5', '6', '7', '8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2528 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2529 ('-','supervisor.supervisor'), ('-','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2530 ('+','username')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2531 ['8', '9', '10', '6', '7', '1', '3', '2', '4', '5'])
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2532 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2533 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2534 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2535 ('+','assignedto.supervisor'), ('+','assignedto')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2536 ['1', '2', '3', '4', '5', '6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2537 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2538 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2539 ('-','assignedto.supervisor'), ('+','assignedto')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2540 ['4', '5', '6', '7', '8', '1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2541 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2542 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2543 ('+','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2544 ('-','status')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2545 ['2', '1', '3', '4', '5', '6', '8', '7'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2546 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2547 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2548 ('+','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2549 ('+','status')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2550 ['1', '2', '3', '4', '5', '7', '6', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2551 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2552 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2553 ('-','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2554 ('+','status')]), ['4', '5', '7', '6', '8', '1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2555 ae(f(None, {'assignedto':['6','7','8','9','10']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2556 [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2557 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2558 ('-','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2559 ('+','status')]), ['4', '5', '7', '6', '8', '1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2560 ae(f(None, {'assignedto':['6','7','8','9']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2561 [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2562 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2563 ('-','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2564 ('+','status')]), ['4', '5', '1', '2', '3'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2565
3685
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
2566 def testFilteringTransitiveLinkSortNull(self):
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
2567 """Check sorting of NULL values"""
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2568 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2569 ae, uiter = self.iterSetup('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2570 for ufilt in uiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2571 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2572 ('+','supervisor.supervisor'), ('+','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2573 ('+','username')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2574 ['1', '3', '2', '4', '5', '6', '7', '8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2575 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2576 ('-','supervisor.supervisor'), ('-','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2577 ('+','username')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2578 ['8', '9', '10', '6', '7', '4', '5', '1', '3', '2'])
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2579 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2580 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2581 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2582 ('+','assignedto.supervisor'), ('+','assignedto')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2583 ['1', '2', '3', '4', '5', '6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2584 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2585 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2586 ('-','assignedto.supervisor'), ('+','assignedto')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2587 ['4', '5', '6', '7', '8', '1', '2', '3'])
3685
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
2588
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2589 def testFilteringTransitiveLinkIssue(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2590 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2591 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2592 ae(filt(None, {'assignedto.supervisor.username': 'grouplead1'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2593 ('+','id')), ['1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2594 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2595 ('+','id')), ['4', '5', '6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2596 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2597 'status': '1'}, ('+','id')), ['4', '6', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2598 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2599 'status': '2'}, ('+','id')), ['5', '7'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2600 ae(filt(None, {'assignedto.supervisor.username': ['grouplead2'],
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2601 'status': '2'}, ('+','id')), ['5', '7'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2602 ae(filt(None, {'assignedto.supervisor': ['4', '5'], 'status': '2'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2603 ('+','id')), ['1', '3', '5', '7'])
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2604
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2605 def testFilteringTransitiveMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2606 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2607 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2608 ae(filt(None, {'messages.author.username': 'grouplead1'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2609 ('+','id')), [])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2610 ae(filt(None, {'messages.author': '6'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2611 ('+','id')), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2612 ae(filt(None, {'messages.author.id': '6'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2613 ('+','id')), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2614 ae(filt(None, {'messages.author.username': 'worker1'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2615 ('+','id')), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2616 ae(filt(None, {'messages.author': '10'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2617 ('+','id')), ['6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2618 ae(filt(None, {'messages.author': '9'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2619 ('+','id')), ['5', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2620 ae(filt(None, {'messages.author': ['9', '10']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2621 ('+','id')), ['5', '6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2622 ae(filt(None, {'messages.author': ['8', '9']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2623 ('+','id')), ['4', '5', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2624 ae(filt(None, {'messages.author': ['8', '9'], 'status' : '1'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2625 ('+','id')), ['4', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2626 ae(filt(None, {'messages.author': ['8', '9'], 'status' : '2'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2627 ('+','id')), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2628 ae(filt(None, {'messages.author': ['8', '9', '10'],
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2629 'messages.date': '2006-01-22.21:00;2006-01-23'}, ('+','id')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2630 ['6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2631 ae(filt(None, {'nosy.supervisor.username': 'ceo'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2632 ('+','id')), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2633 ae(filt(None, {'messages.author': ['6', '9']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2634 ('+','id')), ['1', '2', '5', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2635 ae(filt(None, {'messages': ['5', '7']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2636 ('+','id')), ['3', '5', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2637 ae(filt(None, {'messages.author': ['6', '9'],
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2638 'messages': ['5', '7']}, ('+','id')), ['5', '8'])
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2639
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2640 def testFilteringTransitiveMultilinkSort(self):
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2641 # Note that we don't test filter_iter here, Multilink sort-order
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2642 # isn't defined for that.
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2643 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2644 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2645 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2646 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2647 ae(filt(None, {}, [('+','messages.author')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2648 ['1', '2', '3', '4', '5', '8', '6', '7'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2649 ae(filt(None, {}, [('-','messages.author')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2650 ['8', '6', '7', '5', '4', '3', '1', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2651 ae(filt(None, {}, [('+','messages.date')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2652 ['6', '7', '8', '5', '4', '3', '1', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2653 ae(filt(None, {}, [('-','messages.date')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2654 ['1', '2', '3', '4', '8', '5', '6', '7'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2655 ae(filt(None, {}, [('+','messages.author'),('+','messages.date')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2656 ['1', '2', '3', '4', '5', '8', '6', '7'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2657 ae(filt(None, {}, [('-','messages.author'),('+','messages.date')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2658 ['8', '6', '7', '5', '4', '3', '1', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2659 ae(filt(None, {}, [('+','messages.author'),('-','messages.date')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2660 ['1', '2', '3', '4', '5', '8', '6', '7'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2661 ae(filt(None, {}, [('-','messages.author'),('-','messages.date')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2662 ['8', '6', '7', '5', '4', '3', '1', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2663 ae(filt(None, {}, [('+','messages.author'),('+','assignedto')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2664 ['1', '2', '3', '4', '5', '8', '6', '7'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2665 ae(filt(None, {}, [('+','messages.author'),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2666 ('-','assignedto.supervisor'),('-','assignedto')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2667 ['1', '2', '3', '4', '5', '8', '6', '7'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2668 ae(filt(None, {},
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2669 [('+','messages.author.supervisor.supervisor.supervisor'),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2670 ('+','messages.author.supervisor.supervisor'),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2671 ('+','messages.author.supervisor'), ('+','messages.author')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2672 ['1', '2', '3', '4', '5', '6', '7', '8'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2673 self.db.user.setorderprop('age')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2674 self.db.msg.setorderprop('date')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2675 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2676 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2677 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2678 ae(filt(None, {}, [('+','messages'), ('+','messages.author')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2679 ['6', '7', '8', '5', '4', '3', '1', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2680 ae(filt(None, {}, [('+','messages.author'), ('+','messages')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2681 ['6', '7', '8', '5', '4', '3', '1', '2'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2682 self.db.msg.setorderprop('author')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2683 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2684 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2685 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2686 # Orderprop is a Link/Multilink:
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2687 # messages are sorted by orderprop().labelprop(), i.e. by
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2688 # author.username, *not* by author.orderprop() (author.age)!
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2689 ae(filt(None, {}, [('+','messages')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2690 ['1', '2', '3', '4', '5', '8', '6', '7'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2691 ae(filt(None, {}, [('+','messages.author'), ('+','messages')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2692 ['6', '7', '8', '5', '4', '3', '1', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2693 # The following will sort by
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2694 # author.supervisor.username and then by
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2695 # author.username
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2696 # I've resited the tempation to implement recursive orderprop
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2697 # here: There could even be loops if several classes specify a
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2698 # Link or Multilink as the orderprop...
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2699 # msg: 4: worker1 (id 5) : grouplead1 (id 4) ceo (id 3)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2700 # msg: 5: worker2 (id 7) : grouplead1 (id 4) ceo (id 3)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2701 # msg: 6: worker3 (id 8) : grouplead2 (id 5) ceo (id 3)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2702 # msg: 7: worker4 (id 9) : grouplead2 (id 5) ceo (id 3)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2703 # msg: 8: worker5 (id 10) : grouplead2 (id 5) ceo (id 3)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2704 # issue 1: messages 4 sortkey:[[grouplead1], [worker1], 1]
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2705 # issue 2: messages 4 sortkey:[[grouplead1], [worker1], 2]
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2706 # issue 3: messages 5 sortkey:[[grouplead1], [worker2], 3]
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2707 # issue 4: messages 6 sortkey:[[grouplead2], [worker3], 4]
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2708 # issue 5: messages 7 sortkey:[[grouplead2], [worker4], 5]
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2709 # issue 6: messages 8 sortkey:[[grouplead2], [worker5], 6]
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2710 # issue 7: messages 8 sortkey:[[grouplead2], [worker5], 7]
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2711 # issue 8: messages 7,8 sortkey:[[grouplead2, grouplead2], ...]
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2712 self.db.user.setorderprop('supervisor')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2713 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2714 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2715 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2716 ae(filt(None, {}, [('+','messages.author'), ('-','messages')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2717 ['3', '1', '2', '6', '7', '5', '4', '8'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2718
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2719 def testFilteringSortId(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2720 ae, iiter = self.filteringSetupTransitiveSearch('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2721 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2722 ae(filt(None, {}, ('+','id')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2723 ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2724
5318
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2725 def testFilteringRetiredString(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2726 ae, iiter = self.filteringSetup()
5318
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2727 self.db.issue.retire('1')
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2728 self.db.commit()
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2729 r = { None: (['1'], ['1'], ['1'], ['1', '2', '3'], [])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2730 , True: (['1'], ['1'], ['1'], ['1'], [])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2731 , False: ([], [], [], ['2', '3'], [])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2732 }
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2733 for filt in iiter():
5318
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2734 for retire in True, False, None:
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2735 ae(filt(None, {'title': ['one']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2736 retired=retire), r[retire][0])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2737 ae(filt(None, {'title': ['issue one']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2738 retired=retire), r[retire][1])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2739 ae(filt(None, {'title': ['issue', 'one']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2740 retired=retire), r[retire][2])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2741 ae(filt(None, {'title': ['issue']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2742 retired=retire), r[retire][3])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2743 ae(filt(None, {'title': ['one', 'two']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2744 retired=retire), r[retire][4])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2745
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2746 # XXX add sorting tests for other types
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2747
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2748 # nuke and re-create db for restore
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2749 def nukeAndCreate(self):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2750 # shut down this db and nuke it
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2751 self.db.close()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2752 self.nuke_database()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2753
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2754 # open a new, empty database
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2755 os.makedirs(config.DATABASE + '/files')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2756 self.db = self.module.Database(config, 'admin')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2757 setupSchema(self.db, 0, self.module)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2758
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2759 def testImportExport(self):
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2760 # use the filtering setup to create a bunch of items
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2761 ae, dummy = self.filteringSetup()
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2762 # 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
2763 # journal data:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2764 self.db.user.set('4', password = password.Password('xyzzy'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2765 self.db.user.set('4', age = 3)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2766 self.db.user.set('4', assignable = True)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2767 self.db.issue.set('1', title = 'i1', status = '3')
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2768 self.db.issue.set('1', deadline = date.Date('2007'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2769 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
2770 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
2771 self.db.commit()
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2772 self.db.user.set('4', password = password.Password('123xyzzy'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2773 self.db.user.set('4', assignable = False)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2774 self.db.priority.set(p, order = '4711')
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2775 self.db.commit()
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2776
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2777 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
2778 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
2779
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2780 # 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
2781 orig = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2782 origj = {}
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2783 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
2784 cl = orig[cn] = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2785 jn = origj[cn] = {}
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2786 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
2787 it = cl[id] = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2788 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
2789 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
2790 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
2791
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2792 os.mkdir('_test_export')
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2793 try:
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2794 # grab the export
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2795 export = {}
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2796 journals = {}
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2797 for cn,klass in self.db.classes.items():
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2798 names = klass.export_propnames()
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2799 cl = export[cn] = [names+['is retired']]
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2800 for id in klass.getnodeids():
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2801 cl.append(klass.export_list(names, id))
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2802 if hasattr(klass, 'export_files'):
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2803 klass.export_files('_test_export', id)
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2804 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
2805
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2806 self.nukeAndCreate()
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2807
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2808 # import
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2809 for cn, items in export.items():
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2810 klass = self.db.classes[cn]
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2811 names = items[0]
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2812 maxid = 1
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2813 for itemprops in items[1:]:
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2814 id = int(klass.import_list(names, itemprops))
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2815 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
2816 klass.import_files('_test_export', str(id))
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2817 maxid = max(maxid, id)
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2818 self.db.setid(cn, str(maxid+1))
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2819 klass.import_journals(journals[cn])
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2820 # 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
2821 self.db.commit()
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2822 finally:
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2823 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
2824
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
2825 # compare with snapshot of the database
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
2826 for cn, items in orig.items():
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2827 klass = self.db.classes[cn]
2102
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
2828 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
2829 # ensure retired items are retired :)
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
2830 l = sorted(items.keys())
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2831 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
2832 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
2833 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
2834 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
2835 l = klass.get(id, name)
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
2836 if isinstance(value, type([])):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
2837 value.sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
2838 l.sort()
2102
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
2839 try:
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
2840 ae(l, value)
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
2841 except AssertionError:
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
2842 if not isinstance(propdefs[name], Date):
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
2843 raise
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
2844 # don't get hung up on rounding errors
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
2845 assert not l.__cmp__(value, int_seconds=1)
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
2846 for jc, items in origj.items():
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
2847 for id, oj in items.items():
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2848 rj = self.db.getjournal(jc, id)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2849 # Both mysql and postgresql have some minor issues with
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2850 # rounded seconds on export/import, so we compare only
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2851 # the integer part.
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2852 for j in oj:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2853 j[1].second = float(int(j[1].second))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2854 for j in rj:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2855 j[1].second = float(int(j[1].second))
5481
9a09719b0d8e helper to allow comparing dicts and None values in Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5476
diff changeset
2856 oj.sort(key = NoneAndDictComparable)
9a09719b0d8e helper to allow comparing dicts and None values in Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5476
diff changeset
2857 rj.sort(key = NoneAndDictComparable)
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2858 ae(oj, rj)
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2859
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2860 # 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
2861 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
2862 ae(self.db.issue.get('2', 'title'), 'issue two')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2863
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
2864 # 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
2865 maxid = max([int(id) for id in self.db.user.list()])
5468
0cde8a595893 fix tests for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5395
diff changeset
2866 newid = int(self.db.user.create(username='testing'))
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
2867 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
2868
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2869 # test import/export via admin interface
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2870 def testAdminImportExport(self):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2871 import roundup.admin
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2872 import csv
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2873 # use the filtering setup to create a bunch of items
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2874 ae, dummy = self.filteringSetup()
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2875 # create large field
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2876 self.db.priority.create(name = 'X' * 500)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2877 self.db.config.CSV_FIELD_SIZE = 400
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2878 self.db.commit()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2879 output = []
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2880 # 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
2881 # 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
2882 # 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
2883 # case)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2884 def stderrwrite(s):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2885 output.append(s)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2886 roundup.admin.sys = MockNull ()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2887 try:
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2888 roundup.admin.sys.stderr.write = stderrwrite
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2889 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2890 home = '.'
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2891 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2892 tool.db = self.db
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2893 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2894 tool.do_export (['_test_export'])
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2895 self.assertEqual(len(output), 2)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2896 self.assertEqual(output [1], '\n')
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
2897 self.assertTrue(output [0].startswith
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2898 ('Warning: config csv_field_size should be at least'))
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
2899 self.assertTrue(int(output[0].split()[-1]) > 500)
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2900
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2901 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
2902 self.nukeAndCreate()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2903 self.db.config.CSV_FIELD_SIZE = 400
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2904 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2905 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2906 tool.db = self.db
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2907 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2908 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
2909
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2910 self.nukeAndCreate()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2911 self.db.config.CSV_FIELD_SIZE = 3200
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2912 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2913 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2914 tool.db = self.db
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2915 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2916 tool.do_import(['_test_export'])
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2917 finally:
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2918 roundup.admin.sys = sys
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2919 shutil.rmtree('_test_export')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2920
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2921 # test props from args parsing
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2922 def testAdminOtherCommands(self):
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2923 import roundup.admin
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2924
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2925 # use the filtering setup to create a bunch of items
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2926 ae, dummy = self.filteringSetup()
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2927 # create large field
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2928 self.db.priority.create(name = 'X' * 500)
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2929 self.db.config.CSV_FIELD_SIZE = 400
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2930 self.db.commit()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2931
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2932 eoutput = [] # stderr output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2933 soutput = [] # stdout output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2934
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2935 def stderrwrite(s):
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2936 eoutput.append(s)
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2937 def stdoutwrite(s):
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2938 soutput.append(s)
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2939 roundup.admin.sys = MockNull ()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2940 try:
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2941 roundup.admin.sys.stderr.write = stderrwrite
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2942 roundup.admin.sys.stdout.write = stdoutwrite
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2943
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2944 tool = roundup.admin.AdminTool()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2945 home = '.'
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2946 tool.tracker_home = home
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2947 tool.db = self.db
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2948 tool.verbose = False
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2949 tool.separator = "\n"
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2950 tool.print_designator = True
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2951
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2952 # test props_from_args
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2953 self.assertRaises(UsageError, tool.props_from_args, "fullname") # invalid propname
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2954
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2955 self.assertEqual(tool.props_from_args("="), {'': None}) # not sure this desired, I'd expect UsageError
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2956
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2957 props = tool.props_from_args(["fullname=robert", "friends=+rouilj,+other", "key="])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2958 self.assertEqual(props, {'fullname': 'robert', 'friends': '+rouilj,+other', 'key': None})
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2959
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2960 # test get_class()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2961 self.assertRaises(UsageError, tool.get_class, "bar") # invalid class
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2962
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2963 # This writes to stdout, need to figure out how to redirect to a variable.
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2964 # classhandle = tool.get_class("user") # valid class
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2965 # FIXME there should be some test here
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2966
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2967 issue_class_spec = tool.do_specification(["issue"])
5469
115efa91f7a1 only compare sorted output as order depends on implementation details
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5468
diff changeset
2968 self.assertEqual(sorted (soutput),
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2969 ['assignedto: <roundup.hyperdb.Link to "user">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2970 'deadline: <roundup.hyperdb.Date>\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2971 'feedback: <roundup.hyperdb.Link to "msg">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2972 'files: <roundup.hyperdb.Multilink to "file">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2973 'foo: <roundup.hyperdb.Interval>\n',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2974 'keywords2: <roundup.hyperdb.Multilink to "keyword">\n',
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2975 'keywords: <roundup.hyperdb.Multilink to "keyword">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2976 'messages: <roundup.hyperdb.Multilink to "msg">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2977 'nosy: <roundup.hyperdb.Multilink to "user">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2978 'priority: <roundup.hyperdb.Link to "priority">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2979 'spam: <roundup.hyperdb.Multilink to "msg">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2980 'status: <roundup.hyperdb.Link to "status">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2981 'superseder: <roundup.hyperdb.Multilink to "issue">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2982 'title: <roundup.hyperdb.String>\n'])
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2983
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2984 #userclassprop=tool.do_list(["mls"])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2985 #tool.print_designator = False
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2986 #userclassprop=tool.do_get(["realname","user1"])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2987
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2988 # test do_create
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2989 soutput[:] = [] # empty for next round of output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2990 userclass=tool.do_create(["issue", "title='title1 title'", "nosy=1,3"]) # should be issue 5
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2991 userclass=tool.do_create(["issue", "title='title2 title'", "nosy=2,3"]) # should be issue 6
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2992 self.assertEqual(soutput, ['5\n', '6\n'])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2993 # verify nosy setting
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2994 props=self.db.issue.get('5', "nosy")
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2995 self.assertEqual(props, ['1','3'])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2996
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2997 # test do_set using newly created issues
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2998 # remove user 3 from issues
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2999 # verifies issue2550572
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3000 userclass=tool.do_set(["issue5,issue6", "nosy=-3"])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3001 # verify proper result
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3002 props=self.db.issue.get('5', "nosy")
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3003 self.assertEqual(props, ['1'])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3004 props=self.db.issue.get('6', "nosy")
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3005 self.assertEqual(props, ['2'])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3006
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3007 # basic usage test. TODO add full output verification
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3008 soutput[:] = [] # empty for next round of output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3009 tool.usage(message="Hello World")
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
3010 self.assertTrue(soutput[0].startswith('Problem: Hello World'), None)
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3011
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3012 # check security output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3013 soutput[:] = [] # empty for next round of output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3014 tool.do_security("Admin")
6013
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3015 expected = [ 'New Web users get the Role "User"\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3016 'New Email users get the Role "User"\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3017 'Role "admin":\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3018 ' User may create everything (Create)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3019 ' User may edit everything (Edit)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3020 ' User may restore everything (Restore)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3021 ' User may retire everything (Retire)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3022 ' User may view everything (View)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3023 ' User may access the web interface (Web Access)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3024 ' User may access the rest interface (Rest Access)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3025 ' User may access the xmlrpc interface (Xmlrpc Access)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3026 ' User may manipulate user Roles through the web (Web Roles)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3027 ' User may use the email interface (Email Access)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3028 'Role "anonymous":\n', 'Role "user":\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3029 ' User is allowed to access msg (View for "msg" only)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3030 ' Prevent users from seeing roles (View for "user": [\'username\', \'supervisor\', \'assignable\'] only)\n']
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3031
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3032 self.assertEqual(soutput, expected)
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3033
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3034
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3035 self.nukeAndCreate()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3036 tool = roundup.admin.AdminTool()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3037 tool.tracker_home = home
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3038 tool.db = self.db
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3039 tool.verbose = False
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3040 finally:
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3041 roundup.admin.sys = sys
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3042
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3043
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3044 # test duplicate relative tracker home initialisation (issue2550757)
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3045 def testAdminDuplicateInitialisation(self):
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3046 import roundup.admin
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3047 output = []
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3048 def stderrwrite(s):
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3049 output.append(s)
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3050 roundup.admin.sys = MockNull ()
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3051 t = '_test_initialise'
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3052 try:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3053 roundup.admin.sys.stderr.write = stderrwrite
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3054 tool = roundup.admin.AdminTool()
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3055 tool.force = True
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3056 args = (None, 'classic', 'anydbm',
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3057 'MAIL_DOMAIN=%s' % config.MAIL_DOMAIN)
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3058 tool.do_install(t, args=args)
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3059 args = (None, 'mypasswd')
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3060 tool.do_initialise(t, args=args)
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3061 tool.do_initialise(t, args=args)
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3062 try: # python >=2.7
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3063 self.assertNotIn(t, os.listdir(t))
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3064 except AttributeError:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3065 self.assertFalse('db' in os.listdir(t))
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3066 finally:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3067 roundup.admin.sys = sys
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3068 if os.path.exists(t):
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3069 shutil.rmtree(t)
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3070
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
3071 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
3072 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
3073 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
3074
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3075 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
3076 # 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
3077 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
3078 props = self.db.issue.getprops()
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
3079 keys = sorted(props.keys())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3080 self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation',
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3081 'creator', 'deadline', 'feedback', 'files', 'fixer', 'foo',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3082 'id', 'keywords', 'keywords2', 'messages', 'nosy', 'priority',
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3083 '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
3084 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
3085
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3086 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
3087 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
3088 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
3089
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3090 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
3091 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
3092 props = self.db.issue.getprops()
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
3093 keys = sorted(props.keys())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3094 self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation',
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3095 'creator', 'deadline', 'feedback', 'files', 'foo', 'id',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3096 'keywords', 'keywords2', 'messages', 'nosy', 'priority', 'spam',
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3097 '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
3098 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
3099
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3100 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
3101 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
3102 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
3103
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3104 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
3105 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
3106 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
3107 props = self.db.issue.getprops()
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
3108 keys = sorted(props.keys())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3109 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
3110 'creator', 'deadline', 'feedback', 'files', 'fixer', 'foo', 'id',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3111 'keywords', 'keywords2', 'messages', 'nosy', 'priority', 'spam',
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3112 '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
3113 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
3114
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3115 def testNosyMail(self) :
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3116 """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
3117 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
3118 """
4407
f6a2bfd351ee force tests checking text output to work in the "C" locale
Richard Jones <richard@users.sourceforge.net>
parents: 4365
diff changeset
3119 old_translate_ = roundupdb._
f6a2bfd351ee force tests checking text output to work in the "C" locale
Richard Jones <richard@users.sourceforge.net>
parents: 4365
diff changeset
3120 roundupdb._ = i18n.get_translation(language='C').gettext
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3121 db = self.db
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3122 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
3123 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
3124 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
3125 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
3126 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
3127 try :
5493
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3128 f1 = db.file.create(name="test1.txt", content="x" * 20, type="application/octet-stream")
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3129 f2 = db.file.create(name="test2.txt", content="y" * 5000, type="application/octet-stream")
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3130 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
3131 files = [f1, f2])
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3132 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
3133 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
3134
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3135 db.issue.nosymessage(i, m, {})
4102
dcca66d56815 fix unit test compatibility
Richard Jones <richard@users.sourceforge.net>
parents: 4089
diff changeset
3136 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
3137 self.assertEqual(res["mail_to"], ["fred@example.com"])
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3138 self.assertTrue("From: admin" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3139 self.assertTrue("Subject: [issue1] spam" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3140 self.assertTrue("New submission from admin" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3141 self.assertTrue("one two" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3142 self.assertTrue("File 'test1.txt' not attached" not in mail_msg)
5790
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
3143 self.assertTrue(b2s(base64_encode(s2b("xxx"))).rstrip() in mail_msg)
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3144 self.assertTrue("File 'test2.txt' not attached" in mail_msg)
5790
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
3145 self.assertTrue(b2s(base64_encode(s2b("yyy"))).rstrip() not in mail_msg)
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3146 finally :
4407
f6a2bfd351ee force tests checking text output to work in the "C" locale
Richard Jones <richard@users.sourceforge.net>
parents: 4365
diff changeset
3147 roundupdb._ = old_translate_
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3148 Mailer.smtp_send = backup
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3149
5493
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3150 def testNosyMailTextAndBinary(self) :
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3151 """Creates one issue with two attachments, one as text and one as binary.
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3152 """
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3153 old_translate_ = roundupdb._
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3154 roundupdb._ = i18n.get_translation(language='C').gettext
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3155 db = self.db
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3156 res = dict(mail_to = None, mail_msg = None)
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3157 def dummy_snd(s, to, msg, res=res) :
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3158 res["mail_to"], res["mail_msg"] = to, msg
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3159 backup, Mailer.smtp_send = Mailer.smtp_send, dummy_snd
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3160 try :
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3161 f1 = db.file.create(name="test1.txt", content="Hello world", type="text/plain")
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3162 f2 = db.file.create(name="test2.bin", content=b"\x01\x02\x03\xfe\xff", type="application/octet-stream")
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3163 m = db.msg.create(content="one two", author="admin",
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3164 files = [f1, f2])
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3165 i = db.issue.create(title='spam', files = [f1, f2],
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3166 messages = [m], nosy = [db.user.lookup("fred")])
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3167
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3168 db.issue.nosymessage(i, m, {})
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3169 mail_msg = str(res["mail_msg"])
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3170 self.assertEqual(res["mail_to"], ["fred@example.com"])
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3171 self.assertTrue("From: admin" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3172 self.assertTrue("Subject: [issue1] spam" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3173 self.assertTrue("New submission from admin" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3174 self.assertTrue("one two" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3175 self.assertTrue("Hello world" in mail_msg)
5790
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
3176 self.assertTrue(b2s(base64_encode(b"\x01\x02\x03\xfe\xff")).rstrip() in mail_msg)
5493
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3177 finally :
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3178 roundupdb._ = old_translate_
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3179 Mailer.smtp_send = backup
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3180
5494
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
3181 @pytest.mark.skipif(gpgmelib.gpg is None, reason='Skipping PGPNosy test')
4542
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3182 def testPGPNosyMail(self) :
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3183 """Creates one issue with two attachments, one smaller and one larger
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3184 than the set max_attachment_size. Recipients are one with and
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3185 one without encryption enabled via a gpg group.
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3186 """
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3187 old_translate_ = roundupdb._
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3188 roundupdb._ = i18n.get_translation(language='C').gettext
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3189 db = self.db
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3190 db.config.NOSY_MAX_ATTACHMENT_SIZE = 4096
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3191 db.config['PGP_HOMEDIR'] = gpgmelib.pgphome
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3192 db.config['PGP_ROLES'] = 'pgp'
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3193 db.config['PGP_ENABLE'] = True
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3194 db.config['PGP_ENCRYPT'] = True
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3195 gpgmelib.setUpPGP()
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3196 res = []
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3197 def dummy_snd(s, to, msg, res=res) :
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3198 res.append (dict (mail_to = to, mail_msg = msg))
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3199 backup, Mailer.smtp_send = Mailer.smtp_send, dummy_snd
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3200 try :
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3201 john = db.user.create(username="john", roles='User,pgp',
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3202 address='john@test.test', realname='John Doe')
5493
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3203 f1 = db.file.create(name="test1.txt", content="x" * 20, type="application/octet-stream")
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3204 f2 = db.file.create(name="test2.txt", content="y" * 5000, type="application/octet-stream")
4542
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3205 m = db.msg.create(content="one two", author="admin",
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3206 files = [f1, f2])
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3207 i = db.issue.create(title='spam', files = [f1, f2],
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3208 messages = [m], nosy = [db.user.lookup("fred"), john])
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3209
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3210 db.issue.nosymessage(i, m, {})
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3211 res.sort(key=lambda x: x['mail_to'])
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3212 self.assertEqual(res[0]["mail_to"], ["fred@example.com"])
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3213 self.assertEqual(res[1]["mail_to"], ["john@test.test"])
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3214 mail_msg = str(res[0]["mail_msg"])
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3215 self.assertTrue("From: admin" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3216 self.assertTrue("Subject: [issue1] spam" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3217 self.assertTrue("New submission from admin" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3218 self.assertTrue("one two" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3219 self.assertTrue("File 'test1.txt' not attached" not in mail_msg)
5790
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
3220 self.assertTrue(b2s(base64_encode(s2b("xxx"))).rstrip() in mail_msg)
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3221 self.assertTrue("File 'test2.txt' not attached" in mail_msg)
5790
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
3222 self.assertTrue(b2s(base64_encode(s2b("yyy"))).rstrip() not in mail_msg)
4542
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3223 mail_msg = str(res[1]["mail_msg"])
5494
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
3224 parts = message_from_string(mail_msg).get_payload()
4542
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3225 self.assertEqual(len(parts),2)
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3226 self.assertEqual(parts[0].get_payload().strip(), 'Version: 1')
5494
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
3227 crypt = gpgmelib.gpg.core.Data(parts[1].get_payload())
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
3228 plain = gpgmelib.gpg.core.Data()
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
3229 ctx = gpgmelib.gpg.core.Context()
4542
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3230 res = ctx.op_decrypt(crypt, plain)
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3231 self.assertEqual(res, None)
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3232 plain.seek(0,0)
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3233 self.assertTrue("From: admin" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3234 self.assertTrue("Subject: [issue1] spam" in mail_msg)
5494
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
3235 mail_msg = str(message_from_bytes(plain.read()))
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3236 self.assertTrue("New submission from admin" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3237 self.assertTrue("one two" in mail_msg)
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3238 self.assertTrue("File 'test1.txt' not attached" not in mail_msg)
5790
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
3239 self.assertTrue(b2s(base64_encode(s2b("xxx"))).rstrip() in mail_msg)
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3240 self.assertTrue("File 'test2.txt' not attached" in mail_msg)
5790
046717e09beb base64.encodestring is deprecated on python > 3.1. Eliminate warning
John Rouillard <rouilj@ieee.org>
parents: 5788
diff changeset
3241 self.assertTrue(b2s(base64_encode(s2b("yyy"))).rstrip() not in mail_msg)
4542
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3242 finally :
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3243 roundupdb._ = old_translate_
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3244 Mailer.smtp_send = backup
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3245 gpgmelib.tearDownPGP()
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3246
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3247 class ROTest(MyTestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3248 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3249 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3250 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3251 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3252 os.makedirs(config.DATABASE + '/files')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3253 self.db = self.module.Database(config, 'admin')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3254 setupSchema(self.db, 1, self.module)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3255 self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3256
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3257 self.db = self.module.Database(config)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3258 setupSchema(self.db, 0, self.module)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3259
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3260 def testExceptions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3261 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3262 ar = self.assertRaises
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3263
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3264 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3265 ar(DatabaseError, self.db.status.create, name="foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3266 ar(DatabaseError, self.db.status.set, '1', name="foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3267 ar(DatabaseError, self.db.status.retire, '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3268
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3269
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3270 class SchemaTest(MyTestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3271 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3272 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3273 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3274 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3275 os.makedirs(config.DATABASE + '/files')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3276
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
3277 def test_reservedProperties(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3278 self.open_database()
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
3279 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
3280 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
3281 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
3282 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
3283 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
3284 creator=String())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3285 self.assertRaises(ValueError, self.module.Class, self.db, "a",
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3286 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
3287
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3288 def init_a(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3289 self.open_database()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3290 a = self.module.Class(self.db, "a", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3291 a.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3292 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3293
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
3294 def test_fileClassProps(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3295 self.open_database()
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
3296 a = self.module.FileClass(self.db, 'a')
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
3297 l = sorted(a.getprops().keys())
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3298 self.assertTrue(l, ['activity', 'actor', 'content', 'created',
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
3299 'creation', 'type'])
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
3300
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3301 def init_ab(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3302 self.open_database()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3303 a = self.module.Class(self.db, "a", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3304 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
3305 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
3306 fooz=Multilink('a'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3307 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3308 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3309
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3310 def test_splitDesignator(self):
6240
0c3def4b5275 Check for DesignatorError rather than ValueError
John Rouillard <rouilj@ieee.org>
parents: 6239
diff changeset
3311 from roundup.hyperdb import splitDesignator, DesignatorError
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3312
6242
b14359503b49 Try to remove errors from postgres/mysql
John Rouillard <rouilj@ieee.org>
parents: 6240
diff changeset
3313 self.open_database() # allow setup/shutdown to work to postgres/mysql
b14359503b49 Try to remove errors from postgres/mysql
John Rouillard <rouilj@ieee.org>
parents: 6240
diff changeset
3314
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3315 valid_test_cases = [('zip2py44', ('zip2py', '44')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3316 ('zippy2', ('zippy', '2')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3317 ('a9', ('a', '9')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3318 ('a1234', ('a', '1234')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3319 ('a_1234', ('a_', '1234')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3320 ]
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3321
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3322 invalid_test_cases = ['_zip2py44','1zippy44',
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3323 'zippy244a' ]
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3324
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3325 for designator in valid_test_cases:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3326 print("Testing %s"%designator[0])
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3327 self.assertEqual(splitDesignator(designator[0]), designator[1])
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3328
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3329 for designator in invalid_test_cases:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3330 print("Testing %s"%designator)
6240
0c3def4b5275 Check for DesignatorError rather than ValueError
John Rouillard <rouilj@ieee.org>
parents: 6239
diff changeset
3331 with self.assertRaises(DesignatorError) as ctx:
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3332 splitDesignator(designator)
6239
d3878ac549e9 Fix splitDesignator test.
John Rouillard <rouilj@ieee.org>
parents: 6238
diff changeset
3333 error = '"%s" not a node designator' % designator
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3334 self.assertEqual(str(ctx.exception), error)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3335
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3336
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3337 def test_addNewClass(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3338 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
3339
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3340 with self.assertRaises(ValueError) as ctx:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3341 self.module.Class(self.db, "a", name=String())
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3342 error = 'Class "a" already defined.'
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3343 self.assertEqual(str(ctx.exception), error)
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
3344
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3345 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3346 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3347
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3348 # Test permutations of valid/invalid classnames
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3349 self.init_a()
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3350
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3351 for classname in [ "1badclassname", "badclassname1",
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3352 "_badclassname", "_", "5" ]:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3353 print("testing %s\n" % classname)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3354 with self.assertRaises(ValueError) as ctx:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3355 self.module.Class(self.db, classname, name=String())
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3356
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3357 error = ('Class name %s is not valid. It must start '
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3358 'with a letter, end with a letter or "_", and '
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3359 'only have alphanumerics and "_" in the middle.' % (classname,))
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3360 self.assertEqual(str(ctx.exception), error)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3361
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3362 for classname in [ 'cla2ss', 'c_lass', 'CL_2ass', 'Z',
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3363 'class2_' ]:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3364 print("testing %s\n" % classname)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3365 c = self.module.Class(self.db, classname, name=String())
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3366 self.assertEqual(str(c), '<hyperdb.Class "%s">' % classname)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3367
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3368 # don't pollute the db with junk valid cases
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3369 # self.db.commit(); close to discard all changes in this block.
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3370 self.db.close()
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3371
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3372 # 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
3373 # (and existence of old ones)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3374 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
3375 bid = self.db.b.create(name='bear', fooz=[aid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3376 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3377 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3378 self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3379
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3380 # now check we can recall the added class' items
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3381 self.init_ab()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3382 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3383 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3384 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
3385 self.assertEqual(self.db.b.get(bid, 'fooz'), [aid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3386 self.assertEqual(self.db.b.lookup('bear'), bid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3387
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3388 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3389 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3390 self.db.getjournal('b', bid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3391
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3392 def init_amod(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3393 self.open_database()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3394 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
3395 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
3396 newdate=Date())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3397 a.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3398 b = self.module.Class(self.db, "b", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3399 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3400 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3401
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3402 def test_modifyClass(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3403 self.init_ab()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3404
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3405 # add item to user and issue class
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3406 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3407 bid = self.db.b.create(name='bear')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3408 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3409
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3410 # modify "a" schema
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3411 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3412 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
3413 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
3414 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
3415 # 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
3416 # really checking for that behavior here anyway
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3417 self.assertTrue(not self.db.a.get(aid, 'newnum'))
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
3418 self.assertTrue(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
3419 self.assertEqual(self.db.a.get(aid, 'newdate'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3420 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
3421 aid2 = self.db.a.create(name='aardvark', newstr='booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3422 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3423
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3424 # test
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3425 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3426 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
3427 self.assertEqual(self.db.a.get(aid, 'newstr'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3428 self.assertEqual(self.db.b.get(aid, 'name'), 'bear')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3429 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
3430 self.assertEqual(self.db.a.get(aid2, 'newstr'), 'booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3431
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3432 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3433 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3434 self.db.getjournal('a', aid2)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3435
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3436 def init_amodkey(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3437 self.open_database()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3438 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
3439 a.setkey("newstr")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3440 b = self.module.Class(self.db, "b", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3441 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3442 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3443
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3444 def test_changeClassKey(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3445 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3446 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3447 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3448 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3449
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3450 # change the key to newstr on a
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3451 self.init_amodkey()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3452 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
3453 self.assertEqual(self.db.a.get(aid, 'newstr'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3454 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
3455 aid2 = self.db.a.create(name='aardvark', newstr='booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3456 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3457
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3458 # check
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3459 self.init_amodkey()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3460 self.assertEqual(self.db.a.lookup('booz'), aid2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3461
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3462 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3463 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3464
3554
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3465 def test_removeClassKey(self):
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3466 self.init_amod()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3467 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
3468 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
3469 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
3470
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3471 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
3472 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
3473 self.db.post_init()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3474
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3475 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
3476 self.db.commit()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3477
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3478
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3479 def init_amodml(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3480 self.open_database()
2196
85954067e496 mysql and postgresql schema mutation now handle added Multilinks; fixed test too
Richard Jones <richard@users.sourceforge.net>
parents: 2185
diff changeset
3481 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
3482 newml=Multilink('a'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3483 a.setkey('name')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3484 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3485
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3486 def test_makeNewMultilink(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3487 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3488 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3489 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3490 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3491
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3492 # add a multilink prop
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3493 self.init_amodml()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3494 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
3495 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3496 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3497 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3498
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3499 # check
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3500 self.init_amodml()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3501 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3502 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
3503 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3504
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3505 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3506 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
3507 self.db.getjournal('a', bid)
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3508
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3509 def test_removeMultilink(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3510 # add a multilink prop
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3511 self.init_amodml()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3512 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
3513 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
3514 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3515 self.assertEqual(self.db.a.lookup('apple'), aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
3516 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3517 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3518
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3519 # remove the multilink
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
3520 self.init_a()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3521 self.assertEqual(self.db.a.lookup('apple'), aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
3522 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3523
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3524 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3525 self.db.getjournal('a', aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
3526 self.db.getjournal('a', bid)
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3527
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3528 def test_removeClass(self):
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3529 self.init_ab()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3530 aid = self.db.a.create(name='apple')
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3531 bid = self.db.b.create(name='bear')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3532 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3533
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3534 # drop the b class
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3535 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3536 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3537 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3538 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3539
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3540 # now check we can recall the added class' items
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3541 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3542 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3543 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3544
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3545 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3546 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3547
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
3548 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
3549 """ 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
3550 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
3551 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
3552 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
3553
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3554 class FilterCacheTest(commonDBTest):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3555 def testFilteringTransitiveLinkCache(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
3556 ae, dummy = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
3557 ae, dummy = self.iterSetup('user')
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3558 # Need to make ceo his own (and first two users') supervisor
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3559 self.db.user.set('1', supervisor = '3')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3560 self.db.user.set('2', supervisor = '3')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3561 self.db.user.set('3', supervisor = '3')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3562 # test bool value
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3563 self.db.user.set('4', assignable = True)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3564 self.db.user.set('3', assignable = False)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3565 filt = self.db.issue.filter_iter
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3566 ufilt = self.db.user.filter_iter
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3567 user_result = \
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3568 { '1' : {'username': 'admin', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3569 'supervisor': '3', 'realname': None, 'roles': 'Admin',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3570 'creator': '1', 'age': None, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3571 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3572 , '2' : {'username': 'fred', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3573 'supervisor': '3', 'realname': None, 'roles': 'User',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3574 'creator': '1', 'age': None, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3575 'address': 'fred@example.com'}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3576 , '3' : {'username': 'ceo', 'assignable': False,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3577 'supervisor': '3', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3578 'creator': '1', 'age': 129.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3579 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3580 , '4' : {'username': 'grouplead1', 'assignable': True,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3581 'supervisor': '3', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3582 'creator': '1', 'age': 29.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3583 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3584 , '5' : {'username': 'grouplead2', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3585 'supervisor': '3', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3586 'creator': '1', 'age': 29.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3587 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3588 , '6' : {'username': 'worker1', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3589 'supervisor': '4', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3590 'creator': '1', 'age': 25.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3591 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3592 , '7' : {'username': 'worker2', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3593 'supervisor': '4', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3594 'creator': '1', 'age': 24.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3595 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3596 , '8' : {'username': 'worker3', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3597 'supervisor': '5', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3598 'creator': '1', 'age': 23.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3599 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3600 , '9' : {'username': 'worker4', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3601 'supervisor': '5', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3602 'creator': '1', 'age': 22.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3603 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3604 , '10' : {'username': 'worker5', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3605 'supervisor': '5', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3606 'creator': '1', 'age': 21.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3607 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3608 }
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3609 foo = date.Interval('-1d')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3610 issue_result = \
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3611 { '1' : {'title': 'ts1', 'status': '2', 'assignedto': '6',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3612 'priority': '3', 'messages' : ['4'], 'nosy' : ['4']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3613 , '2' : {'title': 'ts2', 'status': '1', 'assignedto': '6',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3614 'priority': '3', 'messages' : ['4'], 'nosy' : ['5']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3615 , '3' : {'title': 'ts4', 'status': '2', 'assignedto': '7',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3616 'priority': '3', 'messages' : ['5']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3617 , '4' : {'title': 'ts5', 'status': '1', 'assignedto': '8',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3618 'priority': '3', 'messages' : ['6']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3619 , '5' : {'title': 'ts6', 'status': '2', 'assignedto': '9',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3620 'priority': '3', 'messages' : ['7']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3621 , '6' : {'title': 'ts7', 'status': '1', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3622 'priority': '3', 'messages' : ['8'], 'foo' : None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3623 , '7' : {'title': 'ts8', 'status': '2', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3624 'priority': '3', 'messages' : ['8'], 'foo' : foo}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3625 , '8' : {'title': 'ts9', 'status': '1', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3626 'priority': '3', 'messages' : ['7', '8']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3627 }
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3628 result = []
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3629 self.db.clearCache()
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3630 for id in ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3631 ('-','supervisor.supervisor'), ('-','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3632 ('+','username')]):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3633 result.append(id)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3634 nodeid = id
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3635 for x in range(4):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3636 assert(('user', nodeid) in self.db.cache)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3637 n = self.db.user.getnode(nodeid)
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
3638 for k, v in user_result[nodeid].items():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3639 ae((k, n[k]), (k, v))
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3640 for k in 'creation', 'activity':
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3641 assert(n[k])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3642 nodeid = n.supervisor
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3643 self.db.clearCache()
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3644 ae (result, ['8', '9', '10', '6', '7', '1', '3', '2', '4', '5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3645
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3646 result = []
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3647 self.db.clearCache()
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3648 for id in filt(None, {},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3649 [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3650 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3651 ('-','assignedto.supervisor'), ('+','assignedto')]):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3652 result.append(id)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3653 assert(('issue', id) in self.db.cache)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3654 n = self.db.issue.getnode(id)
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
3655 for k, v in issue_result[id].items():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3656 ae((k, n[k]), (k, v))
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3657 for k in 'creation', 'activity':
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3658 assert(n[k])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3659 nodeid = n.assignedto
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3660 for x in range(4):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3661 assert(('user', nodeid) in self.db.cache)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3662 n = self.db.user.getnode(nodeid)
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
3663 for k, v in user_result[nodeid].items():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3664 ae((k, n[k]), (k, v))
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3665 for k in 'creation', 'activity':
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3666 assert(n[k])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3667 nodeid = n.supervisor
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3668 self.db.clearCache()
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3669 ae (result, ['4', '5', '6', '7', '8', '1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3670
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3671
5033
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 4886
diff changeset
3672 class ClassicInitBase(object):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3673 count = 0
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3674 db = None
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3675
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3676 def setUp(self):
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3677 ClassicInitBase.count = ClassicInitBase.count + 1
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3678 self.dirname = '_test_init_%s'%self.count
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3679 try:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3680 shutil.rmtree(self.dirname)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5235
diff changeset
3681 except OSError as error:
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3682 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3683
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3684 def tearDown(self):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3685 if self.db is not None:
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3686 self.db.close()
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3687 try:
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3688 shutil.rmtree(self.dirname)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5235
diff changeset
3689 except OSError as error:
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3690 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3691
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3692 class ClassicInitTest(ClassicInitBase):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3693 def testCreation(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3694 ae = self.assertEqual
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3695
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
3696 # 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
3697 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
3698 # open the database
2689
9d044127c5eb tracker.open() requires the 2nd argument - journal tag name
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2687
diff changeset
3699 db = self.db = tracker.open('test')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3700
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3701 # check the basics of the schema and initial data set
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3702 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
3703 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3704 ae(l, ['1', '2', '3', '4', '5'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3705 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
3706 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3707 ae(l, ['1', '2', '3', '4', '5', '6', '7', '8'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3708 l = db.keyword.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3709 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3710 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
3711 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3712 ae(l, ['1', '2'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3713 l = db.msg.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3714 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3715 l = db.file.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3716 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3717 l = db.issue.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3718 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3719
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3720
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3721 class ConcurrentDBTest(ClassicInitBase):
4448
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3722 def testConcurrency(self):
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3723 # The idea here is a read-modify-update cycle in the presence of
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3724 # a cache that has to be properly handled. The same applies if
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3725 # we extend a String or otherwise modify something that depends
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3726 # on the previous value.
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3727
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3728 # set up and open a tracker
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3729 tracker = setupTracker(self.dirname, self.backend)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3730 # open the database
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3731 self.db = tracker.open('admin')
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3732
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3733 prio = '1'
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3734 self.assertEqual(self.db.priority.get(prio, 'order'), 1.0)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3735 def inc(db):
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3736 db.priority.set(prio, order=db.priority.get(prio, 'order') + 1)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3737
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3738 inc(self.db)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3739
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3740 db2 = tracker.open("admin")
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3741 self.assertEqual(db2.priority.get(prio, 'order'), 1.0)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3742 db2.commit()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3743 self.db.commit()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3744 self.assertEqual(self.db.priority.get(prio, 'order'), 2.0)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3745
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3746 inc(db2)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3747 db2.commit()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3748 db2.clearCache()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3749 self.assertEqual(db2.priority.get(prio, 'order'), 3.0)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3750 db2.close()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3751
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3752 class HTMLItemTest(ClassicInitBase):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3753 class Request :
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3754 """ Fake html request """
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3755 rfile = None
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3756 def start_response (self, a, b) :
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3757 pass
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3758 # end def start_response
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3759 # end class Request
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3760
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3761 def setUp(self):
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
3762 super(HTMLItemTest, self).setUp()
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3763 self.tracker = tracker = setupTracker(self.dirname, self.backend)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3764 db = self.db = tracker.open('admin')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3765 req = self.Request()
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3766 env = dict (PATH_INFO='', REQUEST_METHOD='GET', QUERY_STRING='')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3767 self.client = self.tracker.Client(self.tracker, req, env, None)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3768 self.client.db = db
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3769 self.client.language = None
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3770 self.client.userid = db.getuid()
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3771 self.client.classname = 'issue'
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3772 user = {'username': 'worker5', 'realname': 'Worker', 'roles': 'User'}
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3773 u = self.db.user.create(**user)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3774 u_m = self.db.msg.create(author = u, content = 'bla'
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3775 , date = date.Date ('2006-01-01'))
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3776 issue = {'title': 'ts1', 'status': '2', 'assignedto': '3',
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3777 'priority': '3', 'messages' : [u_m], 'nosy' : ['3']}
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3778 self.db.issue.create(**issue)
4879
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3779 issue = {'title': 'ts2', 'status': '2',
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3780 'messages' : [u_m], 'nosy' : ['3']}
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3781 self.db.issue.create(**issue)
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3782
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3783 def testHTMLItemAttributes(self):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3784 issue = HTMLItem(self.client, 'issue', '1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3785 ae = self.assertEqual
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3786 ae(issue.title.plain(),'ts1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3787 ae(issue ['title'].plain(),'ts1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3788 ae(issue.status.plain(),'deferred')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3789 ae(issue ['status'].plain(),'deferred')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3790 ae(issue.assignedto.plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3791 ae(issue ['assignedto'].plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3792 ae(issue.priority.plain(),'bug')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3793 ae(issue ['priority'].plain(),'bug')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3794 ae(issue.messages.plain(),'1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3795 ae(issue ['messages'].plain(),'1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3796 ae(issue.nosy.plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3797 ae(issue ['nosy'].plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3798 ae(len(issue.messages),1)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3799 ae(len(issue ['messages']),1)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3800 ae(len(issue.nosy),1)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3801 ae(len(issue ['nosy']),1)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3802
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3803 def testHTMLItemDereference(self):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3804 issue = HTMLItem(self.client, 'issue', '1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3805 ae = self.assertEqual
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3806 ae(str(issue.priority.name),'bug')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3807 ae(str(issue.priority['name']),'bug')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3808 ae(str(issue ['priority']['name']),'bug')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3809 ae(str(issue ['priority'].name),'bug')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3810 ae(str(issue.assignedto.username),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3811 ae(str(issue.assignedto['username']),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3812 ae(str(issue ['assignedto']['username']),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3813 ae(str(issue ['assignedto'].username),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3814 for n in issue.nosy:
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3815 ae(n.username.plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3816 ae(n['username'].plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3817 for n in issue.messages:
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3818 ae(n.author.username.plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3819 ae(n.author['username'].plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3820 ae(n['author'].username.plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3821 ae(n['author']['username'].plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3822
4448
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3823
4879
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3824 def testHTMLItemDerefFail(self):
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3825 issue = HTMLItem(self.client, 'issue', '2')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3826 ae = self.assertEqual
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3827 ae(issue.assignedto.plain(),'')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3828 ae(issue ['assignedto'].plain(),'')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3829 ae(issue.priority.plain(),'')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3830 ae(issue ['priority'].plain(),'')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3831 m = '[Attempt to look up %s on a missing value]'
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3832 ae(str(issue.priority.name),m%'name')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3833 ae(str(issue ['priority'].name),m%'name')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3834 ae(str(issue.assignedto.username),m%'username')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3835 ae(str(issue ['assignedto'].username),m%'username')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3836 ae(bool(issue ['assignedto']['username']),False)
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3837 ae(bool(issue ['priority']['name']),False)
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
3838
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3839 def makeForm(args):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3840 form = cgi.FieldStorage()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3841 for k,v in args.items():
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3842 if type(v) is type([]):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3843 [form.list.append(cgi.MiniFieldStorage(k, x)) for x in v]
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3844 elif isinstance(v, FileUpload):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3845 x = cgi.MiniFieldStorage(k, v.content)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3846 x.filename = v.filename
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3847 form.list.append(x)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3848 else:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3849 form.list.append(cgi.MiniFieldStorage(k, v))
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3850 return form
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3851
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3852 class FileUpload:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3853 def __init__(self, content, filename):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3854 self.content = content
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3855 self.filename = filename
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3856
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3857 class FormTestParent(object):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3858
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3859 backend = "anydbm"
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3860 def setupDetectors(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3861 pass
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3862
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3863 def setUp(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3864 self.dirname = '_test_cgi_form'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3865 # set up and open a tracker
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3866 self.instance = setupTracker(self.dirname, backend = self.backend)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3867
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3868 # We may want to register separate detectors
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3869 self.setupDetectors()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3870
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3871 # open the database
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3872 self.db = self.instance.open('admin')
5719
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3873 self.db.Otk = MockNull()
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3874 self.db.Otk.data = {}
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3875 self.db.Otk.getall = self.data_get
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3876 self.db.Otk.set = self.data_set
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3877 self.db.tx_Source = "web"
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3878 self.db.user.create(username='Chef', address='chef@bork.bork.bork',
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3879 realname='Bork, Chef', roles='User')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3880 self.db.user.create(username='mary', address='mary@test.test',
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3881 roles='User', realname='Contrary, Mary')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3882
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3883 self.db.issue.addprop(tx_Source=hyperdb.String())
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3884 self.db.msg.addprop(tx_Source=hyperdb.String())
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3885 self.db.post_init()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3886
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3887 def setupClient(self, form, classname, nodeid=None, template='item', env_addon=None):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3888 cl = client.Client(self.instance, None, {'PATH_INFO':'/',
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3889 'REQUEST_METHOD':'POST'}, makeForm(form))
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3890 cl.classname = classname
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3891 cl.base = 'http://whoami.com/path/'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3892 cl.nodeid = nodeid
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3893 cl.language = ('en',)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3894 cl.userid = '1'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3895 cl.db = self.db
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3896 cl.user = 'admin'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3897 cl.template = template
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3898 if env_addon is not None:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3899 cl.env.update(env_addon)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3900 return cl
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3901
5719
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3902 def data_get(self, key):
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3903 return self.db.Otk.data[key]
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3904
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3905 def data_set(self, key, **value):
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3906 self.db.Otk.data[key] = value
cd33bbf03cf3 Added Otk support to db_test_base to make test_cgi work. I think this
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
3907
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3908 def parseForm(self, form, classname='test', nodeid=None):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3909 cl = self.setupClient(form, classname, nodeid)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3910 return cl.parsePropsFromForm(create=1)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3911
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3912 def tearDown(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3913 self.db.close()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3914 try:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3915 shutil.rmtree(self.dirname)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3916 except OSError as error:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3917 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3918
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3919 class SpecialAction(actions.EditItemAction):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3920 x = False
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3921 def handle(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3922 self.__class__.x = True
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3923 cl = self.db.getclass(self.classname)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3924 cl.set(self.nodeid, status='2')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3925 cl.set(self.nodeid, title="Just a test")
6089
15d1ce536c73 Fix warning about assert always True
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6013
diff changeset
3926 assert 0, "not reached"
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3927 self.db.commit()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3928
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3929 def reject_title(db, cl, nodeid, newvalues):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3930 if 'title' in newvalues:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3931 raise Reject ("REJECT TITLE CHANGE")
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3932
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3933 def init_reject(db):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3934 db.issue.audit("set", reject_title)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3935
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3936 def get_extensions(self, what):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3937 """ For monkey-patch of instance.get_extensions: The old method is
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3938 kept as _get_extensions, we use the new method to return our own
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3939 auditors/reactors.
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3940 """
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3941 if what == 'detectors':
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3942 return [init_reject]
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3943 return self._get_extensions(what)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3944
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3945 class SpecialActionTest(FormTestParent):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3946
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3947 def setupDetectors(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3948 self.instance._get_extensions = self.instance.get_extensions
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3949 def ge(what):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3950 return get_extensions(self.instance, what)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3951 self.instance.get_extensions = ge
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3952
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3953 def setUp(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3954 FormTestParent.setUp(self)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3955
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3956 self.instance.registerAction('special', SpecialAction)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3957 self.issue = self.db.issue.create (title = "hello", status='1')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3958 self.db.commit ()
5381
0942fe89e82e Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
3959 if 'SENDMAILDEBUG' not in os.environ:
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3960 os.environ['SENDMAILDEBUG'] = 'mail-test2.log'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3961 self.SENDMAILDEBUG = os.environ['SENDMAILDEBUG']
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3962 page_template = """
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3963 <html>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3964 <body>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3965 <p tal:condition="options/error_message|nothing"
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3966 tal:repeat="m options/error_message"
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3967 tal:content="structure m"/>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3968 <p tal:content="context/title/plain"/>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3969 <p tal:content="context/status/plain"/>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3970 <p tal:content="structure context/submit"/>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3971 </body>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3972 </html>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3973 """.strip ()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3974 self.form = {':action': 'special'}
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3975 cl = self.setupClient(self.form, 'issue', self.issue)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3976 pt = RoundupPageTemplate()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3977 pt.pt_edit(page_template, 'text/html')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3978 self.out = []
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3979 def wh(s):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3980 self.out.append(s)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3981 cl.write_html = wh
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3982 def load_template(x):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3983 return pt
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3984 cl.instance.templates.load = load_template
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3985 cl.selectTemplate = MockNull()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3986 cl.determine_context = MockNull ()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3987 def hasPermission(s, p, classname=None, d=None, e=None, **kw):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3988 return True
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3989 self.hasPermission = actions.Action.hasPermission
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3990 actions.Action.hasPermission = hasPermission
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3991 self.e1 = _HTMLItem.is_edit_ok
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3992 _HTMLItem.is_edit_ok = lambda x : True
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3993 self.e2 = HTMLProperty.is_edit_ok
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3994 HTMLProperty.is_edit_ok = lambda x : True
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3995 # Make sure header check passes
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3996 cl.env['HTTP_REFERER'] = 'http://whoami.com/path/'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3997 self.client = cl
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3998
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
3999 def tearDown(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4000 FormTestParent.tearDown(self)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4001 # Remove monkey-patches
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4002 self.instance.get_extensions = self.instance._get_extensions
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4003 del self.instance._get_extensions
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4004 actions.Action.hasPermission = self.hasPermission
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4005 _HTMLItem.is_edit_ok = self.e1
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4006 HTMLProperty.is_edit_ok = self.e2
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4007 if os.path.exists(self.SENDMAILDEBUG):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4008 #os.remove(self.SENDMAILDEBUG)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4009 pass
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4010
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4011 def testInnerMain(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4012 cl = self.client
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4013 cl.session_api = MockNull(_sid="1234567890")
5488
52cb53eedf77 reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5481
diff changeset
4014 self.form ['@nonce'] = anti_csrf_nonce(cl)
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4015 cl.form = makeForm(self.form)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4016 # inner_main will re-open the database!
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4017 # Note that in the template above, the rendering of the
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4018 # context/submit button will also call anti_csrf_nonce which
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4019 # does a commit of the otk to the database.
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4020 cl.inner_main()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4021 cl.db.close()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
4022 print(self.out)
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4023 # Make sure the action was called
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4024 self.assertEqual(SpecialAction.x, True)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4025 # Check that the Reject worked:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4026 self.assertNotEqual(-1, self.out[0].index('REJECT TITLE CHANGE'))
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4027 # Re-open db
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4028 self.db.close()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4029 self.db = self.instance.open ('admin')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4030 # We shouldn't see any changes
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4031 self.assertEqual(self.db.issue.get(self.issue, 'title'), 'hello')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4032 self.assertEqual(self.db.issue.get(self.issue, 'status'), '1')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4033
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
4034 # vim: set et sts=4 sw=4 :

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